- Bahan yang Diperlukan untuk Membina Robot Pembersih Lantai Berasaskan Arduino
- Pembersih Vakum Mudah Alih
- Modul Sensor Ultrasonik HC-SR04
- Sensor Lantai (IR Sensor) untuk Pengesanan Tangga
- Litar Diagram Robot Pembersih Lantai Berasaskan Arduino
- Membina Litar untuk Robot Pembersih Lantai Berasaskan Arduino
- Arduino
Dalam senario masa kini, kita semua sibuk dengan pekerjaan kita sehingga kita tidak mempunyai masa untuk membersihkan rumah kita dengan betul. Penyelesaian masalahnya sangat mudah, anda hanya perlu membeli robot pembersih vakum domestik seperti irobot roomba yang akan membersihkan rumah anda dengan menekan butang. Tetapi produk komersial seperti itu adalah masalah biasa, iaitu kos. Oleh itu, hari ini, kami memutuskan untuk membuat robot Pembersih Lantai sederhana , yang bukan hanya mudah dibuat tetapi harganya lebih rendah jika dibandingkan dengan produk komersial yang terdapat di pasaran. Pembaca yang kerap mungkin mengingati Robot Pembersih Vakum Arduino kami, yang kami bina lama dahulu, tetapi yang satu itu sangat besar dan memerlukan bateri asid plumbum yang besar untuk bergerak. Pembersih Vakum Arduino yang baru yang akan kita bina di sini akan ringkas dan lebih praktikal. Selain itu, robot ini akan mempunyai sensor ultrasonik dan sensor jarak IR. Sensor ultrasonik akan membolehkan robot untuk mengelakkan halangan sehingga dapat bergerak dengan bebas sehingga ruangan dibersihkan dengan betul, dan sensor jarak akan menolongnya agar tidak jatuh dari tangga. Semua ciri ini kelihatan menarik, bukan? Oleh itu, mari kita mulakan.
Dalam salah satu artikel sebelumnya, kami membuat banyak bot seperti Robot Pengimbangan Diri, Robot Pembasmi Permukaan Automatik, dan Robot Menghindari Halangan. Periksa sama ada perkara itu menarik bagi anda.
Bahan yang Diperlukan untuk Membina Robot Pembersih Lantai Berasaskan Arduino
Oleh kerana kami telah menggunakan komponen yang sangat generik untuk membina bahagian perkakasan robot pembersih vakum, anda pasti dapat menemui semua itu di kedai hobi tempatan anda. Berikut adalah senarai lengkap bahan yang diperlukan bersama gambar semua komponen.
- Arduino Pro Mini - 1
- Modul Ultrasonik HC-SR04 - 3
- Pemandu Motor L293D - 1
- Motor 5Volt N20 dan Pendakap Pemasangan - 2
- Roda Motor N20 - 2
- Suis - 1
- Pengatur Voltan LM7805 - 1
- Bateri Lithium-Ion 7.4V - 1
- Modul IR - 1
- Papan Papan - 1
- Roda Kastor - 1
- MDF
- Pembersih Vakum Portable Generik
Pembersih Vakum Mudah Alih
Di bahagian keperluan komponen, kita telah membincangkan mengenai pembersih vakum mudah alih, gambar di bawah menunjukkan bahawa. Ia adalah pembersih vakum mudah alih dari amazon. Ini dilengkapi dengan mekanisme yang sangat mudah. Ia memiliki tiga bahagian di bahagian bawah (ruang kecil untuk menyimpan debu, bahagian tengahnya termasuk motor, kipas, dan soket bateri di bahagian atas (ada penutup atau penutup untuk bateri). Ia mempunyai motor DC dan kipas angin. Motor ini disambungkan terus ke bateri 3V (2 * 1.5volt AA) melalui suis sederhana. Semasa kami menghidupkan robot kami dengan bateri 7.4V, kami akan memutuskan sambungan dari bateri dalaman dan mematikannya dari 5V bekalan elektrik. Oleh itu, kami telah menanggalkan semua bahagian yang tidak diperlukan dan hanya motor dengan tempat tinggal dua wayar. Anda dapat melihatnya dalam gambar di bawah.
Modul Sensor Ultrasonik HC-SR04
Untuk mengesan rintangan, kami menggunakan sensor jarak ultrasonik HC-SR04 yang popular atau kami boleh memanggilnya sensor penghindaran halangan. Cara kerjanya sangat sederhana, pertama, modul pemancar menghantar gelombang ultrasonik yang bergerak melalui udara, merintangi halangan, dan melantun kembali dan penerima menerima gelombang itu. Dengan mengira waktu dengan Arduino, kita dapat menentukan jaraknya. Dalam artikel sebelumnya mengenai projek Sensor Jarak Ultrasonik Berasaskan Arduino, kami telah membincangkan prinsip kerja sensor ini dengan teliti. Anda boleh menyemaknya jika anda ingin mengetahui lebih lanjut mengenai modul sensor jarak ultrasonik HC-SR04.
Sensor Lantai (IR Sensor) untuk Pengesanan Tangga
Di bahagian ciri, kami telah membincangkan mengenai ciri di mana robot dapat mengesan tangga dan dapat mengelakkan dirinya jatuh. Untuk melakukan itu, kami menggunakan Sensor IR. Kami akan membuat antara muka antara sensor IR dan Arduino. Kerja IR Proximity Sensor sangat sederhana, ia mempunyai LED IR dan fotodioda, LED IR memancarkan cahaya IR dan jika ada halangan di depan cahaya yang dipancarkan ini, ia akan dipantulkan, dan cahaya yang dipantulkan akan dikesan oleh fotodiod. Tetapi voltan yang dihasilkan dari pantulan akan sangat rendah. Untuk meningkatkannya, kita dapat menggunakan pembanding op-amp, kita dapat memperkuat dan mendapatkan output. Satu modul IRmempunyai tiga pin - Vcc, ground, dan output. Biasanya, output menjadi rendah apabila halangan datang di hadapan sensor. Jadi, kita boleh menggunakan ini untuk mengesan lantai. Sekiranya sesaat, kita mengesan tinggi dari sensor, kita dapat menghentikan robot, membalikkannya atau melakukan apa sahaja yang kita mahu untuk mencegahnya jatuh dari tangga. Dalam artikel sebelumnya, kami telah membuat Breadboard versi IR Proximity Sensor Module dan menerangkan prinsip kerja secara terperinci, anda boleh menyemaknya jika anda ingin mengetahui lebih lanjut mengenai sensor ini.
Litar Diagram Robot Pembersih Lantai Berasaskan Arduino
Kami mempunyai tiga sensor ultrasonik yang mengesan halangan. Oleh itu, kita perlu menghubungkan semua landasan sensor ultrasonik dan menghubungkannya ke landasan bersama. Kami juga menyambungkan ketiga-tiga Vcc sensor dan menyambungkannya ke pin VCC biasa. Seterusnya, kami menyambungkan pin pemicu dan gema ke pin PWM Arduino. Kami juga menghubungkan VCC modul IR ke 5V dan ground ke pin ground Arduino, pin output dari modul sensor IR menuju ke pin digital D2 dari Arduino. Untuk pemandu motor, kami menyambungkan dua pin penggerak ke 5v dan juga pin voltan pemandu ke 5V kerana kami menggunakan motor 5volt. Dalam artikel sebelumnya, kami telah membuat Arduino Motor Driver Shield, anda boleh melihatnya untuk mengetahui lebih lanjut mengenai L293D Motor Driver ICdan operasinya. Arduino, modul Ultrasonik, pemacu motor, dan motor berfungsi pada 5 Volt, voltan yang lebih tinggi akan membunuhnya dan kami menggunakan bateri 7,4 volt, untuk mengubahnya menjadi 5 Volt, digunakan pengatur voltan LM7805. Sambungkan pembersih vakum terus ke litar utama.
Membina Litar untuk Robot Pembersih Lantai Berasaskan Arduino
Untuk mendapatkan beberapa idea mengenai robot saya, saya mencari robot pembersih vakum secara dalam talian dan mendapatkan beberapa gambar robot berbentuk bulat. Jadi, saya memutuskan untuk membina robot berbentuk bulat. Untuk membina kejaran dan badan robot, saya mempunyai banyak pilihan seperti lembaran busa, MDF, kadbod, dll. Tetapi saya memilih MDF kerana ia keras dan mempunyai beberapa sifat tahan air. Sekiranya anda melakukan ini, anda boleh menentukan bahan yang akan anda pilih untuk bot anda.
Untuk membina robot, saya mengambil helaian MDF, kemudian menarik dua bulatan dengan radius 8 CM, dan di dalam bulatan itu, saya juga telah melukis lingkaran lain yang mempunyai radius 4 CMuntuk memasang pembersih vakum. Kemudian saya memotong bulatan. Juga, saya telah memotong dan mengeluarkan kepingan yang sesuai untuk laluan roda (rujuk gambar untuk pemahaman yang lebih baik). Akhirnya, saya membuat tiga lubang kecil untuk roda kastor. Langkah seterusnya ialah memasang motor di pangkal menggunakan pendakapnya, juga meletakkan dan memasang roda kastor ke posisinya. Selepas itu, letakkan sensor ultrasonik ke kiri, kanan, dan tengah robot. Juga, sambungkan modul IR ke bahagian bawah robot. Jangan lupa untuk menambah suis di luar. Itu semua tentang membina robot, jika anda keliru pada ketika ini, anda boleh merujuk gambar berikut.
Untuk bahagian atas, saya juga telah melukis bulatan berukuran 11 CM pada lembaran busa dan memotongnya. Untuk jarak antara bahagian atas dan bawah, saya telah memotong tiga keping tiub plastik sepanjang 4 CM. Selepas itu, saya menempelkan spacer plastik di bahagian bawah dan kemudian saya menempelkan bahagian atasnya. Anda boleh menutup bahagian sisi bot dengan plastik atau bahan serupa jika anda mahu.
Arduino
Kod lengkap untuk projek ini diberikan di akhir dokumen. Kod Arduino ini serupa dengan kod Sensor Jarak Ultrasonik Berasaskan Arduino, satu-satunya perubahan adalah dalam pengesanan lantai. Dalam baris berikut, saya menerangkan bagaimana kod tersebut berfungsi. Dalam kes ini, kami tidak menggunakan perpustakaan tambahan. Di bawah ini kami telah menerangkan kodnya dengan langkah demi langkah. Kami tidak menggunakan perpustakaan tambahan untuk menyahkod data jarak dari sensor HC-SR04, kerana sangat mudah. Dalam baris berikut, kami menerangkan bagaimana. Pertama, kita perlu menentukan Trigger Pin dan Echo Pin untuk ketiga-tiga sensor jarak ultrasonik yang disambungkan ke papan Arduino. Dalam projek ini, kami mempunyai tiga pin Echo dan tiga pin Trigger. Perhatikan bahawa 1 adalah sensor kiri, 2 adalah sensor depan, dan 3 adalah sensor kanan.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Kemudian kami menentukan pemboleh ubah untuk jarak yang semuanya (int) pemboleh ubah jenis dan untuk jangka masa, kami memilih untuk menggunakan (panjang). Sekali lagi, kami mempunyai tiga dari masing-masing. Juga, saya telah menentukan bilangan bulat untuk menyimpan status pergerakan, kita akan membincangkannya kemudian di bahagian ini.
jangka masa panjang1; jangka masa panjang2; jangka masa panjang3; int distanceleft; int jarak jauh; int distanceright; int a = 0;
Selanjutnya, di bahagian persediaan, kita perlu menjadikan semua pin perspektif sebagai input atau output menggunakan fungsi pinModes () . Untuk menghantar gelombang ultrasonik dari modul, kita perlu mengaktifkan pin pemicu ke tinggi iaitu semua pin pemicu harus ditakrifkan sebagai OUTPUT. Dan untuk menerima gema, kita perlu membaca keadaan pin gema sehingga semua pin gema harus ditakrifkan sebagai INPUT. Kami juga membolehkan monitor bersiri untuk menyelesaikan masalah. Untuk membaca status modul IR, saya telah menentukan irpin sebagai input.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Dan pin digital ini ditakrifkan sebagai OUTPUT untuk input pemandu motor.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
Dalam gelung utama, kami mempunyai tiga bahagian untuk tiga sensor. Semua bahagian berfungsi sama tetapi masing-masing untuk sensor yang berbeza. Di bahagian ini, kita membaca jarak rintangan dari setiap sensor dan menyimpannya dalam setiap bilangan bulat yang ditentukan. Untuk membaca jarak, pertama, kita harus memastikan bahawa pin pemicu jelas, untuk itu, kita perlu menetapkan pin pemicu ke RENDAH selama 2 µs. Sekarang, untuk menghasilkan gelombang ultrasonik, kita perlu menghidupkan pin pemicu TINGGI selama 10 µs. Ini akan menghantar suara ultrasonik dan dengan bantuan fungsi pulseIn () , kita dapat membaca waktu perjalanan, dan menyimpan nilai tersebut ke dalam pemboleh ubah " durasi ". Fungsi ini mempunyai 2 parameter, yang pertama adalah nama pin gema dan untuk yang kedua, anda boleh menulis sama adaTINGGI atau RENDAH. HIGH bermaksud bahawa fungsi pulseIn () akan menunggu pin pergi HIGH yang disebabkan oleh gelombang bunyi yang melantun dan ia akan mula dikira, maka ia akan menunggu pin pergi RENDAH ketika gelombang bunyi akan berakhir yang akan menghentikan pengiraan. Fungsi ini memberikan panjang nadi dalam mikrodetik. Untuk mengira jarak, kita akan mengalikan durasinya dengan 0.034 (kelajuan suara di udara adalah 340m / s) dan membaginya dengan 2 (ini disebabkan oleh perjalanan gelombang bunyi bolak-balik). Akhirnya, kami menyimpan jarak setiap sensor dalam bilangan bulat yang sepadan.
digitalWrite (trigPin1, RENDAH); kelewatanMikrodetik (2); digitalWrite (trigPin1, TINGGI); kelewatanMikrodetik (10); digitalWrite (trigPin1, RENDAH); durasi1 = pulseIn (echoPin1, TINGGI); distanceleft = tempoh1 * 0.034 / 2;
Setelah mendapat jarak dari setiap sensor, kita dapat mengawal motor dengan bantuan pernyataan if sehingga kita dapat mengawal pergerakan robot. Ini sangat mudah, pertama, kami memberikan nilai jarak rintangan, dalam hal ini, ia adalah 15cm (ubah nilai ini sesuai keinginan anda). Kemudian kami memberikan syarat mengikut nilai tersebut. Sebagai contoh, apabila halangan datang di hadapan sensor kiri (itu bermaksud jarak sensor kiri harus di bawah atau sama dengan 15 cm) dan dua jarak yang lain tinggi (itu bermaksud tidak ada halangan di depan sensor itu), kemudian dengan bantuan fungsi tulis digital, kita dapat menggerakkan motor ke kanan. Kemudian, saya memeriksa status sensor IR. Sekiranya robot berada di lantai, nilai pin IR akan RENDAH, dan jika tidak, maka nilainya akan menjadiTINGGI. Kemudian saya menyimpan nilai tersebut dalam pemboleh ubah int . Kami akan mengawal robot mengikut status ini.
Bahagian Kod ini digunakan untuk Memindahkan Robot ke Depan dan Ke Belakang :
jika (s == TINGGI) { digitalWrite (4, RENDAH); digitalWrite (7, TINGGI); digitalWrite (8, RENDAH); digitalWrite (12, TINGGI); kelewatan (1000); a = 1; }
Tetapi ada masalah dengan kaedah ini ketika motor bergerak ke belakang, lantai kembali dan bot akan bergerak ke depan, dan akan berulang sehingga bot itu tersangkut. Untuk mengatasinya, kami menyimpan nilai (1) di int setelah pemahaman lantai tidak ada. Kami juga memeriksa keadaan ini untuk pergerakan lain.
Setelah mengesan ketiadaan lantai, robot tidak akan bergerak ke hadapan. Sebaliknya, ia akan bergerak ke kiri, dengan cara ini, kita dapat mengelakkan masalah.
jika ((a == 0) && (s == RENDAH) && (distanceleft <= 15 && frontfront> 15 && distanceright <= 15) - (a == 0) && (s == RENDAH) && (distanceleft> 15 && jarak jauh> 15 && jarak jauh> 15))
Dalam keadaan di atas. Pertama, robot akan memeriksa status lantai dan nilai integer. Bot hanya akan bergerak maju sekiranya semua syarat dipenuhi.
Sekarang, kita boleh menulis arahan untuk pemandu motor. Ini akan menggerakkan motor kanan ke belakang dan motor kiri ke hadapan, dengan itu memutar robot ke Kanan.
Bahagian Kod ini digunakan untuk Memindahkan Robot ke Kanan:
digitalWrite (4, TINGGI); digitalWrite (7, RENDAH); digitalWrite (8, TINGGI); digitalWrite (12, RENDAH);
Sekiranya bot mengesan lantai tidak ada, nilainya berubah menjadi 1, dan bot akan bergerak ke kiri. Setelah membelok ke kiri, nilai 'a' berubah menjadi 0 dari 1.
jika ((a == 1) && (s == RENDAH) - (s == RENDAH) && (distanceleft <= 15 && frontfront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && jarak jauh <= 15 && jarak jauh> 15) - (s == RENDAH) && (jarak jauh <= 15 && jarak jauh> 15 && jarak jauh> 15) - (distanceleft <= 15 && jarak jauh> 15 && jarak jauh> 15)) { digitalWrite (4, TINGGI); digitalWrite (7, RENDAH); digitalWrite (8, RENDAH); digitalWrite (12, TINGGI); kelewatan (100); a = 0; }
Bahagian Kod ini digunakan untuk Menggerakkan Robot ke Kiri:
jika ((s == RENDAH) && (distanceleft> 15 && frontfront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && frontfront> 15 && distanceright <= 15) - (s == RENDAH) && (jarak jauh> 15 && jarak jauh <= 15 && jarak jauh> 15)) { digitalWrite (4, RENDAH); digitalWrite (7, TINGGI); digitalWrite (8, TINGGI); digitalWrite (12, RENDAH); }
Itu sahaja untuk membina Robot Pembersih Vakum Pintar berasaskan Arduino. Penyelesaian projek yang lengkap dapat dilihat dalam video yang dipautkan di bahagian bawah halaman ini. Sekiranya anda mempunyai sebarang pertanyaan, komen di bawah.