- Bahan yang Diperlukan:
- Rajah Litar:
- Menguatkan persediaan anda:
- Memprogram Arduino anda:
- Menyiapkan Aplikasi Android menggunakan Pemprosesan:
- Kerja Arduino Inclinometer:
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 kita akan belajar bagaimana menggunakan MPU6050 yang dibina Inclinometer atau Spirit Leveler. Seperti yang kita ketahui, inclinometer digunakan untuk memeriksa sama ada permukaannya diratakan dengan sempurna atau tidak, ia boleh didapati sebagai gelembung sprit atau sebagai meter digital. Dalam projek ini, kami akan membangun Digital Inclinometer yang dapat dipantau menggunakan aplikasi Android. Alasan untuk menggunakan paparan jauh seperti telefon bimbit adalah bahawa kita dapat memantau nilai dari MPU6050 tanpa harus melihat perkakasan, ini akan sangat berguna ketika MPU6050 diletakkan di drone atau beberapa lokasi lain yang tidak dapat diakses.
Bahan yang Diperlukan:
- Arduino Pro-mini (5V)
- Sensor Gyro MPU6050
- Modul Bluetooth HC-05 atau HC-06
- Papan FTDI
- Papan roti
- Menyambung wayar
- Telefon Pintar
Rajah Litar:
Gambarajah litar lengkap untuk Projek Arduino Tilt Sensor ini ditunjukkan di bawah. Ia hanya mempunyai tiga komponen dan boleh dibina dengan mudah di atas papan roti.
The MPU6050 berkomunikasi dengan bantuan I2C dan dengan itu pin SDA disambungkan ke pin A4 untuk Arduino yang pin SDA dan SCL pin disambungkan kepada pin A5 untuk Arduino. The HC-06 Modul Bluetooth berfungsi dengan bantuan komunikasi bersiri itu pin Rx daripada Bluetooth disambungkan kepada pin D11 dan pin Tx daripada Bluetooth disambungkan kepada pin D10 daripada Arduino. Pin D10 dan D11 ini akan dikonfigurasi sebagai pin bersiri dengan memprogram Arduino. Modul HC-05 dan modul MSP6050 beroperasi pada + 5V dan oleh itu mereka digerakkan oleh pin Vcc Arduino seperti yang ditunjukkan di atas.
Saya menggunakan beberapa wayar penghubung papan roti dan membina pemasangan di atas papan roti kecil. Setelah sambungan selesai, papan saya kelihatan seperti di bawah.
Menguatkan persediaan anda:
Anda boleh menghidupkan litar anda melalui papan pengaturcaraan FTDI seperti yang saya lakukan, atau menggunakan bateri 9V atau penyesuai 12V dan menyambungkannya ke pin Raw mini pro Arduino. Arduino Pro-mini mempunyai pengatur voltan dalaman yang akan menukar voltan luaran ini yang dikawal selia + 5V.
Memprogram Arduino anda:
Setelah perkakasan siap, kita boleh mula memprogram Arduino kita. Seperti biasa, kod lengkap untuk projek ini terdapat di bahagian bawah halaman ini. Tetapi untuk memahami projek ini dengan lebih baik, saya telah memecahkan kodnya kepada sedikit perubahan dan menerangkannya sebagai langkah di bawah.
Langkah pertama adalah menghubungkan MPU6050 dengan Arduino. Untuk projek ini, kami akan menggunakan perpustakaan yang dibangunkan oleh Korneliusz yang boleh dimuat turun dari pautan di bawah
MPU6050 Liberty - Korneliusz Jarzebski
Muat turun fail ZIP dan tambahkan ke Arduino IDE anda. Kemudian pergi ke Fail-> Contoh-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Ini akan membuka program contoh yang menggunakan perpustakaan yang baru sahaja kami muat turun. Oleh itu, klik pada muat naik dan tunggu sehingga program dimuatkan ke Arduino Pro mini anda. Setelah selesai, buka monitor bersiri anda dan tetapkan kadar baud anda ke 115200 dan periksa apakah anda mendapat yang berikut.
Pada mulanya, ketiga-tiga nilai akan menjadi sifar, tetapi semasa anda menggerakkan papan roti anda, anda dapat melihat nilai-nilai ini berubah. Sekiranya mereka mengubahnya, ini bermakna sambungan anda betul, jika tidak, periksa sambungan anda. Luangkan sedikit masa di sini perhatikan bagaimana ketiga - tiga nilai Pitch Roll dan Yaw berbeza mengikut cara anda memiringkan sensor anda. Sekiranya anda keliru tekan butang reset pada Arduino dan nilainya akan dimulakan ke nol lagi, kemudian condongkan sensor ke satu arah dan periksa nilai mana yang berbeza-beza. Gambar di bawah akan membantu anda memahami dengan lebih baik.
Dari ketiga parameter ini, kami hanya berminat dengan Roll and Pitch. Nilai Roll akan memberitahu kita mengenai kecenderungan paksi-X dan nilai Pitch akan memberitahu kita mengenai kecenderungan dalam Paksi-Y. Sekarang setelah kita memahami asas-asasnya, mari kita mulai memprogram Arduino untuk membaca nilai-nilai ini mengirimkannya ke Arduino melalui Bluetooth. Seperti biasa mari kita mulakan dengan memasukkan semua perpustakaan yang diperlukan untuk projek ini
#sertakan
Kemudian kami memulakan siri perisian untuk modul Bluetooth. Ini mungkin kerana perpustakaan Serial Perisian di Arduino, pin IO dapat diprogramkan untuk berfungsi sebagai pin Serial. Di sini kita 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 pemboleh ubah dan objek yang diperlukan untuk program dan beralih ke fungsi setup () di mana kami menentukan laju baud untuk Serial monitor dan Bluetooth. Untuk HC-05 dan HC-06, kadar baud adalah 9600 jadi wajib menggunakan yang sama. Kemudian kami memeriksa sama ada bas IIC Arduino disambungkan ke MPU6050 jika tidak, kami mencetak mesej amaran dan tetap berada di sana selama peranti disambungkan. Selepas itu, kami menentukur Gyro dan menetapkan nilai ambangnya menggunakan fungsi masing-masing seperti yang ditunjukkan di bawah.
persediaan tidak sah () {Serial.begin (115200); BT.begin (9600); // mulakan komunikasi Bluetooth pada 9600 baudrate // Mulakan MPU6050 sementara (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Tidak dapat mencari sensor MPU6050 yang sah, periksa pendawaian!"); kelewatan (500); } mpu.calibrateGyro (); // Kalibrasi giroskop semasa memulakan mpu.setThreshold (3); // Mengawal kepekaan}
Garis " mpu.calibrateGyro ();" kalibrasi MPU6050 untuk kedudukan di mana ia berada sekarang. Garis ini dapat disebut berkali-kali di dalam program setiap kali MPU6050 perlu dikalibrasi dan semua nilai ditetapkan ke nol. "Mpu.setThreshold (3);" fungsi ini mengawal seberapa banyak nilainya berbeza untuk pergerakan pada sensor. Nilai yang terlalu rendah akan meningkatkan kebisingan jadi berhati-hati sambil bermain-main dengan ini.
Di dalam gelung kekosongan (), kami berulang kali membaca nilai-nilai Giroskop dan sensor Suhu mengira nilai nada, gulungan dan menguap, mengirimkannya ke modul Bluetooth. Dua baris berikut akan membaca nilai Gyro mentah dan nilai suhu
Norma vektor = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Seterusnya, kami mengira nada, gulungan, dan menguap dengan mengalikan dengan langkah masa dan menambahkannya ke nilai sebelumnya. A timeStep hanyalah tempoh antara bacaan berturut-turut.
pitch = pitch + norma.YAxis * masaLangkah; roll = roll + norma.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Untuk memahami langkah masa dengan lebih baik mari kita perhatikan baris di bawah. Garis ini diletakkan untuk membaca nilai dari MPU6050 tepat pada selang 10mS atau 0.01 Detik. Oleh itu, kami menyatakan nilai TimeStep sebagai 0.01. Dan gunakan garis di bawah untuk menahan program jika ada jika ada lebih banyak masa yang tersisa. (milis () - pemasa ()) memberikan masa yang diperlukan untuk pelaksanaan program setakat ini. Kami hanya mengurangkannya dengan 0.01 saat dan untuk masa yang tinggal, kami hanya mengadakan program kami di sana menggunakan fungsi kelewatan.
kelewatan ((timeStep * 1000) - (milis () - pemasa));
Setelah selesai membaca dan mengira nilainya, kami dapat menghantarnya ke telefon kami melalui Bluetooth. Tetapi ada tangkapan di sini. Modul Bluetooth yang kita gunakan hanya dapat mengirim 1 bait (8 bit) yang membolehkan kita menghantar nombor hanya dari 0 hingga 255. Oleh itu, kita harus membahagikan nilai dan memetakannya dalam julat ini. Ini dilakukan oleh baris berikut
if (roll> -100 && roll <100) x = peta (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = peta (nada, -100, 100, 100, 200); jika (temp> 0 && temp <50) t = 200 + int (temp);
Seperti yang anda ketahui, nilai gulungan dipetakan menjadi 0 hingga 100 ke dalam pemboleh ubah x dan nada dipetakan menjadi 100 hingga 200 ke dalam pemboleh ubah y dan temp dipetakan menjadi 200 dan ke atas menjadi pemboleh ubah t. Kami dapat menggunakan maklumat yang sama untuk mengambil data dari apa yang telah kami kirimkan. Akhirnya kami menulis nilai-nilai ini melalui Bluetooth menggunakan baris berikut.
BT.write (x); BT.write (y); BT.write (t);
Sekiranya anda memahami program yang lengkap, tatal ke bawah untuk melihat program dan muat naik ke papan Arduino.
Menyiapkan Aplikasi Android menggunakan Pemprosesan:
Aplikasi android untuk Arduino Inclinometer ini dikembangkan menggunakan Processing IDE. Ini sangat mirip dengan Arduino dan boleh digunakan untuk membuat aplikasi sistem, aplikasi Android, reka bentuk web dan banyak lagi. Kami telah menggunakan pemprosesan untuk mengembangkan beberapa projek hebat kami yang disenaraikan di bawah
- Permainan Ping Pong menggunakan Arduino
- Telefon Pintar Dikendalikan Radio FM menggunakan Pemprosesan.
- Sistem Radar Arduino menggunakan Pemprosesan dan Sensor Ultrasonik
Walau bagaimanapun, tidak mungkin untuk menerangkan kod lengkap mengenai cara membuat aplikasi ini. Oleh itu, anda mempunyai dua cara untuk mengatasi perkara ini. Anda boleh memuat turun fail APK dari pautan di bawah dan memasang aplikasi android terus di telefon anda. Atau tatal di bawah untuk mencari kod pemprosesan yang lengkap dan pelajari sendiri cara kerjanya
Di dalam fail ZIP, anda dapat mencari folder bernama data yang terdiri dari semua gambar dan sumber lain yang akan dimuat ke dalam aplikasi android. Garis di bawah memutuskan untuk nama mana Bluetooth harus disambungkan secara automatik
bt.connectToDeviceByName ("HC-06");
Di dalam fungsi draw () , perkara akan dilaksanakan berulang kali di sini kita melukis gambar, memaparkan teks dan menghidupkan bar berdasarkan nilai-nilai yang membentuk modul Bluetooth. Anda boleh memeriksa apa yang berlaku di dalam setiap fungsi dengan membaca program.
undian tidak sah () // Gelung tak terhingga {latar belakang (0); imageMode (PUSAT); gambar (logo, lebar / 2, tinggi / 1.04, lebar, tinggi / 12); load_images (); textfun (); getval (); }
Akhirnya, ada satu perkara yang lebih penting untuk dijelaskan, ingat bahawa kita membahagikan nilai pitch, roll dan temp ke 0 hingga 255. Jadi di sini kita sekali lagi membawanya kembali ke nilai normal dengan memetakannya kembali ke nilai normal.
jika (maklumat <100 && info> 0) x = peta (maklumat, 0, 100, - (lebar / 1.5) / 3, + (lebar / 1.5) / 3); // x = maklumat; lain jika (info <200 && info> 100) y = peta (maklumat, 100, 200, - (lebar / 4.5) /0.8, + (lebar / 4.5) /0.8); // y = maklumat; lain jika (info> 200) temp = info -200; println (temp, x, y);
Terdapat banyak cara yang lebih baik untuk mendapatkan data dari modul Bluetooth ke telefon, tetapi kerana ini hanyalah projek hobi, kami telah mengabaikannya, anda boleh menggali lebih mendalam jika berminat.
Kerja Arduino Inclinometer:
Setelah anda bersiap sedia dengan Perkakasan dan Aplikasi, inilah masanya untuk bersenang-senang dengan apa yang telah kami bina. Muat naik Kod Arduino ke papan tulis, anda juga boleh menghapus komen di baris Serial.println dan memeriksa apakah perkakasan berfungsi seperti yang diharapkan menggunakan monitor bersiri. Bagaimanapun, itu adalah pilihan sepenuhnya.
Setelah kod dimuat, lancarkan aplikasi Android di telefon bimbit anda. Aplikasi harus secara automatik menyambung ke modul HC-06 anda dan ia akan memaparkan "Sambungkan ke: HC-06" di bahagian atas aplikasi seperti gambar di bawah.
Pada mulanya, semua nilai akan menjadi sifar kecuali nilai suhu. Ini kerana Arduino telah mengkalibrasi MPU-6050 untuk posisi ini sebagai rujukan, sekarang anda dapat memiringkan perkakasan dan memeriksa apakah nilai pada aplikasi mudah alih juga berubah seiring dengan animasi. Penyelesaian lengkap aplikasi boleh didapati di video yang diberikan di bawah. Jadi sekarang anda boleh meletakkan papan roti di mana sahaja dan periksa sama ada permukaannya diratakan dengan sempurna.
Harap anda memahami projek dan mengetahui sesuatu yang berguna daripadanya. Sekiranya anda mempunyai keraguan, sila gunakan bahagian komen di bawah atau forum untuk menyelesaikannya.