
なのかーで利用されている「なのぼーどAG」はArduino(アルデュイーノ)互換となっているので、 Arduinoとしてプログラミングすることができます。
Arduinoとして使用すれば、Scratchを使わずに、Arduino言語(ほぼC言語)でプログラミングをして、アプリケーション(Arduinoでは「スケッチ」と呼びます)を本体に転送して、PC接続無しで単体で動作(なのぼーどの電源ONで即起動)させることができます。
実際に制御するための基本的な情報をまとめました。 これを元に、自走ロボットプログラミングにチャレンジしてみたいと思います。
Aruduinoをインストール後、 なのぼ~どを利用するには Aruduino IDEの設定ファイル board.txt に以下の内容を追加する必要があります。
board.txtはWindows の場合はインストールしたフォルダの ・・・\hardware\arduino の中にあります。
「board.txt」でパソコン内を検索したほうが早いかもしれません。
Macの場合は Arduinoアプリケーションで右クリック>「パッケージの内容を表示」を行って、以下をたどってください。
/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/boards.txt
- 以下の内容をファイルの末尾などに貼り付けて追加してください。
########################### atmega8o83.name=chibiDuino pro ATmega8 38400 optiboot atmega8o83.upload.protocol=arduino atmega8o83.upload.tool=avrdude atmega8o83.upload.maximum_size=7680 atmega8o83.upload.speed=38400 atmega8o83.bootloader.tool=avrdude atmega8o83.bootloader.low_fuses=0×94 atmega8o83.bootloader.high_fuses=0xDC atmega8o83.bootloader.path=optiboot atmega8o83.bootloader.unlock_bits=0×3F atmega8o83.bootloader.lock_bits=0×0F atmega8o83.build.mcu=atmega8 atmega8o83.build.f_cpu=8000000L atmega8o83.build.core=arduino atmega8o83.build.variant=standard atmega8o83.build.board=AVR_ATMEGA8O83
- 2016/7/18 追記環境によっては
atmega8o83.bootloader.file=optiboot_cp83.hex
という記述が必要な場合があります。 その場合は
atmega8o83.bootloader.unlock_bits=0×3F
の上あたりに追記してください。
USBケーブルでなのぼ~どを接続して Aruduino IDEを立ち上げなおすと
メニュー > ツール >ボードから
「chibiDuino pro ATmega8 38400 optiboot」
が選択できるようになるので選択します。
Macの場合はUSBシリアル通信用のドライバーのインストールも必要です。 OSがアップグレードすると入れ替える必要がある場合があります。
El Capitanでは以下で動作しています。インストール後再起動が必要です。
- http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41
- 一番上の「PL2303_MacOSX_1.6.1_20160309.zip」を使いました。
そして、 メニュー > ツール >ポート から
「USBシリアルポート(usb-serial)」を選択してください。
これで準備は完了です。
で、やっとプログラミングです。
Analogセンサー値の取得
なのぼーどAGはアナログ端子が8個あります。
各センサーのID一覧
| センサーID | 取得可能値 | 説明 |
|---|---|---|
| A0 | マイクセンサー | 音量を取得 音が鳴ると値が大きく |
| A1 | 抵抗Aの値 | 超音波距離センサーは、別の取得方法が必要 |
| A2 | 抵抗Bの値 | |
| A3 | 抵抗Cの値 | |
| A4 | 抵抗Dの値 | |
| A5 | 明るさセンサー | 暗くなると値が大きくなる |
| A6 | スライダーセンサー | 0-1023 |
| A7 | ボタンスイッチ | ON:0 OFF(通常時):1023 |
analogRead([センサーID]) を利用してセンサー値を読み取ることができます。
- スケッチサンプル A6:スライダセンサーの値をシリアルコンソールに表示
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
int sensorValue = analogRead(A6);
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
超音波センサーの取得
なのかーで利用する超音波センサーの値を取る際は、analogRead(A1);では取得できません。 別途、New Pingを利用して取得する必要があります。
- ヘッダー部分にて
#include <NewPing.h> #define TRIGGER_PIN 11 // Arduino pin tied to trigger pin on the ultrasonic sensor. #define ECHO_PIN 15 // Arduino pin tied to echo pin on the ultrasonic sensor. #define MAX_DISTANCE 108 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
- 実際の取得はこんな感じです。
void setup() {
Serial.begin(9600);//9600にあんまり意味は無いです
}
void loop() {
int sensorValue = sonar.ping() / 5 ; // Send ping, get ping time in microseconds (uS).
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
Lチカ(LEDを光らせる)
デジタルピン13がLEDです。以下内容で500msの間隔でLEDを点滅させます。
void setup() {
pinMode(13, OUTPUT); // NanoBoard LED port
}
void loop() //プログラム本体(ずっと繰り返す。)
{
digitalWrite(13, HIGH); // set NanoBoard LED on
delay(500); //500ms待つ。
digitalWrite(13, LOW); // set NanoBoard LED off
delay(500); //500ms待つ。
}
モーターを動かす
なのぼ~どには2つのモーター出力用端子があります。 それぞれに関して出力(power)と正回転・逆回転が制御できます。
最近のArduinoボードでは、デジタルピン3, 5, 6, 9, 10,11が使えるようですが マイコンに「ATmega8」を使用しているなのぼーどAGでは デジタルピンの9, 10, 11の三つがアナログ出力(PWM)に利用できるようです。
- モーターとピンの関連付け
| モーター | アナログ出力ピン | デジタル出力ピン(正回転) | デジタル出力ピン(逆回転) |
|---|---|---|---|
| モーター1(M1) | 9 | 7 | 8 |
| モーター2(M2) | 10 | 5 | 6 |
- モーターの動きと、各ピンの設定値
| 動作 | アナログ出力ピン値 | デジタル出力ピン(正回転) | デジタル出力ピン(逆回転) |
|---|---|---|---|
| 正回転 | 0(OFF)〜255(MAX) | HIGH | LOW |
| 逆回転 | 0(OFF)〜255(MAX) | LOW | HIGH |
- コードで書くと以下の様に
void setup() {
// モーター用のピン設定
pinMode(9, OUTPUT); //M1 analogOut
pinMode(7, OUTPUT); //M1 DigitalOut Thisway
pinMode(8, OUTPUT); //M1 DigitalOut Thatway
pinMode(10, OUTPUT); //M2 analogOut
pinMode(5, OUTPUT); //M2 DigitalOut Thisway
pinMode(6, OUTPUT); //M2 DigitalOut Thatway
}
void loop() {
//モーター1(M1)を出力100で正回転
analogWrite(9, 100);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
//モーター2(M2)を出力255(最大)で逆回転
analogWrite(10, 255);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(500);
}
拡張するなら
デジタルのD0,D1は使わないとして デジタルのD2-D4とD11-D13が空いている感じですが
- D11は超音波距離センサー
- D13はLED
で利用されているので、 拡張するなら、D2,D3,D4,D12あたりから使うといいかも知れません。(ちょっと自信ない)
アナログは、 A1(=D15)は超音波センサーなので、 A2,A3,A4ですかね。
開発環境
- Arduino IDE 1.6.5
- なのかーキット (なのぼーどAG1.4)
- USBケーブル(スケッチの転送に利用します)※mini-Bなので注意。microBじゃないですよ。
- Mac (もちろんWindowsもOK)
開発環境のセットアップやArduinoについては他のサイトを参考にしてください。
調査にあたっては、 なのぼ~ど NanoBoard AG « ちっちゃいものくらぶにある なのぼ~どAG最新ファームウエアのArduinoスケッチとHEXファイルを参考にしています。
また、スケッチをアップロードした後に、またScratchで操作するには、改めて、上記のArduinoスケッチをアップして元に戻す必要があります。