前回、ブレッドボード上での実験で、ポメラDM20にHHKB(Happy Hacking Keyboard)をつなぐ回路が動作することが分かったので、今回はそれをarduino dueのシールドにまとめて小型化したいと思います。
また、処理速度の向上を狙ってarduinoのスケッチの見直しもしてみます。
arduino dueのシールドの基礎になるユニバーサル基板は、Amazonで売っていた、このarduino Mega用のものを使いました。
Mega用で一部ポートの表記が違う部分がありますが、arduino dueでも問題なく使えます。
ユニバーサル基板の他に、ピンヘッダとリセットスイッチ用のタクトスイッチも付属していました。
また、ポメラのキーボードコネクターにつなぐフラットケーブル用のコネクターも、Amazonにあった30pin1ミリピッチをユニバーサル基板用の2.54ミリに変換するコネクターを使いました。
このコネクターは、表裏に二つフラットケーブルをつなぐ部分があって、それぞれ、1ミリピッチと0.5ミリピッチ、両方に対応しています。
この二つを組み合わせてシールドを作ります。
まず、IC6つを横に並べる配置にして、ICソケットをはんだ付けしました。
次に、電源用の線と、ポメラの配線で末端を繋げる方の配線をすずメッキ銅線で引きます。
そのあと、arduinoにつなぐ線をポリエステル銅線で引きました。
特に難しい回路ではないのですが、ピンやソケットへの配線を間違えないようにそれだけを注意しました。
ポメラの電源スイッチはどのように配置するか決めていないので、仮にタクトスイッチを取り付けています。
最後に、シールドとarduinoをつなぐピンヘッダを外周にはんだ付けして完成です。
久々のはんだ付けで汚くなってしまいましたが、なんとか完成しました。
arduino dueに載せてみるとこんな感じになります。
さっそく、これでHHKBとポメラをつないでみると、特に問題なく実験の時と同じように動作してくれました。
コンデンサなどでノイズ対策をしないといけないかなと思いましたが、今のところ問題なく動いています。
無事、シールドが完成したので、arduinoに書き込むスケッチも改良してみました。
arduino関連の記事を見ていると、ポートを操作するとき、digitalWrite()の関数を使うよりも、マイコンのポートを直接操作すれば、処理速度が70%高速化するとあったので、それを試してみます。
ポートに直接アクセスするため、arduino dueに使われているマイコンのピンのマッピングを公式リファレンスで調べました。
ポートに直接アクセスする記述方法は、arduino dueの場合、UNOなどの他のarduinoと違うため、調べてもあまり情報がなかったのですが、公式フォーラムなどのやりとりからどうにかそれらしい投稿を見付けて参考にします。
それによると、例えば、2番のポートをHIGHにする場合は、
REG_PIOB_SODR |= (0x01 << 25);
2番のポートをLOWにする場合は、
REG_PIOB_CODR |= (0x01 << 25);
と書き込めばいいようです。
arduino dueのピンの番号とマイコンのポートの名前はまったく異なるので、先のリファレンスで番号を付き合わせながら指定しました。
これを使って、digitalWrite()を使っていた部分を全て書き換えます。
書き換えたあとの動作は、キーを打つとき少しだけ引っかかりが消えたような感じで、打ちやすくなった気がしました。
けれど、書き換え前の状態でも十分速くて遅延など感じなかったので、プラシーボ効果のようなものなのかもしれません。
スケッチを修正したいときに分かりにくくなりますし、無理に書き換える必要はないと思いました。
とにかく、これでシールドが完成したので、次回はこれをケースに収めたり、どのような形でポメラと一体化させれば使いやすくなるのか、考えてみようと思います。
※追記 ポメラにHHKBをつなげる⑤の記事を書きました。
<Sponsered Link>