Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

WiDC:Robot FPV Terkendali Wi-Fi

Komponen dan persediaan

Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
Arduino Proto Shield
× 1
Motor DC dengan roda
× 1
H-bridge
× 1

Aplikasi dan layanan online

Autodesk Fusion 360
Arduino IDE

Tentang proyek ini

Bagaimana dengan menggunakan robot yang dikendalikan dari jarak jauh untuk menjelajahi lingkungan Anda, menjangkau tempat-tempat yang tidak dapat diakses, memata-matai, mengambil gambar, membuat film, atau menyiarkan video? Tutorial ini akan menunjukkan kepada Anda bagaimana membuat sesuatu yang tidak dapat dibayar untuk semua tujuan itu!

Tutorial ini merupakan penyempurnaan dari tutorial saya sebelumnya (https://www.instructables.com/id/Wi-fi-Controlled-FPV-Rover-Robot-with-Arduino-ESP8/), di mana saya menyajikan home-faster- dibuat robot. Ini menunjukkan cara merancang robot roda dua yang dikendalikan dari jarak jauh melalui jaringan Wi-Fi, menggunakan dua motor DC, Arduino Uno, dan modul Wi-fi ESP8266.

Robot dapat dikendalikan dari browser internet biasa, menggunakan antarmuka yang dirancang HTML. Ponsel cerdas Android mungkin tidak digunakan untuk menyiarkan video dan audio dari robot ke antarmuka kontrol.

Seperti dalam tutorial saya sebelumnya, saya menunjukkan cara mendesain dan membuat bingkai murah untuk proyek robot, hanya menggunakan alat biasa (tidak perlu printer 3D, pemotong laser, atau router CNC).

Orang mungkin memperhatikan bahwa komponen yang digunakan di sini mungkin tidak dioptimalkan untuk tujuannya. Sebuah NodeMCU dapat digunakan sebagai pengganti kombinasi Arduino + ESP8266, misalnya. Sebuah Rapsberry Pi dengan kamera akan menggantikan smartphone dan mengendalikan motor juga. Bahkan dimungkinkan untuk menggunakan smartphone Android sebagai "otak" untuk robot Anda. Itu benar...

Tutorial ini berasal dari proyek lain yang saya ikuti:Joy Robot (https://hackaday.io/project/12873-rob-da-alegria-joy-robot atau https://www.hackster.io/igorF2/ robo-da-alegria-joy-robot-85e178), dan perangkat keras yang sama digunakan di sini untuk kesederhanaan. Arduino Uno dipilih karena sangat mudah diakses dan digunakan untuk semua orang, dan kami ingin merancang perisai sederhana untuk itu. Dalam proyek asli kami, kami juga mengontrol beberapa servos dan matriks LED, dan antarmuka dengan ESP. Smartphone sebenarnya digantikan oleh tablet, yang menjalankan aplikasi lain juga. Anda mungkin menemukan tutorial lain yang terkait dengan robot itu di tautan di bawah ini:

Mengontrol Array Matriks LED Dengan Arduino Uno:

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

Motor Servo Terkendali Browser Wi-Fi:

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

Panduan ini mungkin disesuaikan dan bentuk atau antarmuka kontrolnya diubah agar sesuai dengan kebutuhan Anda.

Dalam tutorial lainnya ini, saya menyajikan cara untuk mengontrol robot dari smartphone menggunakan aplikasi Blynk! Lihat ini:

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

Langkah 1:Alat

Alat berikut digunakan untuk konstruksi prototipe ini:

Alat:

  • Gergaji tangan (untuk memotong lembaran akrilik)
  • Obeng (untuk memasang baut dan mur)
  • Penggaris (untuk mengukur dimensi model)
  • Pisau serbaguna (untuk memotong struktur dan membuat lubang)
  • Mesin bor (digunakan untuk mengebor akrilik untuk pemasangan sekrup)
  • Kamplas (untuk menghaluskan tepi yang kasar)
  • Besi solder (untuk terminal motor solder)
  • Komputer (untuk mengkompilasi dan mengunggah kode Arduino)

Alat-alat tersebut digunakan untuk pembuatan struktur mekanik robot, perakitan robot dan penyambungan komponen elektronik. Beberapa alat tidak diperlukan jika Anda memilih untuk membeli struktur daripada membangun sendiri.

Anda bahkan dapat menggunakan peralatan lain (misalnya, printer 3D atau pemotong laser), tergantung pada alat yang tersedia di ruang pembuat Anda.

Langkah 2:Struktur dan Bahan Mekanik

Bahan berikut digunakan pada struktur mekanik:

Bahan mekanis:

  • lembaran akrilik 2mm
  • Motor roda gigi DC dengan roda (x2)
  • Roda kastor 30mm (x1)
  • Sekrup M2 x 10mm (x5)
  • M2 x 1,5mm mur (x5)
  • Sekrup M3 x 10mm (x9)
  • Sekrup M3 x 10mm (x9)
  • Sekrup M3 x 40 mm (x4)
  • M3 x 1,5mm mur (x12)
  • Sekrup 5/32" x 1" (x4)
  • 5/32" kacang (x12)
  • Tempat ponsel universal
  • Braket baja siku berbentuk "L" (30 x 30 mm) (x4)

Langkah 3:Komponen Elektronik

Berikut komponen elektronik yang digunakan pada robot ini:

• Arduino Uno (beli / beli)

• ESP8266 (beli)

• Protoshield (untuk versi yang lebih ringkas) atau papan tempat memotong roti biasa (beli)

• resistor 1 kohm (x2)

• Resistor 10 kohm (x1)

• Motor roda gigi DC dengan roda (x2) (beli)

• Modul H-bridge (beli)

• Beberapa kabel jumper

• Bank daya USB 5V

Anda dapat menemukan semua komponen secara online dengan mudah di toko e-commerce favorit Anda.

Seperti yang disorot dalam pengantar tutorial ini, pilihan komponen berasal dari proyek lain yang saya rancang, dan dapat dioptimalkan menggunakan mikrokontroler yang berbeda, misalnya.

Langkah 4:Mendesain Struktur

Pertama saya harus merancang struktur mekanik robot saya. Anda juga dapat membeli struktur lengkap secara online jika Anda tidak ingin membangun struktur kustom Anda sendiri (ada banyak kit robot yang tersedia secara online). Dalam hal ini, Anda dapat melompat ke Langkah 6. Untuk tutorial ini, bingkai akrilik murah dirancang untuk pemasangan motor dan komponen lainnya. Struktur yang disajikan dalam tutorial ini dirancang 3D menggunakan perangkat lunak Fusion 360 CAD dan dibuat dengan alat biasa (tidak diperlukan printer 3D, pemotong laser, atau router CNC). Anda dapat menggunakan prinsip yang sama yang dijelaskan di bawah untuk merancang struktur khusus yang sesuai dengan kebutuhan Anda.

Pertama saya harus membuat model 3D dari komponen utama, untuk memutuskan susunan strukturnya. Beberapa di antaranya diunduh dari Perpustakaan Komunitas GrabCAD (https://grabcad.com/library ):

  • Arduino Uno (https://grabcad.com/library/arduino-uno-13)
  • Gear motor (https://grabcad.com/library/bomotor-1)
  • H-bridge (https://grabcad.com/library/motor-driver-l9110-1)
  • Bank daya (https://grabcad.com/library/power-bank-7)
  • Tempat telepon universal (https://grabcad.com/library/universal-phone-holder-for-the-gopro-accessories-1)

Komponen elektronik disusun dalam satu bidang, sehingga saya dapat mengetahui kebutuhan tapak untuk robot saya. Setelah itu, saya harus memilih posisi motor dan roda untuk menciptakan struktur yang stabil.

Berdasarkan posisi tersebut, dirancang struktur utama yang terdiri dari tiga pelat (pelat dasar, dan dua pelat samping) yang dihubungkan menggunakan beberapa braket.

base.pdf base.svg

Langkah 5:Membangun dan Merakit Struktur

Konstruksi struktur dasar dibagi dalam langkah-langkah berikut:1. Potong alas akrilik sesuai dengan dimensi pada gambar 2D: Ini dapat dilakukan dengan pemotong laser (jika Anda memiliki akses ke salah satunya) atau, seperti dalam kasus saya, dengan alat biasa.

Pertama, Anda harus mentransfer dimensi model Anda ke lembaran akrilik. Cetak gambar 2D Anda menggunakan printer biasa di atas kertas berperekat, lalu potong kertas dengan ukuran yang sesuai dan aplikasikan masker itu pada permukaan akrilik. Dengan pisau utilitas dan dengan bantuan penggaris atau timbangan, potong akrilik menjadi garis lurus. Anda tidak perlu memotong seluruh lembaran, cukup buat skor untuk membuat beberapa trek di mana potongan tersebut nantinya akan dipotong. Tempatkan akrilik pada permukaan yang rata, tahan di tempatnya dengan beberapa klem dan berikan tekanan sampai lembaran itu pecah menjadi dua. Ulangi proses ini sampai semua pemotongan selesai. Setelah itu, Anda bisa menggunakan amplas untuk menghaluskan bagian tepi yang kasar. Anda juga dapat menggunakan gergaji tangan untuk memotong akrilik.2. Bor lubang di posisi yang ditunjukkan pada gambar 2D: Bor lubang di posisi yang ditunjukkan pada gambar 2D (ditunjukkan dalam topeng) dengan mesin bor. Akrilik relatif mudah dibor. Jadi jika Anda tidak membuang mesin bor, Anda dapat mengebor lubang secara manual dengan alat tajam, seperti pisau utilitas. Anda juga dapat menggunakannya untuk memperbesar lubang kecil agar sesuai dengan ukuran sekrup. Lepaskan topeng dan alas Anda akan siap.

3. Pasang komponen dengan sekrup dan mur sesuai dengan gambar 3D: Pasang komponen dengan sekrup dan mur sesuai dengan video, dan struktur Anda akan siap digunakan. Sekrup M3 digunakan untuk pemasangan braket dan motor DC. Sekrup M2 digunakan untuk pemasangan komponen elektronik, sedangkan sekrup 5/32" digunakan untuk pemasangan roda depan dan klip smartphone. Sekarang istirahat dan mulai merakit sirkuit pada langkah berikut...

dasar.pdf

Langkah 6:Merakit Elektronik

Rangkaian yang diusulkan di sini menggunakan Arduino Uno sebagai pengontrol utama, yang berinteraksi dengan ESP8266 untuk komunikasi Wi-Fi. Arduino mengontrol motor DC menggunakan sirkuit penggerak H-brige, yang mampu mengontrol hingga dua motor, berputar mereka secara independen di kedua arah.

Sebuah bank daya digunakan untuk menyalakan elektronik, terhubung langsung ke port USB Arduino. Ini adalah cara mudah untuk memberi daya pada Arduino Anda:mudah diisi, dapat dengan mudah diganti, dan memberikan tegangan 5V yang aman.

Hubungkan semua komponen sesuai dengan skema. Anda memerlukan beberapa kabel jumper untuk menghubungkan modul ESP8266, yang tidak ramah protoboard, h-bridge dan motor DC. Anda dapat menggunakan protoshield (untuk sirkuit yang lebih ringkas), papan tempat memotong roti biasa, atau mendesain pelindung Arduino Anda sendiri.

Anda akan melihat bahwa ESP8266-1 tidak ramah terhadap papan tempat memotong roti. Ini akan dihubungkan menggunakan beberapa kabel jumper, tetapi tidak akan disambungkan ke struktur.

Colokkan kabel USB ke board Arduino dan lanjutkan ke langkah berikutnya.

wiDC_Esquem_C3_A1tico.pdf wiDC.fzz wiDC_bb.pdf

Langkah 7:Kode Arduino

Instal Arduino IDE terbaru. Tidak diperlukan perpustakaan untuk komunikasi dengan modul ESP-8266 atau kontrol motor. Silakan periksa baudrate ESP8266 Anda dan atur dengan benar dalam kode. Unduh kode Arduino (WiDC.ino) dan ganti XXXXX dengan SSID router wifi Anda dan YYYYY dengan kata sandi router. Hubungkan papan Arduino ke port USB komputer Anda dan unggah kodenya.

Colokkan kabel USB ke board Arduino dan lanjutkan ke langkah berikutnya.

//include library#include SoftwareSerial esp8266(3, 2); //RX pin =3, TX pin =2//definisi variabel#define DEBUG true //tampilkan pesan antara ESP8266 dan Arduino dalam serial portint state =5; //menentukan status awal robot (5 =stand-by)//menentukan pin motorconst int motor1Pin1 =5;const int motor1Pin2 =6;const int motor2Pin1 =9;const int motor2Pin2 =10;//menentukan kecepatan motorint motorSpeed ​​=150; //kecepatan motor (PWM)//******//SETUP//******void setup(){ //set mode pin pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); //mulai komunikasi Serial.begin(9600); esp8266.begin(9600); sendData("AT+RST\r\n", 2000, DEBUG); //reset modul sendData("AT+CWMODE=1\r\n", 1000, DEBUG); //set mode stasiun sendData("AT+CWJAP=\"XXXXX\",\"YYYYY\"\r\n", 2000, DEBUG); //menghubungkan jaringan wi-fi (ganti XXXXX dengan SSID router Wi-Fi Anda dan YYYYY dengan penundaan kata sandinya(5000); //tunggu koneksi sendData("AT+CIFSR\r\n", 1000, DEBUG); / /tampilkan alamat IP sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //izinkan beberapa koneksi sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); / / mulai server web pada port 80}//*********//MAIN LOOP//*********void loop(){ if (esp8266.available()) //verify data masuk { if (esp8266.find("+IPD,")) //jika ada pesan { String msg; esp8266.find("?"); //cari pesan msg =esp8266.readStringUntil(' ' ); //membaca seluruh pesan String command =msg.substring(0, 3); //3 karakter pertama =perintah Serial.println(command); //move forward if(command =="cm1") { state =1; } //mundur if(command =="cm2") { state =2; } //belok kanan if(command =="cm3") { state =3; } //belok kiri if(command ==" cm4") { state =4; } //tidak melakukan apa-apa if(command =="cm5") { state =5; } } } //STATE 1:bergerak maju if (state ==1) { analogWrite(m otor1Pin1, kecepatan motor); digitalWrite(motor1Pin2, RENDAH); analogWrite(motor2Pin1, kecepatan motor); digitalWrite(motor2Pin2, RENDAH); } //STATE 2:mundur jika (state ==2) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, kecepatan motor); digitalWrite(motor2Pin1, RENDAH); analogWrite(motor2Pin2, kecepatan motor); } //STATE 3:bergerak ke kanan if (state ==3) { analogWrite(motor1Pin1, motorSpeed); digitalWrite(motor1Pin2, RENDAH); digitalWrite(motor2Pin1, RENDAH); analogWrite(motor2Pin2, kecepatan motor); } //STATE 4:pindah ke kiri if (state ==4) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, kecepatan motor); analogWrite(motor2Pin1, kecepatan motor); digitalWrite(motor2Pin2, RENDAH); } //STATE 5:tidak melakukan apa-apa jika (state ==5) { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, RENDAH); digitalWrite(motor2Pin1, RENDAH); digitalWrite(motor2Pin2, RENDAH); } }//*********************//Fungsi bantu//******************* String sendData (Perintah string, batas waktu const int, debug boolean){ String respons =""; esp8266.print(perintah); waktu int panjang =milis(); while ( (waktu + batas waktu)> milis()) { while (esp8266.available()) { char c =esp8266.read(); tanggapan +=c; } } if (debug) { Serial.print(respon); } kembalikan tanggapan;}  

Kode dijelaskan:

Kode menggunakan satu port serial untuk komunikasi antara Arduino dan ESP8266, dan satu lagi untuk komunikasi antara Arduino dan komputer. Setelah Arduino Uno hanya memiliki satu port serial, library SoftwareSeial digunakan untuk membuat port sekunder, menggunakan pin digital 2 dan 3.

//include library#include SoftwareSerial esp8266(3, 2); //pin RX =3, pin TX =2 

Selama pengaturan, kedua komunikasi serial harus dimulai, dan baudrate-nya ditentukan (satu antara Arduino dan monitor Serial Anda, dan lainnya untuk mencocokkan kecepatan ESP8266). Perhatikan bahwa ESP8266 saya disetel ke 9600 kbps. Secara default sebagian besar modul ini datang pada 115200kbps, tetapi perpustakaan SoftwareSerial tidak dapat bekerja pada kecepatan itu dan Anda harus mengubah baudrate-nya. Bagi saya, 9600 kbps berfungsi dengan baik.

Dalam proyek ini saya tidak menggunakan perpustakaan khusus untuk komunikasi dengan modul Wi-Fi. Sebagai gantinya, hanya perintah AT biasa berikut (satu set instruksi yang ditentukan pada firmware default ESP8266) yang digunakan:

  • AT+RST:setel ulang modul ESP8266
  • AT+CWMODE:setel modul ke mode stasiun atau titik akses
  • AT+CWJAP:menghubungkan jaringan Wi-Fi yang diberikan oleh SSID dan sandinya
  • AT+CIPMUX:set modul untuk beberapa koneksi atau koneksi tunggal
  • AT+CIPSERVER:memulai server web pada port tertentu //memulai komunikasi
 Serial.begin(9600); esp8266.begin(9600); sendData("AT+RST\r\n", 2000, DEBUG); //reset modul sendData("AT+CWMODE=1\r\n", 1000, DEBUG); //set mode stasiun sendData("AT+CWJAP=\"XXXXX\",\"YYYYY\"\r\n", 2000, DEBUG); //menghubungkan jaringan wi-fi (ganti XXXXX dengan SSID router Wi-Fi Anda dan YYYYY dengan penundaan kata sandinya(5000); //tunggu koneksi sendData("AT+CIFSR\r\n", 1000, DEBUG); / /tampilkan alamat IP sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //izinkan beberapa koneksi sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); / / mulai server web pada port 80 

Fungsi tambahan (sendData) digunakan untuk mengirim data (dari Arduino ke ESP8266), membaca dan menampilkan respons di Serial Monitor.

String sendData(String command, const int timeout, boolean debug){ String response =""; esp8266.print(perintah); waktu int panjang =milis(); while ( (waktu + batas waktu)> milis()) { while (esp8266.available()) { char c =esp8266.read(); tanggapan +=c; } } if (debug) { Serial.print(respon); } kembalikan tanggapan;} 

Menggunakan kode di atas membuat Arduino mengatur ulang modul, bergabung dengan jaringan, tunggu beberapa saat untuk koneksi, lalu tunjukkan alamat IP-nya dan mulai server web. Setelah itu, loop utama akan dimulai, dan mikrokontroler akan menunggu perintah.

void loop(){ if (esp8266.available()) //verifikasi data yang masuk { if (esp8266.find("+IPD,")) //jika ada pesan { String msg; esp8266.find("?"); //cari pesan msg =esp8266.readStringUntil(' '); //membaca seluruh pesan Perintah string =msg.substring(0, 3); //3 karakter pertama =perintah Serial.println(perintah); //majukan if(command =="cm1") { state =1; } //mundur if(command =="cm2") { state =2; } //belok kanan if(command =="cm3") { state =3; } //belok kiri if(command =="cm4") { state =4; } //jangan lakukan apa-apa if(command =="cm5") { state =5; } } } 

Lima kemungkinan perintah telah ditentukan (cm1 hingga cm5). Setiap kali Arduino menerima salah satu dari perintah itu, ia masuk ke salah satu dari lima kemungkinan status (maju, mundur, bergerak ke kanan, kiri, dan siaga), dan melanjutkan status itu hingga menerima perintah yang berbeda.

Setiap keadaan mendefinisikan sinyal untuk pin motor. Saya menggunakan digitalWrite(pin, LOW) ketika saya ingin menyetel pin ke 0V dan analogWrite(pin, motoSpeed) ketika saya ingin mengaktifkan pin. Menggunakan analogWrite memungkinkan saya mengubah kecepatan motor, dan membuat robot bergerak lebih lambat.

//STATE 1:maju jika (status ==1) { analogWrite(motor1Pin1, motorSpeed); digitalWrite(motor1Pin2, RENDAH); analogWrite(motor2Pin1, kecepatan motor); digitalWrite(motor2Pin2, RENDAH); } //STATE 2:mundur jika (state ==2) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, kecepatan motor); digitalWrite(motor2Pin1, RENDAH); analogWrite(motor2Pin2, kecepatan motor); } //STATE 3:bergerak ke kanan if (state ==3) { analogWrite(motor1Pin1, motorSpeed); digitalWrite(motor1Pin2, RENDAH); digitalWrite(motor2Pin1, RENDAH); analogWrite(motor2Pin2, kecepatan motor); } //STATE 4:pindah ke kiri if (state ==4) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, kecepatan motor); analogWrite(motor2Pin1, kecepatan motor); digitalWrite(motor2Pin2, RENDAH); } //STATE 5:tidak melakukan apa-apa jika (state ==5) { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, RENDAH); digitalWrite(motor2Pin1, RENDAH); digitalWrite(motor2Pin2, RENDAH); } 

Perhatikan bahwa motor bekerja antara 3 dan 6V. Setelah sumber daya 5V digunakan, Anda dapat memodulasi tegangan rata-rata motor (menggunakan PWM) antara 3 dan 5V, sehingga mengubah kecepatannya. Itu tidak akan memungkinkan Anda untuk mengontrol .speed

. robot dengan baik WiDC.ino

Langkah 8:Antarmuka Kontrol Berbasis Web

Antarmuka html dirancang untuk mengontrol robot. Unduh antarmuka.rar dan ekstrak semua file ke folder tertentu. Kemudian buka di Firefox. Formulir kotak teks digunakan di antarmuka itu untuk memasukkan alamat IP modul ESP dan server video/audio (dari aplikasi Android IP Webcam). Ada tes tapi, yang akan membuat robot berputar sampai perintah lain diterima. Tombol panah keyboard digunakan untuk menggerakkan robot ke depan atau ke belakang, dan untuk memutar ke kiri atau ke kanan. Ponsel cerdas Android digunakan untuk menyiarkan video dan audio dari robot ke antarmuka kontrol. Anda dapat menemukan aplikasinya di Google Play store (https://play.google.com/store/apps/details?id=com.pas.webcam). Instal dan lanjutkan ke langkah berikutnya.

Kode HTML dijelaskan:

Antarmuka html memiliki dua divisi:satu untuk audio dan video (dari server Webcam Android IP) dan satu untuk perintah.

Pembagian audio dan video memiliki bentuk dengan textbox sebuah buttom. Ini digunakan sebagai input untuk menentukan alamat IP server Webcam dan memuatnya. Muncul dengan alamat IP standar (192.168.0.5), tetapi penggunaannya dapat memasukkan IP yang berbeda. Video dan audio dimuat dalam objek di bawah kotak teks.

IP Webcam ( IP):

Divisi lain memiliki bentuk lain dengan kotak teks, sehingga pengguna dapat menginformasikan alamat IP ESP8266.

Alamat IP Arduino:

Tekan dan tahan tombol panah keyboard untuk menggerakkan robot

JavaScript digunakan untuk menangani antarmuka dan mengirim data ke Arduino. Script tersebut dikodekan dalam file yang berbeda, dan ditambahkan pada header html.

   Antarmuka kontrol   

Javascript menjelaskan:

Sebuah fungsi (readUrlAV) digunakan untuk membaca alamat IP dari formulir html dan memuatnya dalam objek "video" dan "audio".

fungsi 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);} 

Script membaca papan kunci secara berkala, menunggu pengguna menekan tombol apa saja. Jika pengguna menekan sembarang tombol panah (kiri ='37', atas ='38', kanan ='39' atau 'bawah' =40), ia mengirimkan perintah ("cm1" hingga "cm4") untuk IP yang diberikan alamat. Perhatikan bahwa ada fungsi latch, yang menghindari perintah yang sama untuk diulang lagi dan lagi. Data akan ditransfer hanya ketika tombol ditekan.

var latch =false;document.onkeydown =checkKeyDown;fungsi checkKeyDown(e) { e =e || jendela.acara; if (e.keyCode =='38') { // panah atas if (latch ==false) { TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $.get(ArduinoVar, { "cm1":1000 }); {Koneksi:tutup}; kait =benar; } } else if (e.keyCode =='40') { // panah bawah if (latch ==false) { TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $.get(ArduinoVar, { "cm2":1000 }); {Koneksi:tutup}; kait =benar; } } else if (e.keyCode =='37') { // panah kiri if (latch ==false) { TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $.get( ArduinoVar, { "cm3":1000 }); {Connection:close}; latch =true; } } else if (e.keyCode =='39') { // right arrow if (latch ==false) { TextVar =myform2.inputbox.value; ArduinoVar ="http://" + TextVar + ":80"; $.get( ArduinoVar, { "cm4":1000 }); {Connection:close}; latch =true; } }} 

When any arrow key is released, doNothing function is executed, which sends command "cm5" (stop the motors), and resets the latch, allowing interface to send differente commands.

document.onkeyup =checkKeyUp;function checkKeyUp(e) { e =e || jendela.acara; 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 }); {Connection:close}; latch =false;}  
interface.rar

Step 9:Usage

When the Arduino is restarted, it will try to connect your wi-fi network automatically. Use the Serial Monitor to check if the connection was successfull, and to obtain which IP was assigned to your ESP-8266 by your router. Open the html file in an internet browser (Firefox) and inform this IP address in the textbox.You might also user other means to find out which IP address you router assigned to your device. Disconnect the the Arduino Uno from your computer and connect it to the power bank. Wait for it to connect again. Launch IP Webcam app in the smartphone attached to the robot. Type the video/audio IP on your control interface and connect to the server and you'll be ready to go. You might need to reduce the resolution of the video in the app to reduce the delay between during the transmission. Click and hold the arrow buttons of your keyboar to rotate the robot or move it forward/backward and have fun exploring your environment.

Notice that robot runs on open loop. This way, it's quite difficult to make it move straight forward. Small difference between the motors, aligment, etc. will cause cumulative deviations.

The robot start moving when it receives a given command ("cm1" to "cm4"), and keep that state until a different command is received ("cm1" to "cm5"). Sometimes the ESP8266 loses some messages, and that might cause some trouble. If, for instance, a "cm5" command is lost, the robot will keed moving even after any arrow key was released. I'm still dealing with this problem. Feel free to change the way the commands are interpreted to avoid this kind of problem.

Kode

  • Kode Arduino
  • Interface
Kode ArduinoArduino
//include libraries#include SoftwareSerial esp8266(3, 2); //RX pin =3, TX pin =2//definition of variables#define DEBUG true //show messages between ESP8266 and Arduino in serial portint state =5; //define initial state of the robot (5 =stand-by)//define motor pinsconst int motor1Pin1 =5;const int motor1Pin2 =6;const int motor2Pin1 =9;const int motor2Pin2 =10;//define motor speedint motorSpeed =150; //motor speed (PWM)//*****//SETUP//*****void setup(){ //set pin modes pinMode(motor1Pin1, OUTPUT); pinMode(motor1Pin2, OUTPUT); pinMode(motor2Pin1, OUTPUT); pinMode(motor2Pin2, OUTPUT); //start communication Serial.begin(9600); esp8266.begin(9600); sendData("AT+RST\r\n", 2000, DEBUG); //reset module sendData("AT+CWMODE=1\r\n", 1000, DEBUG); //set station mode sendData("AT+CWJAP=\"XXXXX\",\"YYYYY\"\r\n", 2000, DEBUG); //connect wi-fi network (replace XXXXX by your Wi-Fi router SSID and YYYYY by its password delay(5000); //wait for connection sendData("AT+CIFSR\r\n", 1000, DEBUG); //show IP address sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //allow multiple connections sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // start web server on port 80}//*********//MAIN LOOP//*********void loop(){ if (esp8266.available()) //verify incoming data { if (esp8266.find("+IPD,")) //if there is a message { String msg; esp8266.find("?"); //look for the message msg =esp8266.readStringUntil(' '); //read whole message String command =msg.substring(0, 3); //first 3 characters =command Serial.println(command); //move forward if(command =="cm1") { state =1; } //move backward if(command =="cm2") { state =2; } //turn right if(command =="cm3") { state =3; } //turn left if(command =="cm4") { state =4; } //do nothing if(command =="cm5") { state =5; } } } //STATE 1:move forward if (state ==1) { analogWrite(motor1Pin1, motorSpeed); digitalWrite(motor1Pin2, LOW); analogWrite(motor2Pin1, motorSpeed); digitalWrite(motor2Pin2, LOW); } //STATE 2:move backward if (state ==2) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, motorSpeed); digitalWrite(motor2Pin1, LOW); analogWrite(motor2Pin2, motorSpeed); } //STATE 3:move right if (state ==3) { analogWrite(motor1Pin1, motorSpeed); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); analogWrite(motor2Pin2, motorSpeed); } //STATE 4:move left if (state ==4) { digitalWrite(motor1Pin1, LOW); analogWrite(motor1Pin2, motorSpeed); analogWrite(motor2Pin1, motorSpeed); digitalWrite(motor2Pin2, LOW); } //STATE 5:do nothing if (state ==5) { digitalWrite(motor1Pin1, LOW); digitalWrite(motor1Pin2, LOW); digitalWrite(motor2Pin1, LOW); digitalWrite(motor2Pin2, LOW); } }//*******************//Auxiliary functions//*******************String sendData(String command, const int timeout, boolean debug){ String response =""; esp8266.print(command); long int time =millis(); while ( (time + timeout)> millis()) { while (esp8266.available()) { char c =esp8266.read(); response +=c; } } if (debug) { Serial.print(response); } return response;}
InterfaceHTML
Tidak ada pratinjau (hanya unduhan).

Suku cadang dan penutup khusus

base_7JLgOpcox6.svg

Skema


Proses manufaktur

  1. Robot Raspberry Pi dikendalikan melalui Bluetooth
  2. Arduino Digital Dice
  3. Pengontrol Game Arduino
  4. Robot Pengikut Baris
  5. Robot yang Dikendalikan Bicara
  6. MobBob:Robot Arduino DIY Dikendalikan oleh Smartphone Android
  7. Game Pixel Chaser
  8. Arduino Repulsive Electromagnetic Levitation
  9. Robot Piano Terkendali Arduino:PiBot
  10. Robot Asisten Rumah Otonom