- Bahan yang Dibutuhkan:
- Diagram Sirkuit:
- Memberdayakan penyiapan Anda:
- Memprogram Arduino Anda:
- Mempersiapkan Aplikasi Android menggunakan Pemrosesan:
- Cara Kerja Arduino Inclinometer:
The MPU6050 adalah IC 3-axis accelerometer dan giroskop 3-axis digabungkan ke dalam satu unit. Ini juga menampung sensor suhu dan DCM untuk melakukan tugas yang kompleks. MPU6050 biasanya digunakan untuk membuat Drone dan robot jarak jauh lainnya seperti robot penyeimbang diri. Dalam proyek ini kita akan belajar bagaimana menggunakan MPU6050 dibangun sebuah Inclinometer atau Spirit Leveler. Seperti yang kita ketahui, inclinometer digunakan untuk memeriksa apakah permukaan benar-benar rata atau tidak, tersedia baik sebagai sprit bubble atau sebagai meter digital. Dalam proyek ini, kami akan membangun Inklinometer Digital yang dapat dipantau menggunakan aplikasi Android. Alasan menggunakan tampilan jarak jauh seperti ponsel adalah karena kita dapat memantau nilai dari MPU6050 tanpa harus melihat perangkat kerasnya, ini akan sangat berguna ketika MPU6050 ditempatkan pada drone atau lokasi lain yang tidak dapat diakses.
Bahan yang Dibutuhkan:
- Arduino Pro-mini (5V)
- MPU6050 Gyro Sensor
- Modul Bluetooth HC-05 atau HC-06
- Papan FTDI
- Papan tempat memotong roti
- Menghubungkan kabel
- Ponsel Pintar
Diagram Sirkuit:
Diagram rangkaian lengkap untuk Proyek Sensor Kemiringan Arduino ini ditunjukkan di bawah ini. Ini hanya memiliki tiga komponen dan dapat dengan mudah dibangun di atas papan tempat memotong roti.
The MPU6050 berkomunikasi dengan bantuan I2C dan karenanya pin SDA terhubung ke pin A4 dari Arduino yang merupakan pin SDA dan pin SCL terhubung ke pin A5 dari Arduino. The HC-06 Modul Bluetooth bekerja dengan bantuan komunikasi Serial maka pin Rx dari Bluetooth terhubung ke pin D11 dan pin Tx dari Bluetooth terhubung ke pin D10 dari Arduino. Pin D10 dan D11 ini akan dikonfigurasi sebagai pin Serial dengan memprogram Arduino. Modul HC-05 dan modul MSP6050 beroperasi pada + 5V dan karenanya didukung oleh pin Vcc dari Arduino seperti yang ditunjukkan di atas.
Saya menggunakan beberapa kabel penghubung papan tempat memotong roti dan membangun set-up di atas papan tempat memotong roti kecil. Setelah koneksi selesai, papan saya terlihat seperti ini di bawah ini.
Memberdayakan penyiapan Anda:
Anda dapat menyalakan sirkuit Anda melalui papan pemrograman FTDI seperti yang telah saya lakukan, atau menggunakan baterai 9V atau adaptor 12V dan menghubungkannya ke pin Raw Arduino pro mini. Arduino Pro-mini memiliki pengatur tegangan built-in yang akan mengubah tegangan eksternal yang diatur + 5V ini.
Memprogram Arduino Anda:
Setelah perangkat keras siap, kita dapat mulai memprogram Arduino kita. Seperti biasa, kode lengkap untuk proyek ini dapat ditemukan di bagian bawah halaman ini. Tetapi untuk memahami proyek dengan lebih baik, saya telah memecahkan kode menjadi celah kecil dan menjelaskannya sebagai langkah-langkah di bawah ini.
Langkah pertama akan menghubungkan MPU6050 dengan Arduino. Untuk proyek ini kami akan menggunakan perpustakaan yang dikembangkan oleh Korneliusz yang dapat diunduh dari tautan di bawah ini
MPU6050 Liberty - Korneliusz Jarzebski
Unduh file ZIP dan tambahkan ke Arduino IDE Anda. Kemudian menuju ke File-> Contoh-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Ini akan membuka program contoh yang menggunakan pustaka yang baru saja kita unduh. Jadi klik unggah dan tunggu programnya diunggah ke Arduino Pro mini Anda. Setelah selesai, buka monitor serial Anda dan atur baud rate Anda ke 115200 dan periksa apakah Anda mendapatkan yang berikut ini.
Awalnya, ketiga nilai akan menjadi nol, tetapi saat Anda memindahkan papan tempat memotong roti, Anda dapat mengamati nilai-nilai ini berubah. Jika mereka mengubahnya berarti koneksi Anda sudah benar, kalau tidak periksa koneksi Anda. Luangkan waktu sejenak di sini, perhatikan bagaimana tiga nilai Pitch Roll dan Yaw bervariasi sesuai dengan cara Anda memiringkan sensor. Jika Anda bingung tekan tombol reset pada Arduino dan nilainya akan diinisialisasi ke nol lagi, kemudian miringkan sensor ke satu arah dan periksa nilai mana yang bervariasi. Gambar di bawah ini akan membantu Anda untuk lebih memahami.
Dari ketiga parameter ini kami hanya tertarik pada Roll and Pitch. Nilai Gulung akan memberitahu kita tentang kecenderungan di X-axis dan nilai pitch akan memberitahu kita tentang kecenderungan di Y-Axis. Sekarang kita telah memahami dasar-dasarnya, mari kita mulai memprogram Arduino untuk membaca nilai-nilai ini, mengirimkannya ke Arduino melalui Bluetooth. Seperti biasa, mari kita mulai dengan memasukkan semua pustaka yang diperlukan untuk proyek ini
#include
Kemudian kami menginisialisasi serial perangkat lunak untuk modul Bluetooth. Ini dimungkinkan karena pustaka Serial Perangkat Lunak di Arduino, pin IO dapat diprogram untuk berfungsi sebagai pin Serial. Di sini kami menggunakan pin digital D10 dan D11, di mana D10 id Rx dan D11 adalah Tx.
SoftwareSerial BT (10, 11); // RX, TX
Diikuti dengan itu kami menginisialisasi variabel dan objek yang diperlukan untuk program dan pindah ke fungsi setup () di mana kami menentukan baud rate untuk monitor Serial dan Bluetooth. Untuk HC-05 dan HC-06, baud rate-nya adalah 9600 jadi wajib digunakan. Kemudian kami periksa apakah bus IIC Arduino terhubung ke MPU6050 jika tidak kami mencetak pesan peringatan dan tetap di sana selama perangkat terhubung. Setelah itu, kami mengkalibrasi Gyro dan mengatur nilai ambangnya menggunakan fungsinya masing-masing seperti yang ditunjukkan di bawah ini.
void setup () {Serial.begin (115200); BT. Mulai (9600); // mulai komunikasi Bluetooth pada 9600 baudrate // Inisialisasi MPU6050 sementara (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Tidak dapat menemukan sensor MPU6050 yang valid, periksa kabel!"); penundaan (500); } mpu.calibrateGyro (); // Kalibrasi giroskop selama start mpu.setThreshold (3); // Mengontrol kepekaan}
Baris “ mpu.calibrateGyro ();” mengkalibrasi MPU6050 untuk posisi tempatnya saat ini. Baris ini dapat dipanggil beberapa kali di dalam program setiap kali MPU6050 perlu dikalibrasi dan semua nilai disetel ke nol. “Mpu.setThreshold (3);” fungsi ini mengontrol seberapa besar nilai bervariasi untuk gerakan pada sensor nilai yang terlalu rendah akan meningkatkan kebisingan jadi berhati-hatilah saat mengutak-atik ini.
Di dalam void loop (), kami berulang kali membaca nilai Gyroscope dan Sensor suhu menghitung nilai pitch, roll dan yaw, mengirimkannya ke modul Bluetooth. Dua baris berikut akan membaca nilai Gyro mentah dan nilai suhu
Norma vektor = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Selanjutnya, kita menghitung pitch, roll, dan yaw dengan mengalikannya dengan time step dan menjumlahkannya dengan nilai sebelumnya. Sebuah timestep tidak lain adalah interval antara pembacaan berturut-turut.
nada = nada + norma. YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Untuk memahami langkah waktu dengan lebih baik, mari kita lihat baris di bawah ini. Baris ini ditempatkan untuk membaca nilai dari MPU6050 tepat pada interval 10mS atau 0,01 Detik. Jadi kami mendeklarasikan nilai timeStep sebagai 0,01. Dan gunakan baris di bawah ini untuk mengadakan program jika masih ada waktu tersisa. (millis () - timer ()) memberikan waktu yang dibutuhkan program untuk mengeksekusi sejauh ini. Kami hanya menguranginya dengan 0,01 detik dan untuk waktu yang tersisa kami hanya menahan program kami di sana menggunakan fungsi penundaan.
penundaan ((timeStep * 1000) - (milis () - timer));
Setelah kita selesai membaca dan menghitung nilainya, kita dapat mengirimkannya ke ponsel kita melalui Bluetooth. Tapi ada batasan di sini. Modul Bluetooth yang kami gunakan hanya dapat mengirim 1 byte (8 bit) yang memungkinkan kami untuk mengirim angka hanya dari 0 hingga 255. Jadi kami harus membagi nilai kami dan memetakannya di dalam rentang ini. Ini dilakukan oleh baris berikut
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Seperti yang dapat Anda ketahui, nilai roll dipetakan menjadi 0 hingga 100 ke dalam variabel x dan pitch dipetakan ke 100 hingga 200 ke dalam variabel y dan suhu dipetakan ke 200 dan di atasnya ke dalam variabel t. Kami dapat menggunakan informasi yang sama untuk mengambil data dari apa yang telah kami kirimkan. Akhirnya kami menulis nilai-nilai ini melalui Bluetooth menggunakan baris berikut.
BT. Tulis (x); BT.write (y); BT.write (t);
Jika Anda telah memahami program lengkapnya, gulir ke bawah untuk melihat programnya dan unggah ke papan Arduino.
Mempersiapkan Aplikasi Android menggunakan Pemrosesan:
Aplikasi android untuk Arduino Inclinometer ini dikembangkan menggunakan Processing IDE. Ini sangat mirip dengan Arduino dan dapat digunakan untuk membuat aplikasi sistem, aplikasi Android, desain web dan banyak lagi. Kami telah menggunakan pemrosesan untuk mengembangkan beberapa proyek keren kami lainnya yang tercantum di bawah ini
- Game Ping Pong menggunakan Arduino
- Radio FM Terkendali Ponsel Cerdas menggunakan Pemrosesan.
- Sistem Radar Arduino menggunakan Processing dan Ultrasonic Sensor
Namun, tidak mungkin untuk menjelaskan kode lengkap tentang cara membuat aplikasi ini. Jadi, Anda memiliki dua cara untuk membahas ini. Anda dapat mengunduh file APK dari tautan di bawah ini dan menginstal aplikasi android langsung di ponsel Anda. Atau gulir di bawah untuk menemukan kode pemrosesan lengkap dan pelajari sendiri cara kerjanya
Di dalam file ZIP, Anda dapat menemukan folder bernama data yang terdiri dari semua gambar dan sumber lain yang akan dimuat ke dalam aplikasi android. Baris di bawah ini memutuskan ke nama mana Bluetooth harus terhubung secara otomatis
bt.connectToDeviceByName ("HC-06");
Di dalam fungsi draw () , hal-hal akan dieksekusi berulang kali di sini kita menggambar gambar, menampilkan teks dan menganimasikan bilah berdasarkan nilai dari modul Bluetooth. Anda dapat memeriksa apa yang terjadi di dalam setiap fungsi dengan membaca seluruh program.
void draw () // Loop tak terbatas {background (0); imageMode (CENTER); gambar (logo, lebar / 2, tinggi / 1,04, lebar, tinggi / 12); memuat gambar(); textfun (); getval (); }
Terakhir, ada satu hal penting yang harus dijelaskan, ingat bahwa kita membagi nilai pitch, roll dan temp menjadi 0 hingga 255. Jadi di sini kita kembali mengembalikannya ke nilai normal dengan membalikkan pemetaan ke nilai normal.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; lain jika (info> 200) temp = info -200; println (temp, x, y);
Ada banyak cara yang lebih baik untuk mendapatkan data dari modul Bluetooth ke ponsel, tetapi karena ini hanya proyek hobi kami telah mengabaikannya, Anda dapat menggali lebih dalam jika tertarik.
Cara Kerja Arduino Inclinometer:
Setelah kamu siap dengan Hardware dan Aplikasinya, sekarang saatnya bersenang-senang dengan apa yang telah kita bangun. Unggah Kode Arduino ke papan, Anda juga dapat menghapus komentar pada baris Serial.println dan memeriksa apakah perangkat keras berfungsi seperti yang diharapkan menggunakan monitor serial. Bagaimanapun, itu sepenuhnya opsional.
Setelah kode diunggah, luncurkan aplikasi Android di ponsel Anda. Aplikasi akan secara otomatis terhubung ke modul HC-06 Anda dan akan menampilkan "Hubungkan ke: HC-06" di bagian atas aplikasi seperti yang ditunjukkan di bawah ini.
Awalnya, semua nilai akan menjadi nol kecuali untuk nilai suhu. Ini karena Arduino telah mengkalibrasi MPU-6050 untuk posisi ini sebagai referensi, sekarang Anda dapat memiringkan perangkat keras dan memeriksa apakah nilai pada aplikasi seluler juga berubah seiring dengan animasi. Kerja lengkap aplikasi dapat ditemukan di video yang diberikan di bawah ini. Jadi sekarang Anda dapat menempatkan papan tempat memotong roti di mana saja dan memeriksa apakah permukaannya rata dengan sempurna.
Semoga Anda memahami proyek ini dan mempelajari sesuatu yang bermanfaat darinya. Jika Anda ragu, silakan gunakan bagian komentar di bawah atau forum untuk menyelesaikannya.