Daftar Isi:

Garden Helper Roomba Bot: 8 Langkah
Garden Helper Roomba Bot: 8 Langkah

Video: Garden Helper Roomba Bot: 8 Langkah

Video: Garden Helper Roomba Bot: 8 Langkah
Video: How To Charge Battery | Roomba® 800 series | iRobot® 2024, Juli
Anonim
Pembantu Kebun Roomba Bot
Pembantu Kebun Roomba Bot

Kiara Myers, Ahmad Alghadeer, dan Madison Tippet

Tujuan:

Instruksi ini akan mengajari Anda cara memprogram Bot Roomba, menggunakan MATLAB, untuk menjelajahi taman, mendeteksi buah/sayuran berbentuk lingkaran yang cukup matang untuk dipetik berdasarkan ukurannya. Robot ini juga mengirimi Anda email, memberi tahu Anda berapa banyak buah yang siap dipetik dan jalur yang dilaluinya.

Fitur:

  • Menggunakan sensor cahaya untuk mendeteksi dinding dan berbelok sedikit untuk menghindari menabraknya
  • Menggunakan sensor benturan untuk menghentikan program saat menabrak batu di ujung taman
  • Menggunakan pemrosesan gambar untuk mendeteksi lingkaran di taman dan kemudian menentukan radiusnya
  • Menggunakan sensor tebing untuk mendeteksi pita berwarna yang menunjukkan keberadaan buah

Langkah 1: Bahan dan Perlengkapan:

  • Satu Laptop
  • MATLAB 2017
  • Pembersih Vakum Roomba
  • Raspberry Pi
  • Balok kayu
  • Kertas putih
  • Kertas hitam
  • Pita berwarna/strip tipis kertas berwarna
  • Batu Besar

Langkah 2:

Langkah 3: Merakit "Taman" Anda

Merakit Anda
Merakit Anda
  1. Ambil kertas hitam Anda dan potong lingkaran dengan berbagai ukuran
  2. Rekatkan lingkaran hitam ini ke kertas putih besar

    Kontras ini akan diperlukan saat mendeteksi buah

  3. Gunakan balok kayu Anda untuk membangun jalur taman seperti labirin untuk dinavigasi oleh robot Anda

    Kami memilih jalur berbentuk U seperti gambar di atas

  4. Di ujung taman Anda, tambahkan batu atau pintu atau benda lain agar robot Anda tahu bahwa itu sudah selesai
  5. Rekatkan kertas putih Anda dengan lingkaran ke dinding taman

    Kami menggunakan ember untuk menempelkannya karena dinding kami terlalu pendek untuk kamera

  6. Letakkan pita warna/strip tipis kertas berwarna di tanah di depan buah

Langkah 4: Menulis Kode

Menjelajahi Taman

Menggunakan Sensor Bump: Untuk menjalankan program, kami menempatkan pengkodean dalam pernyataan while yang berulang melalui berbagai pernyataan if sampai kode tersebut rusak. Jika salah satu bumper terkena, itu akan menghasilkan nilainya sama dengan true (yang dalam Boolean adalah nilai 1). Pernyataan if digunakan untuk memecahkan kode ketika salah satu nilainya sama dengan 1.

Menggunakan Sensor Tebing: Dalam pernyataan while, kita menggunakan pernyataan if untuk memberi tahu Roomba ketika telah tiba di lokasi pabrik. Roomba mendeteksi pita berwarna di lantai dengan memeriksa ambang batas merah yang ditangkap oleh sensor tebing. Jika sensor tebing kiri atau kanan mendeteksi warna dengan ambang batas yang lebih besar dari tanah, maka robot akan berhenti selama 2 detik (menggunakan perintah jeda). Selama 2 detik ini, Roomba akan mengambil dan menampilkan gambar buah. Menggunakan perintah bawaan imfindcircles, atur rentang untuk jari-jari lingkaran Anda, dan Roomba Anda akan menemukan apa yang disebut buah.

Menggunakan Pemrosesan Gambar: Dalam pernyataan if, kami menyematkan pernyataan if lain yang mengatakan: jika jari-jari terdeteksi, jari-jari3, lebih besar dari atau sama dengan persyaratan minimum kami untuk buah matang, r1 (Anda memutuskan ini), lalu hitung dan tampilkan Roomba berapa banyak buah yang siap dan putar untuk melanjutkan melalui kebun. Jika tidak, giliran untuk melanjutkan melalui taman. Catatan: Anda mungkin perlu menyesuaikan sudut belokan karena setiap Roomba berbeda

Menggunakan Bumper Ringan: Dalam pernyataan if lain, bemper ringan dianalisis untuk memastikan tidak ada yang lebih besar dari ambang batas yang kami tentukan. Jika bumper lampu kiri, kanan, kiri tengah, kanan tengah, kiri depan, atau kanan depan melewati ambang batas, maka Roomba akan berbelok sedikit ke sudut yang sesuai untuk menghindari menabrak dinding. Oleh karena itu, menavigasi labirin.

Sisa kode digunakan untuk memplot jalur yang diambil oleh Roomba dan kemudian mengirimkan hasilnya ke email Anda

Langkah 5: Salin Kode

% Tujuan: Berdasarkan ukurannya, roomba akan melewati taman dan membedakan sayuran/buah yang siap diambil. % Input: Sensor lightbump, Sensor tebing, Sensor benturan, gambar dari kamera % Output: Kapan pun sensor cahaya lebih besar dari ambang batas, roomba akan berputar dan mengambil gambar, berbunyi bip jika radius % sayuran/buah berada di antara rentang tertentu. Kode pecah ketika roomba menabrak % suatu objek, mengirimkan email kepada astronot tentang berapa banyak buah yang siap untuk diambil % dan pemetaan pergerakan roomba. % Penggunaan: Pernyataan if dan while, perintah plot, kode email dari MATLAB

k=0

tik

timerVal=tic

sementara benar

v=.2; % kecepatan r.setDriveVelocity(v, v);%roomba maju L=r.getLightBumpers; LC=L.kiriTengah; Rr=L.benar; Lf=L.kiri; RC=L.rightCenter; LF=L.kiriDepan; RF=L.kanan Depan; P= 75; % ambang batas. RTH=30; % Ambang merah tinggi RTL=10; %Ambang merah rendah B=r.getBumpers S=r.getCliffSensors; r1=24; r3=10, PL1=1800; jika S.leftFront > PL1 || S.rightFront > PL1 %mendeteksi jika warna di tanah berada di atas ambang batas r.stop pause(2) elapsedTime=toc(timerVal-2) tic timerVal=tic % jeda selama 2 detik img = r.getImage; %ambil gambar imshow(img)%tampilkan gambar [centers3, radii3] = imfindcircles(img, [30 50], 'ObjectPolarity', 'gelap', 'Sensitivity', 0.9); h = viscircles(pusat3, jari-jari3); %cari lingkaran dengan jari-jari w/dalam rentang yang ditentukan dalam gambar jika jari-jari3>=r1 T=1 k=k+1 dist1=0.2.*elapsedTime %Jika radius terdeteksi lebih besar dari atau sama dengan %persyaratan minimum buah matang, maka Roomba menghitung buah ini elseif radii3<=r3 T=0 else T=0 dist2=0.2.*elapsedTime %Jika tidak, maka tidak menghitung akhir buah

if T==1 r.setLEDDigits(num2str(k)) r.beep r.beep r.beep r.turnAngle(78) %Jika buah terdeteksi, tampilkan nomor di Roomba, %buat suara, dan putar elseif T==2 r.turnAngle(78) %Jika 2 buah terdeteksi, maka belok untuk melanjutkan melalui %taman lain r.turnAngle(78) %Jika tidak ada buah yang terdeteksi, belok untuk melanjutkan melalui %garden end end jika LC >Q r.stop r.turnAngle(-7) elseif RC >Q r.stop r.turnAngle(7) elseif LF >Q r.stop r.turnAngle(-7) elseif RF >Q r.stop r. turnAngle(7) elseif Lf > Q r.stop r.turnAngle(-7) elseif Rr >Q r.stop r.turnAngle(7) end %Jika ada nilai bumper lampu yang melebihi ambang batas, maka %Roomba akan berbelok sedikit ke arah yang tepat untuk menghindari % menabrak dinding

jika B.kanan =1 || B.kiri==1 || B.front==1 dist3=0.2.*elapsedTime r.stop r.beep('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle(360) %Jika salah satu dari bumber dipukul, lalu roomba memutar suara, berputar, %dan memecahkan kode

istirahat berakhir

akhir pencar(0.533, 0, '^') tahan pencar(0.533, dist1, '<') tahan pencar(-dist2, dist1, 'v') tahan pencar(-dist2, 0, 'd') simpan (gcf, 'Gerakan.png')

kmsg=num2str(k) mail= '[email protected]' password='Srsora123#' host='smtp.gmail.com' port='465'

setpref('Internet', 'E_mail', surat); setpref('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty('mail.smtp.user', email); props.setProperty('mail.smtp.host', host); props.setProperty('mail.smtp.port', port); props.setProperty('mail.smtp.starttls.enable', 'true'); props.setProperty('mail.smtp.debug', 'benar'); props.setProperty('mail.smtp.auth', 'benar'); props.setProperty('mail.smtp.socketFactory.port', port); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.fallback', 'salah'); sendmail(mail, 'Halo Astronot! Ada banyak buah di kebun ini', kmsg, {'movement.png'})

Direkomendasikan: