前回までの記事で、ポメラにHHKBをつなげる方法の見通しがついたので、今回はそれが実際に動くのか、ブレッドボード上に回路を組んで実験してみます。
今回使うアナログスイッチIC、TC74HC4066APのピン接続図はこのようになっています。
この図のように、7番のピンと14番のピンが電源。
1番と2番、3番と4番、8番と9番、10番と11番の四組がスイッチになっていて、ポメラ側につなぐピン。
5番、6番、12番、13番の四本が、そのスイッチをオンオフする信号を出すarduino側につなぐピンです。
ポメラ側につなぐピンと、それに対応したarduino側のピンを間違わないように配線するだけで、回路自体は単純です。
ブレッドボード上にジャンパーワイヤーを使って配線してみました。
ブレッドボード上にTC74HC4066APを6個並べています。ICの電源はarduinoの5Vから取りました。
左側のコネクターがポメラのキーボードをつないでいたフラットケーブルにつながり、その下のOTGケーブルでHHKBをつなぎます。
接続するポメラは、「メカポメラ」を作ったときに使ったDM20を使います。
arduinoに書き込むスケッチはこのようにしました。
#include <KeyboardController.h>
USBHost usb;
KeyboardController keyboard(usb);
int line,line1;
int mod;
int port[]={2,3,4,5,6,8,9,11,13,15,16,17,18,20,21,22,23,24,25,26,27};
void setup() {
int i;
for(i=0;i<21;i++){
pinMode(port[i],OUTPUT);
}
}
void loop() {
usb.Task();
}
void keyPressed() {
switch (keyboard.getOemKey()){
case 4:
line=15;
line1=24;
break;
ー中略ー
digitalWrite(line, HIGH);
digitalWrite(line1, HIGH);
delay(100);
}
void keyReleased() {
digitalWrite(mode, LOW);
digitalWrite(line, LOW);
digitalWrite(line1, LOW);
}
冒頭でHSBホストのライブラリを呼び出して、使用するポートを出力に設定します。
あとはkeyPressed()で、キーが押されたときに、Switch文で、押されたキーに対応するポメラ側のラインの番号の変数を入れ、digitalWriteでそれをHIGHにします。
keyReleased()でキーが放されると、それをLOWにします。
keyPressed()には、100ミリ秒のdelayを入れてチャタリングの対策にしました。
準備ができたので、さっそくポメラとHHKBをつないでみます。
恐る恐るHHKBのキーを押すと、それに反応してポメラの画面に文字が映りました。
ですが、押したキーとは違う文字が入力されたり、同じ文字が何度も入力されたり、正しく動作しません。
配線の間違いがないか何度も確認しましたが、それはありません。
そこで、スケッチを見直しました。
試行錯誤するうちに、キーが押されたときに動作する関数keyPressed()の冒頭で、一度全てのポートをLOWにすると、上手く動作することが分かりました。複数のキーを押したとき、HIGHになっているポートが残っていて、誤動作していたのかもしれません。
int i;
for(i=0;i<21;i++){
digitalWrite(port[i],LOW);
}
keyPressed()の冒頭に、これを書き込みます。
これで、問題なくHHKBからのキー入力でポメラを使えるようになりました。
ポメラとHHKBという、私の好きな二つのガジェットを同時に使うことができて感動です。
文書作成専用機のポメラと、打ち心地が最高のHHKBがつながって、最強の文章入力環境ができました。
と、喜んだのも束の間、一部のキーの反応が悪く、何度も押さないと動作しなかったり、逆に一度押しただけなのに何度も入力されて暴走したりと、上手く動作しないことがありました。
もう一度配線を見直したり、ショートしている部分がないか調べたり、スケッチを見直したりしましたが、原因が分かりません。
異常が現れるキーは、7、U、H、Nとこの四つのキーです。
これは、私が調べたポメラのキーマトリクスで、2番のラインに繋がっているキーでした。
その辺りを中心に何度も見直しましたが原因が分かりません。
しばらく途方に暮れていましたが、あることを閃きました。
原因は単純です。
私は、arduinoの電源を、スケッチを書き込むUSBポートでPCから取っていましたが、それが電力不足だったのです。
よく考えれば、arduino本体の電源と、ICの電源、HHKBの電源全てをPCのUSBポートから取っていたので、電力が足りなかったのでしょう。
arduinoのDCジャックに、手持ちの9VのACアダプターを刺してそこから電源供給したら、問題なく動作するようになりました。
上の写真のような感じで普通にポメラでHHKBを使うことができて、ポメラの全ての機能もそのまま使えます(ポメラのメニューキーは私が普段使わない無変換キーに割り振りました)。
打ちながら、特にイライラするような遅延もありません。
PCで使うのと同じ感覚でHHKBを打てます。
HHKBは改造せずにUSBケーブルでつないでいるだけなので、arduinoのスケッチを少し書き換えれば、HHKB以外のお好みのUSBキーボードをつなぐこともできます。
これで、ブレッドボード上での実験は成功したので、次回はこの回路をarduinoのシールドにして、実用的な大きさにまとめたいと思います。
ポメラにHHKBをつなげる④に続きます。
<Sponsered Link>