ミニ四駆にArduino Pro Miniを搭載して走らせてみよう!

2013年4月9日(火)
藤原 敬弘

今回は、前回作成したArduino Mini Proをいよいよミニ四駆に載せて走らせます。その前にいくつか作成するべきパーツがあるので、先にそちらを進めた後、ミニ四駆への搭載といった手順で進めていきます。

いよいよミニ四駆を購入!

大変お待たせしましたが、ここでミニ四駆を購入します!その他、パーツ作成用のユニバーサル基盤を購入します。

ミニ四駆は自分の好きなものを買って頂いても結構ですが、その場合、ミニ四駆への搭載の仕方はご自身で設計してください。シャーシの上面がカバーになっている機種(ミニ四駆REVやミニ四駆Pro)がArduino Mini Proを載せやすいのでお勧めです。

ここでは指定したエアロアバンテ(ミニ四駆REV)をベースにArduino Mini Proを載せていきます。

課題の解答

パーツを作成する前に、前回の課題の解答をします。課題の成果物はArduino Pro Miniを搭載したミニ四駆のプロトタイプです。課題をこなしていない方は、同じ回路を組んで動かしてください。ここでもう一度、Arduino Pro Miniの動作チェックを行っておきましょう。まず、以下の回路を組みます。

Arduino Pro Miniで動作する回路を作る(右は回路図)(クリックで拡大)

これは第6回の記事「ミニ四駆の遠隔操作を実現しよう!- プロトタイプ編」で紹介した回路のArduino Pro Mini版です。詳しい説明はそちらを御覧ください。続いて、次のプログラムを転送します。

001/**
002 * ピンの定義
003 *
004 * signal1とsignal2で使用するピンに名前を付ける。
005 */
006 const int SIGNAL1_1 = 4;
007 const int SIGNAL1_2 = 5;
008 const int SIGNAL2_1 = 2;
009 const int SIGNAL2_2 = 3;
010  
011/**
012 * 転送速度の定義
013 */
014 const int SERIAL_TRANS = 9600;
015  
016/**
017 * setup関数
018 *
019 * シリアル通信を使うため、初期化する。
020 * モータの制御に使用するピンをOUTPUTに指定する。
021 */
022 void setup() {
023   Serial.begin(SERIAL_TRANS);
024   pinMode(SIGNAL2_1, OUTPUT);
025   pinMode(SIGNAL2_1, OUTPUT);
026   pinMode(SIGNAL1_1, OUTPUT);
027   pinMode(SIGNAL1_2, OUTPUT);
028 }
029 
030/**
031 * signal1関数
032 *
033 * モータの制御をわかりやすくするため、シグナル関数を用意する。
034 * signal1関数とsignal2関数を使って、モータの正転、逆転、停止を制御する。
035 *
036 * signal1関数とsignal2関数に同時に1を渡すと、FETモジュールが壊れるので注意する。
037 */
038 void signal1(int value) {
039   switch (value) {
040     case 0:
041       digitalWrite(SIGNAL1_1, HIGH);
042       digitalWrite(SIGNAL1_2, LOW);
043       break;
044     case 1:
045       digitalWrite(SIGNAL1_1, LOW);
046       digitalWrite(SIGNAL1_2, HIGH);
047       break;
048   }
049 }
050 
051 /**
052  * signal2関数
053  *
054  * モータの制御をわかりやすくするため、シグナル関数を用意する。
055  * signal1関数とsignal2関数を使って、モータの正転、逆転、停止を制御する。
056  *
057  * signal1関数とsignal2関数に同時に1を渡すと、FETモジュールが壊れるので注意する。
058  */
059 void signal2(int value) {
060   switch (value) {
061     case 0:
062       digitalWrite(SIGNAL2_1, HIGH);
063       digitalWrite(SIGNAL2_2, LOW);
064       break;
065     case 1:
066       digitalWrite(SIGNAL2_1, LOW);
067       digitalWrite(SIGNAL2_2, HIGH);
068       break;
069   }
070 }
071 
072/**
073 * stop関数
074 *
075 * 停止コマンドが来た場合のステータスの変更を行う。
076 */
077 void stop() {
078   signal1(0);
079   signal2(0);
080 }
081 
082/**
083 * forward関数
084 *
085 * 前進コマンドが来た場合のステータスの変更を行う。
086 */
087 void forward() {
088   signal1(1);
089   signal2(0);
090 }
091 
092/**
093 * back関数
094 *
095 * 後退コマンドが来た場合のステータスの変更を行う。
096 */
097 void back() {
098   signal1(0);
099   signal2(1);
100 }
101 
102/**
103 * loop関数
104 *
105 * コマンドを受け取り、forward / back / stop のいずれかの適切な関数を呼ぶ。
106 */
107 void loop() {
108   if (Serial.available() > 0) {
109     char c = Serial.read();
110     if (c == 'f') {
111       forward();
112     } else if (c == 'b') {
113       back();
114     } else if (c == 's') {
115       stop();
116     }
117   }
118 }

このプログラムも第6回と同じものですが、ピンの番号が変わっていることに注意してください。Arduino UNOとPro Miniでピン配置が異なるために、前回の記事で信号ピンを変更しました。そのため、10-13番ピンから2-5番ピンへ信号ピンが変更されています。まずは、USB経由で動かしてみます。

問題なく動いたら、ついでにBluetooth経由での制御に変更してみます。プログラムの転送速度を115200に変更し、転送します。

1/**
2 * 転送速度の定義
3 */
4 const int SERIAL_TRANS = 115200;

転送が完了したら、USBシリアルコンバータを抜き、Bluetoothモジュールを接続します。

第5回の記事「Arduinoを始めよう!(3)Bluetooth編」を参考に、Arduino Pro Mini上のBluetoothモジュールとMacを接続します。先ほどの回路と同様にコマンド送信でモータが動けば、正常に動作しています。

FULLER株式会社

1986年生まれ。北海道苫小牧市出身。苫小牧工業高等専門学校卒業。
Fuller, Inc. CTO
Webプログラマ、よく利用する言語はPython。Pythonコミュニティによく出没する。
趣味でArduinoやRaspberry Piなどを使って、便利なものを自作する。

twitter: @wutali / github: https://github.com/wutali

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています