私は最近買ったMakey Makeyいくつかの金属部品からの完全なUSBスチームパンクスタイルのキーボードを構築することを望んで、(Arduinoのレオナルド/ ATMega32u4に基づく)を。それが到着する前に、詳細を読み直し、入力が18個しかないため、85以上のキーが機能しないことに気付きました。おそらく、Raspberry Piを使用して、このような獣を作成する方法を考えている人はいますか?(以前の投稿から非常に簡単に接続します)
私は最近買ったMakey Makeyいくつかの金属部品からの完全なUSBスチームパンクスタイルのキーボードを構築することを望んで、(Arduinoのレオナルド/ ATMega32u4に基づく)を。それが到着する前に、詳細を読み直し、入力が18個しかないため、85以上のキーが機能しないことに気付きました。おそらく、Raspberry Piを使用して、このような獣を作成する方法を考えている人はいますか?(以前の投稿から非常に簡単に接続します)
回答:
Makey Makeyを使用せずにキーボードだけを作成したい場合は、Raspberry PiのGPIO機能を使用してキーボードを作成できます。しかし、前にコメントしたように、Raspberry Piには実際に役立つキーボードを作成するのに十分なピンがありません。
ただし、2つのICを追加する場合は、自分でキーボードを作成して、すべてのキーの機能を考え出すのに問題が発生する可能性があります。
私の提案は、2つのI2C ICをRaspberry PiのI2Cバスに接続し、それらを使用して独自のスキャンマトリックスを作成することです。
1つのPCF8574を使用する場合、8個のI / Oピンを使用できます。PCF8575を取得する場合、16個のI / Oピンを使用できます。組み合わせることにより、次のスキャンマトリックスを取得できます。
それらの1つを常に出力として使用し、もう1つを入力として使用する必要があります。出力では、ビット0からビットn(7または15)までビットを「ウォーク」させます。これらはマトリックスの列です。他方では、常に入力の値を読み取ります。これらはマトリックスの行です。どの出力ビットがアクティブで、どの入力ビットが「1」であるかの組み合わせが、押されたキーです。
実際にマトリックスを作成するのが最も手間がかかります。マトリックスにスイッチを入れるたびにダイオードを追加することを忘れないでください。このダイオード(通常の1N4148でも問題ありません)はアノードと一緒に配置する必要がありますスイッチとカソードを行ラインに接続します。このダイオードでの0.6Vの電圧降下は問題ではなく、残りの(3.3V-0.6V)2.7Vは依然として論理「1」です。
このダイオードのトラックロードの理由は、ゴーストやキーのマスキングなどを防ぐためです。ゴーストは、3つ以上のキーを同時に押すと、より多くの行に論理「1」があるため、まったく異なるキーとして解釈される可能性があります。マスキングは、複数のキーを押してキーを離した場合、そのキーの行がまだ論理「1」であるため、(状況によっては)検出されないという効果です。
写真はゴーストの例を示し、ボタンA、B、Dが押され、行1(ボタンA)に加えて行2(ボタンC)も高く、列1がアクティブになった瞬間、これは正しくありません。
ハードウェア全体の冒険の後、Linuxで実際にキーボードを使用するようにカーネルドライバーを作成または調整する必要があります。良い出発点はこのリンクかもしれません:TCA6416 I2C IOエキスパンダーのキー用ドライバー、これは同様のアイデアですが、16キーのキーパッドのみを使用します。
これが少しお役に立てば幸いです。
実際に入力するためにフルキーボードを作成したい場合は、おそらくUSBキーボードからICを取り出すのが最善です。PCB自体が見えないシステムの奥深くに埋め込まれたままにして、スイッチまで配線するか、同じマトリックスを使用してカスタムのものを作成します。
電気マトリックスを本当に変更する必要がある場合は、独自の設計をゼロから作成する必要があるかもしれませんが、それ以外の場合は本当に必要ではありません。
カスタムボードを使用しても、列挙してUSBキーボードとして機能するものを作成できるため、カスタムドライバーは不要です。