Kamis, 19 April 2018

Tech Thursday # 023: Kontrol Robot Nirkabel dengan xBee

Teknologi anak bangsa -- Ketika Anda ingin mengambil robot nirkabel Anda tetapi ingin mengambil langkah melewati R / C, xBee adalah kandidat utama.Sistem ini bekerja lebih dari 2.4GHz, mirip dengan WiFi tetapi apa yang disediakannya adalah jembatan serial nirkabel sederhana.Berarti Anda dapat mengirim paket ke modul dan itu akan muncul pada output dari semua xBees di jaringan itu.Anda tidak perlu khawatir tentang Teknologi anak bangsa dan alamat IP atau fundamental jaringan lainnya, hanya komunikasi serial sederhana.

Teknologi anak bangsa -- Desain Sistem: Remote Langkah pertama adalah merancang sistem kami.Untuk menjaga hal-hal sederhana, kita akan menggunakan remote kami Arduino Uno (MCU-050-000) untuk mikrokontroler kami, sebuah xBee pro (TE-204-AWI) untuk radio kami dan Wireless SD Shield (MCU-064-000 ) untuk menghubungkan keduanya bersama.Kami juga memerlukan joystick untuk mengarahkan robot.Untuk proyek ini saya menggunakan Joystick 2-Axis (TE-128-002).

Teknologi anak bangsa -- Desain Sistem: Robot Untuk sisi robot, kita memerlukan skema kontrol yang sama, tetapi alih-alih menggunakan analog dan mengirim data, kita akan mendengarkan data strea kamim dan mengirim perintah ke motor.Kode Sebagian besar kode sebagian besar akan menjadi turunan dari Arduino Serial to Serial code dari Tech Thursday # 005 (Blog Post) (GitHub).Namun, kami akan mengambil ini lebih jauh dan menerapkannya.Kode: Jarak JauhreinitVars ();data sehingga kami memiliki berbagai // 0-255 tempFB = tempFB + 127; tempLR = tempLR + 127; // Pasang paket digital // Tambahkan status switch ke digital1 di sini // mengkonversi data yang dikirimkan ke byte byteFB = byte (tempFB); byteLR = byte (tempLR); // hitung checksum checksum = byteFB + byteLR + byte (Digital1); } // xBee Komunikasi void transmitData () { Serial.write ("S"); Serial.write ("D"); Serial.write ("R"); Serial.write (byteFB); Serial.write (byteLR); Serial.write (byte (Digital1)); Serial.write (checksum); } // Mencetak nilai untuk debugging yang mudah void debugData () { Serial.print ("[FB:"); Serial.print (byteFB, HEX); Serial.print ("]"); Serial.print ("[LR:"); Serial.print (byteLR, HEX); Serial.print ("]"); Serial.print ("[D1:"); Serial.print (byte (Digital1), BIN); Serial.print ("]"); Serial.println (""); } Kode: Robot / ******************************************** ************* Contoh Robot xBee Penulis: Jason Traud SupRobot erDroid 7 Mei 2015 Kode ini menggunakan Arduino Uno yang dipasang pada platform ATR.

Teknologi anak bangsa -- Robot memerintahkan pengontrol motor Sabertooth tunggal. Tujuan dari firmware ini adalah menyediakan kendali atas robot atas antarmuka xBee Kontroler Motor: Sabertooth Ganda 25A Driver Motor Teknologi anak bangsa ********* / #include "Arduino.h" // Arduino // Karena Arduino terbatas dalam jumlah COM serial yang dimilikinya, // kita akan mengontrol pengontrol motor melalui port Serial perangkat lunak #include #include SoftwareSerial SWSerial (2, 3); // RX pada pin 2 (tidak digunakan), TX pada pin 3 (ke S1).Sabertooth ST (128, SWSerial); // Address 128, dan gunakan SWSerial sebagai port serial.// Networking terkait RAM bool sdrFound = false; // Bendera Utama untuk SDR bool sFound = false; // Tandai untuk SDR bool dFound = false; // Tandai untuk SDR bool rFound = false; // Tandai untuk SDR // Menerima byte byteFB; byte byteLR; byte Digital1; checksum byte; // Tentukan RAM byte Bad_Tx; kata No_Tx = 0; // Digunakan untuk waktu habis waktu lama yang tidak ditandai; unsigned long timeOfLastGoodPacket = 0; // ************************************************ ****************************** // Mengatur com serial kami, pin hardware, dll // RETURNS: Nothing // * ************************************************** *************************** void setup () {delay (2000); // Penundaan singkat untuk memungkinkan pengontrol motor // untuk menyala sebelum kami mencoba mengirimnya perintah.

Teknologi anak bangsa -- Serial.begin (9600); // xBee SWSerial.begin (9600); // Serial untuk pengontrol motor allStop (); // Pastikan semua motor dihentikan untuk keselamatan} // ************************************* ***************************************** // Ini adalah program utama kami dan dibungkus dalam loop sementara (benar) yang tersirat.// KEMBALIKAN: Tidak ada // ******************************************* *********************************** void loop () {currentTime = millaku s(); processSerial (); // Menangani data yang masuk dari xBee timeout (); // Hentikan robot jika kami kehilangan jeda koneksi (10); } // *********************************************** ******************************* // Menyetel kecepatan semua pengontrol motor ke nol dan menyetel semua ESTOP // RETURNS: NONE // *********************************************** ******************************* void allStop () {ST.motor (1,0); // Zero motors ST.motor (2,0); } // *********************************************** ******************************* // Di sini kami mencoba menemukan byte awal kami.Kami memiliki bendera untuk masing-masing // tiga byte (SDR) dan kami menaikkan bendera karena mereka ditemukan secara berurutan.Jika // huruf berikutnya tidak ditemukan, semua bendera dihapus dan kita mulai lagi dari awal.

Teknologi anak bangsa -- // Setelah kami memiliki bendera kami, kami menunggu sampai kami memiliki ukuran paket yang diharapkan // dan kemudian kami memproses data // RETURNS: NONE // ***************** ************************************************** *********** void processSerial () {unsigned char inputBufferTemp; byte chksumTest; // Tunggu serial jika (Serial.available ()> 0) {if (.SFound) {inputBufferTemp = Serial.read (); if (inputBufferTemp == 0x53) {sFound = true; } else {sFound = false; dFound = false; rFound = false; sdrFound = false; }} if (.dFound) {inputBufferTemp = Serial.read (); if (inputBufferTemp == 0x44) {dFound = true; } else {sFound = false; dFound = false; rFound = false; sdrFound = false; }} if (.rFound) {inputBufferTemp = Serial.read (); if (inputBufferTemp == 0x52) {rFound = true; sdrFound = true;} else {sFound = false; dFound = false; rFound = false; sdrFound = false; }} if (sdrFound && (Serial.available ()> 3)) {// simpan byte ke dalam variabel yang sesuai byteFB = Serial.read (); byteLR = Serial.read (); Digital1 = Serial.read (); checksum = Serial.read (); // Hapus bendera sdrFound = false; sFound = false; dFound = false; rFound = false; // Hitung chunkumTest kami = byteFB + byteLR + Digital1; // Bandingkan checksum yang kami kalkulasi dengan yang diharapkaned if (chksumTest.

Teknologi anak bangsa -- = checksum) {return; } // Kami menemukan paket yang bagus, jadi tetapkan waktu saat iniOfLastGoodPacket = currentTime; ST.drive (byteFB); ST.turn (byteLR); }}} // ********************************************* ********************************* // Kita harus berhati-hati terhadap kehilangan koneksi data.Di sini kita membandingkan // waktu saat ini dan kapan kita menerima paket baik terakhir kita.Jika kedua // telah berlalu maka kita perlu menghentikan motor kita // RETURNS: NONE // ***************************** ************************************************* kosong timeout () {if (currentTime> (timeOfLastGoodPacket + 1000)) {allStop (); timeOfLastGoodPacket = currentTime; }} Dokumentasi Gitub Repositori #techthursday #arduino #xbee #sabertooth .

Tidak ada komentar:

Posting Komentar