Isi kandungan:
- Langkah 1: MENGENAI PROJEK INI
- Langkah 2: Perkakasan Diperlukan
- Langkah 3: Litar & Sambungan
- Langkah 4: KERJA
- Langkah 5: KOD
- Langkah 6: DEMONSTRASI VIDEO
Video: Mengawal Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan Langkah HC-12: 6
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Dalam projek ini, kami mengawal kedudukan motor servo menggunakan mpu6050 dan HC-12 untuk komunikasi antara Arduino UNO dan ESP8266 NodeMCU.
Langkah 1: MENGENAI PROJEK INI
Ia adalah satu lagi projek IoT berdasarkan modul RF HC-12. Di sini, data imu (mpu6050) dari arduino digunakan untuk mengawal motor servo (dihubungkan dengan Nodemcu). Di sini, visualisasi data juga dilakukan di sisi arduino di mana data nada mpu6050 (putaran mengenai paksi-x) digambarkan dengan lakaran pemprosesan (dibincangkan kemudian). Pada dasarnya projek ini hanya sedikit pemanasan kerana mengingati pelbagai aspek kawalan Imu & Servo dengan Arduino dan ESP8266 nodemcu.
OBJEKTIF
Objektif ini cukup jelas, Kami mengawal kedudukan motor Servo menggunakan nilai nada IMU. Dan keseluruhan kedudukan motor dan kedudukan motor yang disegerakkan ini dilihat dengan Pemprosesan.
Langkah 2: Perkakasan Diperlukan
Modul Wifi NodeMCU ESP8266 12E
Papan roti tanpa solder
Kawat pelompat
MPU6050 accelo + gyro
Modul RF HC-12 (pasangan)
Motor servo SG90
Langkah 3: Litar & Sambungan
Sambungan lurus ke hadapan. Anda boleh menghidupkan servo dengan 3.3V Nodemcu anda. Anda juga boleh menggunakan Vin untuk menghidupkan servo jika nodemcu anda mempunyai voltan yang banyak pada pin itu. Tetapi kebanyakan papan Lolin tidak mempunyai 5V di Vin (bergantung pada pengeluarnya).
Gambarajah litar ini dibuat menggunakan EasyADA.
Langkah 4: KERJA
Sebaik sahaja sketsa arduino dimulakan, ia akan menghantar sudut nada (yang berkisar antara -45 hingga 45) ke penerima hc12 Nodemcu yang dipetakan dengan kedudukan Servo 0 hingga 180 darjah. Di sini kami menggunakan sudut nada dari -45 hingga +45 darjah sehingga kami dapat memetakannya dengan mudah ke posisi Servo.
Sekarang, anda berfikir mengapa kita hanya boleh menggunakan kaedah peta seperti berikut: -
int pos = peta (val, -45, 45, 0, 180);
Kerana sudut negatif yang dihantar 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)
Oleh itu, anda perlu memetakannya ke 0 hingga 180 sebagai
jika (val> = 0 && val <= 45) pos = (val * 2) +90; lain pos = (val-210) * 2;
Saya mengelakkan kaedah peta kerana terdapat kesilapan yang tidak berkaitan. Anda boleh mencubanya dan memberi komen yang sesuai dengan anda
jika (val> = 0 && val <= 45) pos = peta (val, 0, 45, 90, 180); pos lain = peta (val, 255, 210, 0, 90); // Argumen ke-4 boleh menjadi 2 (anda boleh menyemak)
Pengiraan 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 putaran mengenai paksi-x. Seperti yang anda lihat dalam gambar, imu saya diletakkan secara menegak di papan roti, jadi jangan mengelirukan dengan nada dan gulungan. Sebenarnya anda mesti selalu melihat sumbu dicetak pada papan pemecah.
Melalui perpustakaan ini, anda tidak perlu bersusah payah mengenai elektronik dalaman membaca daftar khusus untuk operasi tertentu. anda hanya menentukan kerja dan anda selesai!
Btw jika anda mahu mengira sudut sendiri. Anda boleh melakukannya dengan mudah seperti berikut:
#sertakan
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; batal persediaan () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (benar); Serial.begin (9600); } gelung kosong () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (palsu); 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 ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }
Tetapi, anda tidak perlu menulis kod sebanyak ini untuk mendapatkan sudut. Anda harus mengetahui fakta di belakang tabir tetapi menggunakan perpustakaan orang lain sangat berkesan dalam banyak projek. Anda boleh membaca mengenai imu ini dan pendekatan lain untuk mendapatkan lebih banyak data yang difilter dari pautan berikut: Explore-mpu6050.
Kod arduino saya di hujung penghantaran hanya mempunyai 30 baris dengan bantuan perpustakaan MPU6050_tockn jadi menggunakan perpustakaan adalah baik melainkan anda tidak memerlukan beberapa perubahan inti pada fungsi IMU. Perpustakaan bernama I2Cdev oleh Jeff Rowberg sangat membantu jika anda menginginkan beberapa data yang disaring menggunakan DMP (pemproses gerakan digital) IMU.
Integrasi dengan Pemprosesan
Di sini Pemprosesan digunakan untuk memvisualisasikan data putaran mengenai paksi-x IMU seperti yang dihitung dengan data mentah yang berasal dari MPU6050. Kami menerima data mentah yang masuk dalam SerialEvent dengan cara berikut:
batal serialEvent (Serial myPort) {
inString = myPort.readString (); cuba {// Uraikan data // println (inString); Rentetan dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {untuk (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i + 1]); }} lain {println (inString); }}} tangkapan (Pengecualian e) {println ("Tertangkap Pengecualian"); }}
Di sini anda dapat melihat visualisasi pada gambar yang dilampirkan dalam langkah ini. Data kedudukan yang diterima di hujung nodemcu juga dilihat pada monitor bersiri seperti yang ditunjukkan dalam gambar.
Langkah 5: KOD
Saya telah melampirkan repositori github. Anda boleh mengklon & garpu untuk digunakan dalam projek anda.
kod_ku
Repo ini merangkumi 2 sketsa arduino untuk pemancar (arduino + IMU) & penerima (Nodemcu + Servo).
Dan satu lakaran pemprosesan. Bintangi repo jika ini membantu dalam projek anda.
Dalam arahan ini, R- Penerima & T- Pemancar
Langkah 6: DEMONSTRASI VIDEO
Saya akan melampirkan videonya esok. Ikut saya untuk diberitahu.
Terima kasih semua!
Disyorkan:
Cara Mengawal Motor DC Gear dengan Menggunakan Pengawal Kelajuan Elektronik Brush 160A dan Servo Tester: 3 Langkah
Cara Mengawal Motor DC Gear dengan Menggunakan Pengawal Kelajuan Elektronik Brush 160A dan Penguji Servo: Spesifikasi: Voltan: 2-3S Lipo atau 6-9 NiMH Arus berterusan: 35A Arus pecah: 160A BEC: 5V / 1A, mod linear Mod: 1. ke hadapan &terbalik; 2. ke hadapan &brek; 3. ke hadapan & brek & Berat terbalik: 34g Saiz: 42 * 28 * 17mm
Tutorial ESP8266 NODEMCU BLYNK IOT - Esp8266 IOT Menggunakan IDE Blunk dan Arduino - Mengawal LED Melalui Internet: 6 Langkah
Tutorial ESP8266 NODEMCU BLYNK IOT | Esp8266 IOT Menggunakan IDE Blunk dan Arduino | Mengawal LED Melalui Internet: Hai Guys dalam instruksi ini kita akan belajar bagaimana menggunakan IOT dengan ESP8266 atau Nodemcu kami. Kami akan menggunakan aplikasi blynk untuk itu. Oleh itu, kami akan menggunakan esp8266 / nodemcu kami untuk mengawal LED melalui internet. Oleh itu, aplikasi Blynk akan disambungkan ke esp8266 atau Nodemcu kami
Cara Mengawal Lampu Cahaya / Rumah Menggunakan Arduino dan Amazon Alexa: 16 Langkah (dengan Gambar)
Cara Mengawal Lampu / Lampu Rumah Menggunakan Arduino dan Amazon Alexa: Saya telah menerangkan cara mengawal cahaya yang disambungkan ke UNO dan dikendalikan oleh Alexa
Cara Mengawal Motor DC Brushless Drone Quadcopter (Jenis 3 Wayar) dengan Menggunakan Pengawal Kelajuan Motor HW30A dan Arduino UNO: 5 Langkah
Cara Mengawal Motor DC Brushless Drone Quadcopter (Jenis 3 Wayar) dengan Menggunakan Pengawal Kelajuan Motor HW30A dan Arduino UNO: Penerangan: Pengawal Kelajuan Motor HW30A boleh digunakan dengan bateri LiPo 4-10 NiMH / NiCd atau 2-3 sel. BEC berfungsi dengan sehingga 3 sel LiPo. Ia dapat digunakan untuk mengawal kecepatan motor DC Brushless (3 wayar) dengan maksimum hingga 12Vdc.Spesifik
Android (remotexy) UI untuk Mengawal Motor Servo Menggunakan Arduino dan Bluetooth: 7 Langkah (dengan Gambar)
Android (remotexy) UI untuk Mengendalikan Motor Servo Menggunakan Arduino dan Bluetooth: Dalam Instruksional ini, saya akan memberi anda langkah cepat untuk membuat Antarmuka Pengguna Android menggunakan Remotexy Interface Maker untuk mengawal Motor Servo yang disambungkan ke Arduino Mega melalui Bluetooth. Video ini menunjukkan bagaimana UI akan mengawal kelajuan dan kedudukan motor servo