1
0

今回は、ArduinoUNOをUSBキーボードに改造してみました。
音声認識をしてキーボード入力する案件があったため、
そのメモ用です。

事前準備

AdruinoUNOをUSB-HIDと認識させるためには
基板内のATmega16U2のファームウェアを変更する必要があります。
そのためにはファームウェア変更ソフトの「FLIP」をインストールする必要があります。
https://www.microchip.com/en-us/development-tool/flip
image.png
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のリセットピンをショート(ショートバー接続)させます。
IMG20240708091016.jpg

3、PCにArduinoUNOを接続し、その後ショートバーを取り外します。不明なデバイスで表示されることを確認しておきます。
image.png

4、FLIPを起動します。Select taget deviceからATmega16U2を選択します。
image.png

5、USB接続を選択します。
image.png

6、USB Port ConnectionをOpenします。
image.png
※私はここでエラーになりました。どうもドライバのインストールが必要なようです。以下のサイトからドライバをダウンロードしました。ドライバーの更新でダウンロードしたフォルダを選択してください。
https://www.driverscape.com/download/atmega16u2
image.png
正常に認識されると以下のように表示されます。
image.png

7、以下のサイトから「Arduino-keyboard-0.3.hex」をダウンロード。
https://github.com/coopermaa/USBKeyboard/blob/master/firmware/Arduino-keyboard-0.3.hex
image.png

8、File>Load HEX Fileを選択。
image.png

9、Runボタンをクリック。
image.png

10、左下に「Verify PASS」が表示されれば完了。
USBを再接続すると次回からはHIDキーボードデバイスとして認識されます。
image.png

11、最後に4ピンをショートさせれば「F12」キーを押されること。
   7ピンをショートさせれば「F11」キーを押されることが確認できれば完了です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0