2輪のタイヤを駆動して移動するロボ(車型ロボット)を作ってみましょう。プログラムを工夫するとおもしろい動きが観察できます。
※白い部品はロボットの本体です。3D CAD設計ソフトFusion 360で作成し、3Dプリンタで出力しました。
※ロボット本体は、ユニバーサル・プレートか、ホームセンターなどで入手できる低発泡塩ビ板(例えば、FOREX)などで代用できます。
※上記以外に以下のものも必要です。
次にArduinoの開発環境を使って、マイコンにプログラムを書き込みます。
Arduinoの開発環境は以下のサイトから無償で入手できます。
パソコンとマイコンをUSBケーブル(FT232RQ USBシリアル変換キットも含む)で接続したら、以下のサンプルプログラムをマイコンに書き込んでみてください。
Arduino_sample.txt (ここにサンプルプログラムArduino_sample.txtを入れる)
マイコンに書き込むプログラムの説明です。はじめにサーボを使用するための準備です。
#include "Servo.h"
Servo motorR, motorL;
続いて超音波距離センサーの EchoPin(エコー、入力) と TrigPin(トリガー、出力) をマイコンのそれぞれ8ピンと9ピンに接続するための設定です。
#define EchoPin 8 //D8: input
#define TrigPin 9 //D9: output
double Distance = 0;
double Duration = 0;
次に setup の設定です。ここでシリアル通信、pin の入出力モード、モータの初期値を設定します。この部分は最初に1度だけ実行されます。
void setup() {
Serial.begin( 9600 );
motorR.attach(3); // D3 pin
motorL.attach(5); // D5 pin
pinMode( EchoPin, INPUT );
pinMode( TrigPin, OUTPUT );
motorR.write(90);
motorL.write(90);
}
次は loop の設定です。この部分はマイコンが動作中にずっと繰り返し実行される部分になります。最初に、TrigPin を LOW、すなわち 0 に設定し、2マイクロ秒(1マイクロ秒は1秒の百万分の1)待ち、その後 TrigPin を HIGH、すなわち 1 にセットします。これにより超音波距離センサーの発信部(T が書かれた側)から超音波が出力されます。そして5マイクロ秒後に再度 TrigPin を LOW にセットして超音波出力を停止します。その後、超音波が障害物などに当たって戻ってきた超音波を受信部(R が書かれた側)で受けて、そのときの往復時間を pulseIn関数を使って調べ、Duration という変数(数字を入れる箱のようなもの)に入れます。
void loop() {
digitalWrite(TrigPin, LOW );
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(5);
digitalWrite(TrigPin, LOW);
Duration = pulseIn(EchoPin, HIGH);
空気中を伝わる音の速さは厳密には気温などの影響を受けますが、ここでは、音速 343 m/s(1秒間に343メートル進む) という概数を使いました。この場合、音は 1マイクロ秒で 34300 cm ÷ 1,000,000 進むことになり、これが往路と復路の距離に相当するので、その半分に(2で割り)します。
Distance = ( Duration/2 ) * 0.0343;
ロボの誤動作対策として超音波距離センサーの最大値を50㎝とします。
if ( Distance > 50) {
Distance = 50;
}
超音波距離センサーの値が 15㎝ 以下になると右側のタイヤが逆回転、左側のタイヤが停止し、片方の LED が点滅します。もし超音波距離センサーの値が 15㎝ を超えると左右のタイヤが前進方向に回転し、両方の LED が点灯します。
if ( Distance <= 15 ) {
motorR.write(100);
motorL.write(90);
for ( int i = 0; i < 2; i++) {
digitalWrite(10, LOW);
delay(100);
digitalWrite(10, HIGH);
delay(100);
}
}
else if ( 15 < Distance ) {
motorR.write(80);
motorL.write(100);
digitalWrite(10, HIGH);
digitalWrite(12, HIGH);
}
delay(100);
}
超音波距離センサーの前に何の障害物がないと、ロボは直進します。超音波距離センサーの前に手をかざす(障害物がある)と片方のLEDが点滅し、左側のモーターは停止し、右側のモーターは逆回転して手(障害物)からロボが遠ざかる動きをします。センサーと手(障害物)との距離がある程度(約15cm以上)離れると、ロボは再び直進します。
ロボを使用するときには、金属などの電気を通しやすい物が電子部品などに触れないように気をつけてください。自己の責任においてご利用ください。よろしくお願いします。
琉球大学未来共創フェア2019にて「ロボットづくり」を出展しました。小学生から高校生までロボットづくりを楽しみながらプログラミングを学びました。参加者から「生き物みたいでおもしろい。もっと作ってみたい。」などの意見をいただきました。
ロボの応用として次のようなロボットが考えられます。
光検出センサーをロボ本体の下側前方に固定して、地面のラインを見つけるようにプログラムを変更すると、地面のラインに沿って動くロボになります。
ロボ本体の下側に磁石とシート(フローリングワイパー用)を固定し、プログラムを変えると、ホワイトボードに書かれた文字などを消してくれるクリーニング・ロボになります。
カメラをつけてボール(ピンポン玉)を見つけて追いかけるプログラムを追加すると、ボールをキャッチしたり、シュートしたりするロボになります。
これは移動ロボではありませんが、サーボ2個とユーザーが操作するコントローラを追加すると、弦楽器サンシンの押弦(弦を押さえる)操作を支援する装置になります。これにより、上肢に障がいを有する人々でもサンシンの演奏が可能になってきています。
ロボが1台あると、ロボットの動きを観察しながら、プログラミングの学習に役立ちます。みなさんも自分だけのロボづくりにトライしてみてください。
掲載大学 学部 |
琉球大学 工学部 | 琉球大学 工学部のページへ>> |
私たちが考える未来/地球を救う科学技術の定義 | 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。 これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。 |