自律ロボットFrankの作成。 パート2





時間が経ち、私は大きな進歩を遂げました。 背景を読んでいない場合は、 フランク自律ロボットの作成へようこそ パート1。」



そこで、最初の部分では、レゴテクニックとハイテックのサーボモーターをベースにしたプラットフォームを組み立てました。 Arduino用の唯一のプロトタイプシールドを捨てて、私は持っていた環境に優しいものの代わりに、鉛なしで、交換と新しいはんだを待っていました。 また、無線通信用のXBeeのペアを自由に使用できましたが、Arduino Dueが対処しなければならなかったので、試してみました。







鉛フリーはんだははんだ付けが非常に難しいことが判明したため、私はFelderに別のS-Sn60Pb39Cu2 2.5%Fluxを注文しました。 違いは驚くばかりです。 すぐに溶けて、接点に完全に重なります。 これにより、ボードの作成が何度も加速されました。



順番に。 最初に、サーボモーターを制御するためのシールドを作成しました。 もちろん、ブレッドボードの実験は、すべてが機能することを確認するために必要ですが、常にうんざりします。 ボードをはんだ付けするために、Arduino Mega用の DFRobot開発ボードを注文しましたが、これはArduino Dueと完全に合いました。 サーボモーターを制御するには、モーターの黄色のワイヤを抵抗を介してArduinoのPWM出力に接続する必要があります。 Arduino Dueには12個のPWM出力があるため、コントローラーを追加せずに非常に多くのサーボモーターを接続できます。 もちろん、実際にはこれを確認する必要があります。 12個のモーターをスムーズに制御するための十分なタイマーがボード上にない可能性があります。 プラスとアースをバッテリーに接続し、バッテリーのアースとArduinoのアースを組み合わせる必要があります。 これについては、以前の記事で詳しく説明しました。 ボードは非常にきれいであることが判明し、XBeeなどの他のコンポーネント用にまだ多くのスペースがありました。







ご覧のとおり、ボードにはサーボモーター用の4つの出力と、外部電源用の独立した入力があります。 それは十分にきれいに見え、接続するのに非常に便利です。







その上ですべてが単純に終わり、XBeeでの実験が始まりました。 当然、それらを箱から取り出して差し込むと、何も機能しませんでした。 インターネットでの検索では、それらを最初に構成する方法に関する記事は数件しかありませんでした。 XBeeを構成するためのソフトウェアは、もちろんWindowsで書かれており、私にはMacがあります。 どうする? 最後に、シリアルインターフェイスを介してこれを行う方法を説明する記事を見つけました。



XBeeを使用すると、ワイヤレスモジュールがスタックする2つの小さなボードがあります。 事前にタブをはんだ付けし、ブレッドボードを使用して、両方のボードをArduinoに接続できます。 ボードの1つにはUSB出力(USB-シリアル)があります。







Frankとラップトップの間で情報のやり取りと交換を計画していたので、シリアルインターフェイスを介してXBeeと通信するための簡単なプログラムを書くことから始めました。 これを行うために、QSerialPortクラスが表示された最新バージョンのQt(5.1)をダウンロードしました。これにより、シリアルポートを介して外部デバイスと通信できます。 このプログラムは今のところ端末のように見えますが、将来は、コンピューターに接続されたXBeeを介してフランクを完全に制御するように拡張します。 現時点でプログラムが行うことは、シリアルポートでメッセージを送受信することだけです。これは手動で入力する必要があります。







ソースコードすべてがQtを使用して記述されているため、どのコンピューターでも動作するはずです。 コンパイルにはQt5.1が必要です。 プロジェクトファイルはQtCreatorによって生成されました。



まず、コンピューターに接続されているXBeeの名前を確認する必要があります。 これを行うには、/ devフォルダー内のデバイスのリストを見て、tty.usbserial-A9014B88に似たものを探します(私に呼ばれています)。 コードでは、行「port = new QSerialPort( "usbserial-A9014B88");」を変更します。 デバイス名(「tty」なし)。



以前にXBeeを構成したことがない場合、「port-> setBaudRate(19200);」を9600に変更するか、この行をコメントアウトする必要があります。この速度はデフォルトでデバイスに登録されているためです。 次に、最初のモジュールを接続してプログラムを実行し、「+++」と入力します。 3つのプラスは、デバイスを「ウェイクアップ」して、さらにチームを作ります。 応答として、「OK」が表示され、ターミナルウィンドウに表示されます。 しばらくすると(まだどれがわからないのか)デバイスがスリープモードになるため、残りのコマンドを遅らせないでください。 再び彼を起こさせるために、3つのプラスを再び送ります。



次に、構成を最初のモジュールに送信します。 「ATID4000、DH0、DL1、MY0、BD4、WR、CN。」 これにより、IDが4000(任意の数が可能)、通信速度が19200、アドレスが「0」に変更されます。 2つのデバイスが互いに通信するには、それらのIDが一致する必要があり、1つのデバイスのアドレスは「0」で、もう1つのデバイスは「1」でなければなりません。 このコマンドを送信した後、7「OK」(または)が返されます。 問題が発生した場合、「OK」の1つは「エラー」になります。



これで、ボードをコンピューターから取り外した後、ボードからチップを取り外して2番目のチップを配置できます。 MY0がMY1 "ATID4000、DH0、DL1、MY1、BD4、WR、CN"であることを除いて、すべて同じコマンドを繰り返します。 現在、両方のデバイスが19200の周波数で動作することを忘れないでください。したがって、プログラムソースコードでさらに接続する場合、接続時にこの速度を指定する必要があります-「port-> setBaudRate(19200);」。



これで、1つのデバイスをコンピューターに接続し(既に接続されているデバイスはそのままにしておくことができます)、もう1つをArduinoに接続したままになります。 私は再びブレッドボードに頼りますが、おそらく今日はブレッドボードにXBeeをはんだ付けします。



接続は非常に簡単です-VSSをArduinoグランドに、VCCを3.3Vに、DOUTをRXに(Arduino Dueの0ポート)、DINをTXに(1ポート)接続する必要があります。 他のボードでは、これらは異なるポートである可能性があります-RXおよびTX(シリアルインターフェイス)を検索するだけです。 次に、お互いにメッセージを送信することを確認する必要があります。



繰り返しますが、それはそれほど単純ではありませんでした。 SofwareSerialはまだArduinoDueに移植されていません。つまり、ハードウェアインターフェイスしか使用できず、インターネット上のほとんどの例は機能しません。 私がXBee Series1を持っているという事実は、インターネット上で利用可能なサンプルの数を最小限に減らしました。 このライブラリとても役に立ちました。 Arduino Dueをお持ちの場合は、バージョン0.4がSoftwareSerialで動作するため、「xbee-arduino-0.3.zip」をダウンロードする必要があります。 Arduinoにライブラリをインストールし(Sketch-> Import Library-> Add Library)、ダウンロードして解凍したものが入っているフォルダを指定します。 その後、(スケッチ->ライブラリのインポート-> XBee)をクリックすると、「#include <XBee.h>」という行が表示されます。



これで、このスケッチをArduinoにアップロードできます。



#include <XBee.h> // XBEE Code XBee xbee = XBee(); unsigned long start = millis(); uint8_t payload[] = { 0, 0 }; Tx16Request tx = Tx16Request(0x4000, payload, sizeof(payload)); void setup() { // XBee Code Serial.begin(19200); xbee.setSerial(Serial); } void loop() { // XBee Code if (millis() - start > 15000) { // Wait for boot and connection to establish xbee.send(tx); } delay(1000); }
      
      







uint8_t payload[] = { 0, 0 };



XBeeが送信するデータ配列です。



Tx16Request tx = Tx16Request(0x4000, payload, sizeof(payload));



-これは情報を送信するためのリクエストです。 0x4000に注意してください-この値は、XBeeペアをセットアップするときに以前に設定したIDに対応する必要があります。



彼がすることは、ASCIIコード「0」の2文字を別のXBeeに送信することだけです。 iFrankを起動すると、空の文字がターミナルウィンドウにどのように表示されるかを確認できます。 これはもちろんそれほど面白くありませんが、目標はモジュール間の接続を確認することでした。 次の記事では、カメラ、コンピューターとArduinoの間の情報交換、ソーラーパネル、Qtの書き込み制御について説明します。



アセンブリは次のようになります。










All Articles