今回は、ArduinoUNOをUSBキーボードに改造してみました。
音声認識をしてキーボード入力する案件があったため、
そのメモ用です。
事前準備
AdruinoUNOをUSB-HIDと認識させるためには
基板内のATmega16U2のファームウェアを変更する必要があります。
そのためにはファームウェア変更ソフトの「FLIP」をインストールする必要があります。
https://www.microchip.com/en-us/development-tool/flip
FLIP 3.4.x for Windows (Java Runtime Environment included)をインストールします。(JREも含まれる)
手順
1、まずはプログラムを作成します。ATmega16U2のファームウェアを一度書き換えてしまうとその後はHIDと認識されてしまうため
ATmega328に書き込みが出来なくなってしまうためです。
今回はGANTZ様の記事を参考にしてプログラムを作成しました
https://qiita.com/GANTZ/items/f619ccc6521e28a49faa
int lastStatePin4 = HIGH; // ピン4の前回の状態を保存
int lastStatePin7 = HIGH; // ピン7の前回の状態を保存
void setup() {
pinMode(4, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int currentStatePin4 = digitalRead(4); // ピン4の現在の状態を読み取る
int currentStatePin7 = digitalRead(7); // ピン7の現在の状態を読み取る
// ピン4が1から0に変化したときだけ「HELLO」を送信
if (lastStatePin4 == HIGH && currentStatePin4 == LOW) {
putChar(0x45);
}
// ピン7が1から0に変化したときだけ「IIO」を送信
if (lastStatePin7 == HIGH && currentStatePin7 == LOW) {
putChar(0x44);
}
// 現在の状態を保存
lastStatePin4 = currentStatePin4;
lastStatePin7 = currentStatePin7;
delay(50); // デバウンスのための遅延
}
void putChar(byte data) {
for (byte j = 0; j <= 7; j++) {
if (j == 2) {
Serial.write(data);
} else {
Serial.write(0x00);
}
}
for (byte j = 0; j <= 7; j++) {
Serial.write(0x00);
}
}
void Sheft(byte data) {
for (byte j = 0; j <= 7; j++) {
if (j == 6) {
Serial.write(data);
} else if (j == 2) {
Serial.write(0xE5);
} else {
Serial.write(0x00);
}
}
for (byte j = 0; j <= 7; j++) {
Serial.write(0x00);
}
}
void Ender() {
for (byte j = 0; j <= 7; j++) {
if (j == 2) {
Serial.write(0x00);
} else {
Serial.write(0x00);
}
}
}
2、ArduinoUNOのリセットピンをショート(ショートバー接続)させます。
3、PCにArduinoUNOを接続し、その後ショートバーを取り外します。不明なデバイスで表示されることを確認しておきます。
4、FLIPを起動します。Select taget deviceからATmega16U2を選択します。
6、USB Port ConnectionをOpenします。
※私はここでエラーになりました。どうもドライバのインストールが必要なようです。以下のサイトからドライバをダウンロードしました。ドライバーの更新でダウンロードしたフォルダを選択してください。
https://www.driverscape.com/download/atmega16u2
正常に認識されると以下のように表示されます。
7、以下のサイトから「Arduino-keyboard-0.3.hex」をダウンロード。
https://github.com/coopermaa/USBKeyboard/blob/master/firmware/Arduino-keyboard-0.3.hex
10、左下に「Verify PASS」が表示されれば完了。
USBを再接続すると次回からはHIDキーボードデバイスとして認識されます。
11、最後に4ピンをショートさせれば「F12」キーを押されること。
7ピンをショートさせれば「F11」キーを押されることが確認できれば完了です。