- Modul Sensor Kelajuan LM393 (H206)
- Susunan Pemasangan Sensor H206
- Diagram Litar Robot Sensor Kelajuan DIY Arduino LM393
- Logik di belakang Mengukur Kelajuan dengan modul sensor kelajuan LM393
- Logik di belakang mengukur jarak yang dilalui roda
- Logik di belakang mengukur sudut bot
- Kod Robot Arduino
- Menguji Robot Arduino untuk mengukur Jarak, Kelajuan dan Sudut
Robot perlahan-lahan mula merangkak ke dalam masyarakat kita untuk menjadikan hidup kita lebih sederhana. Kita sudah dapat menemui robot penghantaran makanan beroda enam dari Starship di jalan raya UK, dengan bijak menavigasi di antara orang awam untuk sampai ke tempat tujuannya. Setiap robot bergerak yang menavigasi ke persekitaran harus selalu mengetahui kedudukan dan orientasinya sehubungan dengan dunia nyata. Terdapat banyak cara untuk mencapainya dengan menggunakan teknologi yang berbeza seperti GPS, Triangulasi RF, Akselerometer, Giroskop dll. Setiap teknik mempunyai kelebihan tersendiri dan unik dengan sendirinya. Dalam tutorial sensor kelajuan Arduino LM393 ini, kami akan menggunakan modul sensor kelajuan LM393 yang mudah dan mudah didapatiuntuk mengukur beberapa parameter penting seperti Kelajuan, Jarak yang dilalui dan Sudut robot menggunakan Arduino. Dengan parameter ini, robot akan dapat mengetahui status dunia sebenarnya dan dapat menggunakannya untuk menavigasi dengan selamat.
Arduino adalah pilihan paling popular di kalangan penggemar untuk membuat robot, dari pengikut garis sederhana hingga robot pengimbang diri atau pembersih lantai yang lebih kompleks. Anda boleh memeriksa semua jenis robot di bahagian Robotik.
Kami akan membina robot kecil yang dikuasakan oleh bateri litium dan menggerakkannya menggunakan kayu bedik. Semasa jangka masa berjalan, kita dapat mengukur kecepatan, jarak dan sudut robot dan memaparkannya secara real-time pada paparan LCD yang disambungkan ke Arduino. Projek ini hanya membantu anda mengukur parameter ini, setelah anda selesai dengan ini, anda boleh menggunakan parameter ini untuk mengendalikan bot anda secara autonomi seperti yang diperlukan. Bunyi menarik bukan? Oleh itu, mari kita mulakan.
Modul Sensor Kelajuan LM393 (H206)
Sebelum kita masuk ke rajah litar dan kod projek, mari kita memahami Modul sensor LM393 Speed kerana ia memainkan peranan penting dalam projek ini. The H206 Speed sensor modul terdiri daripada cahaya inframerah sensor bersepadu dengan LM393 voltan comparator IC itu nama sensor LM393 Speed. Modul ini juga terdiri daripada plat grid yang harus dipasang ke batang putaran motor. Semua komponen dilabel pada gambar di bawah.
The sensor inframerah cahaya terdiri daripada LED IR dan gambar-transistor dipisahkan oleh gab kecil. Keseluruhan susunan sensor diletakkan di perumahan hitam seperti gambar di atas. Plat Grid terdiri daripada slot, plat disusun di antara jurang Sensor Cahaya Inframerah sedemikian rupa sehingga sensor dapat merasakan jurang pada plat grid. Setiap jurang di plat grid memicu sensor IR ketika melewati celah; pencetus ini kemudian ditukar menjadi isyarat voltan menggunakan pembanding. Pembanding tidak lain hanyalah IC LM393 dari semikonduktor ON. Modul ini mempunyai tiga pin, dua daripadanya digunakan untuk menghidupkan modul dan satu pin output digunakan untuk mengira jumlah pencetus.
Susunan Pemasangan Sensor H206
Memasang jenis sensor ini agak sukar. Ia hanya dapat dipasang pada motor yang poros menonjol di kedua sisi. Satu sisi poros disambungkan ke roda sementara sebelah yang lain digunakan untuk memasang plat grid seperti yang ditunjukkan di atas.
Oleh kerana roda dan plat dihubungkan ke poros yang sama kedua-duanya berputar dalam kelajuan yang sama dan oleh itu dengan mengukur kelajuan pelat kita dapat mengukur kelajuan roda. Pastikan jurang di pelat grid melewati sensor IR, hanya dengan itu sensor akan dapat menghitung jumlah jurang yang telah dilalui. Anda juga boleh membuat susunan mekanikal anda sendiri untuk memasang sensor selagi memenuhi syarat yang ditentukan. Sensor IR umumnya digunakan dalam banyak projek Robotik untuk memandu robot mengenai halangan.
Plat grid yang ditunjukkan di atas mempunyai 20 slot (grid). Ini bermaksud bahawa sensor akan menemui 20 jurang untuk satu putaran roda yang lengkap. Dengan menghitung jumlah jurang yang telah dikesan oleh sensor, kita dapat mengira jarak yang dilalui oleh roda, juga dengan mengukur seberapa cepat sensor menemukan jurang yang kita dapat mengesan kelajuan roda. Di robot kita, sensor ini akan dipasang pada kedua roda dan oleh itu kita juga dapat mencari sudut robot. Walau bagaimanapun sudut putaran dapat dihitung dengan lebih masuk akal menggunakan Accelerometer atau Gyroscope, pelajari di sini untuk menghubungkan Accelerometer dan giroskop dengan Arduino dan cuba mengukur sudut putaran menggunakannya.
Diagram Litar Robot Sensor Kelajuan DIY Arduino LM393
Gambarajah litar lengkap robot pengesan Kelajuan dan jarak jauh ini ditunjukkan di bawah. Bot terdiri daripada Arduino Nano sebagai otaknya, dua motor DC untuk roda didorong oleh modul Pemacu Motor H-Bridge L298N. Joystick digunakan untuk Mengawal kelajuan dan arah bot dan dua sensor kelajuan H206 digunakan untuk mengukur kelajuan, jarak dan malaikat bot. Nilai yang diukur kemudiannya dipaparkan dalam modul LCD 16x2. Potensiometer yang disambungkan ke LCD dapat digunakan untuk menyesuaikan kontras LCD dan perintang digunakan untuk membatasi arus yang mengalir ke lampu latar LCD.
The litar lengkap dikuasakan oleh sel 7.4V litium. 7.4V ini dibekalkan ke pin 12V modul Pemacu Motor. Pengatur voltan pada modul pemandu motor kemudian menukar 7.4V menjadi + 5V terkawal yang digunakan untuk menghidupkan Arduino, LCD, Sensor dan Joystick.
Motor dikendalikan oleh pin digital 8,9,10 dan 11 Arduino. Oleh kerana kelajuan motor juga harus dikawal, kita harus membekalkan isyarat PWM ke terminal positif motor. Oleh itu, kami mempunyai pin 9 dan 10 yang kedua-duanya adalah pin yang mampu PWM. Nilai X dan Y membentuk kayu bedik dibaca menggunakan pin Analog A2 dan A3 masing-masing.
Seperti yang kita ketahui sensor H206 dengan menghasilkan pencetus apabila jurang di plat grid dikesan. Oleh kerana pemicu ini tidak harus selalu dibaca dengan tepat untuk mengira kelajuan dan jarak yang betul, kedua-dua pin pemicu (output) disambungkan ke pin gangguan luaran 2 dan 3 dari Arduino Board. Pasang keseluruhan litar pada casis dan pasangkan sensor kelajuan seperti yang dijelaskan, bot saya kelihatan seperti di bawah setelah sambungan selesai. Anda juga dapat menonton video di hujung halaman ini untuk mengetahui bagaimana sensor dipasang.
Setelah bahagian perkakasan selesai, mari kita masuk ke logika bagaimana kita akan mengukur kelajuan, jarak dan satu bot dan kemudian menuju ke bahagian pengaturcaraan.
Logik di belakang Mengukur Kelajuan dengan modul sensor kelajuan LM393
Dari susunan pemasangan sensor, anda harus sedar bahawa modul sensor kelajuan LM393 (H206) hanya mengukur jurang yang terdapat pada plat grid. Semasa memasang, pastikan roda (yang kecepatannya harus diukur) dan plat grid berputar dengan kelajuan yang sama Seperti di sini, kerana kita telah memasang roda dan plat pada poros yang sama, kedua-duanya akan berputar dengan kelajuan yang sama jelas.
Dalam pemasangan kami telah memasang dua sensor untuk setiap roda untuk mengukur sudut bot. Tetapi jika tujuan anda hanya untuk mengukur kecepatan dan jarak, kita dapat memasang sensor pada satu roda. Keluaran sensor (isyarat pencetus) paling sering disambungkan ke pin gangguan luaran mikrokontroler. Setiap kali jurang dalam pelat grid dikesan gangguan akan dicetuskan dan kod dalam ISR (Interrupt servis Rutin) akan dijalankan. Sekiranya kita dapat mengira selang waktu antara dua pencetus tersebut, kita dapat mengira kelajuan roda.
Di Arduino kita dapat dengan mudah mengira selang waktu ini dengan menggunakan fungsi milis () . Fungsi millis ini akan terus meningkat sebanyak 1 untuk setiap mili saat dari saat menghidupkan peranti. Oleh itu, apabila gangguan pertama berlaku, kita dapat menyimpan nilai milis () dalam pemboleh ubah dummy (seperti pevtime dalam kod ini) dan kemudian apabila gangguan kedua berlaku, kita dapat mengira masa yang diambil dengan mengurangkan nilai pevtime dari milis ().
Masa yang diambil = masa semasa - sebelum masa timetaken = mili () - pevtime ; // timetaken dalam milisaat
Setelah kita mengira masa yang diambil, kita hanya dapat mengira nilai rpm menggunakan formula di bawah, di mana (1000 / timetaken) memberikan RPS (Revolusi per saat) dan dikalikan dengan 60 untuk menukar RPS ke RPM (Revolusi per minit).
rpm = (1000 / timetaken) * 60;
Setelah mengira rpm kita dapat mengira halaju kenderaan menggunakan formula di bawah dengan syarat kita mengetahui jejak roda.
Kelajuan = 2π × RPS × jejari roda. v = radius_of_wheel * rpm * 0.104
Perhatikan, formula di atas adalah untuk mengira halaju dalam m / s, jika anda ingin mengira dalam km / jam kemudian ganti 0.0104 dengan 0.376. Sekiranya anda ingin tahu bagaimana nilai 0.104 diperoleh maka cuba permudahkan formula V = 2π × RPS × jejari roda.
Teknik yang sama digunakan walaupun sensor ruang digunakan untuk mengukur kelajuan objek yang berputar. Tetapi untuk sensor H206 ada tangkapan, plat grid mempunyai 20 slot dan oleh itu untuk mengukur masa antara dua celah slot akan membebani mikrokontroler. Oleh itu, kami mengukur kelajuan hanya pada putaran penuh roda. Oleh kerana dua gangguan akan dihasilkan untuk setiap jurang (satu pada permulaan dan satu lagi pada akhir jurang) kita akan mendapat sejumlah 40 gangguan untuk roda untuk membuat satu putaran lengkap. Oleh itu, kita menunggu 40 gangguan sebelum kita benar-benar mengira kelajuan roda. Kod untuk yang sama ditunjukkan di bawah
if (putaran> = 40) { timetaken = milis () - waktu pev; // timetaken dalam milisaat rpm = (1000 / timetaken) * 60; // formula untuk mengira rpm pevtime = millis (); putaran = 0; }
Kelemahan lain dengan kaedah ini ialah, nilai halaju tidak akan turun menjadi sifar kerana gangguan akan sentiasa menunggu roda menyelesaikan satu putaran untuk mengira nilai rpm. Kekurangan ini dapat diatasi dengan mudah dengan menambahkan kod ringkas yang memantau selang waktu antara dua gangguan dan jika melebihi dari biasa maka kita dapat memaksa nilai rpm dan halaju menjadi sifar. Pautan dalam kod di bawah ini kita telah menggunakan pemboleh ubah dtime untuk memeriksa perbezaan masa dan jika melebihi 500 mili saat, nilai halaju dan rpm dipaksa menjadi sifar.
/ * Menjadi sifar jika kenderaan berhenti * / jika (milis () - waktu> 500) // tidak dijumpai gangguan selama 500ms { rpm = v = 0; // jadikan rpm dan halaju sebagai sifar dtime = milis (); }
Logik di belakang mengukur jarak yang dilalui roda
Kita sudah tahu bahawa Arduino akan merasakan 40 gangguan ketika roda membuat satu putaran lengkap. Jadi untuk setiap putaran yang dilakukan oleh roda terbukti jarak yang dilalui oleh roda sama dengan lilitan roda. Oleh kerana kita sudah mengetahui jejari roda, kita dapat dengan mudah mengira jarak yang diliputi menggunakan formula di bawah
Jarak = 2πr * bilangan jarak putaran = (2 * 3.141 * radius_of_wheel) * (left_intr / 40)
Di mana lilitan roda dikira menggunakan formula 2πr dan kemudian dikalikan dengan jumlah putaran yang dibuat oleh roda.
Logik di belakang mengukur sudut bot
Terdapat banyak cara untuk menentukan malaikat robot. Akselerometer dan Giroskop biasanya digunakan untuk menentukan nilai-nilai ini. Tetapi pendekatan lain yang murah adalah dengan menggunakan sensor H206 pada kedua roda. Dengan cara ini kita akan mengetahui berapa banyak putaran yang dibuat setiap roda. Rajah di bawah menunjukkan bagaimana sudut dikira.
Apabila robot diinisialisasi sudut yang dihadapinya dianggap sebagai 0 °. Dari sana ia berputar ke kiri sudut meningkat menjadi negatif dan jika berputar ke kanan malaikat meningkat positif. Untuk memahami mari kita pertimbangkan julat -90 hingga +90 seperti yang ditunjukkan dalam gambar. Dalam susunan sedemikian kerana kedua-dua roda memiliki diameter yang sama, jika salah satu roda membuat putaran lengkap bot kita berpusing pada sudut 90 °.
Sebagai contoh jika roda Kiri membuat satu putaran lengkap (80 interupsi) maka bot akan berpusing 90 ° ke arah kiri dan serupa juga jika roda Kanan membuat satu putaran lengkap (80 interupsi) maka bot akan berpusing -90 ° ke kanan. Sekarang kita tahu bahawa jika Arduino mengesan 80 gangguan pada satu roda maka bot itu telah berpusing 90 ° dan berdasarkan roda mana kita dapat mengetahui apakah bot itu berpusing dengan positif (kanan) atau negatif (kiri). Jadi sudut kiri dan kanan dapat dikira menggunakan formula di bawah
int angle_left = (left_intr% 360) * (90/80); int angle_right = (right_intr% 360) * (90/80);
Di mana 90 adalah sudut yang diliputi ketika membuat interupsi 80. Nilai yang terhasil adalah bilangan selang darab. Kami juga telah menggunakan modulus 360 sehingga nilai yang dihasilkan tidak akan melebihi 36. Setelah kita mengira kedua-dua sudut kiri dan kanan sudut efektif di mana bot menghadap dapat diperoleh dengan hanya dengan mengurangkan sudut kiri membentuk sudut kanan.
sudut = sudut_kanan - sudut_kiri;
Kod Robot Arduino
Kod Arduino lengkap untuk robot pengukuran kelajuan dan sudut ini terdapat di hujung halaman ini. Tujuan program ini adalah untuk mengira kelajuan, jarak dan sudut bot menggunakan logik di atas dan memaparkannya di layar LCD. Selain itu, ia harus memberikan pilihan untuk mengendalikan bot menggunakan Joystick.
Kami memulakan program dengan menentukan pin I / O Digital untuk dua motor. Perhatikan bahawa kita juga harus mengawal kecepatan motor dan oleh itu kita harus menggunakan pin PWM pada Arduino untuk mengawal motor. Di sini kita telah menggunakan pin 8,9,10 dan 11.
#define LM_pos 9 // motor kiri #define LM_neg 8 // motor kiri #tentukan RM_pos 10 // motor kanan #tentukan RM_neg 11 // motor kanan #tentukan kegembiraanX A2 #tentukan kegembiraanY A3
Untuk mengukur kelajuan dan jarak yang dilalui, kita perlu mengetahui jejari roda, mengukur nilai dan memasukkannya dalam meter seperti gambar di bawah. Untuk bot saya, radius adalah 0,033 meter tetapi mungkin berbeza bagi anda berdasarkan bot anda.
jejari apungan_of_wheel = 0.033; // Ukur jari-jari roda anda dan masukkan di sini dalam cm
Di dalam fungsi persediaan , kita menginisialisasi semua nilai menjadi nol dan kemudian memaparkan Teks Pengenalan pada LCD. Kami juga telah memulakan monitor bersiri untuk tujuan penyahpepijatan. Kemudian kita telah menyebutkan bahawa sensor kelajuan H206 disambungkan ke pin 2 dan 3 kerana gangguan luaran. Di sinilah gangguan itu dikesan fungsi ISR Left_ISR dan Right_ISR akan dilaksanakan dengan sewajarnya.
persediaan kosong () { putaran = rpm = pevtime = 0; // Memulakan semua pemboleh ubah ke sifar Serial.begin (9600); lcd.begin (16, 2); // Permulaan lcd.print LCD 16 * 2 ("Bot Monitor"); // Baris Mesej Pengenalan 1 lcd.setCursor (0, 1); lcd.print ("- CircuitDigest"); // Kelewatan barisan intro Mesej 2 (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, RENDAH); digitalWrite (RM_neg, RENDAH); attachInterrupt (digitalPinToInterrupt (2), Left_ISR, TUKAR); // Left_ISR dipanggil ketika sensor roda kiri dipicu attachInterrupt (digitalPinToInterrupt (3), Right_ISR, CHANGE); // Right_ISR dipanggil ketika sensor roda kanan dipicu }
Di dalam rutin Left_ISR, kami hanya menambah pemboleh ubah yang disebut left_intr yang kemudian akan digunakan dalam mengukur sudut bot. Di dalam Right_ISR kita melakukan perkara yang sama tetapi kemudian kita juga mengira kelajuannya di sini. Putaran pemboleh ubah meningkat untuk setiap gangguan dan kemudian logik di atas digunakan untuk mengira kelajuan.
batal Left_ISR () { left_intr ++; kelewatan (10); } batal Right_ISR () { right_intr ++; kelewatan (10); putaran ++; dtime = milis (); if (putaran> = 40) { timetaken = milis () - waktu pev; // timetaken dalam milisaat rpm = (1000 / timetaken) * 60; // formula untuk mengira rpm pevtime = millis (); putaran = 0; } }
Di dalam fungsi gelung tak terhingga utama kami memantau nilai X dan Y dari kayu bedik. Berdasarkan nilai jika kayu bedik digerakkan, kami mengawal bot dengan sewajarnya. Kelajuan bot bergantung pada sejauh mana kayu bedik ditolak.
int xValue = analogRead (kegembiraanX); int yValue = analogRead (joyY); int pecutan = peta (nilai x, 500, 0, 0, 200); jika (xValue <500) { analogWrite (LM_pos, pecutan); analogWrite (RM_pos, pecutan); } lain { analogWrite (LM_pos, 0); analogWrite (RM_pos, 0); } jika (yValue> 550) analogWrite (RM_pos, 80); jika (yValue <500) analogWrite (LM_pos, 100);
Ini akan membantu pengguna untuk memindahkan bot dan memeriksa apakah nilai yang diperoleh adalah seperti yang diharapkan. Akhirnya kita dapat mengira kelajuan, jarak dan sudut bot menggunakan logik di atas dan memaparkannya di LCD menggunakan kod di bawah.
v = radius_of_wheel * rpm * 0.104; //0.033 adalah jejari 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); sudut = sudut_kanan - sudut_kiri; 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 (kanan_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, Kelajuan dan Sudut
Setelah perkakasan anda siap memuat naik kod ke Arduino anda dan gunakan kayu bedik untuk memindahkan bot anda. kelajuan bot, jarak yang diliputi olehnya dan sudut akan dipaparkan di LCD seperti gambar di bawah.
Pada LCD istilah Lt dan Rt masing-masing mewakili Kiraan Interrupt Count dan Right Interrupt. Anda dapat mengetahui nilai-nilai ini bertambah untuk setiap jurang yang dikesan oleh sensor. Tem S menunjukkan Kecepatan bot dalam m / saat dan istilah D menunjukkan Jarak yang diliputi dalam meter. Sudut bot ditunjukkan di hujung di mana 0 ° adalah untuk lurus dan ia menjadi negatif untuk putaran lawan jam dan positif untuk putaran mengikut arah jam.
Anda juga dapat menonton video di hujung halaman ini untuk memahami bagaimana bot berfungsi. Harap anda memahami projek ini dan seronok membinanya. Sekiranya anda mempunyai kebimbangan, tinggalkan mereka di bahagian komen dan saya akan berusaha sebaik mungkin untuk membalasnya. Anda juga boleh menggunakan forum untuk mendapatkan bantuan teknikal yang cepat.