ポメラにHHKBをつなげる③

ポメラにHHKBをつなげる③

前回までの記事で、ポメラに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>

DIYカテゴリの最新記事