SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

子ども用Arduinoボード「なのぼ〜ど」とScratch

先日書いた子ども用Arduinoボード「ちびでぃ〜の2」に続いて、各種センサーが付いた「なのぼ〜ど」を「ちっちゃいものくらぶ」さんから取り寄せて作ってみました。
…が、Scratchと接続して動かすまでかなり苦労しました。
同じように苦労する人がいるかもしれないので、参考情報として書いてみます。

なのぼ〜どの工作は、十勇士クラブのライブで行いました。

ちょっとばたばたでしたが、無事にボードは作れました。
が、USBケーブルでPCに接続して、Arduino IDEからプログラムを転送すると、通信エラーが出てしまいました。

avrdude: stk500_getsync(): not in sync: resp=0x00

実はこのエラー、Arduinoを使う人の多くが悩まされるエラーだそうで、対策としては「リセットボタンを押しながらUSBケーブルを抜き差しする」といった、アナログで不確実な方法しか情報がありませんでした。結局それでは解決せず。
何日もこのエラーで悩まされ続けたのですが、いろいろやっている内に、なのぼ〜どにおける回避方法はわかりました。
Scratchで制御するまでの手順を書いてみます。

1.ドライバは最新板でよい

なのぼ〜どをPCに認識させるには、USB―シリアル変換チップ「PL-2303」のドライバが必要です。これは以下のProlific社のページからダウンロードできます。
http://www.prolific.com.tw
サポートページで「GUEST」アカウントでログインすると、ドライバのダウンロードページへ行けます。
ネット上のなのぼ〜ど関連の情報と比べると、ドライバのバージョンが随分進んでいるのですが、最新の1.6.1で大丈夫でした。
ドライバをインストールした後に、なのぼ〜どをUSBケーブルでPCに接続すると、シリアルデバイスとして認識されて、COMポートが割り当てられます。

2.Arduino IDEはアルファ版「0023」でないとダメ

Arduinoの開発環境「Arduino IDE」は、現在正式版の「1.0.1」が最新バージョンですが、これでは通信エラーで失敗します。アルファ版の「0023」を使わないといけません。(それ以前のバージョンは試していません)
そして、Arduino IDEディレクトリ内のサブディレクトリ「\hardware\arduino」にあるボード設定ファイル「boards.txt」に、なのぼ〜ど用の設定を追加します。
追加設定情報は以下のページにあります。
http://tiisai.dip.jp/?p=1195
追加内容は以下のとおりです。

###########################################
# Optiboot Arduino support
# http://optiboot.googlecode.com
# Peter Knight, 2010
atmega8o.name=[Optiboot] Arduino NG or older w/ ATmega8
atmega8o.upload.protocol=stk500
atmega8o.upload.maximum_size=7680
atmega8o.upload.speed=115200
atmega8o.bootloader.low_fuses=0xbf
atmega8o.bootloader.high_fuses=0xdc
atmega8o.bootloader.path=optiboot
atmega8o.bootloader.file=optiboot_atmega8.hex
atmega8o.bootloader.unlock_bits=0x3F
atmega8o.bootloader.lock_bits=0x0F
atmega8o.build.mcu=atmega8
atmega8o.build.f_cpu=16000000L
atmega8o.build.core=arduino
############################################

上記の設定を追加して、IDEのボード選択メニューで「[Optiboot] Arduino NG or older w/ ATmega8」を選択すると、なのぼ〜どと通信できるようになります。
ボード設定のパラメータを調整すれば、最新バージョンのIDEでも行けるかもしれませんが、試していません。

3.なのぼ〜どの通信スケッチ、Scratchの改造デザイン

Scratchでなのぼ〜どと通信するには、先日の記事でも書いたように、Arduinoに通信用のスケッチを転送し、Scratchのデザインファイルを変更します。
その辺りの情報とダウンロードファイルは、こちらのページにあります。
www.yengawa.com/scratch_arduino
私はモーター出力もサポートした「SensorBoardWithMotor.zip」を使わせていただきました。

※7/7修正
作者の阿部さんによると、新しいファイル「NanoBoardAGWithMotor」へ移行して欲しいそうです。
http://swikis.ddo.jp/WorldStethoscope/16
下に書いたLED用のスケッチ改造も不要になります。

モーターの代わりにLEDをつけて、Scratchのプログラムで光らせてみました。
モーターパワー出力ピン(9番ピン)とGNDピンの間にLEDを差して光らせています。
(本来は電流制限抵抗を挟まないといけないのですが)

ただ、通信スケッチ「NanoBoardWithMotor.pde」オリジナルのままだと、「モーターをオンにする」「モーターをオフにする」ブロックでLEDの点滅ができません。
(モーターパワー出力ピン(9)にはモーターパワーの値しか転送しておらず、オン/オフは回転方向の出力ピン(7,8)に反映させているため)
なので、「モーターをオンにする」の時はパワーの値を出力、「オフにする」の時は0を出力するように、スケッチを若干改造しました。

analogWrite(PWM_PIN, motorPower);
 ↓
if (isMotorOn) {
    analogWrite(PWM_PIN, motorPower);
} else {
    analogWrite(PWM_PIN, 0);
}

なのぼ〜どに搭載されたスライダーセンサー、音センサー、明るさセンサーなどを使ったScratchプログラムも試しました。なかなかおもしろいです。

スライダーセンサーの値によってモーターパワーを変えるScratchプログラム。

スライダーを動かしている様子。

これで子ども向けのセミナーができそうです。よかった(^_^)