- Modul Sensor Kecepatan LM393 (H206)
- Pengaturan Pemasangan Sensor H206
- Diagram Sirkuit Robot Sensor Kecepatan Arduino LM393 DIY
- Logika di balik Mengukur Kecepatan dengan modul sensor kecepatan LM393
- Logika di balik mengukur jarak yang ditempuh roda
- Logika di balik mengukur sudut bot
- Kode Robot Arduino
- Menguji Robot Arduino untuk mengukur Jarak, Kecepatan dan Sudut
Robot perlahan mulai merangkak ke dalam masyarakat kita untuk membuat hidup kita lebih sederhana. Kita sudah bisa menemukan robot pengantar makanan beroda enam dari Starship di jalan-jalan Inggris, dengan cerdas menavigasi di antara warga sipil untuk mencapai tujuannya. Setiap robot bergerak yang melakukan navigasi ke lingkungan harus selalu sadar akan posisi dan orientasinya terhadap dunia nyata. Ada banyak cara untuk mencapai ini dengan menggunakan berbagai teknologi seperti GPS, Triangulasi RF, Akselerometer, Giroskop, dll. Setiap teknik memiliki keunggulannya sendiri dan unik dengan sendirinya. Dalam tutorial sensor kecepatan Arduino LM393 ini kita akan menggunakan modul sensor kecepatan LM393 yang sederhana dan mudah tersediauntuk mengukur beberapa parameter penting seperti Kecepatan, Jarak tempuh dan Sudut robot menggunakan Arduino. Dengan parameter tersebut robot akan dapat mengetahui status dunia aslinya dan dapat menggunakannya untuk melakukan navigasi dengan aman.
Arduino adalah pilihan paling populer di kalangan penghobi untuk membangun robot, dari pengikut garis sederhana hingga robot penyeimbang diri atau pembersih lantai yang lebih kompleks. Anda dapat memeriksa semua jenis robot di bagian Robotika.
Kami akan membangun robot kecil yang didukung oleh baterai lithium dan mengendarainya menggunakan joystick. Selama runtime kita dapat mengukur kecepatan, jarak dan sudut robot dan menampilkannya secara real-time pada layar LCD yang terhubung ke Arduino. Proyek ini hanya membantu Anda mengukur parameter ini, setelah Anda selesai melakukannya, Anda dapat menggunakan parameter ini untuk mengoperasikan bot Anda secara mandiri sesuai kebutuhan. Kedengarannya menarik bukan? Jadi mari kita mulai.
Modul Sensor Kecepatan LM393 (H206)
Sebelum kita masuk ke diagram rangkaian dan kode untuk proyek tersebut, mari kita pahami Modul Sensor Kecepatan LM393 karena itu memainkan peran penting dalam proyek. The modul H206 Kecepatan sensor terdiri dari cahaya inframerah sensor terintegrasi dengan pembanding LM393 Voltage IC maka nama sensor LM393 Kecepatan. Modul juga terdiri dari pelat kisi yang harus dipasang ke poros putar motor. Semua komponen diberi label pada gambar di bawah ini.
The sensor inframerah cahaya terdiri dari LED IR dan foto-transistor dipisahkan oleh mengobrol kecil. Seluruh pengaturan sensor ditempatkan dalam housing hitam seperti gambar di atas. Plat Grid terdiri dari slot, plat tersebut disusun diantara celah Sensor Cahaya Inframerah sedemikian rupa sehingga sensor dapat merasakan celah pada plat grid. Setiap celah di pelat bingkai memicu sensor IR saat melewati celah; pemicu ini kemudian diubah menjadi sinyal tegangan menggunakan komparator. Komparator tidak lain adalah IC LM393 dari semikonduktor ON. Modul ini memiliki tiga pin, dua di antaranya digunakan untuk memberi daya pada modul dan satu pin keluaran digunakan untuk menghitung jumlah pemicu.
Pengaturan Pemasangan Sensor H206
Memasang sensor jenis ini agak rumit. Ini hanya dapat dipasang pada motor yang memiliki poros yang menonjol di kedua sisinya. Satu sisi poros terhubung ke roda sedangkan sisi lainnya digunakan untuk memasang pelat bingkai seperti yang ditunjukkan di atas.
Karena roda dan pelat dihubungkan ke poros yang sama, keduanya berputar dalam kecepatan yang sama dan dengan demikian dengan mengukur kecepatan pelat kita dapat mengukur kecepatan roda. Pastikan celah pada pelat kisi melewati sensor IR, baru kemudian sensor tersebut dapat menghitung jumlah celah yang telah lewat. Anda juga dapat membuat pengaturan mekanis Anda sendiri untuk memasang sensor selama memenuhi kondisi yang ditentukan. Sensor IR umumnya digunakan di banyak proyek Robotika untuk memandu robot tentang rintangan.
Pelat kisi yang ditunjukkan di atas memiliki 20 slot (kisi). Artinya, sensor akan menemukan 20 celah untuk satu putaran penuh roda. Dengan menghitung jumlah celah yang terdeteksi oleh sensor, kita dapat menghitung jarak yang ditempuh oleh roda, demikian pula dengan mengukur seberapa cepat sensor menemukan celah tersebut, kita dapat mendeteksi kecepatan roda. Di robot kami, kami akan memasang sensor ini ke kedua roda dan karenanya kami dapat menemukan sudut robot juga. Namun sudut rotasi dapat dihitung dengan lebih bijaksana menggunakan Accelerometer atau Gyroscope, pelajari di sini untuk menghubungkan Accelerometer dan giroskop dengan Arduino dan cobalah mengukur sudut rotasi dengan menggunakan keduanya.
Diagram Sirkuit Robot Sensor Kecepatan Arduino LM393 DIY
Diagram rangkaian lengkap dari robot penginderaan kecepatan dan jarak ini ditunjukkan di bawah ini. Bot terdiri dari Arduino Nano sebagai otaknya, dua motor DC untuk roda digerakkan oleh modul Driver Motor H-Bridge L298N. Joystick digunakan untuk Mengontrol kecepatan dan arah bot dan dua sensor kecepatan H206 digunakan untuk mengukur kecepatan, jarak, dan sudut bot. Nilai yang terukur kemudian ditampilkan pada modul LCD 16x2. Potensiometer yang terhubung ke LCD dapat digunakan untuk mengatur kontras LCD dan resistor digunakan untuk membatasi arus yang mengalir ke lampu latar LCD.
The sirkuit lengkap didukung oleh sel 7.4V Lithium. 7,4V ini disuplai ke pin 12V pada modul driver Motor. Pengatur tegangan pada modul driver motor kemudian mengubah 7,4V menjadi + 5V yang diatur yang digunakan untuk menyalakan Arduino, LCD, Sensor dan Joystick.
Motor dikendalikan oleh pin digital 8,9,10 dan 11 dari Arduino. Karena kecepatan motor juga harus dikontrol, kita harus mensuplai sinyal PWM ke terminal positif motor. Oleh karena itu kami memiliki pin 9 dan 10 yang keduanya merupakan pin berkemampuan PWM. Nilai X dan Y dari joystick dibaca menggunakan pin Analog A2 dan A3 masing-masing.
Seperti yang kita ketahui sensor H206 dengan menghasilkan pemicu ketika celah pada pelat grid terdeteksi. Karena pemicu ini tidak selalu terbaca secara akurat untuk menghitung kecepatan dan jarak yang benar, kedua pin pemicu (output) terhubung ke pin interupsi Eksternal 2 dan 3 dari Arduino Board. Pasang seluruh sirkuit pada sasis dan pasang sensor kecepatan seperti yang dijelaskan, bot saya terlihat seperti di bawah ini setelah koneksi selesai. Anda juga dapat menonton video di akhir halaman ini untuk mengetahui bagaimana sensor dipasang.
Sekarang setelah bagian perangkat keras selesai, mari kita masuk ke logika bagaimana kita akan mengukur kecepatan, jarak dan satu bot dan kemudian melanjutkan ke bagian pemrograman.
Logika di balik Mengukur Kecepatan dengan modul sensor kecepatan LM393
Dari pengaturan pemasangan sensor, Anda harus mengetahui bahwa modul sensor kecepatan LM393 (H206) hanya mengukur celah yang ada pada pelat kisi. Saat memasang itu harus memastikan bahwa roda (yang kecepatannya harus diukur) dan pelat bingkai berputar dalam kecepatan yang sama. Seperti di sini, karena kami telah memasang kedua roda dan pelat pada poros yang sama, keduanya akan berputar dengan kecepatan yang sama.
Dalam pengaturan kami, kami telah memasang dua sensor untuk setiap roda untuk mengukur sudut bot. Tetapi jika tujuan Anda hanya mengukur kecepatan dan jarak, kami dapat memasang sensor pada salah satu roda. Output dari sensor (sinyal pemicu) akan paling sering dihubungkan ke pin interupsi eksternal mikrokontroler. Setiap kali celah di pelat kisi terdeteksi, interupsi akan dipicu dan kode di ISR (Interrupt service Routine) akan dijalankan. Jika kita dapat menghitung interval waktu antara dua pemicu tersebut, kita dapat menghitung kecepatan roda.
Di Arduino kita dapat dengan mudah menghitung interval waktu ini dengan menggunakan fungsi millis () . Fungsi milis ini akan terus bertambah 1 untuk setiap mili detik sejak perangkat dinyalakan. Jadi ketika interupsi pertama terjadi kita dapat menyimpan nilai millis () dalam variabel dummy (seperti pevtime dalam kode ini) dan kemudian ketika interupsi kedua terjadi kita dapat menghitung waktu yang dibutuhkan dengan mengurangkan nilai pevtime dari millis ().
Waktu yang dibutuhkan = waktu saat ini - sebelumnya waktu timetaken = millis () - pevtime ; // waktu diambil dalam milidetik
Setelah kami menghitung waktu yang dibutuhkan, kami cukup menghitung nilai rpm menggunakan rumus di bawah ini, di mana (1000 / timetaken) memberikan RPS (Revolusi per detik) dan dikalikan dengan 60 untuk mengubah RPS menjadi RPM (Revolusi per menit).
rpm = (1000 / timetaken) * 60;
Setelah menghitung rpm, kita dapat menghitung kecepatan kendaraan menggunakan rumus di bawah ini asalkan kita mengetahui jari-jari roda.
Kecepatan = 2π × RPS × jari-jari roda. v = radius_of_wheel * rpm * 0,104
Perhatikan, rumus di atas untuk menghitung kecepatan dalam m / s, jika ingin menghitung dalam km / jam maka ganti 0,0104 dengan 0,376. Jika Anda ingin mengetahui bagaimana nilai 0,104 diperoleh, maka coba sederhanakan rumus V = 2π × RPS × jari-jari roda.
Teknik yang sama digunakan bahkan jika sensor hall digunakan untuk mengukur kecepatan benda yang berputar. Namun untuk sensor H206 terdapat catch, grid plate memiliki 20 slot sehingga untuk mengukur waktu antara dua celah slot akan membebani mikrokontroler. Karenanya kami mengukur kecepatan hanya pada putaran penuh roda. Karena dua interupsi akan dihasilkan untuk setiap celah (satu di awal dan lainnya di akhir celah), kami akan mendapatkan total 40 interupsi untuk roda untuk membuat satu putaran lengkap. Jadi kami menunggu 40 interupsi sebelum kami benar-benar menghitung kecepatan roda. Kode yang sama ditunjukkan di bawah ini
if (rotasi> = 40) { timetaken = millis () - pevtime; // timetaken dalam milidetik rpm = (1000 / timetaken) * 60; // rumus untuk menghitung rpm pevtime = millis (); rotasi = 0; }
Kelemahan lain dari metode ini adalah, nilai kecepatan tidak akan turun menjadi nol karena interupsi akan selalu menunggu roda menyelesaikan satu putaran untuk menghitung nilai rpm. Kelemahan ini dapat dengan mudah diatasi dengan menambahkan kode sederhana yang memantau interval waktu antara dua interupsi dan jika melebihi normal maka kita dapat memaksa nilai rpm dan kecepatan menjadi nol. Tautan dalam kode di bawah ini kami telah menggunakan variabel dtime untuk memeriksa perbedaan waktu dan jika melebihi 500 mili detik nilai kecepatan dan rpm akan dipaksa menjadi nol.
/ * Untuk turun ke nol jika kendaraan berhenti * / if (millis () - dtime> 500) // tidak ada inetrrupt yang ditemukan selama 500ms { rpm = v = 0; // buat rpm dan kecepatan menjadi nol dtime = millis (); }
Logika di balik mengukur jarak yang ditempuh roda
Kita sudah tahu bahwa Arduino akan merasakan 40 interupsi saat roda melakukan satu putaran penuh. Jadi untuk setiap satu putaran yang dilakukan oleh roda tersebut terbukti bahwa jarak yang ditempuh roda tersebut sama dengan keliling roda tersebut. Karena kita sudah mengetahui jari-jari roda, kita dapat dengan mudah menghitung jarak tempuh menggunakan rumus di bawah ini
Jarak = 2πr * jumlah putaran jarak = (2 * 3.141 * radius_of_wheel) * (left_intr / 40)
Dimana keliling roda dihitung menggunakan rumus 2πr kemudian dikalikan dengan banyaknya putaran yang dilakukan roda tersebut.
Logika di balik mengukur sudut bot
Ada banyak cara untuk menentukan malaikat robot. Akselerometer dan Giroskop biasanya digunakan untuk menentukan nilai-nilai ini. Namun pendekatan murah lainnya adalah dengan menggunakan sensor H206 di kedua roda. Dengan cara ini kita akan mengetahui berapa banyak putaran yang dibuat oleh setiap roda. Gambar di bawah ini menggambarkan bagaimana sudut dihitung.
Saat robot diinisialisasi, sudut yang dihadapinya dianggap sebagai 0 °. Dari sana ia berputar ke kiri, sudut bertambah negatif dan jika berputar ke kanan, malaikat bertambah positif. Untuk memahami, mari pertimbangkan kisaran -90 hingga +90 seperti yang ditunjukkan pada gambar. Dalam pengaturan seperti itu karena kedua roda memiliki diameter yang sama, jika salah satu roda berputar penuh, bot kita putar pada sudut 90 °.
Misalnya jika roda Kiri melakukan satu putaran penuh (80 interupsi) maka bot akan berbelok 90 ° ke arah kiri dan demikian pula jika roda Kanan melakukan satu putaran penuh (80 interupsi) maka bot akan berbelok -90 ° ke arah kanan. Sekarang kita tahu bahwa jika Arduino mendeteksi 80 interupsi pada satu roda maka bot telah berputar 90 ° dan berdasarkan roda mana kita dapat mengetahui apakah bot telah berbelok ke arah positif (kanan) atau negatif (kiri). Jadi sudut kiri dan kanan bisa dihitung menggunakan rumus di bawah ini
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Dimana 90 adalah sudut yang dicakup saat membuat interupsi 80. Nilai yang dihasilkan adalah angka yang dikalikan interupsi. Kami juga menggunakan modulus 360 sehingga nilai yang dihasilkan tidak pernah melebihi 36. Setelah kami menghitung baik sudut kiri dan kanan, sudut efektif di mana bot menghadap dapat diperoleh dengan mengurangkan sudut kiri dari sudut kanan.
angle = angle_right - angle_left;
Kode Robot Arduino
Kode Arduino lengkap untuk robot pengukur kecepatan dan sudut ini dapat ditemukan di akhir halaman ini. Tujuan dari program ini adalah untuk menghitung kecepatan, jarak dan sudut bot menggunakan logika di atas dan menampilkannya di layar LCD. Selain itu, ia harus menyediakan opsi untuk mengontrol bot menggunakan Joystick.
Kami memulai program dengan menentukan pin I / O Digital untuk kedua motor. Perhatikan bahwa kita juga harus mengontrol kecepatan motor dan karenanya kita harus menggunakan pin PWM pada Arduino untuk mengontrol motor. Di sini kami telah menggunakan pin 8,9,10 dan 11.
# tentukan LM_pos 9 // motor kiri # tentukan LM_neg 8 // motor kiri # tentukan RM_pos 10 // motor kanan # tentukan RM_neg 11 // motor kanan # tentukan joyX A2 # tentukan joyY A3
Untuk mengukur kecepatan dan jarak tempuh kita perlu mengetahui jari-jari roda, ukur nilainya dan masukkan dalam meter seperti gambar di bawah ini. Untuk bot saya, radiusnya adalah 0,033 meter tetapi bisa berbeda untuk Anda berdasarkan bot Anda.
float radius_of_wheel = 0,033; // Ukur jari-jari roda Anda dan masukkan di sini dalam cm
Di dalam fungsi pengaturan , kami menginisialisasi semua nilai menjadi nol dan kemudian menampilkan Teks Intro pada LCD. Kami juga telah menginisialisasi monitor serial untuk tujuan debugging. Kemudian kami telah menyebutkan bahwa sensor kecepatan H206 terhubung ke pin 2 dan 3 sebagai interupsi eksternal. Di mana pun interupsi terdeteksi, fungsi ISR Left_ISR dan Right_ISR akan dijalankan sebagaimana mestinya.
void setup () { rotasi = rpm = pevtime = 0; // Inisialisasi semua variabel ke nol Serial.begin (9600); lcd.begin (16, 2); // Inisialisasi LCD lcd.print 16 * 2 ("Bot Monitor"); // Baris Pesan Intro 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Intro Message line 2 delay (2000); lcd.clear (); lcd.print ("Lt: Rt:"); lcd.setCursor (0, 1); lcd.print ("S: D: A:"); pinMode (LM_pos, OUTPUT); pinMode (LM_neg, OUTPUT); pinMode (RM_pos, OUTPUT); pinMode (RM_neg, OUTPUT); digitalWrite (LM_neg, LOW); digitalWrite (RM_neg, LOW); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, CHANGE); // Left_ISR dipanggil ketika sensor roda kiri dipicu attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR dipanggil saat sensor roda kanan dipicu }
Di dalam rutin Left_ISR, kita cukup menaikkan variabel yang disebut left_intr yang nantinya akan digunakan dalam mengukur sudut bot. Di dalam Right_ISR kami melakukan hal yang sama tetapi sebagai tambahan kami juga menghitung kecepatan di sini. Rotasi variabel bertambah untuk setiap interupsi dan kemudian logika di atas digunakan untuk menghitung kecepatan.
void Left_ISR () { left_intr ++; delay (10); } batal Right_ISR () { right_intr ++; penundaan (10); rotasi ++; dtime = milis (); if (rotasi> = 40) { timetaken = millis () - pevtime; // timetaken dalam milidetik rpm = (1000 / timetaken) * 60; // rumus untuk menghitung rpm pevtime = millis (); rotasi = 0; } }
Di dalam fungsi loop tak terbatas utama kami memantau nilai X dan Y dari joystick. Berdasarkan nilai jika joystick digerakkan, kami mengontrol bot yang sesuai. Kecepatan bot bergantung pada seberapa jauh joystick didorong.
int xValue = analogRead (joyX); int yValue = analogRead (joyY); int acceleration = map (xValue, 500, 0, 0, 200); if (xValue <500) { analogWrite (LM_pos, acceleration); analogWrite (RM_pos, akselerasi); } lain { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } if (yValue> 550) analogWrite (RM_pos, 80); if (yValue <500) analogWrite (LM_pos, 100);
Ini akan membantu pengguna untuk memindahkan bot dan memeriksa apakah nilai yang diperoleh sesuai dengan yang diharapkan. Akhirnya kita bisa menghitung kecepatan, jarak dan sudut bot menggunakan logika di atas dan menampilkannya di LCD menggunakan kode di bawah ini.
v = radius_of_wheel * rpm * 0,104; //0.033 adalah jari-jari roda dalam jarak meter = (2 * 3.141 * radius_of_wheel) * (left_intr / 40); int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80); angle = angle_right - angle_left; lcd.setCursor (3, 0); lcd.print (""); lcd.setCursor (3, 0); lcd.print (left_intr); lcd.setCursor (11, 0); lcd.print (""); lcd.setCursor (11, 0); lcd.print (right_intr); lcd.setCursor (2, 1); lcd.print (""); lcd.setCursor (2, 1); lcd.print (v); lcd.setCursor (9, 1); lcd.print (""); lcd.setCursor (9, 1); lcd.print (jarak); lcd.setCursor (13, 1); lcd.print (""); lcd.setCursor (13, 1); lcd.print (sudut);
Menguji Robot Arduino untuk mengukur Jarak, Kecepatan dan Sudut
Setelah perangkat keras Anda siap, unggah kode ke Arduino Anda dan gunakan joystick untuk memindahkan bot Anda. kecepatan bot, jarak yang ditempuh dan sudut akan ditampilkan di LCD seperti yang ditunjukkan di bawah ini.
Pada LCD istilah Lt dan Rt masing-masing mewakili Hitungan Interupsi Kiri dan Jumlah Interupsi Kanan. Anda dapat menemukan nilai-nilai ini bertambah untuk setiap celah yang terdeteksi oleh sensor. Suhu S menunjukkan Kecepatan bot dalam m / detik dan istilah D menunjukkan Jarak yang tercakup dalam meter. Sudut bot ditampilkan di ujung di mana 0 ° untuk lurus dan negatif untuk rotasi berlawanan arah jarum jam dan positif untuk rotasi searah jarum jam.
Anda juga dapat menonton video di akhir halaman ini untuk memahami cara kerja bot. Harap Anda memahami proyek tersebut dan menikmati membangunnya. Jika Anda memiliki masalah, tinggalkan di bagian komentar dan saya akan berusaha sebaik mungkin untuk membalasnya. Anda juga dapat menggunakan forum untuk bantuan teknis cepat.