- Bahan yang Dibutuhkan untuk Membangun Robot Pembersih Lantai Berbasis Arduino
- Penyedot Debu Portabel
- Modul Sensor Ultrasonik HC-SR04
- Sensor Lantai (Sensor IR) untuk Deteksi Tangga
- Diagram Sirkuit Robot Pembersih Lantai Berbasis Arduino
- Membangun Sirkuit untuk Robot Pembersih Lantai Berbasis Arduino
- Arduino
Dalam skenario saat ini, kita semua begitu sibuk dengan pekerjaan kita sehingga kita tidak punya waktu untuk membersihkan rumah dengan benar. Solusi dari masalah ini sangat sederhana, Anda hanya perlu membeli robot penyedot debu rumah tangga seperti irobot roomba yang akan membersihkan rumah Anda dengan menekan sebuah tombol. Tetapi produk komersial semacam itu merupakan masalah umum, yaitu biaya. Jadi hari ini, kami memutuskan untuk membuat robot pembersih Lantai sederhana , yang tidak hanya mudah dibuat tetapi juga harganya sangat murah dibandingkan dengan produk komersial yang tersedia di pasaran. Pembaca yang sering mungkin ingat Robot Pembersih Vakum Arduino kami, yang telah kami buat sejak lama, tetapi robot itu sangat besar dan membutuhkan baterai timbal-asam yang besar untuk bergerak. Vacuum Cleaner Arduino baru yang akan kita bangun disini akan lebih kompak dan praktis. Selain itu, robot ini akan memiliki sensor ultrasonik dan sensor jarak IR. Sensor ultrasonik akan memungkinkan robot menghindari rintangan sehingga dapat bergerak bebas hingga ruangan dibersihkan dengan baik, dan sensor jarak akan membantunya agar tidak terjatuh dari tangga. Semua fitur ini terdengar menarik, bukan? Jadi, mari kita mulai.
Di salah satu artikel kami sebelumnya, kami membuat banyak bot seperti Self Balancing Robot, Automated Surface Disinfecting Robot, dan Obstacle Avoiding Robot. Periksa itu jika kedengarannya menarik bagi Anda.
Bahan yang Dibutuhkan untuk Membangun Robot Pembersih Lantai Berbasis Arduino
Karena kami telah menggunakan komponen yang sangat umum untuk membangun bagian perangkat keras robot penyedot debu, Anda seharusnya dapat menemukan semuanya di toko hobi lokal Anda. Berikut adalah daftar lengkap bahan yang dibutuhkan beserta gambar semua komponennya.
- Arduino Pro Mini - 1
- Modul Ultrasonik HC-SR04 - 3
- Pengemudi Motor L293D - 1
- 5Volt N20 Motors dan Mounting Brackets - 2
- Roda Motor N20 - 2
- Sakelar - 1
- Regulator Tegangan LM7805 - 1
- Baterai Lithium-Ion 7.4V - 1
- Modul IR - 1
- Perfboard - 1
- Roda Jarak - 1
- MDF
- Penyedot Debu Portabel Generik
Penyedot Debu Portabel
Di bagian persyaratan komponen, kita telah berbicara tentang penyedot debu portabel, gambar di bawah ini menunjukkan dengan tepat. Ini adalah penyedot debu portabel dari amazon. Ini hadir dengan mekanisme yang sangat sederhana. Ada tiga bagian di bagian bawah (ruang kecil untuk menyimpan debu, bagian tengah termasuk motor, kipas angin, dan soket baterai di bagian atas (terdapat penutup atau tutup untuk aki), memiliki motor DC dan kipas. Motor ini terhubung langsung ke 3V (baterai AA 2 * 1,5volt) melalui sakelar sederhana. Saat kami menyalakan robot kami dengan baterai 7,4V, kami akan memutus koneksi dari baterai internal dan menyalakannya dari 5V catu daya Jadi, kami telah melepaskan semua bagian yang tidak perlu dan hanya motor dengan dua kabel yang tersisa. Anda dapat melihatnya pada gambar di bawah.
Modul Sensor Ultrasonik HC-SR04
Untuk mendeteksi rintangan, kami menggunakan sensor jarak ultrasonik HC-SR04 yang populer atau kami dapat menyebutnya sensor penghindaran rintangan. Cara kerjanya sangat sederhana, pertama modul pemancar mengirimkan gelombang ultrasonik yang bergerak melalui udara, menabrak rintangan, dan memantul kembali dan penerima menerima gelombang tersebut. Dengan menghitung waktu dengan Arduino, kita bisa menentukan jaraknya. Pada artikel sebelumnya tentang proyek Sensor Jarak Ultrasonik Berbasis Arduino, kita telah membahas prinsip kerja sensor ini dengan sangat teliti. Anda dapat memeriksanya jika Anda ingin tahu lebih banyak tentang modul sensor jarak ultrasonik HC-SR04.
Sensor Lantai (Sensor IR) untuk Deteksi Tangga
Di bagian fitur, kita telah membahas tentang fitur di mana robot dapat mendeteksi tangga dan mencegah dirinya jatuh. Untuk melakukan itu, kami menggunakan Sensor IR. Kami akan membuat antarmuka antara sensor IR dan Arduino. Cara kerja IR Proximity Sensor sangat sederhana, memiliki LED IR dan fotodioda, LED IR memancarkan cahaya IR dan jika ada penghalang di depan cahaya yang dipancarkan ini, itu akan dipantulkan, dan cahaya yang dipantulkan akan terdeteksi oleh fotodioda. Tetapi tegangan yang dihasilkan dari pantulan akan sangat rendah. Untuk meningkatkannya, kita bisa menggunakan komparator op-amp, kita bisa memperkuat dan mendapatkan keluaran. Sebuah modul IRmemiliki tiga pin - Vcc, ground, dan output. Biasanya, output menjadi rendah ketika ada penghalang di depan sensor. Jadi, kita bisa menggunakan ini untuk mendeteksi lantai. Jika dalam sepersekian detik, kami mendeteksi ketinggian dari sensor, kami dapat menghentikan robot, memutarnya kembali atau melakukan apa pun yang kami inginkan untuk mencegahnya jatuh dari tangga. Pada artikel sebelumnya, kami telah membuat versi Breadboard dari Modul Sensor Jarak IR dan menjelaskan prinsip kerja secara detail, Anda dapat memeriksanya jika ingin mengetahui lebih banyak tentang sensor ini.
Diagram Sirkuit Robot Pembersih Lantai Berbasis Arduino
Kami memiliki tiga sensor ultrasonik yang mendeteksi rintangan. Jadi, kita perlu menghubungkan semua dasar sensor ultrasonik dan menghubungkannya ke kesamaan. Selain itu, kami menghubungkan ketiga Vcc sensor dan menghubungkannya ke pin VCC umum. Selanjutnya, kami menghubungkan pin pemicu dan gema ke pin PWM Arduino. Kami juga menghubungkan VCC modul IR ke 5V dan ground ke pin ground Arduino, pin output modul sensor IR menuju ke pin digital D2 Arduino. Untuk driver motor, kami menghubungkan kedua pin enable ke 5v dan juga pin tegangan driver ke 5V karena kami menggunakan motor 5volt. Pada artikel sebelumnya kita telah membuat Arduino Motor Driver Shield, anda bisa memeriksanya untuk mengetahui lebih lanjut tentang IC Driver Motor L293Ddan operasinya. Arduino, modul ultrasonik, driver motor, dan motor bekerja pada 5 Volt, tegangan yang lebih tinggi akan mematikannya dan kami menggunakan baterai 7,4 volt, untuk mengubahnya menjadi 5 Volt, digunakan regulator tegangan LM7805. Hubungkan penyedot debu langsung ke sirkuit utama.
Membangun Sirkuit untuk Robot Pembersih Lantai Berbasis Arduino
Untuk mendapatkan beberapa ide tentang robot saya, saya mencari robot penyedot debu online dan mendapatkan beberapa gambar robot berbentuk bulat. Jadi, saya memutuskan untuk membuat robot berbentuk bulat. Untuk membuat chase dan body robot, saya punya banyak pilihan seperti foam sheet, MDF, cardboard, dll. Tapi saya memilih MDF karena keras dan memiliki beberapa sifat tahan air. Jika Anda melakukan ini, Anda dapat memutuskan materi mana yang akan Anda pilih untuk bot Anda.
Untuk membuat robot, saya mengambil lembar MDF, lalu menggambar dua lingkaran dengan radius 8 CM, dan di dalam lingkaran itu, saya juga menggambar lingkaran lain yang berjari - jari 4 CMuntuk memasang penyedot debu. Kemudian saya memotong lingkarannya. Juga, saya telah memotong dan menghapus bagian yang sesuai untuk jalur roda (lihat gambar untuk pemahaman yang lebih baik). Akhirnya, saya membuat tiga lubang kecil untuk roda jarak. Langkah selanjutnya adalah memasang motor pada alas menggunakan braketnya, juga memasang dan memasang roda jarak pada posisinya. Setelah itu, letakkan sensor ultrasonik di kiri, kanan, dan tengah robot. Juga, hubungkan modul IR ke bagian bawah robot. Jangan lupa untuk menambahkan sakelar di luar. Itu saja tentang membangun robot, jika Anda bingung pada saat ini, Anda bisa mengacu pada gambar berikut.
Untuk bagian atas, saya juga menggambar lingkaran dengan radius 11 CM pada lembar busa dan memotongnya. Untuk jarak antara bagian atas dan bawah, saya telah memotong tiga buah tube plastik berukuran 4 CM. Setelah itu, saya rekatkan spacer plastik di bagian bawah dan kemudian saya rekatkan bagian atasnya. Anda bisa menutupi bagian samping bot dengan plastik atau bahan serupa jika Anda mau.
Arduino
Kode lengkap untuk proyek ini diberikan di akhir dokumen. Kode Arduino ini mirip dengan kode Sensor Jarak Ultrasonik Berbasis Arduino, satu-satunya perubahan adalah pada deteksi lantai. Di baris berikut, saya menjelaskan cara kerja kode. Dalam kasus ini, kami tidak menggunakan pustaka tambahan. Di bawah ini kami telah menjelaskan kode tersebut selangkah demi selangkah. Kami tidak menggunakan pustaka tambahan apa pun untuk memecahkan kode data jarak dari sensor HC-SR04, karena sangat sederhana. Pada baris berikut, kami menjelaskan caranya. Pertama, kita perlu menentukan Pin Pemicu dan Pin Gema untuk ketiga sensor jarak ultrasonik yang terhubung ke papan Arduino. Dalam proyek ini, kami memiliki tiga pin Echo dan tiga pin Pemicu. Perhatikan bahwa 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 mendefinisikan variabel untuk jarak yang semuanya merupakan variabel tipe (int) dan untuk durasi, kami memilih untuk menggunakan (panjang). Sekali lagi, kami memiliki tiga dari masing-masing. Juga, saya telah menentukan integer untuk menyimpan status gerakan, kita akan membicarakannya nanti di bagian ini.
durasi panjang1; durasi panjang2; durasi panjang3; int jarak kiri; int jarak depan; int jarak; int a = 0;
Selanjutnya, di bagian pengaturan, kita perlu menjadikan semua pin perspektif sebagai input atau output menggunakan fungsi pinModes () . Untuk mengirim gelombang ultrasonik dari modul, kita perlu mengaktifkan pin pemicu ke tinggi yaitu semua pin pemicu harus didefinisikan sebagai OUTPUT. Dan untuk menerima echo, kita perlu membaca status dari pin echo sehingga semua pin echo harus didefinisikan sebagai INPUT. Selain itu, kami mengaktifkan monitor serial untuk pemecahan masalah. Untuk membaca status modul IR, saya telah menetapkan 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 didefinisikan sebagai OUTPUT untuk input driver motor.
pinMode (4, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (12, OUTPUT);
Di loop utama, kami memiliki tiga bagian untuk tiga sensor. Semua bagian bekerja sama tetapi masing-masing untuk sensor yang berbeda. Pada bagian ini, kita membaca jarak hambatan dari setiap sensor dan menyimpannya di setiap bilangan bulat yang ditentukan. Untuk membaca jaraknya, pertama-tama kita harus memastikan bahwa pin pelatuk sudah jelas, untuk itu kita perlu mengatur pin pelatuk ke LOW selama 2 µs. Sekarang, untuk membangkitkan gelombang ultrasonik, kita perlu memutar pin pemicu TINGGI selama 10 µs. Ini akan mengirimkan suara ultrasonik dan dengan bantuan fungsi pulseIn () , kita dapat membaca waktu tempuh, dan menyimpan nilai tersebut ke dalam variabel " durasi ". Fungsi ini memiliki 2 parameter, yang pertama adalah nama pin echo dan yang kedua, Anda dapat menulis keduanyaTINGGI atau RENDAH. HIGH artinya fungsi pulseIn () akan menunggu pin menjadi HIGH yang disebabkan oleh gelombang suara yang dipantulkan dan akan mulai menghitung, kemudian akan menunggu pin menjadi RENDAH ketika gelombang suara akan berakhir yang akan menghentikan penghitungan. Fungsi ini memberikan panjang pulsa dalam mikrodetik. Untuk menghitung jarak, kita akan mengalikan durasinya dengan 0,034 (kecepatan suara di udara adalah 340m / dtk) dan membaginya dengan 2 (ini karena pergerakan gelombang suara yang bolak-balik). Terakhir, kami menyimpan jarak setiap sensor dalam bilangan bulat yang sesuai.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); durasi1 = pulseIn (echoPin1, HIGH); jarak jauh = durasi1 * 0,034 / 2;
Setelah mendapatkan jarak dari masing-masing sensor, kita dapat mengontrol motor dengan bantuan pernyataan if sehingga kita dapat mengontrol pergerakan robot. Ini sangat sederhana, pertama kita beri nilai jarak hambatan, dalam hal ini adalah 15cm (ubah nilai ini sesuai keinginan). Kemudian kami memberikan kondisi sesuai dengan nilai tersebut. Misalnya, ketika ada penghalang di depan sensor kiri (itu berarti jarak sensor kiri harus di bawah atau sama dengan 15 cm) dan dua jarak lainnya tinggi (itu berarti tidak ada penghalang di depan sensor itu), lalu dengan bantuan fungsi tulis digital, kita bisa menggerakkan motor ke kanan. Nanti, saya memeriksa status sensor IR. Jika robot berada di lantai maka nilai pin IR akan menjadi RENDAH, dan jika tidak maka nilainya akan menjadiTINGGI. Kemudian saya menyimpan nilai itu di variabel int . Kami akan mengontrol robot sesuai dengan status ini.
Bagian Kode ini digunakan untuk Memindahkan Robot Maju dan Mundur :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, TINGGI); digitalWrite (8, LOW); digitalWrite (12, TINGGI); penundaan (1000); a = 1; }
Tetapi ada masalah dengan metode ini ketika motor bergerak mundur, lantai kembali dan bot akan bergerak maju, dan itu akan berulang membuat bot macet. Untuk mengatasinya, kita menyimpan nilai (1) di int setelah pemahaman floor tidak ada. Kami juga memeriksa kondisi ini untuk pergerakan lainnya.
Setelah mendeteksi tidak adanya lantai, robot tidak akan bergerak maju. Sebaliknya, itu akan bergerak ke kiri, dengan cara ini, kita dapat menghindari masalah tersebut.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Dalam kondisi di atas. Pertama, robot akan memeriksa status lantai dan nilai integer. Bot hanya akan bergerak maju jika semua kondisi terpenuhi.
Sekarang, kita dapat menulis perintah untuk pengemudi motor. Ini akan menggerakkan motor kanan ke belakang dan motor kiri maju, dengan demikian memutar robot ke kanan.
Bagian Kode ini digunakan untuk Menggerakkan Robot ke Kanan:
digitalWrite (4, TINGGI); digitalWrite (7, LOW); digitalWrite (8, TINGGI); digitalWrite (12, LOW);
Jika bot mendeteksi bahwa lantai tidak ada, nilainya berubah menjadi 1, dan bot akan berpindah ke kiri. Setelah belok kiri, nilai 'a' berubah menjadi 0 dari 1.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, TINGGI); penundaan (100); a = 0; }
Bagian Kode ini digunakan untuk Menggerakkan Robot ke Kiri:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, TINGGI); digitalWrite (8, TINGGI); digitalWrite (12, LOW); }
Itu saja untuk membangun Robot Pembersih Vakum Cerdas berbasis Arduino. Pekerjaan lengkap proyek dapat ditemukan dalam video yang ditautkan di bagian bawah halaman ini. Jika Anda memiliki pertanyaan, beri komentar di bawah.