ミニ四駆にArduino Pro Miniを搭載して走らせてみよう!
今回は、前回作成したArduino Mini Proをいよいよミニ四駆に載せて走らせます。その前にいくつか作成するべきパーツがあるので、先にそちらを進めた後、ミニ四駆への搭載といった手順で進めていきます。
いよいよミニ四駆を購入!
大変お待たせしましたが、ここでミニ四駆を購入します!その他、パーツ作成用のユニバーサル基盤を購入します。
ミニ四駆は自分の好きなものを買って頂いても結構ですが、その場合、ミニ四駆への搭載の仕方はご自身で設計してください。シャーシの上面がカバーになっている機種(ミニ四駆REVやミニ四駆Pro)がArduino Mini Proを載せやすいのでお勧めです。
ここでは指定したエアロアバンテ(ミニ四駆REV)をベースにArduino Mini Proを載せていきます。
課題の解答
パーツを作成する前に、前回の課題の解答をします。課題の成果物はArduino Pro Miniを搭載したミニ四駆のプロトタイプです。課題をこなしていない方は、同じ回路を組んで動かしてください。ここでもう一度、Arduino Pro Miniの動作チェックを行っておきましょう。まず、以下の回路を組みます。
これは第6回の記事「ミニ四駆の遠隔操作を実現しよう!- プロトタイプ編」で紹介した回路のArduino Pro Mini版です。詳しい説明はそちらを御覧ください。続いて、次のプログラムを転送します。
/** * ピンの定義 * * signal1とsignal2で使用するピンに名前を付ける。 */ const int SIGNAL1_1 = 4; const int SIGNAL1_2 = 5; const int SIGNAL2_1 = 2; const int SIGNAL2_2 = 3; /** * 転送速度の定義 */ const int SERIAL_TRANS = 9600; /** * setup関数 * * シリアル通信を使うため、初期化する。 * モータの制御に使用するピンをOUTPUTに指定する。 */ void setup() { Serial.begin(SERIAL_TRANS); pinMode(SIGNAL2_1, OUTPUT); pinMode(SIGNAL2_1, OUTPUT); pinMode(SIGNAL1_1, OUTPUT); pinMode(SIGNAL1_2, OUTPUT); } /** * signal1関数 * * モータの制御をわかりやすくするため、シグナル関数を用意する。 * signal1関数とsignal2関数を使って、モータの正転、逆転、停止を制御する。 * * signal1関数とsignal2関数に同時に1を渡すと、FETモジュールが壊れるので注意する。 */ void signal1(int value) { switch (value) { case 0: digitalWrite(SIGNAL1_1, HIGH); digitalWrite(SIGNAL1_2, LOW); break; case 1: digitalWrite(SIGNAL1_1, LOW); digitalWrite(SIGNAL1_2, HIGH); break; } } /** * signal2関数 * * モータの制御をわかりやすくするため、シグナル関数を用意する。 * signal1関数とsignal2関数を使って、モータの正転、逆転、停止を制御する。 * * signal1関数とsignal2関数に同時に1を渡すと、FETモジュールが壊れるので注意する。 */ void signal2(int value) { switch (value) { case 0: digitalWrite(SIGNAL2_1, HIGH); digitalWrite(SIGNAL2_2, LOW); break; case 1: digitalWrite(SIGNAL2_1, LOW); digitalWrite(SIGNAL2_2, HIGH); break; } } /** * stop関数 * * 停止コマンドが来た場合のステータスの変更を行う。 */ void stop() { signal1(0); signal2(0); } /** * forward関数 * * 前進コマンドが来た場合のステータスの変更を行う。 */ void forward() { signal1(1); signal2(0); } /** * back関数 * * 後退コマンドが来た場合のステータスの変更を行う。 */ void back() { signal1(0); signal2(1); } /** * loop関数 * * コマンドを受け取り、forward / back / stop のいずれかの適切な関数を呼ぶ。 */ void loop() { if (Serial.available() > 0) { char c = Serial.read(); if (c == 'f') { forward(); } else if (c == 'b') { back(); } else if (c == 's') { stop(); } } }
このプログラムも第6回と同じものですが、ピンの番号が変わっていることに注意してください。Arduino UNOとPro Miniでピン配置が異なるために、前回の記事で信号ピンを変更しました。そのため、10-13番ピンから2-5番ピンへ信号ピンが変更されています。まずは、USB経由で動かしてみます。
問題なく動いたら、ついでにBluetooth経由での制御に変更してみます。プログラムの転送速度を115200に変更し、転送します。
/** * 転送速度の定義 */ const int SERIAL_TRANS = 115200;
転送が完了したら、USBシリアルコンバータを抜き、Bluetoothモジュールを接続します。
第5回の記事「Arduinoを始めよう!(3)Bluetooth編」を参考に、Arduino Pro Mini上のBluetoothモジュールとMacを接続します。先ほどの回路と同様にコマンド送信でモータが動けば、正常に動作しています。