Daftar Isi:
- Langkah 1: TENTANG PROYEK INI
- Langkah 2: Diperlukan Perangkat Keras
- Langkah 3: Sirkuit & Koneksi
- Langkah 4: BEKERJA
- Langkah 5: KODE
- Langkah 6: DEMONSTRASI VIDEO
Video: Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12: 6 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Dalam proyek ini, kami mengontrol posisi motor servo menggunakan mpu6050 dan HC-12 untuk komunikasi antara Arduino UNO dan ESP8266 NodeMCU.
Langkah 1: TENTANG PROYEK INI
Ini adalah proyek IoT lain berdasarkan modul HC-12 RF. Di sini, data imu(mpu6050) dari arduino digunakan untuk mengontrol motor servo (terhubung dengan Nodemcu). Di sini, visualisasi data juga dilakukan di sisi arduino di mana data pitch mpu6050 (rotasi terhadap sumbu x) divisualisasikan dengan sketsa pemrosesan (dibahas nanti). Pada dasarnya proyek ini hanya sedikit pemanasan untuk mengingat berbagai aspek kontrol Imu & Servo dengan Arduino dan ESP8266 nodemcu.
OBJEKTIF
Tujuan dari ini cukup jelas, Kami mengontrol posisi motor Servo menggunakan nilai pitch IMU. Dan secara keseluruhan pitch dan posisi motor yang disinkronkan ini divisualisasikan dengan Processing.
Langkah 2: Diperlukan Perangkat Keras
Modul Wifi NodeMCU ESP8266 12E
Papan tempat memotong roti tanpa solder
Kawat jumper
MPU6050 accelo+gyro
Modul RF HC-12 (pasangan)
Motor Servo SG90
Langkah 3: Sirkuit & Koneksi
Koneksi lurus ke depan. Anda dapat memberi daya pada servo dengan 3.3V dari Nodemcu Anda. Anda juga dapat menggunakan Vin untuk memberi daya pada servo jika nodemcu Anda memiliki tegangan sebanyak itu pada pin itu. Tetapi sebagian besar papan Lolin tidak memiliki 5V di Vin (tergantung pabrikannya).
Diagram sirkuit ini dibuat menggunakan EasyADA.
Langkah 4: BEKERJA
Segera setelah sketsa arduino dimulai, ia akan mengirimkan sudut pitch (yang berkisar dari -45 hingga 45) ke penerima hc12 Nodemcu yang dipetakan dengan posisi Servo 0 hingga 180 derajat. Di sini kami menggunakan sudut pitch dari -45 hingga +45 derajat sehingga kami dapat dengan mudah memetakannya ke posisi Servo.
Sekarang, Anda berpikir mengapa kita bisa menggunakan metode peta sebagai berikut: -
int pos = peta(val, -45, 45, 0, 180);
Karena sudut negatif yang dikirim oleh pemancar hc12 diterima sebagai:
Babak pertama: (T)0 hingga 45 => 0 hingga 45(R)
babak ke-2: (T)-45 hingga -1 => 255 hingga 210(R)
Jadi Anda harus memetakannya ke 0 hingga 180 sebagai
if(val>=0 && val<=45) pos = (val*2)+90; lain pos = (val-210)*2;
Saya menghindari metode peta karena beberapa kesalahan yang tidak relevan. Anda dapat mencobanya dan berkomentar bahwa itu berhasil dengan Anda
if(val>=0 && val<=45) pos = map(val, 0, 45, 90, 180); lain pos = peta(val, 255, 210, 0, 90); // Argumen ke-4 bisa 2 (bisa dicek)
Perhitungan Sudut Pitch MPU6050
Saya menggunakan perpustakaan MPU6050_tockn yang didasarkan pada pemberian data mentah dari IMU.
int pitchAngle = mpu6050.getAngleX()
Ini akan memberi kita sudut rotasi terhadap sumbu x. Seperti yang Anda lihat pada gambar, imu saya ditempatkan secara vertikal di papan tempat memotong roti jadi jangan bingung dengan pitch and roll. Sebenarnya Anda harus selalu melihat sumbu tercetak di papan breakout.
Melalui perpustakaan ini, Anda tidak perlu repot tentang elektronik internal membaca register khusus untuk operasi tertentu. Anda hanya menentukan pekerjaan dan Anda selesai!
Btw jika Anda ingin menghitung sudut sendiri. Anda dapat dengan mudah melakukannya sebagai berikut:
#termasuk
const int MPU6050_addr=0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup(){ Wire.begin(); Wire.beginTransmission(MPU6050_addr); Kawat.tulis (0x6B); Kawat.tulis(0); Wire.endTransmission(benar); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU6050_addr); Kawat.tulis (0x3B); Wire.endTransmission(salah); Wire.requestFrom(MPU6050_addr, 14, benar); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); Temp=Wire.read()<<8|Wire.read(); GyroX=Wire.read()<<8|Wire.read(); GyroY=Wire.read()<<8|Wire.read(); GyroZ=Wire.read()<<8|Wire.read();
int xAng = peta(AcX, minVal, maxVal, -90, 90); int yAng = peta(AcY, minVal, maxVal, -90, 90); int zAng = peta(AcZ, minVal, maxVal, -90, 90); x= RAD_TO_DEG * (atan2(-yAng, -zAng)+PI); y= RAD_TO_DEG * (atan2(-xAng, -zAng)+PI); z= RAD_TO_DEG * (atan2(-yAng, -xAng)+PI); Serial.print("AngleX= "); // Pitch Serial.println(x); Serial.print("SudutY= "); //Gulung Serial.println(y); Serial.print("SudutZ= "); //Yaw Serial.println(z); }
Tapi, Anda tidak perlu menulis kode sebanyak ini untuk mendapatkan sudut. Anda harus mengetahui fakta di balik layar tetapi menggunakan perpustakaan orang lain sangat efektif di banyak proyek. Anda dapat membaca tentang imu ini dan pendekatan lainnya untuk mendapatkan lebih banyak data yang disaring dari tautan berikut: Jelajahi-mpu6050.
Kode arduino saya di ujung transmisi hanya memiliki 30 baris dengan bantuan perpustakaan MPU6050_tockn jadi menggunakan perpustakaan itu baik kecuali Anda tidak memerlukan beberapa perubahan inti pada fungsionalitas IMU. Sebuah perpustakaan bernama I2Cdev oleh Jeff Rowberg sangat membantu jika Anda ingin beberapa data yang difilter menggunakan DMP (Digital motion processor) dari IMU.
Integrasi dengan Pemrosesan
Di sini Pemrosesan digunakan untuk memvisualisasikan data rotasi tentang sumbu x IMU yang dihitung oleh data mentah yang berasal dari MPU6050. Kami menerima data mentah yang masuk di SerialEvent dengan cara berikut:
void serialEvent(Serial myPort) {
inString = myPort.readString(); try { // Mengurai data //println(inString); String dataStrings = split(inString, ':'); if (dataStrings.length == 2) { if (dataStrings[0].equals("RAW")) { for (int i = 0; i < dataStrings.length - 1; i++) { raw = float(dataString[i+1]); } } else { println(inString); } } } catch (Pengecualian e) { println("Tertangkap Pengecualian"); } }
Di sini Anda dapat melihat visualisasi pada gambar yang dilampirkan pada langkah ini. Data posisi yang diterima di ujung nodemcu juga terlihat pada serial monitor seperti terlihat pada gambar.
Langkah 5: KODE
Saya telah melampirkan repositori github. Anda dapat mengkloning & memotongnya untuk digunakan dalam proyek Anda.
kode_saya
Repo mencakup 2 sketsa arduino untuk pemancar (arduino+IMU) & penerima (Nodemcu+Servo).
Dan satu sketsa pemrosesan. Bintangi repo jika ini membantu dalam proyek Anda.
Dalam instruksi ini, R- Penerima & Pemancar T
Langkah 6: DEMONSTRASI VIDEO
Besok saya lampirkan videonya. Ikuti saya untuk mendapatkan pemberitahuan.
Terima kasih semua!
Direkomendasikan:
Cara Mengontrol Motor DC Gear dengan Menggunakan 160A Brushed Electronic Speed Controller dan Servo Tester: 3 Langkah
Cara Mengontrol Motor DC Gear dengan Menggunakan 160A Brushed Electronic Speed Controller dan Servo Tester: Spesifikasi: Tegangan: 2-3S Lipo atau 6-9 NiMH Arus kontinu: 35A Arus burst: 160A BEC: 5V / 1A, Mode mode linier: 1. maju &membalikkan; 2. maju &rem; 3. maju & rem & terbalik Berat: 34g Ukuran: 42*28*17mm
Tutorial ESP8266 NODEMCU BLYNK IOT - Esp8266 IOT Menggunakan Blunk dan Arduino IDE - Mengontrol LED Melalui Internet: 6 Langkah
Tutorial ESP8266 NODEMCU BLYNK IOT | Esp8266 IOT Menggunakan Blunk dan Arduino IDE | Mengontrol LED Melalui Internet: Hai Teman-teman, dalam instruksi ini kita akan belajar cara menggunakan IOT dengan ESP8266 atau Nodemcu kita. Kami akan menggunakan aplikasi blynk untuk itu. Jadi kami akan menggunakan esp8266/nodemcu kami untuk mengontrol LED melalui internet. Jadi aplikasi Blynk akan terhubung ke esp8266 atau Nodemcu kami
Mengontrol 3 Motor Servo Dengan 3 Potensiometer dan Arduino: 11 Langkah (dengan Gambar)
Mengontrol 3 Motor Servo Dengan 3 Potensiometer dan Arduino: Hai. Ini adalah instruksi pertama saya, jadi saya harap Anda akan bersabar dengan saya jika saya membuat kesalahan dalam mengaturnya. Ini ditulis untuk pemula, jadi yang lebih mahir di antara Anda dapat melewati banyak dari ini dan hanya memasangnya. Tujuannya saya tetapkan sendiri
Android (remotexy) UI untuk Mengontrol Motor Servo Menggunakan Arduino dan Bluetooth: 7 Langkah (dengan Gambar)
Android (remotexy) UI untuk Mengontrol Motor Servo Menggunakan Arduino dan Bluetooth: Dalam Instruksi ini saya akan memberi Anda langkah cepat untuk membuat Antarmuka Pengguna Android menggunakan Remotexy Interface Maker untuk mengontrol Motor Servo yang terhubung ke Arduino Mega melalui Bluetooth. Video ini menunjukkan bagaimana UI akan mengontrol kecepatan dan posisi motor servo
Menggunakan PSP Sebagai Joystick Komputer dan Kemudian Mengontrol Komputer Anda Dengan PSP: 5 Langkah (dengan Gambar)
Menggunakan PSP Sebagai Joystick Komputer dan Kemudian Mengontrol Komputer Anda Dengan PSP: Anda dapat melakukan banyak hal keren dengan homebrew PSP, dan dalam instruksi ini saya cam akan mengajari Anda cara menggunakan PSP sebagai joystick untuk bermain game, tetapi ada juga sebuah program yang memungkinkan Anda menggunakan joystick sebagai mouse. Berikut materinya