問題
前回まで順調に進んできた Rapiro の JavaScript 制御化ですが、距離センサを追加しても値が取得できず、かなりハマりました。自己解決できましたので、レポートしておきます。
問題の詳細
- Rapiroのメイン基板にStandardFirmataを書き込んで、Raspberry Pi から Node.js (johnny-five) で制御することはできている
- 距離センサ(GP2Y0A21YK)を搭載して、メイン基板の拡張ピンのA6(またはA7)で値を取得しようとするも、できない
- Arduino IDE 1.8 で普通に StandardFirmata(または StandardFirmataPlus)をそのまま(Arduino Uno設定で)書き込んだ状態だと、A6を認識してくれず、計測そのものができない
- Arduino Uno はそもそもA5までしかないため、StandardFirmata の冒頭で「#define TOTAL_ANALOG_PINS 8 / #define TOTAL_PINS 22」として、Boards.hで定義されたアナログ入力ピン数をオーバーライドした状態で StandardFirmata を書き込んだところ、距離センサの値を取得することができたが、今度は、RapiroのサーボやLEDが制御できなくなってしまう
解決策
Arduino IDE の boards.txt に、以下のように Rapiro 専用の記述を加えました。
こうすることで、Arduino IDE のボードの選択肢から「Rapiro Control Board」が選べるようになります。それを選び、StandardFirmataPlus を書き込むことで、バッチリでした。
重要なのは一番下の行の「eightanaloginputs」です。これでアナログ入力を8個使えるようになるようです。通常の Arduino Uno はこの指定が「standard」です。コンパイル時の定数の設定で、具体的には、pins_arduino.h 内の NUM_ANALOG_INPUTS の値を「8」にする設定です。
rapiro.name=Rapiro Control Board
rapiro.vid.0=0x0403
rapiro.pid.0=0x6015
rapiro.upload.tool=avrdude
rapiro.upload.protocol=arduino
rapiro.upload.maximum_size=32256
rapiro.upload.maximum_data_size=2048
rapiro.upload.speed=115200
rapiro.bootloader.tool=avrdude
rapiro.bootloader.low_fuses=0xFF
rapiro.bootloader.high_fuses=0xDE
rapiro.bootloader.extended_fuses=0x05
rapiro.bootloader.unlock_bits=0x3F
rapiro.bootloader.lock_bits=0x0F
rapiro.bootloader.file=optiboot/optiboot_atmega328.hex
rapiro.build.mcu=atmega328p
rapiro.build.f_cpu=16000000L
rapiro.build.board=AVR_UNO
rapiro.build.core=arduino
rapiro.build.variant=eightanaloginputs
なお、通常はこの boards.txt は、Arduinoのインストールディレクトリ内の「hardware\arduino\avr」内にあります。が、以前に別のボード定義などをインストールしていると、Windowsの場合「C:\Users\(ユーザ名)\AppData\Local\Arduino15」内にボードの定義ファイル群がコピーされていて、そちらが優先されるようです。その場合、インストールディレクトリ内の boards.txt を書き換えてもダメなようです。それに気づくのに時間がかかり、ハマりました。さらに、AppData内のArduino15フォルダは、Arduino IDEをアンインストールしても残るので、要注意です。
私は、いったんArduino IDE をアンインストールし、残った Arduino15 フォルダを手動で削除して、新たに Arduino IDE をインストールして、インストールディレクトリ内の boards.txt に上記を加えました。
まとめ
できてしまえば単純なことでしたが、今回のトラブルのおかげで、Arduino のハードウェアやソフトウェアについて少し勉強になりました。
これでようやく、次(センサの追加等)に進むことができます。