自分でロボットを作る方法を学びたいですか?自分で作れるロボットには、たくさんの種類があります。ほとんどの人は、ロボットがA地点からB地点に移動するという単純なタスクを実行するのを見たいと思っています。アナログ部品から完全にロボットを作ることも、ゼロからスターターキットを購入することもできます!自分でロボットを作ることは、電子工学とコンピュータ・プログラミングの両方を学ぶのに最適な方法です。
ロボットを組み立てる
-
部品を集めましょう。基本的なロボットを作るには、いくつかの簡単な部品が必要です。これらの部品は、すべてではないにしても、お近くの電子機器ホビーショップや、いくつかのオンラインショップで手に入れることができます。実際、基本キットの中には、これらの部品がすべて含まれているものもあります。このロボットには、はんだ付けは必要ありません:
- Arduino Uno(または他のマイクロコントローラー)
- 連続回転サーボ2個
- サーボに合う車輪2個
- キャスターローラー1個
- 小さなハンダレスブレッドボード1枚(プラスとマイナスの線が両側に2本ずつあるブレッドボードを探してください)
- 距離センサー1個(4ピンコネクターケーブル付き)
- ミニ押しボタンスイッチ1個
- 10kΩ 抵抗器1個
- USB A-Bケーブル1本
- 離脱ヘッダー1セット
- 9V DC電源ジャック付き6 x AAバッテリーホルダー1個
- ジャンパー・ワイヤーまたは22ゲージ・フックアップ・ワイヤー1パック
- 強力両面テープまたはホットグルー
-
平らな裏面が上になるようにバッテリーパックを裏返します。バッテリーパックをベースにしてロボットのボディを作ります。
-
バッテリーパックの端にある2つのサーボの位置を合わせます。サーボは底面同士を接触させ、それぞれの回転機構がバッテリーパックの側面に向くようにする。サーボは、車輪がまっすぐになるように、正しく配置しなければならない。サーボの配線は、バッテリーパックの背面から出ているようにする。
-
サーボをテープや接着剤で固定し、バッテリーパックにしっかりと固定されていることを確認します。サーボの背面がバッテリーパックの背面と同じ高さになるようにします。
- サーボがバッテリーパックの後ろ半分を占めるようにします。
-
ブレッドボードをバッテリーパックの空いているスペースに垂直に貼り付けます。ブレッドボードはバッテリーパックの前面から少しはみ出し、両側からはみ出るようにします。先に進む前に、しっかりと固定されていることを確認してください。A "の列がサーボに一番近いはずです。
-
Arduinoマイコンをサーボの上部に取り付けます。サーボが正しく取り付けられていれば、サーボが接触して平らな空間ができているはずです。この平らなスペースにArduinoボードを貼り付け、ArduinoのUSBコネクターと電源コネクターが後ろ側(ブレッドボードから離れる側)を向くようにします。Arduinoの前面がブレッドボードにギリギリ重ならないようにします。
-
車輪をサーボに取り付けます。車輪をサーボの回転機構にしっかりと押し付けます。車輪はできるだけぴったりとはまるように設計されているため、かなりの力が必要になるかもしれません。
-
キャスターをブレッドボードの底に取り付けます。シャーシを裏返すと、バッテリーパックを越えてブレッドボードが少し伸びているのが見えるはずです。必要に応じてライザーを使って、キャスターをこの延長部分に取り付けます。キャスターが前輪の役割を果たし、ロボットがどの方向にも簡単に回転できるようになります。
- キットを購入した場合、キャスターにいくつかのライザーが付属していることがあります。
ロボットの配線
-
3ピンヘッダを2つ折ってください。これらを使ってサーボをブレッドボードに接続します。ピンが左右均等な間隔になるように、ヘッダーを通してピンを押し下げます。
-
つのヘッダーをブレッドボードのE列の1-3番ピンと6-8番ピンに差し込む。しっかりと差し込まれていることを確認する。
-
黒いケーブルが左側(1番ピンと6番ピン)になるように、サーボケーブルをヘッダーに接続する。これでサーボがブレッドボードに接続される。左のサーボが左のヘッダーに、右のサーボが右のヘッダーに接続されていることを確認する。
-
C2とC7ピンから赤のジャンパーワイヤーを赤(プラス)レールピンに接続する。ブレッドボードの背面(シャーシの他の部分に近い方)にある赤いレールを使うようにしてください。
-
ピン B1 と B6 から黒のジャンパーワイヤーを青(グランド)レールピンに接続する。必ずブレッドボード背面の青レールを使用してください。赤レールのピンには差し込まないでください。
-
Arduinoのピン12と13から白いジャンパーワイヤーをA3とA8に接続します。これでArduinoがサーボを制御して車輪を回すことができるようになります。
-
センサーをブレッドボードの前面に取り付けます。ブレッドボードの外側のパワーレールには接続せず、1列目の文字付きピン(J)に接続します。ピンの数が左右で同じになるように、正確な中央に配置してください。
-
黒いジャンパー線をピンI14からセンサーの左側にある最初の青いレールピンに接続する。これでセンサーが接地されます。
-
赤のジャンパーワイヤーをI17ピンからセンサーの右側にある使用可能な最初の赤レールピンに接続します。これはセンサーに電力を供給します。
-
白いジャンパーワイヤーをI15ピンからArduinoの9ピン、I16ピンから8ピンに接続します。これでセンサーからマイクロコントローラーに情報が送られます。
電源の配線
-
ロボットを横にして、パック内のバッテリーが見えるようにします。バッテリーパックのケーブルが底の左側に出るようにします。
-
底面の左から2番目のバネに赤いワイヤーを接続します。バッテリーパックの向きが正しいことを確認してください。
-
右下の最後のスプリングに黒いワイヤーを接続します。この2本のケーブルが、Arduinoに正しい電圧を供給するのに役立ちます。
-
赤と黒のケーブルをブレッドボード背面の右端の赤と青のピンに接続します。黒いケーブルは青いレールピンの30番ピンに差し込みます。赤のケーブルは30番ピンの赤レールピンに差し込む。
-
ArduinoのGNDピンから背面の青いレールに黒いワイヤーを接続する。青レールのピン28に接続する。
-
背面の青レールから前面の青レールにそれぞれ29番ピンで黒線を接続する。Arduinoを損傷する可能性が高いので、赤レールを接続しないでください。
-
前面の赤レールの30番ピンから赤線をArduinoの5Vピンに接続します。これでArduinoに電源が供給されます。
-
ピン24-26の列の隙間に押しボタンスイッチを挿入します。このスイッチで、電源を抜かなくてもロボットの電源を切ることができます。
-
H24から赤いワイヤーを、センサーの右隣の空いているピンの赤いレールに接続します。これでボタンに電源が供給されます。
-
抵抗を使用して H26 を青いレールに接続します。数ステップ前に接続した黒線の真横のピンに接続してください。
-
G26から白線をArduinoのピン2に接続します。これでArduinoがプッシュボタンを登録できるようになります。
Arduinoソフトウェアのインストール
-
Arduino IDEをダウンロードして展開します。これはArduinoの開発環境で、Arduinoマイコンにアップロードする命令をプログラムすることができます。arduino.cc/ja/main/softwareから無料でダウンロードできます。ダウンロードしたファイルをダブルクリックして解凍し、中のフォルダをアクセスしやすい場所に移動します。実際にプログラムをインストールすることはありません。代わりに、解凍したフォルダからarduino.exeをダブルクリックして実行するだけです。
-
バッテリーパックをArduinoに接続します。バッテリーバックジャックをArduinoのコネクターに差し込み、電源を供給します。
-
ArduinoをUSB経由でコンピュータに接続します。Windowsはデバイスを認識しない可能性が高いです。
-
.ȩ Win+Rを押してdevmgmt.mscと入力します。デバイスマネージャーが起動します。
-
Other devices "セクションの "Unknown device "を右クリックし、"Update Driver Software "を選択します。このオプションが表示されない場合は、代わりに "プロパティ "をクリックし、"ドライバ "タブを選択し、"ドライバの更新 "をクリックします。
-
"Browse my computer for driver software" を選択します。これでArduino IDEに付属しているドライバを選択できるようになります。
-
Browse "をクリックし、先ほど解凍したフォルダに移動します。中に "drivers "フォルダがあります。
-
drivers "フォルダを選択し、"OK "をクリックします。不明なソフトウェアについての警告が表示されたら、先に進むことを確認してください。
ロボットのプログラミング
-
IDEフォルダ内のarduino.exeファイルをダブルクリックしてArduino IDEを起動します。空白のプロジェクトが表示されます。
-
以下のコードを貼り付けて、ロボットを直進させます。以下のコードは、Arduinoを連続的に前進させます。#include
// これは "Servo "ライブラリをプログラムに追加します // 以下のコードは2つのサーボオブジェクトを作成します。attach(13); } void loop() { leftMotor.write(180); // 連続回転の場合、180だとサーボが全速力で「前」に動く。"0 "の場合は、全速力で "後進 "する。 -
プログラムをビルドしてアップロードする。左上の右矢印ボタンをクリックすると、プログラムがビルドされ、接続されているArduinoにアップロードされます。
- プログラムがアップロードされると、ロボットはそのまま前進し続けるので、表面からロボットを持ち上げた方がいいかもしれません。
-
キルスイッチ機能を追加する。キルスイッチを有効にするために、コードの "void loop() "セクションに、"write() "関数の上に以下のコードを追加します。if(digitalRead(2) == HIGH)// これはArduinoの2番ピンでボタンが押されたときに登録される { while(1) { leftMotor.write(90); // "90 "はサーボのニュートラル位置で、回転を停止するように指示する rightMotor.write(90); } } } { { { { {
-
コードをアップロードしてテストする。キルスイッチコードを追加したら、ロボットをアップロードしてテストします。スイッチを押すまで前進し続け、その時点で動きが止まるはずです。完全なコードは次のようになります:#include
// 以下のコードは2つのサーボオブジェクトを作成します。 Servo leftMotor; Servo rightMotor; void setup() { leftMotor.attach(12); rightMotor.attach(13); } void loop() { if(digitalRead(2) == HIGH) { while(1) { leftMotor.write(90); rightMotor.write(90); } } leftMotor.write(180); rightMotor.write(0); } } } leftMotor.write(180); rightMotor.write(0); } } } } leftMotor.write(180); rightMotor.write(0)
例題
-
例題に沿って説明する。次のコードは、ロボットに付いているセンサーを使って、障害物にぶつかると左に曲がるようにします。各パーツが何をするかについては、コード中のコメントを参照してください。以下のコードがプログラム全体です。#const int serialPeriod = 250; // これはコンソールへの出力を1/4秒に1回に制限する unsigned long timeSerialDelay = 0; const int loopPeriod = 20; // これはセンサーが読み取る頻度を20msに設定する。接続が異なる場合はここで数値を調整する const int ultrasonic2TrigPin = 8; const int ultrasonic2EchoPin = 9; int ultrasonic2Distance; int ultrasonic2Duration; // これはロボットに可能な2つの状態を定義する: 前進または左折 #define DRIVE_FORWARD 0 #define TURN_LEFT 1 int state = DRIVE_FORWARD; // 0 = 前進 (DEFAULT), 1 = 左折 void setup() { Serial.begin(9600); // これらのセンサピンの設定 pinMode(ultrasonic2TrigPin, OUTPUT); pinMode(ultrasonic2EchoPin, INPUT); // これはモータをArduinoピンに割り当てる leftMotor.attach(12); rightMotor.attach(13); } void loop() { if(digitalRead(2) == HIGH)// これはキルスイッチを検出する { while(1) { leftMotor.write(90); rightMotor.write(90); } } debugOutput(); // これはシリアルコンソールにデバッグメッセージを出力する if(millis() - timeLoopDelay >= loopPeriod) { readUltrasonicSensors(); // これはセンサに指示し、測定した距離を読み込んで保存する stateMachine(); timeLoopDelay = millis(); } } void stateMachine() { if(state == DRIVE_FORWARD) // 障害物を検知しなかった場合 { if(ultrasonic2Distance > 6 || ultrasonic2Distance < 0) // ロボットの前に何もない場合。超音波によってはultrasonicDistanceが負になる 障害物がない場合 { // 前方に駆動する rightMotor.write(180); leftMotor.write(0); } else // 前方に物体がある場合 { state = TURN_LEFT; } } else if(state == TURN_LEFT) // 障害物が検出されたら左旋回 { unsigned long timeToTurnLeft = 500; // 90度旋回するのに約0.5秒かかる。車輪のサイズが例と異なる場合は、これを調整する必要があるかもしれません unsigned long turnStartTime = millis(); // 旋回を開始した時間を保存 while((millis()-turnStartTime) < timeToTurnLeft) // timeToTurnLeftが経過するまで、このループにとどまる { // 左旋回、両方が「180」に設定されているときに旋回することを覚えておいてください。 rightMotor.write(180);leftMotor.write(180); } state = DRIVE_FORWARD; } } void readUltrasonicSensors() { // これは超音波2用のコマンド。 digitalWrite(ultrasonic2TrigPin, HIGH); delayMicroseconds(10); // 少なくとも10マイクロ秒間トリガピンをハイに保つ digitalWrite(ultrasonic2TrigPin, LOW); ultrasonic2Duration = pulseIn(ultrasonic2EchoPin, HIGH); ultrasonic2Distance = (ultrasonic2Duration/2)/29; } // 以下はコンソールでエラーをデバッグするためのもの。 void debugOutput() { if((millis() - timeSerialDelay) > serialPeriod) { Serial.print("ultrasonic2Distance: "); Serial.print(ultrasonic2Distance); Serial.print("cm"); Serial.println(); timeSerialDelay = millis(); } }.
コメント
最新を表示する
NG表示方式
NGID一覧