工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

WiDC:Wi-Fi制御のFPVロボット

コンポーネントと消耗品

>
Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
Arduinoプロトシールド
× 1
ホイール付きDCモーター
× 1
Hブリッジ
× 1

アプリとオンラインサービス

>
Autodesk Fusion 360
Arduino IDE

このプロジェクトについて

<図> <図> <図>

遠隔操作ロボットを使用して、周囲を探索したり、アクセスできない場所に到達したり、スパイしたり、写真を撮ったり、映画を作ったり、ビデオを放送したりするのはどうですか?このチュートリアルでは、これらすべての目的のために費用をかけないようにする方法を説明します!

このチュートリアルは、以前のチュートリアル(https://www.instructables.com/id/Wi-fi-Controlled-FPV-Rover-Robot-with-Arduino-ESP8/)を改良したもので、より高速なホームを提示します-ロボットを作りました。 ArduinoUnoとESP8266Wi-fiモジュールの2つのDCモーターを使用して、Wi-Fiネットワーク経由でリモート制御される二輪ロボットを設計する方法を示しています。

ロボットは、HTMLで設計されたインターフェイスを使用して、通常のインターネットブラウザから制御できます。 Androidスマートフォンは、ロボットから制御インターフェースにビデオとオーディオをブロードキャストするために使用されていない可能性があります。

前のチュートリアルと同様に、通常のツール(3Dプリンター、レーザーカッター、CNCルーターは不要)を使用して、ロボットプロジェクト用の低コストのフレームを設計および構築する方法を示します。

ここで使用されているコンポーネントは、その目的に合わせて最適化されていない可能性があることに気付くかもしれません。たとえば、Arduino + ESP8266の組み合わせの代わりにNodeMCUを使用できます。カメラ付きのRapsberryPiはスマートフォンに取って代わり、モーターも制御します。 Androidスマートフォンをロボットの「頭脳」として使用することも可能です。それは本当です...

このチュートリアルは、私が参加している別のプロジェクト、Joy Robot(https://hackaday.io/project/12873-rob-da-alegria-joy-robotまたはhttps://www.hackster.io/igorF2/)から派生したものです。 robo-da-alegria-joy-robot-85e178)であり、ここでは簡単にするために同じハードウェアを使用しました。 Arduino Unoが選ばれたのは、誰にとってもアクセスしやすく使いやすいため、シンプルなシールドを設計したかったからです。私たちの元のプロジェクトでは、wheはいくつかのサーボとLEDマトリックスを制御し、ESPとインターフェースします。スマートフォンは実際には他のアプリケーションも実行するタブレットに置き換えられています。以下のリンクで、そのロボットに関連する他のチュートリアルを見つけることができます:

Arduino Unoを使用したLEDマトリックスアレイの制御:

https://www.instructables.com/id/Controlling-a-LED-Matrix-Array-With-Arduino-Uno/

Wi-Fiブラウザ制御サーボモーター:

https://www.instructables.com/id/Wi-Servo-Wi-fi-Browser-Controlled-Servomotors-with/

このガイドは、ニーズに合わせて調整され、その形状または制御インターフェースが変更される場合があります。

この他のチュートリアルでは、Blynkアプリを使用してスマートフォンからロボットを制御する方法を紹介します。チェックしてください:

https://www.hackster.io/igorF2/wi-fi-driven-robot-using-wemos-d1-esp8266-and-blynk-464198

ステップ1:ツール

<図> <図> <図> <図> <図> <図> <図>

このプロトタイプの作成には、次のツールが使用されました。

ツール:

  • ハンドソー(アクリルシートの切断用)
  • ドライバー(ボルトとナットを配置するため)
  • 定規(モデルの寸法を測定するため)
  • 万能ナイフ(構造物を切断して穴を開けるため)
  • ボール盤(ネジを取り付けるためのアクリルの穴あけに使用)
  • サンドペーパー(ラフエッジを滑らかにするため)
  • はんだごて(モーター端子のはんだ付け用)
  • コンピューター(Arduinoコードのコンパイルとアップロード用)

これらのツールは、ロボットの機械的構造の作成、ロボットの組み立て、および電子部品の接続に使用されました。独自の構造を構築する代わりに構造を購入することを選択した場合、一部のツールは必要ありません。

メーカースペースで利用できるツールによっては、他の機器(3Dプリンターやレーザーカッターなど)を使用することもあります。

ステップ2:機械的構造と材料

<図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図> <図>

機械的構造には次の材料が使用されました:

機械材料:

  • 2mmアクリルシート
  • ホイール付きDCギアモーター(x2)
  • 30mmキャスターホイール(x1)
  • M2 x 10mmネジ(x5)
  • M2 x 1.5mmナット(x5)
  • M3 x 10mmネジ(x9)
  • M3 x 10mmネジ(x9)
  • M3 x 40 mmネジ(x4)
  • M3 x 1.5mmナット(x12)
  • 5/32 "x 1"ネジ(x4)
  • 5/32 "ナット(x12)
  • ユニバーサル電話ホルダー
  • スチールアングル「L」字型ブラケット(30 x 30 mm)(x4)

ステップ3:電子部品

<図> <図> <図> <図> <図> <図> <図>

このロボットで使用される次の電子部品:

•ArduinoUno(購入/購入)

•ESP8266(購入)

•Protoshield(よりコンパクトなバージョンの場合)または通常のブレッドボード(購入)

•1kオームの抵抗(x2)

•10kオームの抵抗(x1)

•ホイール付きDCギアモーター(x2)(購入)

•Hブリッジモジュール(購入)

•いくつかのジャンパー線

•5VUSBパワーバンク

お気に入りのeコマースストアですべてのコンポーネントをオンラインで簡単に見つけることができます。

このチュートリアルの紹介で強調したように、コンポーネントの選択は、私が設計した他のプロジェクトから導き出されたものであり、たとえば、別のマイクロコントローラーを使用して最適化することができます。

ステップ4:構造を設計する

<図> <図> <図> <図>

まず、ロボットの機械的構造を設計する必要がありました。独自のカスタム構造を構築したくない場合は、完全な構造をオンラインで購入することもできます(オンラインで利用できるロボットキットはたくさんあります)。この場合、ステップ6に進むことができます。このチュートリアルでは、モーターやその他のコンポーネントを取り付けるための低コストのアクリルフレームを設計しました。このチュートリアルで紹介する構造は、Fusion 360 CADソフトウェアを使用して設計された3Dであり、通常のツールで構築されています(3Dプリンター、レーザーカッター、CNCルーターは必要ありません)。以下で説明するのと同じ原則を使用して、ニーズに合ったカスタム構造を設計できます。

まず、構造の配置を決めるために、主要コンポーネントの3Dモデルを作成する必要がありました。それらのいくつかは、GrabCAD Comunity Library( https://grabcad.com/library )からダウンロードされました。 ):

  • Arduino Uno(https://grabcad.com/library/arduino-uno-13)
  • ギアモーター(https://grabcad.com/library/bomotor-1)
  • Hブリッジ(https://grabcad.com/library/motor-driver-l9110-1)
  • パワーバンク(https://grabcad.com/library/power-bank-7)
  • ユニバーサル電話ホルダー(https://grabcad.com/library/universal-phone-holder-for-the-gopro-accessories-1)

電子部品は平面に配置されていたので、ロボットに必要なフットプリントを把握できました。その後、安定した構造を作るためにモーターとホイールの位置を選択する必要がありました。

その位置に基づいて、いくつかのブラケットを使用して接続された3つのプレート(ベースプレートと2つのサイドプレート)で構成される主要な構造が設計されました。

base.pdf base.svg

ステップ5:構造の構築と組み立て

<図> <図> <図> <図> <図> <図> <図> <図> <図> <図>

ベースの構造の構築は、次のステップに分かれています。 1。 2D図面の寸法に従ってアクリルベースをカットします: これは、レーザーカッター(アクセスできる場合)を使用するか、私の場合のように通常のツールを使用して行うことができます。

まず、モデルの寸法をアクリルシートに転写する必要があります。通常のプリンターを使用して2D図面を粘着紙に印刷し、適切な寸法に紙をカットし、そのマスクをアクリルの表面に適用します。万能ナイフを使用し、定規またははかりを使用して、アクリルをカットします。直線。シートを完全にカットする必要はありません。スコアを付けて、後でカットするトラックを作成します。アクリルを平らな面に置き、クランプで所定の位置に保持し、シートが2つに割れるまで圧力をかけます。すべてのカットが完了するまで、このプロセスを繰り返します。その後、サンドペーパーを使用して粗いエッジを滑らかにすることができます。ハンドソーを使用してアクリルをカットすることもできます。 2。 2D図面に示されている位置にドリルで穴を開けます: 2D図面(マスクに表示)に示されている位置にボール盤で穴を開けます。アクリルは比較的簡単に穴を開けることができます。したがって、ボール盤を廃棄しない場合は、カッターナイフなどの鋭利な工具を使用して手動で穴を開けることができます。また、ネジのサイズに合わせて小さな穴を拡大するために使用することもできます。マスクを外すとベースの準備が整います。

3。 3D図面に従って、ネジとナットでコンポーネントを取り付けます。 ビデオに従ってネジとナットでコンポーネントを取り付ければ、構造を準備できます。 M3ネジはブラケットとDCモーターの取り付けに使用されます。電子部品の取り付けにはM2ネジを使用し、前輪とスマートフォンクリップの取り付けには5/32 "ネジを使用しました。次に、休憩を取り、次の手順で回路の組み立てを開始します...

base.pdf

ステップ6:電子機器の組み立て

<図> <図> <図>

ここで提案する回路は、メインコントローラーとしてArduino Unoを使用し、Wi-Fi通信用にESP8266とインターフェイスします。Arduinoは、最大2つのモーターを制御できるH-brige駆動回路を使用してDCモーターを制御し、回転します。それらは両方向に独立しています。

パワーバンクを使用して電子機器に電力を供給し、ArduinoのUSBポートに直接接続しました。これは、Arduinoに電力を供給する簡単な方法です。充電が簡単で、簡単に交換でき、安全な5V電圧を提供します。

回路図に従ってすべてのコンポーネントを接続します。 ESP8266モジュールを接続するには、ジャンパー線が必要です。ESP8266モジュールは、プロトボードに対応していない、HブリッジおよびDCモーターです。プロトシールド(よりコンパクトな回路用)、通常のブレッドボードを使用するか、独自のArduinoシールドを設計することができます。

ESP8266-1はブレッドボードに対応していないことに気付くでしょう。いくつかのジャンパー線を使用して接続されますが、構造には接続されません。

USBケーブルをArduinoのボードに接続し、次の手順に進みます。

wiDC_Esquem_C3_A1tico.pdf wiDC.fzz wiDC_bb.pdf

ステップ7:Arduinoコード

最新のArduinoIDEをインストールします。 ESP-8266モジュールとの通信やモーターの制御にライブラリは必要ありませんでした。ESP8266のボーレートを確認し、コードに正しく設定してください。Arduinoコード(WiDC.ino)をダウンロードし、XXXXXをwifiルーターSSIDに置き換えます。ルーターのパスワードによるYYYYY。 ArduinoボードをコンピューターのUSBポートに接続し、コードをアップロードします。

USBケーブルをArduinoのボードに接続し、次の手順に進みます。

  // include libraries#include  SoftwareSerial esp8266(3、2); // RXピン=3、TXピン=2 //変数の定義#defineDEBUG true //シリアルportint状態=5でESP8266とArduino間のメッセージを表示します。 //ロボットの初期状態を定義します(5 =スタンバイ)//モーターピンを定義しますconst int motor1Pin1 =5; const int motor1Pin2 =6; const int motor2Pin1 =9; const int motor2Pin2 =10; //モーター速度を定義しますintmotorSpeed =150; //モーター速度(PWM)// ***** // SETUP // ***** void setup(){//ピンモードを設定pinMode(motor1Pin1、OUTPUT); pinMode(motor1Pin2、OUTPUT); pinMode(motor2Pin1、OUTPUT); pinMode(motor2Pin2、OUTPUT); //通信を開始しますSerial.begin(9600); esp8266.begin(9600); sendData( "AT + RST \ r \ n"、2000、DEBUG); //モジュールをリセットsendData( "AT + CWMODE =1 \ r \ n"、1000、DEBUG); //ステーションモードを設定sendData( "AT + CWJAP =\" XXXXX \ "、\" YYYYY \ "\ r \ n"、2000、DEBUG); // wi-fiネットワークに接続します(XXXXXをWi-FiルーターSSIDに置き換え、YYYYYをパスワードdelay(5000); //接続を待ちますsendData( "AT + CIFSR \ r \ n"、1000、DEBUG); / / show IP address sendData( "AT + CIPMUX =1 \ r \ n"、1000、DEBUG); //複数の接続を許可するsendData( "AT + CIPSERVER =1,80 \ r \ n"、1000、DEBUG); / /ポート80でWebサーバーを起動します} // ********* // MAIN LOOP // ********* void loop(){if(esp8266.available())// verify着信データ{if(esp8266.find( "+ IPD、"))//メッセージがある場合{String msg; esp8266.find( "?"); //メッセージを探すmsg =esp8266.readStringUntil( '' ); //メッセージ全体を読み取るStringcommand =msg.substring(0、3); //最初の3文字=command Serial.println(command); //前に進むif(command =="cm1"){state =1;} //後方に移動if(command =="cm2"){state =2;} //右に曲がるif(command =="cm3"){state =3;} //左に曲がるif(com mand =="cm4"){状態=4; } //何もしないif(command =="cm5"){state =5; }}} //状態1:前進if(state ==1){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態2:後方に移動if(state ==2){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態3:右に移動if(state ==3){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態4:左に移動if(state ==4){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態5:何もしないif(state ==5){digitalWrite(motor1Pin1、LOW); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); digitalWrite(motor2Pin2、LOW); }} // ******************* //補助関数// *******************文字列sendData (文字列コマンド、const intタイムアウト、ブールデバッグ){文字列応答=""; esp8266.print(コマンド); long int time =millis(); while((time + timeout)> millis()){while(esp8266.available()){char c =esp8266.read();応答+ =c; }} if(debug){Serial.print(response); }応答を返す;}  

コードの説明:

このコードは、ArduinoとESP8266間の通信に1つのシリアルポートを使用し、Arduinoとコンピューター間の通信に別のシリアルポートを使用します。 Arduino Unoにシリアルポートが1つしかない場合は、SoftwareSeialライブラリを使用して、デジタルピン2と3を使用してセカンダリポートを作成しました。

  // include libraries#include  SoftwareSerial esp8266(3、2); // RXピン=3、TXピン=2  

セットアップ中に、両方のシリアル通信を開始し、それらのボーレートを定義する必要があります(1つはArduinoとシリアルモニターの間で、もう1つはESP8266の速度に一致します)。 ESP8266が9600kbpsに設定されていることに注意してください。デフォルトでは、これらのモジュールのほとんどは115200kbpsで提供されますが、SoftwareSerialライブラリはその速度で動作できないため、ボーレートを変更する必要があります。私にとっては9600kbpsで問題なく動作しました。

このプロジェクトでは、Wi-Fiモジュールとの通信に特定のライブラリを使用しませんでした。代わりに、次の通常のATコマンド(ESP8266のデフォルトファームウェアで定義されている一連の命令)のみが使用されました。

  • AT + RST:ESP8266モジュールをリセット
  • AT + CWMODE:モジュールをステーションモードまたはアクセスポイントに設定します
  • AT + CWJAP:SSIDとパスワードで指定されたWi-Fiネットワークに接続します
  • AT + CIPMUX:複数の接続または単一の接続用にモジュールを設定します
  • AT + CIPSERVER:指定されたポートでWebサーバーを起動します//通信を開始します
  Serial.begin(9600); esp8266.begin(9600); sendData( "AT + RST \ r \ n"、2000、DEBUG); //モジュールをリセットsendData( "AT + CWMODE =1 \ r \ n"、1000、DEBUG); //ステーションモードを設定sendData( "AT + CWJAP =\" XXXXX \ "、\" YYYYY \ "\ r \ n"、2000、DEBUG); // wi-fiネットワークに接続します(XXXXXをWi-FiルーターSSIDに置き換え、YYYYYをパスワードdelay(5000); //接続を待ちますsendData( "AT + CIFSR \ r \ n"、1000、DEBUG); / / show IP address sendData( "AT + CIPMUX =1 \ r \ n"、1000、DEBUG); //複数の接続を許可するsendData( "AT + CIPSERVER =1,80 \ r \ n"、1000、DEBUG); / /ポート80でWebサーバーを起動します 

補助関数(sendData)は、データの送信(ArduinoからESP8266へ)、シリアルモニターでの応答の読み取りと表示に使用されます。

  String sendData(String command、const int timeout、boolean debug){String response =""; esp8266.print(コマンド); long int time =millis(); while((time + timeout)> millis()){while(esp8266.available()){char c =esp8266.read();応答+ =c; }} if(debug){Serial.print(response); } return response;}  

上記のコードを使用すると、Arduinoはモジュールをリセットし、ネットワークに参加し、接続をしばらく待ってから、そのIPアドレスを表示してWebサーバーを起動します。その後、メインループが開始され、マイクロコントローラーはコマンドを待機します。

  void loop(){if(esp8266.available())//受信データを確認する{if(esp8266.find( "+ IPD、"))//メッセージがある場合{String msg; esp8266.find( "?"); //メッセージを探しますmsg =esp8266.readStringUntil( ''); //メッセージ全体を読み取るStringcommand =msg.substring(0、3); //最初の3文字=コマンドSerial.println(command); //前に進むif(command =="cm1"){state =1; } //後方に移動if(command =="cm2"){state =2; } //右に曲がるif(command =="cm3"){state =3; } //左に曲がるif(command =="cm4"){state =4; } //何もしないif(command =="cm5"){state =5; }}}  

5つの可能なコマンド(cm1からcm5)が定義されました。 Arduinoがこれらのコマンドのいずれかを受信すると、5つの可能な状態(前進、後退、右移動、左移動、待機)のいずれかになり、別のコマンドを受信するまでその状態を継続します。

各状態は、モーターピンの信号を定義します。ピンを0Vに設定する場合はdigitalWrite(pin、LOW)を使用し、ピンをオンにする場合はanalogWrite(pin、motoSpeed)を使用しました。 analogWriteを使用すると、モーターの速度を変更したり、ロボットの動きを遅くしたりすることができました。

  // STATE 1:前に進むif(state ==1){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態2:後方に移動if(state ==2){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態3:右に移動if(state ==3){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態4:左に移動if(state ==4){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態5:何もしないif(state ==5){digitalWrite(motor1Pin1、LOW); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); digitalWrite(motor2Pin2、LOW); }  

モーターは3〜6Vで動作することに注意してください。 5V電源を使用したら、モーターの平均電圧(PWMを使用)を3〜5Vに変調して、速度を変更することができます。ロボットの速度を微調整することはできません

WiDC.ino

ステップ8:Webベースの制御インターフェース

<図> <図>

ロボットの制御用にhtmlインターフェースが設計されました。interface.rarをダウンロードして、すべてのファイルを特定のフォルダーに抽出します。次に、Firefoxで開きます。そのインターフェイスでテキストボックスフォームを使用して、ESPモジュールおよびビデオ/オーディオサーバー(Android IP Webcamアプリから)のIPアドレスを入力します。テストがありますが、noterコマンドを受信するまでロボットを回転させます。キーボードの矢印キーは、ロボットを前後に動かしたり、左右に回転させたりするために使用されます。Androidスマートフォンを使用して、ロボットから制御インターフェースにビデオとオーディオをブロードキャストしました。アプリはGooglePlayストア(https://play.google.com/store/apps/details?id=com.pas.webcam)にあります。インストールして、次の手順に進みます。

HTMLコードの説明:

htmlインターフェースには2つの区分があります。1つはオーディオとビデオ(Android IP Webcamサーバーから)用で、もう1つはコマンド用です。

オーディオとビデオの分割には、テキストボックスが下部にあるフォームがあります。これは、WebカメラサーバーのIPアドレスを指定してロードするための入力として使用されます。標準のIPアドレス(192.168.0.5)が付属していますが、使用すると別のIPを入力できます。ビデオとオーディオは、テキストボックスの下のオブジェクトに読み込まれます。

  
IP Webcam( IP):

もう1つの部門には、テキストボックス付きの別のフォームがあり、ユーザーはESP8266のIPアドレスを通知できます。

  
Arduino IPアドレス:

キーボードの矢印キーを押したままにして、ロボットを動かします

JavaScriptは、インターフェースの処理とArduinoへのデータの送信に使用されます。これらのスクリプトはさまざまなファイルにコード化され、htmlヘッダーに追加されます。

     コントロールインターフェイス     

Javascriptの説明:

関数(readUrlAV)は、htmlフォームからIPアドレスを読み取り、それらを「ビデオ」オブジェクトと「オーディオ」オブジェクトにロードするために使用されます。

  function readUrlAV(form){TextVar =form.inputbox.value; VideoVar ="http://" + TextVar + ":8080 / video"; AudioVar ="http://" + TextVar + ":8080 / audio.opus"; document.getElementById( "video")。setAttribute( 'data'、VideoVar); document.getElementById( "audio")。setAttribute( 'data'、AudioVar);}  

スクリプトはキーボードを定期的に読み取り、ユーザーが任意のキーを押すのを待ちます。ユーザーがいずれかの矢印キー(左='37'、上='38'、右='39 'または'下 '=40)を押すと、指定されたIPに対してコマンド( "cm1"から "cm4")が送信されます。住所。同じコマンドが何度も繰り返されるのを防ぐラッチ機能があることに注意してください。キーが押されたときにのみデータが転送されます。

  varラッチ=false; document.onkeydown =checkKeyDown; function checkKeyDown(e){e =e || window.event; if(e.keyCode =='38'){//上矢印if(latch ==false){TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $ .get(ArduinoVar、{"cm1":1000}); {接続:閉じる};ラッチ=true; }} else if(e.keyCode =='40'){//下矢印if(latch ==false){TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $ .get(ArduinoVar、{"cm2":1000}); {接続:閉じる};ラッチ=true; }} else if(e.keyCode =='37'){//左矢印if(latch ==false){TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $ .get(ArduinoVar、{"cm3":1000}); {接続:閉じる};ラッチ=true; }} else if(e.keyCode =='39'){//右矢印if(latch ==false){TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $ .get(ArduinoVar、{"cm4":1000}); {接続:閉じる};ラッチ=true; }}}  

矢印キーを離すと、doNothing関数が実行され、コマンド「cm5」(モーターを停止)が送信され、ラッチがリセットされ、インターフェイスがさまざまなコマンドを送信できるようになります。

  document.onkeyup =checkKeyUp; function checkKeyUp(e){e =e || window.event; if((e.keyCode =='38')||(e.keyCode =='40')||(e.keyCode =='37')||(e.keyCode =='39')){ setTimeout(doNothing、200); }} function doNothing(){TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $ .get(ArduinoVar、{"cm5":1000}); {接続:閉じる};ラッチ=false;}  
interface.rar

ステップ9:使用法

Arduinoを再起動すると、Wi-Fiネットワークに自動的に接続しようとします。シリアルモニターを使用して、接続が成功したかどうかを確認し、ルーターによってESP-8266に割り当てられたIPを取得します。インターネットブラウザ(Firefox)でhtmlファイルを開き、テキストボックスでこのIPアドレスを通知します。また、他の方法を使用して、ルーターがデバイスに割り当てたIPアドレスを確認することもできます。 Arduino Unoをコンピューターから切断し、パワーバンクに接続します。再び接続するのを待ちます。ロボットに接続されたスマートフォンでIPWebcamアプリを起動します。コントロールインターフェイスにビデオ/オーディオIPを入力し、サーバーに接続すると、準備が整います。送信中の遅延を減らすために、アプリのビデオの解像度を下げる必要がある場合があります。キーボアの矢印ボタンをクリックしたままにして、ロボットを回転させたり、前後に動かしたりして、環境を探索して楽しんでください。

ロボットが開ループで実行されていることに注意してください。このように、まっすぐ進むことは非常に困難です。モーター、アライメントなどのわずかな違いにより、累積偏差が発生します。

ロボットは、与えられたコマンド( "cm1"から "cm4")を受け取ると動き始め、別のコマンド( "cm1"から "cm5")を受け取るまでその状態を維持します。 ESP8266が一部のメッセージを失うことがあり、それが問題を引き起こす可能性があります。たとえば、「cm5」コマンドが失われた場合、矢印キーを離した後でもロボットは動きます。私はまだこの問題に取り組んでいます。この種の問題を回避するために、コマンドの解釈方法を自由に変更してください。

コード

  • Arduinoコード
  • インターフェース
Arduinoコード Arduino
 // include libraries#include  SoftwareSerial esp8266(3、2); // RXピン=3、TXピン=2 //変数の定義#defineDEBUG true //シリアルportint状態=5でESP8266とArduino間のメッセージを表示します。 //ロボットの初期状態を定義します(5 =スタンバイ)//モーターピンを定義しますconst int motor1Pin1 =5; const int motor1Pin2 =6; const int motor2Pin1 =9; const int motor2Pin2 =10; //モーター速度を定義しますintmotorSpeed =150; //モーター速度(PWM)// ***** // SETUP // ***** void setup(){//ピンモードを設定pinMode(motor1Pin1、OUTPUT); pinMode(motor1Pin2、OUTPUT); pinMode(motor2Pin1、OUTPUT); pinMode(motor2Pin2、OUTPUT); //通信を開始しますSerial.begin(9600); esp8266.begin(9600); sendData( "AT + RST \ r \ n"、2000、DEBUG); //モジュールをリセットsendData( "AT + CWMODE =1 \ r \ n"、1000、DEBUG); //ステーションモードを設定sendData( "AT + CWJAP =\" XXXXX \ "、\" YYYYY \ "\ r \ n"、2000、DEBUG); // wi-fiネットワークに接続します(XXXXXをWi-FiルーターSSIDに置き換え、YYYYYをパスワードdelay(5000); //接続を待ちますsendData( "AT + CIFSR \ r \ n"、1000、DEBUG); / / show IP address sendData( "AT + CIPMUX =1 \ r \ n"、1000、DEBUG); //複数の接続を許可するsendData( "AT + CIPSERVER =1,80 \ r \ n"、1000、DEBUG); / /ポート80でWebサーバーを起動します} // ********* // MAIN LOOP // ********* void loop(){if(esp8266.available())// verify着信データ{if(esp8266.find( "+ IPD、"))//メッセージがある場合{String msg; esp8266.find( "?"); //メッセージを探すmsg =esp8266.readStringUntil( '' ); //メッセージ全体を読み取るStringcommand =msg.substring(0、3); //最初の3文字=command Serial.println(command); //前に進むif(command =="cm1"){state =1;} //後方に移動if(command =="cm2"){state =2;} //右に曲がるif(command =="cm3"){state =3;} //左に曲がるif(com mand =="cm4"){状態=4; } //何もしないif(command =="cm5"){state =5; }}} //状態1:前進if(state ==1){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態2:後方に移動if(state ==2){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態3:右に移動if(state ==3){analogWrite(motor1Pin1、motorSpeed); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); analogWrite(motor2Pin2、motorSpeed); } //状態4:左に移動if(state ==4){digitalWrite(motor1Pin1、LOW); analogWrite(motor1Pin2、motorSpeed); analogWrite(motor2Pin1、motorSpeed); digitalWrite(motor2Pin2、LOW); } //状態5:何もしないif(state ==5){digitalWrite(motor1Pin1、LOW); digitalWrite(motor1Pin2、LOW); digitalWrite(motor2Pin1、LOW); digitalWrite(motor2Pin2、LOW); }} // ******************* //補助関数// *******************文字列sendData (文字列コマンド、const intタイムアウト、ブールデバッグ){文字列応答=""; esp8266.print(コマンド); long int time =millis(); while((time + timeout)> millis()){while(esp8266.available()){char c =esp8266.read();応答+ =c; }} if(debug){Serial.print(response); }応答を返す;} 
インターフェース HTML
プレビューなし(ダウンロードのみ)。

カスタムパーツとエンクロージャー

base_7JLgOpcox6.svg

回路図


製造プロセス

  1. Bluetoothで制御されるRaspberryPi Robot
  2. Arduino Digital Dice
  3. Arduinoゲームコントローラー
  4. ラインフォロワーロボット
  5. 音声制御ロボット
  6. MobBob:Androidスマートフォンで制御されるDIY Arduino Robot
  7. ピクセルチェイサーゲーム
  8. Arduinoの反発電磁浮上
  9. Arduino制御ピアノロボット:PiBot
  10. 自律型ホームアシスタントロボット
  11. NeoMatrix Arduino Pong