USBデバイスをつくってみたい(3) LEDとブザーがついたデバイス完成編


vine

ここまでのあらすじ

  • USBキーボードやマウスの仲間のHIDクラスという仕様のデバイスが作れるようになった
  • Mac側のドライバ/ソフトウエアはRubyで書けることがわかった

bootloader

mega328Pにして容量に余裕ができたのでブートローダを入れておくことにした。http://rayshobby.net/?p=7363 の中に入っていたbootloaderの元ネタの https://github.com/baerwolf/USBaspLoader

mega328Pの設定&ハードに合わせて調整。
https://github.com/takeru/USBaspLoader/commit/ef1ae4d1ad4cd44cba23328d18cc02d54c1fe74b

D6をプルダウンしたままリセットすると"USBasp"として振る舞うブートローダが起動する。この状態で本体部分への書き込みができる。書き込みはArduinoIDEから"USBasp"を選べばスケッチを書き込めるし、

avrdude -C /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -c usbasp -p m328p -U flash:w:hidled.hex

とすればコマンドラインからavrdudeでも書き込める。
書き込んだらプルアップを外してリセットし直すと、書き込んたソフトウエアが動く。

これでちょこちょことfirmwareを改善していくのが楽になる。書き込み機(Arduinoを使っていた)がいらないので机がスッキリする。

ハードウエア

面倒なのでブレッドボードに組み込んで完成!

  • mega328p
  • 20MHz 22pF*2
  • 100Ω*2,1KΩ*1
  • 抵抗入りLED*5
  • トグルスイッチ*2
  • 圧電ブザー
  • 0.1uF
  • 配線

使いながらバージョンアップしていこう。

ソフトウエア

% ruby hidled_host.rb
usage:
  ruby hidled_host.rb -r
  ruby hidled_host.rb -s 1,0,1,0,0,0,0,0

コマンドラインから8byteを読み書きしてLEDのON/OFFを切り替えます。

まとめ

  • 自作USBデバイスをつくるのは思っているより簡単だ
  • ブレッドボードのやり直しが出来る安心感はすばらしい
  • Arduinoやその他の何かの再発明なきもするが気にしない
    • 全部入りの完成品をゴールだとすれば面白いのではないか
    • Arduino手に入れてもそこまで行けない人はいっぱいいる

TODO

  • ピンもメモリも余裕ありまくりなので全部入りのやつをつくる
    • 温度センサ
    • 明るさセンサー
    • 赤外線LED
    • 赤外線受信モジュール
    • コンデンサマイク
  • Windows / Linux