Mundarija:

Bog 'yordamchisi Roomba Bot: 8 qadam
Bog 'yordamchisi Roomba Bot: 8 qadam

Video: Bog 'yordamchisi Roomba Bot: 8 qadam

Video: Bog 'yordamchisi Roomba Bot: 8 qadam
Video: Боғчадаги қинғирликлар ҳар бир болага 7 грамдан гўшт🤦‍♂ 2024, Iyul
Anonim
Bog 'yordamchisi Roomba Bot
Bog 'yordamchisi Roomba Bot

Kiara Myers, Ahmad Alxader va Madison Tippet

Maqsad:

Bu ko'rsatma sizga MATLAB-dan foydalanib, Roomba Bot-ni dasturlash, bog'da sayohat qilish, etuk pishgan, meva-sabzavotlarni o'lchamiga qarab aniqlash uchun o'rgatadi. Shuningdek, bu robot sizga qancha meva terishga tayyorligini va u qaysi yo'lni bosib o'tgani haqida elektron pochta xabarini yuboradi.

Xususiyatlari:

  • Yorug'lik sezgichlaridan foydalanib, devorlarni aniqlang va ularga tegmasin
  • Bog'ning oxiridagi qoyaga tegib ketganda, dasturni buzish uchun datchiklardan foydalaniladi
  • Bog'dagi aylanani aniqlash va keyin uning radiusini aniqlash uchun tasvirni qayta ishlashdan foydalanadi
  • Meva borligini ko'rsatuvchi rangli tasmani aniqlash uchun jarlik sensorlaridan foydalanadi

1 -qadam: Materiallar va materiallar:

  • Bitta noutbuk
  • MATLAB 2017
  • Roomba changyutgichi
  • Raspberry Pi
  • Yog'och bloklari
  • Oq qog'oz
  • Qora qog'oz
  • Rangli qog'oz/rangli tasma/ingichka tasma
  • Katta rok

2 -qadam:

3 -qadam: "Bog'ingizni" yig'ish

O'zingizni yig'ish
O'zingizni yig'ish
  1. Qora qog'ozni oling va har xil o'lchamdagi doiralarni kesib oling
  2. Bu qora doiralarni katta oq qog'ozga yopishtiring

    Meva aniqlanganda bu kontrast zarur bo'ladi

  3. O'zingizning yog'och bloklaringizdan foydalanib, robotingiz harakatlanishi uchun labirintga o'xshash bog 'yo'lini yarating

    Biz yuqorida tasvirlangan U shaklidagi yo'lni tanladik

  4. Bog'ingizning oxiriga robot yoki eshik yoki boshqa narsalarni qo'shing, shunda u bajarilganligini biladi
  5. Oq qog'ozingizni doira bilan bog'ning devorlariga yopishtiring

    Devorlarimiz kamera uchun juda qisqa bo'lgani uchun biz uni chelaklar bilan yopishtirdik

  6. Meva oldida erga rangli lenta/rangli qog'ozning ingichka tasmasini qo'ying

4 -qadam: Kodni yozish

Bog'da sayohat qilish

Bump Sensor -dan foydalanish: Dasturni ishga tushirish uchun biz kodni vaqtinchalik ifodaga joylashtiramiz, u kod buzilmaguncha turli if -larni bajaradi. Agar bamperlardan birortasi urilsa, bu ularning qiymatiga to'g'ri kelishiga olib keladi (bu mantiqda 1 ga teng). If ifodasi ularning qiymatlaridan biri 1 ga teng bo'lganda kodni buzish uchun ishlatiladi.

Cliff datchiklaridan foydalanish: "Vaqt" bayonotida biz "If" so'zidan foydalanib, Roomba zavodga qachon etib kelganini aytib beramiz. Roomba jarlik datchiklari ko'taradigan qizil ostonani tekshirib, erdagi rangli tasmani aniqlaydi. Agar chap yoki o'ng jarlik sensori erga qaraganda kattaroq polni aniqlasa, u robotni 2 soniya to'xtatadi (pauza buyrug'i yordamida). Bu 2 soniya davomida Roomba meva tasvirini oladi va ko'rsatadi. Buyruqda o'rnatilgan imfindcircles-dan foydalanib, doiralaringizning radiusi uchun diapazonni belgilang, shunda Roomba sizning mevangizni topadi.

Tasvirni qayta ishlashdan foydalanish: if iborasi ichiga biz boshqa if ifodasini joylashtiramiz: agar aniqlangan radius radius3 pishgan meva uchun minimal talabimizdan katta yoki unga teng bo'lsa, r1 (buni siz hal qilasiz), keyin hisoblang va aks ettiring. Roomba qancha meva tayyor va bog'da davom etish uchun buriladi. Agar yo'q bo'lsa, navbat bog 'bo'ylab davom etadi. Eslatma: burilish burchagini o'zgartirish kerak bo'lishi mumkin, chunki har bir Roomba boshqacha

Yorug'lik bamperlaridan foydalanish: Boshqa if ifodasida, yorug'lik bamperlari tahlil qilinadi, ularning hech biri bizning belgilangan chegaramizdan oshmaydi. Agar chap, o'ng, chap markaz, o'ng markaz, chap old yoki o'ng old yorug'lik bamperi ostonadan oshsa, devorga tegmaslik uchun Roomba mos burchak ostida biroz buriladi. Shunday qilib, labirint bo'ylab sayohat qilish.

Kodning qolgan qismi Roomba bosib o'tgan yo'lni tuzish uchun ishlatiladi va natijalarni elektron pochtangizga yuboradi

5 -qadam: Kodni nusxalash

% Maqsad: ularning kattaligiga qarab, xona xonasi bog'dan o'tadi va yig'ib olishga tayyor bo'lgan sabzavot/mevalarni ajratib turadi. % Kirishlar: Yorug'lik datchiklari, Cliff sensorlar, Bump sensorlar, kameradan tasvir % Chiqish: yorug'lik sensori ostonadan kattaroq bo'lsa, xona qaytadi va tasvirni oladi, agar % sabzavot/meva radiusi ma'lum diapazon oralig'ida bo'lsa. Roomba ob'ektga % urilganda kod buziladi, astronavtga qancha meva tayyor bo'lishini elektron pochta orqali yuboradi va xona harakatining xaritasini ko'rsatadi. % Foydalanish: If va while bayonotlari, buyruqlar tuzish, MATLAB elektron pochta kodi

k = 0

tik

timerVal = savdo

rost bo'lsa ham

v =.2; % tezlik r.setDriveVelocity (v, v);% roomba oldinga siljish L = r.getLightBampers; LC = L.leftCenter; Rr = L. huquqi; Lf = L. chap; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % chegarasi. RTH = 30; %Yuqori qizil chegara RTL = 10; %Past qizil chegara B = r.getBampers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; agar S.leftFront> PL1 || S.rightFront> PL1 % erdagi rang chegaradan yuqori ekanligini aniqlaydi r.stop pauza (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % 2 soniya pauza img = r.getImage; %image imshow (img)%displey tasviri [markazlar3, radii3] = imfindircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viskular (markazlar3, radiuslar3); Agar radius3> = r1 T = 1 k = k+1 dist1 = 0,2., keyin Roomba bu mevani hisoblaydi, aks holda radii3 <= r3 T = 0 boshqa T = 0 dist2 = 0,2.*o'tganTime %Agar bo'lmasa, u meva uchini hisoblamaydi.

agar T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Agar meva aniqlangan bo'lsa, u holda Roomba raqamini ko'rsatish, %shovqin qilish va burish elseif T == 2 r.turnAngle (78) %Agar 2 ta meva aniqlansa, %bog 'bo'ylab davom etish uchun aylantiring else r.turnAngle (78) %Agar meva topilmasa, %bog' oxirigacha davom eting. agar LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) if LF> Q r.stop r.turnAngle (-7) if RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end %Agar yorug'lik bamperlarining qiymatlaridan biri ostonadan oshsa, %Roomba %devorga urilmasligi uchun ozgina mos yo'nalishga buriladi

agar B.right == 1 || B. chap == 1 || B.front == 1 dist3 = 0,2.*O'tgan vaqt r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) % bumberlar uriladi, keyin roomba tovush chiqaradi, atrofida aylanadi, %va kodni buzadi

uzilish oxiri

tugash tarqalishi (0.533, 0, '^') tarqalishni ushlab turish (0.533, dist1, '<') tarqalishni ushlab turish (-dist2, dist1, 'v') tarqalishini ushlab turish (-dist2, 0, 'd') saqlash (gcf, 'Movement.png')

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

setpref ("Internet", "E_mail", pochta); setpref ('Internet', 'SMTP_Server', host) rekvizitlari = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', pochta); props.setProperty ('mail.smtp.host', xost); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'rost'); props.setProperty ('mail.smtp.debug', 'rost'); props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.port', port); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'noto'g'ri'); sendmail (pochta, 'Salom astronavt! Bog'da mevalar ko'p', kmsg, {'motion.png'})

Tavsiya: