コントローラ自体の購入から、プログラムコードの「アップロード」(以下スケッチ*)、Androidフォンを使用した独自のモデルの管理まで、Arduinoプラットフォームを分析します。 次に、ロボットが移動するパスを選択する独自のアルゴリズムを作成します(次のレッスン)。
ここに、すべてのレッスンが終了した後のこのようなロボットがあります(品質について謝罪します。これはビデオの静止画像です)。
内容
1.部品の購入
2.各ポジションの分析
3.モデルの組み立てとプログラミング
4. Androidに接続する
それでは始めましょう!
1.部品の購入
まず、コントローラーを選択します。 Arduinoの公式Webサイトには多くの選択肢がありますが、同様の完全に互換性のあるFreeduinoモデルを注文することで、この問題を少し節約できます。
1)このプロジェクトでは、UNOモデルが最適です。 すべてのパラメータは基準に完全に適合しています。これは平均サイズであり、さまざまなモジュール、シールドを接続する能力であり、価格は古いモデルほど大きくはありません。 私はここでそれを注文しました 、それは3週間で来ました(ボルゴグラード)、品質は優れており、動作に問題はありませんでした。
2)次に、組み立てに必要な消耗品、シールド、モジュールを注文します。 モーターを制御するには、それに応じて次の詳細が必要です 。 ここで注文したモーターシールド。 また、迅速に配達され、すべてが損傷することなく、うまく梱包されました。
3)電話をロボットに接続するには、 ここで注文したBluetoothモジュールが必要です 。 私は仕事に関する苦情を観察しませんでした。
4)もちろん、これにはすべて、すべてを修正するプラットフォームが必要です。 既製のオプションを使用します 。
これらはすべて私たちのロボットの仕事に不可欠な詳細ですが、私の意見では、Arduinoでの生活と仕事を大幅に簡素化するものがいくつかあります。 プラットフォーム自体に給電するバッテリーを放棄することにし、私は自分自身に小さなパワーバンクを注文しました。 こちらがリンクです。 注文の時点で、コースは約35ルーブルだったので、このレッスンを書いている時点よりもすべての詳細をはるかに安く入手しました。
2.各ポジションの分析
詳細を注文し、通知を待っている間、できるだけ早く注文を受け取るために、各ポジションをより詳細に、実際に作業の目的を調べることができます。
Arduino DuemilanoveのアナログであるFreeduino 2009を注文しました。
仕様:
- マイクロコントローラー:ATmega328(以前のバージョンのボードではATmega168)
- デジタルI / Oポート:14ポート(そのうち6つはPWM信号付き)
- アナログ入力ポート:6ポート
- EEPROM(フラッシュメモリ):32 K(16 K)、そのうち2 Kはブートローダーによって使用されます
- RAM(SRAM):2KB(1KB)
- ROM(EEPROM):1024バイト(512バイト)
- クロック周波数:16 MHz
- PCインターフェース:USB
- USBまたは外部ソースを搭載、ジャンパー経由で選択可能
次に、ロボットモーターの制御に役立つモーターシールドを検討します。
このモジュールには最大4つのモーターを接続でき、各モーターは特定の出力と回転速度をプログラミングできます。 このモジュールにはマイナスが1つあります。これはピンがなく、特殊なケーブルを使用して後続のモジュールを接続できるため、作業が少し複雑になったためです。 ピンを個別に注文してはんだ付けすることもできましたが、モジュールをモーターシールドに直接はんだ付けすることにしました。
ワイヤレス通信は、ボードに直接接続するためのワイヤがバンドルされているBluetoothモジュールによって提供されます。
プラットフォームには、アセンブリ用の完全なセットがあります。 キットにはドライバーも含まれており、モデルを組み立てるのに便利です。
3.モデルの組み立てとプログラミング
Bluetoothモジュールの接続を除き、アセンブリに問題はないはずです。 接続図を以下に添付します。簡単に言えば、次のようになります。
Bluetoothモジュール->コントローラー
VCC-> 5V
GND-> Gnd
TXD-> PIN-0
RXD-> PIN-1
食べ物と土地を混同しないようにしてください。 それは簡単にあなたの詳細を台無しにすることができます。 部品が急激に熱くなり始める場合、それは何かを台無しにしたことを意味します。
プログラミングには、 Arduino開発環境が必要です -ダウンロード。
Arduino IDEは、Arduinoボード用の特別な開発環境です。 その助けを借りて、コードを記述してコンパイルし、ボードに「アップロード」して、デバイスを機能させることができます。 また、この環境には、ボードに追加された個々のモジュールのパフォーマンスをすばやく確認できる多くの既製のスケッチを含むプラグインライブラリが多数あります。 プログラミング言語はC言語ファミリーに非常に似ており、非常に簡単に習得できます。C言語の基本を知っていれば、このプラットフォームのプログラミングにおいて大きなプラスになります。
いつものように、必要なライブラリを接続することから始めます。 ほとんどの場合、AFMotor.hをインターネットで検索する必要があります。このライブラリを見つけるのに問題はないはずです。
#include <AFMotor.h> // #include <SoftwareSerial.h> // Serial
次に、エンジンのオブジェクトを作成します。
AF_DCMotor motor1(1); // 1 Motor Shield AF_DCMotor motor2(2); // 2 Motor Shield
チャネルM1とM2は簡単に決定できます。モジュールを見て、クランプ付きの留め具の近くで、それぞれM1、M2、M3、M4に署名します。
SoftwareSerial BTSerial(0, 1); // RX, TX, // Bluetooth char vbt; // int vL, vR; /* , . . */ int vspd = 200; void setup() { //C Bluetooth BTSerial.begin(9600); // C Serial.begin(9600); // vspeed(255,255); }
次に、 Androidアプリケーションのヘルプが必要です 。そのコマンドは、受け入れて処理します。
このパートでは、プログラムの機能(速度、変数)を簡単に説明します。
void loop() { // if (BTSerial.available()) { // , vbt = (char)BTSerial.read(); // if (vbt == 'F') { vforward(); } // if (vbt == 'B') { vbackward(); } // if (vbt == 'L') { vright(); } // if (vbt == 'R') { vleft(); } // if (vbt == 'G') { vforwardright(); } // if (vbt == 'I') { vforwardleft(); vforwardright(); } // if (vbt == 'H') { vbackwardleft(); } // if (vbt == 'J') { vbackwardright(); } // if (vbt == 'S') { vrelease(); } // 0% if (vbt == '0') { vspeed(0,0); } // 10% if (vbt == '1') { vspeed(25,25); } // 20% if (vbt == '2') { vspeed(50,50); } // 30% if (vbt == '3') { vspeed(75,75); } // 40% if (vbt == '4') { vspeed(100,100); } // 50% if (vbt == '5') { vspeed(125,125); } // 60% if (vbt == '6') { vspeed(150,150); } // 70% if (vbt == '7') { vspeed(175,175); } // 80% if (vbt == '8') { vspeed(200,200); } // 90% if (vbt == '9') { vspeed(225,225); } // 100% if (vbt == 'q') { vspeed(255,255); } } }
次に、各アクションについて説明します。この場合、FORWARDはエンジンを前方に回転させ、BACKWARDはエンジンを反対方向に回転させます。 これらのアクションの組み合わせにより、回転、左右の移動、ロボットの直接的な移動方向からの逸脱が可能になります。
// void vforward() { vspeed(vL,vR); vforwardRL(); } // RL void vforwardRL() { motor1.run(FORWARD); motor2.run(FORWARD); } // void vbackward() { vspeed(vL,vR); vbackwardRL(); } // RL void vbackwardRL() { motor1.run(BACKWARD); motor2.run(BACKWARD); } // void vleft() { vspeed(vL,vR); motor1.run(BACKWARD); motor2.run(FORWARD); } // void vright() { vspeed(vL,vR); motor1.run(FORWARD); motor2.run(BACKWARD); } // void vforwardleft() { if (vL > vspd) { vspeed(vL-vspd,vR); } else { vspeed(0,vR); } vforwardRL(); } // void vforwardright() { if (vR > vspd) { vspeed(vL,vR-vspd); } else { vspeed(vL,0); } vforwardRL(); } // void vbackwardleft() { if (vL > vspd) { vspeed(vL-vspd,vR); } else { vspeed(0,vR); } vbackwardRL(); } // void vbackwardright() { if (vR > vspd) { vspeed(vL,vR-vspd); } else { vspeed(vL,0); } vbackwardRL(); } // void vrelease(){ motor1.run(RELEASE); motor2.run(RELEASE); } // void vspeed(int spdL,int spdR){ if (spdL == spdR) { vL=spdL; vR=spdR; } motor1.setSpeed(spdL); motor2.setSpeed(spdR); }
このビデオでは、プロペラをM1コネクタに接続し、プログラムコードを変更して、「前進」と「後退」の動きのみを残しました。
しかし、このようなロボットは、レッスンの最後に判明しました。
次のパートでは、ロボットのロジックを構築し、距離計を接続する方法を説明します。これを利用して、ロボットが空間をナビゲートします。