Daftar Isi:

Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12: 6 Langkah
Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12: 6 Langkah

Video: Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12: 6 Langkah

Video: Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12: 6 Langkah
Video: Penjelasan & Cara Program Control Motor Servo dengan Sensor MPU-6050 ( Accelerometer dan Gyroscope ) 2024, November
Anonim
Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12
Mengontrol Servo Menggunakan MPU6050 Antara Arduino dan ESP8266 Dengan HC-12

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

Sirkuit & Koneksi
Sirkuit & Koneksi
Sirkuit & Koneksi
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

BEKERJA
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: