- Apakah sensor Accelerometer dan Gyroscopic?
- MPU6050 Accelerometer and Gyroscopic Sensor Module
- Komponen Diperlukan
- Rajah Litar
- Penjelasan Pengaturcaraan
The MPU6050 adalah IC 3-paksi pecutan dan giroskop 3-axis digabungkan ke dalam satu unit. Ia juga menempatkan sensor suhu dan DCM untuk melakukan tugas yang rumit. MPU6050 biasanya digunakan dalam membangun Drone dan robot jauh lain seperti robot pengimbang diri. Dalam projek ini kami akan membina Digital Protractor menggunakan MPU6050 dan Arduino. Di sini motor servo digunakan untuk memaparkan sudut pada gambar protraktor. Poros motor servo dilekatkan dengan jarum yang akan berputar pada gambar protraktor untuk menunjukkan sudut yang juga dipaparkan pada paparan 16xLCD. Sebelum mengetahui lebih lanjut mari kita pelajari mengenai sensor Giroskop.
Apakah sensor Accelerometer dan Gyroscopic?
Accelerometer digunakan untuk mengukur pecutan. Ia sebenarnya merasakan pecutan statik dan dinamik. Sebagai contoh, telefon bimbit menggunakan sensor akselerometer untuk merasakan bahawa telefon bimbit berada dalam mod landskap atau mod potret. Kami sebelum ini menggunakan Accelerometer dengan Arduino untuk membina banyak projek seperti:
Giroskop digunakan untuk mengukur halaju sudut yang menggunakan graviti bumi untuk menentukan orientasi objek dalam gerakan. Halaju sudut adalah kadar perubahan kedudukan sudut badan berpusing.
Contohnya, telefon bimbit hari ini menggunakan sensor giroskopik untuk bermain permainan mudah alih mengikut orientasi telefon bimbit. Juga, alat dengar VR menggunakan sensor giroskop untuk mempunyai pandangan dalam orientasi 360
Jadi sementara akselerometer dapat mengukur pecutan linier, giroskop dapat membantu mencari pecutan putaran. Apabila menggunakan kedua-dua sensor sebagai modul yang terpisah, sukar untuk mencari orientasi, kedudukan dan halaju. Tetapi dengan menggabungkan dua sensor itu berfungsi sebagai Unit Pengukuran Inersia (IMU). Oleh itu, dalam modul MPU6050, akselerometer dan giroskop hadir pada satu PCB untuk mencari arah, kedudukan dan halaju.
Permohonan:
- Digunakan di Drones untuk kawalan arah
- Robot mengimbangkan diri
- Kawalan lengan robot
- Sensor kecondongan
- Digunakan dalam telefon bimbit, konsol permainan video
- Robot Humanoid
- Digunakan dalam Pesawat Udara, Automotif dll.
MPU6050 Accelerometer and Gyroscopic Sensor Module
MPU6050 adalah Sistem Elektro-Mekanikal Mikro (MEMS) yang terdiri daripada Accelerometer 3 paksi dan Giroskop 3 paksi di dalamnya. Ia juga mempunyai sensor suhu.
Ia dapat mengukur:
- Pecutan
- Halaju
- Orientasi
- Perpindahan
- Suhu
Modul ini juga mempunyai (DMP) Digital Motion Processor di dalamnya yang cukup kuat untuk melakukan pengiraan yang kompleks dan dengan itu membebaskan kerja untuk Mikrokontroler.
Modul ini juga mempunyai dua pin tambahan yang dapat digunakan untuk menghubungkan modul IIC luaran seperti magnetometer. Oleh kerana alamat IIC modul dapat dikonfigurasi, lebih dari satu sensor MPU6050 dapat dihubungkan ke Mikrokontroler menggunakan pin AD0.
Ciri & Spesifikasi:
- Bekalan Kuasa: 3-5V
- Komunikasi: protokol I2C
- ADC 16-bit terbina dalam memberikan ketepatan yang tinggi
- DMP terbina dalam memberikan kuasa pengiraan yang tinggi
- Boleh digunakan untuk berinteraksi dengan peranti IIC lain seperti magnetometer
- Alamat IIC yang boleh dikonfigurasi
- Sensor suhu terbina dalam
Pinout MPU6050:
Nombor PIN | Nama Pin | Gunakan |
1 | Vcc | Memberi kuasa untuk modul, dapat + 3V hingga + 5V. Biasanya + 5V digunakan |
2 | Tanah | Bersambung ke Ground of system |
3 | Jam Bersiri (SCL) | Digunakan untuk menyediakan nadi jam untuk Komunikasi I2C |
4 | Data Bersiri (SDA) | Digunakan untuk memindahkan Data melalui komunikasi I2C |
5 | Data Siri Tambahan (XDA) | Boleh digunakan untuk antara muka modul I2C lain dengan MPU6050. Ia adalah pilihan |
6 | Jam Bersiri Tambahan (XCL) | Boleh digunakan untuk antara muka modul I2C lain dengan MPU6050. Ia adalah pilihan |
7 | AD0 | Sekiranya lebih daripada satu MPU6050 digunakan satu MCU, maka pin ini dapat digunakan untuk mengubah alamat |
8 | Ganggu (INT) | Pin interrupt untuk menunjukkan bahawa data tersedia untuk dibaca oleh MCU. |
Kami sebelumnya menggunakan MPU6050 dengan Arduino untuk membina Self Balancing Robot and Inclinometer.
Komponen Diperlukan
- Arduino UNO
- Modul Giroskop MPU6050
- Paparan LCD 16x2
- Potensiometer 10k
- Motor Servo SG90
- Gambar Protraktor
Rajah Litar
Gambarajah litar untuk DIY Arduino Protractor ini diberikan di bawah:
Sambungan Litar antara Arduino UNO dan MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Sambungan Litar antara Arduino UNO dan Servo Motor:
Motor Servo |
Arduino UNO |
MERAH (VCC) |
+ 5V |
ORANGE (PWM) |
9 |
BROWN (GND) |
GND |
Sambungan Litar antara Arduino UNO dan 16x2 LCD:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Ke PIN Pusat Potensiometer Untuk Mengawal Kontras LCD |
RS |
2 |
RW |
GND |
E |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
A |
+ 5V |
K |
GND |
Penjelasan Pengaturcaraan
Seperti biasa program lengkap dengan video Demonstrasi diberikan pada akhir tutorial ini.
Di sini motor servo dihubungkan dengan Arduino dan porosnya diproyeksikan pada gambar protraktor yang menunjukkan sudut MPU6050 condong. Pengaturcaraan untuk tutorial ini mudah. Mari lihat secara terperinci.
Pertama, sertakan semua perpustakaan yang diperlukan - Perpustakaan Servo Motor untuk menggunakan Servo, perpustakaan LCD untuk menggunakan perpustakaan LCD dan Wire untuk menggunakan komunikasi I2C.
MPU6050 menggunakan Komunikasi I2C dan oleh itu, ia mesti dihubungkan hanya ke Pin I2C Arduino. Jadi, perpustakaan Wire.h digunakan untuk menjalin komunikasi antara Arduino UNO dan MPU6050. Kami sebelum ini menghubungkan MPU6050 dengan Arduino dan memaparkan nilai koordinat x, y, z pada LCD 16x2.
#sertakan
Seterusnya tentukan pin paparan LCD RS, E, D4, D5, D6, D7 yang disambungkan dengan Arduino UNO.
LiquidCrystal lcd (2,3,4,5,6,7);
Seterusnya alamat I2C MPU6050 ditentukan.
const int MPU_addr = 0x68;
Kemudian mulakan objek myservo kerana menggunakan kelas Servo dan tiga pemboleh ubah untuk menyimpan nilai paksi X, Y dan Z.
Servo myservo; int16_t axis_X, axis_Y, axis_Z;
Nilai minimum dan maksimum seterusnya ditetapkan sebagai 265 dan 402 untuk mengukur sudut dari 0 hingga 360.
int minVal = 265; int maxVal = 402;
persediaan tidak sah ():
Dalam fungsi setup void pertama komunikasi I2C dimulakan dan penghantaran telah dimulakan dengan MPU6050 dengan alamat 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Letakkan MPU6050 dalam Mode Tidur dengan menulis 0x6B dan kemudian bangunkannya dengan menulis 0
Wire.write (0x6B); Wire.write (0);
Setelah menjadikan MPU6050 aktif, tamatkan transmisi
Wire.endTransmission (benar);
Di sini pin PWM motor Servo disambungkan dengan Arduino UNO pin 9.
myservo.attach (9);
Sebaik sahaja kami menghidupkan litar, LCD memaparkan mesej selamat datang dan membersihkannya selepas 3 saat
lcd.begin (16,2); // Menetapkan LCD dalam mod 16X2 lcd.print ("CIRCUIT DIGEST"); kelewatan (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); kelewatan (3000); lcd.clear ();
gelung kosong ():
Sekali lagi, komunikasi I2C dimulakan dengan MPU6050.
Wire.beginTransmission (MPU_addr);
Kemudian mulakan dengan mendaftar 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Sekarang prosesnya dimulakan semula oleh transmisi set end sebagai salah tetapi sambungannya aktif.
Wire.endTransmission (palsu);
Selepas itu sekarang minta data dari 14 daftar.
Wire.requestFrom (MPU_addr, 14, benar);
Nilai daftar paksi yang dihormati sekarang (x, y, z) diperoleh dan disimpan dalam pemboleh ubah axis_X, axis_Y, axis_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Kemudian petakan nilai tersebut dari 265 hingga 402 sebagai -90 hingga 90. Ini dilakukan untuk ketiga-tiga paksi.
int xAng = peta (axis_X, minVal, maxVal, -90,90); int yAng = peta (axis_Y, minVal, maxVal, -90,90); int zAng = peta (axis_Z, minVal, maxVal, -90,90);
Formula untuk mengira nilai x dalam darjah (0 hingga 360) diberikan di bawah. Di sini kita menukar hanya x kerana putaran motor servo berdasarkan pergerakan nilai x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Nilai sudut X, dari 0 hingga 360 deg, ditukar menjadi 0 hingga 180.
int pos = peta (x, 0,180,0,180);
Kemudian tuliskan nilai sudut untuk memutar servo pada gambar protraktor dan Cetak nilai tersebut pada paparan LCD 16x2.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Sudut"); lcd.setCursor (0,1); lcd.print (x); kelewatan (500); lcd.clear ();
Jadi ini adalah bagaimana MPU6050 dengan Arduino dapat digunakan untuk mengukur sudut. Kod dan video lengkap untuk projek ini diberikan di bawah.