M1ローバー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 4 | ||||
| × | 1 | ||||
| × | 8 | ||||
| × | 8 | ||||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> |
| |||
| ||||
|
このプロジェクトについて
<図> <図>
屋内ロボットをたくさん作った後、起伏の多い地形を移動できる屋外ロボットを作ることにしました。私はそれを「M1-ロボット」と呼んでいます。
M1-ロボットモーターはArduinoで駆動する4つのDCモーターを簡単に駆動できるので、あらゆるロボットプロジェクトに最適です。これは、より強力なロボットにとって素晴らしい心になると思いました。そこで、オフロードの4輪駆動M1をスクラッチ。
これは単なるRCカーではなく、一連の指示に従って自動運転するようにプログラムしたり、リモートコンピューターから制御したりすることもできます。また、ゲームコントローラーやリモートコントロールカーのようなカスタムジョイスティックを介して使用することもできます。
>
ステップ1:設計 <図>
独自の製品やプロトタイプをデザインするのはとても楽しいですが、実際のサイズのスケールで作成することにした場合は、さらに複雑になります。そこで、強力で簡単な設計ツールとしてGoogle Sketch-up 2017を選択しました。これにより、モデルの設計図をレーザーカットマシンや3Dプリンターにエクスポートできます。
最初の3週間は、ロボットの船体の設計と製作に費やしました。
材料は3mmの木板を1枚もらった。
時間の制約のため、ロードキル全体を船体に詰め込むことで構成された、ロボットのあまり良くない最終的な配線。
私のロボットの適切な名前はM1Roverだと思いました。 M2、M3などのシーケンス名でバージョンを開発する予定なので、キットで設計されているので、ネジを使って組み立てるだけです。
ステップ2:コンポーネントと機能
⦁最大3時間の実行時間!
⦁ArduinoUno、Mega、Nano用に設計されています。
⦁5V-9VDC動作電圧
⦁厚さ3mmの木製シャーシ
⦁直径68mmのホイールL298NデュアルHブリッジモーター/ステッピング
⦁DCモーターに電力を供給する9V電池
⦁Arduinoに電力を供給する9V電池
⦁リアとフロントのLEDライト7
⦁HC-06Bluetoothモジュール
⦁Arduinoセンサーシールドv5.0
⦁超音波トランスデューサーHCSR04
ステップ3:モーターコントローラー <図> <図>
Hブリッジは通常、モーターの速度と方向を制御するために使用されますが、高出力LEDアレイなどの特定の照明プロジェクトの明るさを駆動するなどの他のプロジェクトにも使用できます。
⦁すべての根拠が結びついていることを確認してください。 Arduino、電源、モーターコントローラー。
⦁PWM機能を制御したくない場合は、PWMピンは不要です。
ステップ4:シャーシの組み立て <図> <図>
シャーシはレーザーカッターを使用していくつかの部分で切断されています。前述したように、モデルは組み立てが簡単なキットで作成されているため、以下の手順に従うだけです。
デザインを考慮することも重要であり、RCカーに関してはフロントライトとリアライトを含める必要があります。 M1-Robotの前面に、それぞれが220オームの抵抗に接続されている4つの白色LEDを配置し、背面に、それぞれに220オームの抵抗を備えた2つの赤色LEDを配置しました。これらのLEDは同じアプリケーションで制御できます
ステップ5:回路 <図>
多くの電子部品を同時に制御することにしたときは、各部品の順序に注意する必要があるため、回路は少し注意が必要でした。
<図>⦁Arduinoセンサーシールド5.0
⦁ArduinoUnoR3L298NデュアルHブリッジモーター/ステッピング
⦁DCモーターに電力を供給する9Vバッテリー
⦁LEDライト7(リア2)と(フロント4)
⦁HC-06Bluetoothモジュール
⦁超音波トランスデューサーHCSR04
⦁サーボモーター9g
⦁アクティブブザー
⦁ホイール付き4つのDCモーター
ステップ6:ソフトウェア <図>
M1-Robotのコードを書く際に多くのことを考慮しましたが、GUIソフトウェアを使用すると、ロボットのステータスに関する詳細情報を取得できます。
スターターキットの基本コードは、Bluetooth経由でモバイルまたはラップトップで制御できます:
int frontled =3; // led int Rearled =4; int outPin1 =5; // motor1 int outPin2 =6; // motor1 int outPin4 =11; // motor2 int outPin3 =12; // motor2 char bt =0; // BT int buzzerPin =2; const int pingPin =9; //超音波センサーのトリガーピンconstint echoPin =8; //超音波センサーのエコーピン/ * ----------------------------------------- ------------------------------------- * / void setup(){Serial.begin(9600); pinMode(outPin1、OUTPUT); pinMode(outPin2、OUTPUT); pinMode(outPin3、OUTPUT); pinMode(outPin4、OUTPUT); pinMode(frontled、OUTPUT); pinMode(buzzerPin、OUTPUT);} void loop(){if(Serial.available()> 0){bt =Serial.read(); digitalWrite(frontled、1);長い持続時間、インチ、cm; pinMode(pingPin、OUTPUT); digitalWrite(pingPin、LOW); delayMicroseconds(2); digitalWrite(pingPin、HIGH); delayMicroseconds(10); digitalWrite(pingPin、LOW); pinMode(echoPin、INPUT);期間=pulseIn(echoPin、HIGH);インチ=microsecondsToInches(duration); cm =microsecondsToCentimeters(duration); if(cm> 10){//停止する距離/ * ________________________________________________________________________ * / if(bt =='F')//前方に移動{digitalWrite(outPin1、HIGH); digitalWrite(outPin2、LOW); digitalWrite(outPin3、HIGH); digitalWrite(outPin4、LOW); } else if(bt =='B')//後方に移動{digitalWrite(outPin1、LOW); digitalWrite(outPin2、HIGH); digitalWrite(outPin3、LOW); digitalWrite(outPin4、HIGH); } else if(bt =='S')//停止!! {digitalWrite(outPin1、LOW); digitalWrite(outPin2、LOW); digitalWrite(outPin3、LOW); digitalWrite(outPin4、LOW); } else if(bt =='R')// right {digitalWrite(outPin1、HIGH); digitalWrite(outPin2、LOW); digitalWrite(outPin3、LOW); digitalWrite(outPin4、LOW); } else if(bt =='L')//左{digitalWrite(outPin1、LOW); digitalWrite(outPin2、LOW); digitalWrite(outPin3、HIGH); digitalWrite(outPin4、LOW); } else if(bt =='I')//順方向右{digitalWrite(outPin1、HIGH); digitalWrite(outPin2、LOW); digitalWrite(outPin3、LOW); digitalWrite(outPin4、HIGH); } else if(bt =='G')//前方左{digitalWrite(outPin1、LOW); digitalWrite(outPin2、HIGH); digitalWrite(outPin3、HIGH); digitalWrite(outPin4、LOW); }} else {digitalWrite(buzzerPin、HIGH);遅延(500); digitalWrite(buzzerPin、LOW);遅延(500); }}} long microsecondsToInches(long microseconds){return microseconds / 74/2;} long microsecondsToCentimeters(long microseconds){return microseconds / 29/2;}
Arduinoコードは、すべての電子部品がシリアルポートの注文で動作するようにプログラムされているため、あらゆる種類のコントローラーと互換性があります。そのため、Bluetoothモジュールの送信機/受信機、PC、携帯電話を使用できます。
⦁C#Windowsアプリケーション(スクリーンショットを添付)
ステップ7:パッケージ
スターター
<図>このM1-Robotパッケージには基本的なコンポーネントが含まれ、上部プレートにより、センシング、操作、またはコンピューターハードウェアを簡単に取り付けることができます。センサーをオンボード電源とローバー電源に接続するだけで開始できます。
エクスプローラー
<図>Explorerパッケージは、基本的な屋内および屋外の自律機能を有効にします。IPカメラの代わりに、IPアドレスを介してインターネットに接続された携帯電話のカムを使用しました。
マッピング
Explorerパッケージを使用すると、基本的なGPS追跡が可能になります。もちろん、車両が屋外にあるときは、座標パスをリアルタイムで監視すると非常に便利です。
操作
<図>ロボットアームと2本指の50mmグリッパーで世界と交流します。
重要なヒント:
すべてのサーボが完全に180度回転するわけではありません。多くはそうではありません。機械的な限界がどこにあるかを判断するためのテストを書くことができます。サーボ.writeの代わりにservo.writeMicrosecondsを使用してください。ベース範囲として1000〜2000を使用できるので、これがより好きです。そして、多くのサーボは、600から2400までのその範囲外をサポートします。
したがって、さまざまな値を試して、制限に達したことを示すバズがどこで得られるかを確認してください。次に、書くときだけそれらの制限内にとどまります。これらの制限は、servo.attach(pin、min、max)
を使用するときに設定できます。編集:必要に応じて、アタッチで最小マイクロ秒と最大マイクロ秒を設定してから、servo.writeを使用することができます。 map()を使用して、渡す0〜180度の値をマイクロ秒の値に変更します。
エンドストップに置いておくとすぐになります-大電流を流して急速に加熱します-サーボをこのように長時間ロードすることで、サーボを「調理」するのは非常に簡単です。
真の動きの範囲を見つけて、コードがそれをエンドストップを超えて押し出そうとしないことを確認してください。constraint()Arduino関数はこれに役立ちます:
servo.write(constrain(angle、10、160)); //角度を10..160の範囲に制限します
カスタムパーツとエンクロージャー
m1rover_dxf_hackaday_4o7WTGHUGE.dxf 回路図
製造プロセス