【簡単な自作キーボード】ボタンひとつでショートカットキーが押せるデバイスを作る【急がば回れ】
どうもこんばんは。
いきなり本題に入ります。
特に前口上をおもいつかなかったので本題に入ります。
ボタン一つでキーボードのショートカットキーを利用できるようにしたいのです。
ショートカットキー
たとえばタスクマネージャーの表示、Ctrl+Alt+Deleteです。
ほかにも、Ctrl+Zで「一つ戻る」やWindowsキー+Dでデスクトップの表示などもあります。今回僕がしたいのはコピーとペースト、すなわちCtrl+CとCtrl+Vです
"ρρ(*-* ) ピッ <いままではただコピーをするのにも、マウスから手を離しCtrlキーに右手を添え左手でCキーの準備。いっせのーでの掛け声でコピーをする必要がありました。
"ρ(^-^* ) ピッ <これから作るものが完成すれば、片手でコピー&ペースト!なんと画期的なのか...
簡単に方法をぐぐってみました。
どうやらArduinoでキーボードは自作できるようです。やったね!
あとはスケッチをネットの海から拾い上げて適当に書き換えてマイコンにぶちこんで終了!閉廷!裁判なんてやめましょうよ!
...と言うわけにはいかなかったんですね、裁判続行。
UNOではだめらしい
僕が使おうと思っていたarduino、それもUNOやNANOに使われているマイコンはATmega326です。キーボードの自作にはHID機能というのを利用するらしいのですが、あいにくそれができるのはATmega32u4を搭載したLeonardやarduino microだけです(どうやらATmega326でもファームウェアの書き換えでできるらしい...?でも僕にはまだ難しそうです)
http://amzn.to/2GKFcHe 互換機を買いました。URLから買ったら僕にお金くるってそれ卍(まんじ)~~~~~~?????
早速amazonで取り寄せました、届くのを待つのみ...。
ちょうど到着を待つ間に日本橋に行く機会がありました。
そこで見つけたのは電気街でありがちなジャンクのキーボード。
頭の中の悪魔がささやきます。
そうだ...ジャンクで安く買って中の基板を直列にすればマイコンをいじるよりも簡単だ...買ったMicroもお前のもの...
買いました。
なかなかいい見た目ですね。僕がいま使っているロジクールのキーボードは買って一週間で足が折れたので
ここの部分ね
ほぼ新品なキーボードがすこしまぶしく見えます。まあジャンクのこいつは買って初日にコピーとペーストしかできないカラダに改造されるわけですが...。
ばらすと中から回路がプリントされたシートとぷにぷにした卵が出てきました。ジャンク品ですし虫にでも寄生されてたのでしょう。
シートの回路は簡単なキーマトリクス方式でつくられたキーボード用の回路です。
詳しく書くのはめんどい 億劫むつかしいので簡単に説明すると、アノード側の回路が印刷されたシートとカソード側の回路が印刷されたシート、その間に絶縁用のシートが重ねられた3枚のシートの構造になっています。アノードカソードの接地面にキーを配置、ユーザーが押した時にシートが変形しキープッシュを検知するようになってるんですね。回路自体がボタンになってるってかっこいいね(説明合ってる?)
元のキーボードから回路上のCtrl,C,Vキーの位置を確認、シートに直接わかりやすいようにマーカーで目印を書いておきます。
これが大変でした。間に紙を挟み(黒の紙のほうがわかりやすかったと思う)回路上でキーがどう接続されているのかを調べます。
地図上で細かく分かれた川の源流をペンでなぞってさかのぼっていくような目のちかちかするような作業です。
あとはわかったキーをボタンに直列で接続し終わるはずでした。
何も考えてませんでした。
かんがえてもみてください。コピーのボタンとペーストのボタンそれぞれをボタンに接続するのですが、明らかな問題があります。シンキングタイムスタート!!チッチッチッチッチ.....おわり!
ふたつのショートカットキーには共通のキーがあります。Ctrlキーです。
コピーのほうのボタンを押してもCtrlキーが通電してしまい同時にCtrl+C+Vをしていることになってしまうんです。(ペーストの場合も同じ)
ファックです。
キーボードハック計画は頓挫です。おとなしくATmega32u4の到着を待ちましょう...RIPキーボード...かわいそう...
急がば回れでした。
マイコンが届いてからは簡単でした。それも驚くほどに。
スケッチはこんな感じ
#include "Keyboard.h"
#define Button1 5
#define Button2 6
void setup() {
Keyboard.begin();
pinMode(Button1, INPUT_PULLUP);
pinMode(Button2, INPUT_PULLUP);
}
void loop() {
if(digitalRead(Button1) == LOW){
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('c');
delay(500);
Keyboard.releaseAll();
while(digitalRead(Button1) == LOW);
}
if(digitalRead(Button2) == LOW){
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press('v');
delay(500);
Keyboard.releaseAll();
while(digitalRead(Button1) == LOW);
}
}
ネットで拾ったスケッチを書き換えました。利用したのはproMicro、5ピンと6ピンを直接GNDに接続しました(プログラム側でプルアップ設定しました)
キー設定のほうなのですが”Keyboard.press()”のカッコ内をいじることでキー設定の変更、長押ししたときに連打してしまわないようにdelay(500)で0.5秒待機、その後のKeyboard.releaseAll()でキーを離しています。めちゃ簡単ですしわかりやすい。急がば回れな結果でした。
できあがりです。動作も完璧でした。赤ボタンでコピー、青でペーストになっています。
駆け足ですがまとめです。
ATmega32u4スゲー!って感じです。
スケッチもかなりシンプルですしコピペ以外にもいろいろと応用が利きそうです。HID機能は他でもマウスとしても扱えるようですしPCデバイスの自作には絶対にこれから使っていこうと思いました。
わくわくします。
読んでくださりありがとうございました。
[ この記事はブログ投稿者の憶測や考えによりつくられています。
よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]
この一文も実は今回作ったデバイスでコピペしたんですよ!フォントの味が違いますね
[ この記事はブログ投稿者の憶測や考えによりつくられています。
よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]
[ この記事はブログ投稿者の憶測や考えによりつくられています。
よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]
[ この記事はブログ投稿者の憶測や考えによりつくられています。
よって書いてある内容に誤りや言い間違いがあるかもしれません。もし修正したほうがいい場所や「こういった言い方のほうが”ソレっぽい”よ」などがありましたら後に記載してあります、リンク先のツイッターアカウントに教えてくださると嬉しいです:) ]
楽しいね