Arduino micro pro を使って自作キーボードを作った話


作ろうと思った背景

子供の教材開発の一環で,microbit の次のステップとして Arduino を想定していて,
その使い方を学んでいるときに,HID機能というものを知りました.

これは何かというと,ヒューマン・インターフェース・デバイスの略称で,
USB接続であたかもキーボード,マウスのように振舞う(なりすます)ことが
できる機能のことです.

このいわゆる「なりすまし」が使えると,
「ある1つのボタンを押したら,xxxというキー入力をする」とかが
出来るようになります.

本当にそんなことが出来るのだろうか,難しくないのだろうか,と思ったので,
試してみた結果が本記事の内容です.

準備するもの

  • Arduino micro pro ※今回は,Amazon で3個で1980円の互換品を使用
  • microUSBケーブル
  • ブレッドボード
  • タクトスイッチ
  • ジャンパワイヤー

配線

Amazon で購入した Arduino micro pro 互換品は,ピンヘッダが半田付けされていないので,
最初にそれをはんだ付けする必要があります.
はんだ付けするにあたっては,ブレッドボードにピンヘッダを差し込み,
その上に,Arduino micro pro を乗せて,はんだ付けすると足が斜めにならずに済みます.

fig1. Arduino のはんだ付け準備 その1
fig2. Arduino のはんだ付け準備 その2 – ピンヘッダをブレッドボードに差します
fig3. Arduino のはんだ付け準備 その3- ピンヘッダに Arduino を置き,はんだ付け

次にブレッドボードに,Arduino, タクトスイッチを配置して,
ジャンパワイヤーで繋げていきます.

  • Arduino GND → スイッチ赤 → スイッチ青
  • Arduino 5番 → スイッチ青
  • Arduino 6番 → スイッチ赤
fig4.タクトスイッチは,赤丸で囲んだ隣同士の足がスイッチを押したときに繋がります
fig5. 配線図

プログラミング

  • Arduino へプログラムを書き込むための IDE をここからインストールします.
  • Arduino を起動し,Tools → Board: “Arduino Uno” → “Arduino Leonardo” を選択します.
fig6. 書き込むボードの対象を Arduino Leonardo にする
  • 補足すると,Uno は先述のHID(なりすまし)機能を持っておらず,
    ゆえにそのライブラリもありません.
  • Leonardo は HID機能を持ち,そのライブラリを持っています.
  • 今回はそのライブラリのうち,Keyboard.h というものを使っていきます.
  • なので,Board として Leonardo を選択する必要があります.
  • 次に,Arduino を microUSBコードで繋げて,PCに繋ぎます.
  • 書き込み先(ポート)の指定をしてあげます.
  • Tools → Port → COM3(Arduino Leonardo).
  • もしかしたら,PCによってはCOM3 と認識されないかもしれないです.
  • それっぽいもの(笑) を選びましょう.
fig7. 書き込み先 Port の指定
  • 下記コードを貼り付け,適宜好みに合うように編集します.
#include <Keyboard.h> // キーボードライブラリの読み込み

#define Button5 5 // 5番ピンを Button5 と呼ぶことにするよ
#define Button6 6

void setup() {
  Keyboard.begin(); // キーボード機能を使うおまじない
  pinMode(Button5, INPUT_PULLUP); // Button5 をプルアップしておく.スイッチ青を押すとGND に繋がる
  pinMode(Button6, INPUT_PULLUP);
}

void loop() {
  // Button5 が押された時の動作設定
  if(digitalRead(Button5) == LOW){ // Button5 がGND になったら,つまり,スイッチ青が押されたら
    Keyboard.print("hogehoge"); // hogehoge と入力される.
    Keyboard.write(9); // TABが入力される.参考先:http://www.asciitable.com/
    Keyboard.print("fugafuga");
    Keyboard.press(KEY_RETURN);
    delay(100); //wait PC busy // PC側が入力を受け付けるまで100ms待つ
    Keyboard.releaseAll(); // キーを離す

    while(digitalRead(Button5) == LOW); // Button5 が連続で入力されてるとき,無視する
  }
  // Button6 が押された時の動作設定
  if(digitalRead(Button6) == LOW){
    Keyboard.print("fugafuga");
    Keyboard.press(KEY_RETURN);
    delay(100); //wait PC busy
    Keyboard.releaseAll();

    while(digitalRead(Button6) == LOW);
  }
  delay(100);
}
  • File → Save as … より,ファイルを保存します.
fig8. File → Save as… より,プログラムファイルを保存する
  • プログラムを Arduino に書き込みます.
fig9. プログラムを Arduino に書き込む.赤丸のところの矢印を押すだけ.押すと黄色くなります.
fig10. 書き込み終わると,黄色くなってたボタンが元の色に戻り, Done uploading と出ます.
  • あとはメモ帳を開いて,タクトスイッチを押してみましょう.
fig11. メモ帳を開いて,タクトスイッチ青を押した図

むすび

やってみて,一番初めに思ったのは,「超簡単にできる!」です.

キーボード自作というと,正直ベーシック的な処理をいっぱい書かなきゃいけないのかな,と
勝手にイメージしていたのですが,今回書いたのは全部で35行程度でした.

で,これを作ってから,自作キーボードのその道には,もっと簡単に自作キーボードを作ることができる,QMKというファームウェアが存在することを知った(知ってしまった)ので,次はQMKについても記事を書こうかな,と思ってます.

ご参考:fabcross さんでも特集していたようです.
https://fabcross.jp/category/make/20200427_Zoom.html