初めてのArduinoロボットを作ろう-最高の初心者ガイド!
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
![]() |
| × | 3 | |||
![]() |
| × | 3 | |||
![]() |
| × | 8 | |||
| × | 1 |
必要なツールとマシン
> ![]() |
| |||
![]() |
| |||
|
アプリとオンラインサービス
| ||||
![]() |
| |||
|
このプロジェクトについて
Arduinoの初心者で、最初のロボットを作成する計画がある場合は、ここにチュートリアルがあります。今日、作成するものの画像を見てください。
<図>

このチュートリアルでは、さまざまな機能を備えたArduinoロボットを作成する方法を紹介します。主に、障害物回避、壁フォロワー、迷路ソルバーを備えたスマートフォン制御ロボットなど、さまざまな機能のためのさまざまなプログラムの使用法を学ぶことができます。または、1つの機能だけで作成することもできます。
材料とツール <図>





ステップ2:シャーシを作成する <図>


モーター用に2つの穴を開けます:
<図>
2つのモーターを接続します:
<図>
キャスターホイール用に3つの穴を開けます:
<図>
キャスターホイールを接続します:
<図>
正しい直径を測定してマークを付けた後、モーターを接続するためにボックスの両側に2つの穴を開け、キャスターホイールを接続するために底に3つの穴を開けます。次に、モーターとキャスターを取り付けます。
バッテリー <図>

電池の接続。
<図>
接続図。
<図>
ボックス内の電池を接着します。
<図>
キャスターの上のボックス内に2つの9ボルト電池を取り付けます。次に、それらを並列に配線し、上の図に示すようにスイッチを接続します。
Arduinoとモーターシールドの接続 <図>

Arduinoの上にモーターシールドを取り付けます。
<図>
バッテリーワイヤーを PWR に接続します モーターシールドの端子。
<図>
モーターをモーターシールドに接続します。
<図>
このポートからジャンパーを取り外します。
<図>
Arduinoの上にモーターシールドを接続し、バッテリーの上に置きます。次に、モーターとバッテリーからのワイヤーをモーターシールドに接続します。非常に重要なので、接続する前に接続図を確認してください。
配線手順:
- 左側のモーターをモーターシールドの「M1」に接続します
- 右側のモーターをモーターシールドの「M3」に接続します
- バッテリーからのワイヤーをモーターシールドの「extpwr」に接続します
2つの穴を開けてArduinoに電力を供給します <図>

穴を開ける場所に印を付けます。
<図>
穴を開けます。
<図>
バッテリークリップを9VバッテリーのDCオスジャックに接続します。
<図>
この9ボルト電池を箱の中に入れてください。
<図>
ArduinoのUSBポートとDC入力ポートにアクセスするための2つの穴を開けます。別の9ボルトのバッテリーを取り、バッテリークリップをDCオスジャックアダプターに接続してから、DCオスジャックをArduino DC入力ポートに接続して、Arduinoに電力を供給します。次に、バッテリーをモーターとArduinoの間にボックス内に配置します。
Bluetoothモジュールとスイッチの接続 <図>


<図>

<図>

<図>

<図>

接続図に示すようにBluetoothモジュールをArduinoに接続し、ボックス内に配置します。次に、ボックスの裏側にスイッチを取り付けるための穴を開けて、スイッチを接続します(ここでは、はんだ付けの問題のため、以前に使用したスイッチを変更しました)。
Bluetoothモジュールの配線手順:
- Bluetoothモジュールの「TX」はArduinoの「RX」に移動します
- Bluetoothモジュールの「RX」はArduinoの「TX」に移動します
- Bluetoothモジュールの「VCC」はArduinoの「5v」になります
- Bluetoothモジュールの「GND」はArduinoの「GND」に移動します
- BTモジュールのStateピンとKeyピンは未使用のままです。
全体的な回路図 <図>

センサー超音波取り付け <図>

<図>

<図>

<図>

超音波センサーを取り、小さな「L」字型のプラスチック片を接着して、プラスチックの箱の上に接着します(または、スティックのりがない場合は、両面テープを使用します)。次に、上の回路図に示すようにジャンパー線をに接続します。
超音波センサーの配線手順:
- 超音波センサーの「VCC」はArduinoの「+5」になります
- 超音波センサーの「GND」はArduinoの「GND」に移動します
- 超音波センサーの「Trig」ピンはArduinoの「アナログピン1」に接続されます
- 超音波センサーの「エコー」ピンはArduinoの「アナログピン0」に接続されます
これですべての接続が完了し、プログラミングの時間になりました。
最後のステップ-ArduinoコードとBluetoothアプリの編集 <図>

「最終スケッチ」をアップロードします 「コードセクションに記載されています。エラーが発生した場合は、AFmotorライブラリがインストールされていることを確認してください。
ここで、Arduinoを簡単にプログラムする方法を学びました。ここでは、このロボットを障害物回避ロボット、ウォールフォロワー、およびBluetooth制御として機能させるためのいくつかのプログラムを示しました。そしてついに私はこの3つの機能を一緒に組み合わせました。詳細と情報については、ビデオをご覧ください
Bluetoothアプリ入門
ウォールフォロワーと障害物回避の楽しみ
ここで私のブログにアクセスしてください-robotechmaker.com
ご質問やご提案がございましたら、以下にコメントしてください。
コード
- Bluetooth(制御ロボット)スケッチ
- 最終スケッチ(最終コード)
- 障害物回避スケッチ
- ウォールフォロワースケッチ
Bluetooth(制御ロボット)スケッチ Arduino
/ *作成者:MarceloMoraesこのプロジェクトにはパブリックドメインコードが含まれています。変更は予告なしに許可されます。 * /// Libraries#include// ObjectsAF_DCMotor motorRight(1、MOTOR12_64KHZ); //モーター#1を作成します、64KHz pwmAF_DCMotor motorLeft(3、MOTOR12_64KHZ); //モーター#3、64KHzpwmを作成します//定数とvariablechardataIn ='S'; char determinant; char det; int vel =0; // Bluetooth Stuffvoid setup(){Serial.begin(9600); //シリアルライブラリを9600bpsに設定します//初期化メッセージSerial.println( "ArduinoBymyself --ROVERBot"); Serial.println( "AFモーターテスト!"); //モーターをオフにしますmotorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE); } void loop(){det =check(); // check()subrotineを呼び出してシリアルコードを取得します//シリアルコード分析スイッチ(det){case'F ':// F、前方に移動motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'B':// B、戻るmotorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'L':// L、ホイールを左に移動motorRight.setSpeed(vel); motorLeft.setSpeed(vel / 4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'R':// R、ホイールを右に移動motorRight.setSpeed(vel / 4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す; case'I ':// I、右に曲がるmotorRight.setSpeed(vel / 2); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す; case'J ':// J、右に曲がるmotorRight.setSpeed(vel / 2); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'G':// G、左に曲がるmotorRight.setSpeed(vel); motorLeft.setSpeed(vel / 2); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'H':// H、左に曲がるmotorRight.setSpeed(vel); motorLeft.setSpeed(vel / 2); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'S':// S、モーターを停止しますRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det =check();壊す; }} //シリアルポートから受信したBluetoothコードを取得するcheck(){if(Serial.available()> 0){//シリアルポートに有効なデータがある場合dataIn =Serial.read(); //データをに格納するa varialbe //コードをチェックif(dataIn =='F'){//順方向行列式='F'; } else if(dataIn =='B'){//後方行列式='B'; } else if(dataIn =='L'){//左行列式='L'; } else if(dataIn =='R'){//右行列式='R'; } else if(dataIn =='I'){//右前方行列式='I'; } else if(dataIn =='J'){//後方右行列式='J'; } else if(dataIn =='G'){//左前方行列式='G'; } else if(dataIn =='H'){//後方左行列式='H'; } else if(dataIn =='S'){//行列式を停止='S'; } else if(dataIn =='0'){//速度0 vel =0; } else if(dataIn =='1'){//速度25 vel =25; } else if(dataIn =='2'){//速度50 vel =50; } else if(dataIn =='3'){//速度75 vel =75; } else if(dataIn =='4'){//速度100 vel =100; } else if(dataIn =='5'){//速度125 vel =125; } else if(dataIn =='6'){//速度150 vel =150; } else if(dataIn =='7'){//速度175 vel =175; } else if(dataIn =='8'){//速度200 vel =200; } else if(dataIn =='9'){//速度225 vel =225; } else if(dataIn =='q'){//速度255 vel =255; } else if(dataIn =='U'){//行列式のバックライト='U'; } else if(dataIn =='u'){//バックライトオフ行列式='u'; } else if(dataIn =='W'){//行列式のフロントライト='W'; } else if(dataIn =='w'){//フロントライトオフ行列式='w'; } else if(dataIn =='V'){//行列式でホーン='V'; } else if(dataIn =='v'){//行列式をホーンオフ='v'; } else if(dataIn =='X'){//行列式の追加='X'; } else if(dataIn =='x'){//エクストラオフ行列式='x'; }}行列式を返す;}
最終スケッチ(最終コード) Arduino
/ *作成者:Muhammed Azharvisit --robotechmaker.com * /#include#define trigPin 14 //センサーのピンを定義します#defineechoPin15 // ObjectsAF_DCMotor motorRight(1、MOTOR12_64KHZ); //モーター#1を作成します、64KHz pwmAF_DCMotor motorLeft(3、MOTOR12_64KHZ); //モーター#3、64KHzpwmを作成します//定数とvariablechardataIn ='S'; char determinant; char det; int vel =255; // Bluetooth Stuffvoid setup(){Serial.begin(9600); //シリアルライブラリを9600bpsに設定pinMode(trigPin、OUTPUT); //トリガーピンを出力に設定(音波を送信)pinMode(echoPin、INPUT); //エコーピンを入力に設定(音波を受信)/ /初期化メッセージSerial.println( "Mr.robot"); Serial.println( "仕事のリデイ!"); //モーターをオフにしますmotorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);} void loop(){det =check(); // check()subrotineを呼び出してシリアルコードを取得します//シリアルコード分析スイッチ(det){case'F ':// F、前方に移動motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'B':// B、戻るmotorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'L':// L、ホイールを左に移動motorRight.setSpeed(vel); motorLeft.setSpeed(vel / 4); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'R':// R、ホイールを右に移動motorRight.setSpeed(vel / 4); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す; case'I ':// I、右に曲がるmotorRight.setSpeed(vel / 2); motorLeft.setSpeed(vel); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す; case'J ':// J、右に曲がるmotorRight.setSpeed(vel / 2); motorLeft.setSpeed(vel); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'G':// G、左に曲がるmotorRight.setSpeed(vel); motorLeft.setSpeed(vel / 2); motorRight.run(FORWARD); motorLeft.run(FORWARD); det =check();壊す;ケース 'H':// H、左に曲がるmotorRight.setSpeed(vel); motorLeft.setSpeed(vel / 2); motorRight.run(BACKWARD); motorLeft.run(BACKWARD); det =check();壊す;ケース 'S':// S、モーターを停止しますRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(RELEASE); det =check();壊す; case'm '://ウォールフォロワーロボット用。 motorRight.setSpeed(vel); //モーターの速度を0〜255の範囲で設定しますmotorLeft.setSpeed(vel);長い期間、距離; //スキャンを開始しますdigitalWrite(trigPin、LOW); delayMicroseconds(2); //センサーの動作を成功させるには、遅延が必要です。 digitalWrite(trigPin、HIGH); delayMicroseconds(10); //この遅延も必要です! digitalWrite(trigPin、LOW);期間=pulseIn(echoPin、HIGH);距離=(duration / 2)/ 29.1; //距離をセンチメートルに変換します。 if(distance <30)/ *壁との距離を維持する必要がある* / {Serial.println( "壁が検出されました!"); Serial.println( "壁の追跡を開始しました"); Serial.println( "回転! "); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FORWARD); motorLeft.run(RELEASE); delay(500); // 1秒待ちます} else {Serial.println( "壁が検出されませんでした。向きを変えます");遅延(15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(FORWARD); } 壊す;ケース 'b'://障害物回避ロボットmotorRight.setSpeed(vel); //モーターの速度を0〜255の範囲で設定しますmotorLeft.setSpeed(vel);長い期間、距離; //スキャンを開始しますdigitalWrite(trigPin、LOW); delayMicroseconds(2); //センサーの動作を成功させるには、遅延が必要です。 digitalWrite(trigPin、HIGH); delayMicroseconds(10); //この遅延も必要です! digitalWrite(trigPin、LOW);持続時間=pulseIn(echoPin、HIGH); Adistance =(Aduration / 2)/ 29.1; //距離をセンチメートルに変換します。 if(Adistance <25)/ * 25センチ先の障害物がある場合は、次の手順を実行します。* / {Serial.println( "Close Obstacledetected!"); Serial.println( "Obstacle Details:"); Serial.print ( "ロボットからの距離は"); Serial.print(距離); Serial.print( "CM!"); //距離をセンチメートルで印刷します。Serial.println( "障害物は、距離が近いため脅威と宣言されています。 "); Serial.println("回転! "); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(BACKWARD); //前方に障害物がある限り回転します。 motorRight.run(FORWARD);} else {Serial.println( "障害物は検出されませんでした。今後");遅延(15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); //前方に障害物がない場合は、前進してください! motorLeft.run(FORWARD); } 壊す; }} //シリアルポートから受信したBluetoothコードを取得するcheck(){if(Serial.available()> 0){//シリアルポートに有効なデータがある場合dataIn =Serial.read(); //データをに格納するvarialbe //コードをチェックif(dataIn =='F'){//順方向行列式='F'; } else if(dataIn =='B'){//後方行列式='B'; } else if(dataIn =='L'){//左行列式='L'; } else if(dataIn =='R'){//右行列式='R'; } else if(dataIn =='I'){//右前方行列式='I'; } else if(dataIn =='J'){//後方右行列式='J'; } else if(dataIn =='G'){//左前方行列式='G'; } else if(dataIn =='H'){//後方左行列式='H'; } else if(dataIn =='S'){//行列式を停止='S'; } else if(dataIn =='0'){//速度0 vel =0; } else if(dataIn =='1'){//速度25 vel =25; } else if(dataIn =='2'){//速度50 vel =50; } else if(dataIn =='3'){//速度75 vel =75; } else if(dataIn =='4'){//速度100 vel =100; } else if(dataIn =='5'){//速度125 vel =125; } else if(dataIn =='6'){//速度150 vel =150; } else if(dataIn =='7'){//速度175 vel =175; } else if(dataIn =='8'){//速度200 vel =200; } else if(dataIn =='9'){//速度225 vel =225; } else if(dataIn =='b'){//行列式の追加='b'; } else if(dataIn =='m'){//行列式の追加='m'; }}行列式を返す;}
障害物回避スケッチ Arduino
/ *作成者:Muhammed Azharvisit --robotechmaker.com * /#include#define trigPin 14 //センサーのピンを定義します#defineechoPin 15 int vel =255; //ロボットの速度// ObjectsAF_DCMotormotorRight(1、MOTOR12_64KHZ); //モーター#1を作成します、64KHz pwmAF_DCMotor motorLeft(3、MOTOR12_64KHZ); //モーター#3を作成、64KHz pwmvoid setup(){Serial.begin(9600); //シリアルライブラリを9600bpsに設定pinMode(trigPin、OUTPUT); //トリガーピンを出力に設定(音波を送信)pinMode(echoPin、INPUT); //エコーピンを入力に設定(音波を受信)/ /初期化メッセージSerial.println( "Mr.robot"); Serial.println( "仕事のリデイ!"); //モーターをオフにしますmotorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);} void loop(){//障害物回避ロボットmotorRight.setSpeed(vel); //モーターの速度を0〜255の範囲で設定しますmotorLeft.setSpeed(vel);長い期間、距離; //スキャンを開始しますdigitalWrite(trigPin、LOW); delayMicroseconds(2); //センサーの動作を成功させるには、遅延が必要です。 digitalWrite(trigPin、HIGH); delayMicroseconds(10); //この遅延も必要です! digitalWrite(trigPin、LOW);期間=pulseIn(echoPin、HIGH);距離=(duration / 2)/ 29.1; //距離をセンチメートルに変換します。 if(distance <25)/ * 25センチメートル先に障害物がある場合は、次の手順を実行します。* / {Serial.println( "Close Obstacledetected!"); Serial.println( "Obstacle Details:"); Serial.print ( "ロボットからの距離は"); Serial.print(distance); Serial.print( "CM!"); //距離をセンチメートルで印刷します。Serial.println( "障害物は距離が近いため脅威と宣言されています。 "); Serial.println("回転! "); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorLeft.run(BACKWARD); //前方に障害物がある限り回転します。 motorRight.run(FORWARD);} else {Serial.println( "障害物は検出されませんでした。今後");遅延(15); motorRight.setSpeed(vel); motorLeft.setSpeed(vel); motorRight.run(FORWARD); //前方に障害物がない場合は、前進してください! motorLeft.run(FORWARD); }}
ウォールフォロワースケッチ Arduino
/ *作成者:Muhammed Azharvisit --robotechmaker.com * /#include#define trigPin 14 //センサーのピンを定義します#defineechoPin 15 int vel =255; //ロボットの速度// ObjectsAF_DCMotor motorRight(1、MOTOR12_64KHZ); //モーター#1を作成します、64KHz pwmAF_DCMotor motorLeft(3、MOTOR12_64KHZ); //モーター#3を作成、64KHz pwmvoid setup(){Serial.begin(9600); //シリアルライブラリを9600bpsに設定pinMode(trigPin、OUTPUT); //トリガーピンを出力に設定(音波を送信)pinMode(echoPin、INPUT); //エコーピンを入力に設定(音波を受信)/ /初期化メッセージSerial.println( "Mr.robot"); Serial.println( "仕事のリデイ!"); //モーターをオフにしますmotorRight.setSpeed(0); motorLeft.setSpeed(0); motorRight.run(RELEASE); motorLeft.run(RELEASE);} void loop(){//ウォールフォロワーロボット用。 motorRight.setSpeed(vel); //モーターの速度を0〜255の範囲で設定しますmotorLeft.setSpeed(vel);長い期間、距離; //スキャンを開始しますdigitalWrite(trigPin、LOW); delayMicroseconds(2); //センサーの動作を成功させるには、遅延が必要です。 digitalWrite(trigPin、HIGH); delayMicroseconds(10); //この遅延も必要です! digitalWrite(trigPin、LOW);期間=pulseIn(echoPin、HIGH);距離=(期間/ 2)/ 29.1; //距離をセンチメートルに変換します。 if(distance <30)/ *壁との距離を維持する必要があります* / {Serial.println( "壁が検出されました!"); Serial.println( "壁をたどり始めました"); Serial.println( "Turning!"); motorRight.setSpeed(vel); motorLeft.setSpeed(0); motorRight.run(FORWARD); motorLeft.run(RELEASE); delay(500); // 1秒待ちます} else {Serial.println( "壁が検出されませんでした。向きを変えます"); delay(15); motorRight.setSpeed(0); motorLeft.setSpeed(vel); motorRight.run(RELEASE); motorLeft.run(FORWARD); }}
回路図

製造プロセス