トップページ > おもしろ科学実験室(工学のふしぎな世界) > 君にもできる!楽しいロボの作り方

おもしろ科学実験室(工学のふしぎな世界)

君にもできる!楽しいロボの作り方

2019年9月13日
琉球大学 工学部

はじめに

2輪のタイヤを駆動して移動するロボ(車型ロボット)を作ってみましょう。プログラムを工夫するとおもしろい動きが観察できます。

準備するもの

  1. タイヤ 2個
  2. サーボ 2個
  3. ボールキャスタ
  4. 電池ボックス
  5. ※白い部品はロボットの本体です。3D CAD設計ソフトFusion 360で作成し、3Dプリンタで出力しました。

    ※ロボット本体は、ユニバーサル・プレートか、ホームセンターなどで入手できる低発泡塩ビ板(例えば、FOREX)などで代用できます。

  6. マイコン(AE-ATMEGA328-MINI)
  7. 超音波距離センサー
  8. ブレッドボード
  9. ジャンパーワイヤー
  10. LED 2個
  11. 熱収縮チューブ
  12. ※上記以外に以下のものも必要です。

  13. FT232RQ USBシリアル変換キット
  14. USBケーブル(Aオス-マイクロBオス)
  15. 単4型アルカリ乾電池4本

作ってみよう

電子回路接続図

プログラムを書き込んでみよう

次にArduinoの開発環境を使って、マイコンにプログラムを書き込みます。
Arduinoの開発環境は以下のサイトから無償で入手できます。

https://www.arduino.cc/

パソコンとマイコンを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にて「ロボットづくり」を出展しました。小学生から高校生までロボットづくりを楽しみながらプログラミングを学びました。参加者から「生き物みたいでおもしろい。もっと作ってみたい。」などの意見をいただきました。

応用例

ロボの応用として次のようなロボットが考えられます。

倒立振子ロボ(近日公開)

サーボの位置を180°変えてロボ本体に差し込み、加速度センサーなどを追加してプログラムを工夫すると、2輪で前後にバランスを取りながら動く(倒立振子のような)ロボになります。

ライン・トレース・ロボ

光検出センサーをロボ本体の下側前方に固定して、地面のラインを見つけるようにプログラムを変更すると、地面のラインに沿って動くロボになります。

ライン・トレース・ロボの一例ライン・トレース・ロボの一例

ホワイトボード・クリーニング・ロボ

ホワイトボード・クリーニング・ロボの一例ホワイトボード・クリーニング・ロボの一例

ロボ本体の下側に磁石とシート(フローリングワイパー用)を固定し、プログラムを変えると、ホワイトボードに書かれた文字などを消してくれるクリーニング・ロボになります。

ボール・キャッチ・ロボ/シュート・ロボ

カメラをつけてボール(ピンポン玉)を見つけて追いかけるプログラムを追加すると、ボールをキャッチしたり、シュートしたりするロボになります。

ボール・キャッチ・ロボの一例ボール・キャッチ・ロボの一例

サンシン演奏支援装置(近日公開)

これは移動ロボではありませんが、サーボ2個とユーザーが操作するコントローラを追加すると、弦楽器サンシンの押弦(弦を押さえる)操作を支援する装置になります。これにより、上肢に障がいを有する人々でもサンシンの演奏が可能になってきています。

おわりに

ロボが1台あると、ロボットの動きを観察しながら、プログラミングの学習に役立ちます。みなさんも自分だけのロボづくりにトライしてみてください。

※このページに含まれる情報は、掲載時点のものになります。

関連記事

2011-08-01

生レポート!現役学生の声

Hello, World!

岩手大学理工学部

2017-11-10

生レポート!卒業生の声

感動体験は人生の道しるべ

神戸大学工学部

2011-05-09

生レポート!現役学生の声

「ものつくり」やってみませんか?

埼玉大学工学部

2014-09-16

生レポート!卒業生の声

大学生活で感じた「情報の扱い方」

富山大学工学部

2019-01-18

生レポート!卒業生の声

あの時研究していなかったら?~研究活動は人生の岐路~

和歌山大学システム工学部

2016-07-14

生レポート!卒業生の声

建築との出会い

和歌山大学システム工学部

琉球大学
工学部

  • 機械システム工学科
  • 環境建設工学科
  • 電気電子工学科
  • 情報工学科

学校記事一覧

おもしろ科学実験室(工学のふしぎな世界)
バックナンバー

このサイトは、国立大学56工学系学部長会議が運営しています。
(>>会員用ページ)
私たちが考える未来/地球を救う科学技術の定義 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。
これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。