Innholdsfortegnelse:

Garden Helper Roomba Bot: 8 trinn
Garden Helper Roomba Bot: 8 trinn

Video: Garden Helper Roomba Bot: 8 trinn

Video: Garden Helper Roomba Bot: 8 trinn
Video: The PHENOMENON BRUNO GROENING – documentary film – PART 1 2024, November
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Kiara Myers, Ahmad Alghadeer og Madison Tippet

Hensikt:

Denne instruksen vil lære deg hvordan du programmerer en Roomba Bot ved hjelp av MATLAB, for å navigere gjennom en hage, og oppdage sirkelformede frukter/grønnsaker som er modne nok til å bli plukket ut fra størrelsen. Denne roboten sender deg også en e -post, som varsler deg hvor mange frukter som er klare til å bli plukket og banen den reiste i.

Funksjoner:

  • Bruker lyssensorer til å oppdage vegger og svinge litt for å unngå å treffe dem
  • Bruker støtsensorer for å bryte programmet når det treffer berget i enden av hagen
  • Bruker bildebehandling for å oppdage en sirkel i hagen og deretter bestemme dens radius
  • Bruker klippesensorer til å oppdage en farget tape som indikerer tilstedeværelsen av en frukt

Trinn 1: Materialer og rekvisita:

  • En bærbar PC
  • MATLAB 2017
  • Roomba Vaccum Cleaner
  • Bringebær Pi
  • Treblokker
  • Hvitt papir
  • Svart papir
  • Farget tape/tynn stripe med farget papir
  • Stor stein

Steg 2:

Trinn 3: Monter din "hage"

Montering av din
Montering av din
  1. Ta svart papir og kutt sirkler i forskjellige størrelser
  2. Tape disse svarte sirklene på et stort hvitt papir

    Denne kontrasten vil være nødvendig når du oppdager en frukt

  3. Bruk treklossene dine til å konstruere en labyrintlignende hagebane som roboten din kan navigere i

    Vi valgte en U-formet bane som vist ovenfor

  4. På slutten av hagen din, legg til en stein eller dør eller et annet objekt for at roboten din skal vite at den er ferdig
  5. Tape hvitt papir med sirkelen på veggene i hagen

    Vi brukte bøtter til å tape den på fordi veggene våre var for korte til kameraet

  6. Legg farget tape/tynn stripe farget papir på bakken foran frukten

Trinn 4: Skrive koden

Navigere i hagen

Bruke støtsensorer: For å kjøre programmet plasserer vi kodingen i en while -setning som går gjennom ulike if -setninger til koden er ødelagt. Hvis noen av støtfangerne blir truffet, vil det resultere i at verdien er lik sann (som i boolsk er en verdi på 1). En if -setning brukes til å bryte koden når en av verdiene er lik 1.

Bruke Cliff Sensors: Innenfor while -setningen bruker vi en if -setning for å fortelle Roomba når den har kommet til stedet for et anlegg. Roomba oppdager det fargede båndet på gulvet ved å undersøke terskelen til rødt som klippesensorene tar opp. Hvis venstre eller høyre klippesensor oppdager en farge med en større terskel enn på bakken, vil den stoppe roboten i 2 sekunder (ved hjelp av pause -kommando). I løpet av disse 2 sekundene vil Roomba ta og vise et bilde av frukten. Bruk kommandoen imfindcircles til å angi et område for sirkelenes radier, og Roomba finner din såkalte frukt.

Bruke bildebehandling: I if -setningen legger vi inn en annen if -setning som sier: hvis radius detektert, radii3, er større enn eller lik vårt minimumskrav til en moden frukt, r1 (du bestemmer dette), tell deretter og vis på Roomba hvor mange frukter som er klare og snu for å fortsette gjennom hagen. Hvis ikke, er turen til å fortsette gjennom hagen. Merk: du må kanskje justere vinkelen du snur fordi alle Roomba er forskjellige

Bruke lysstøtfangere: I en annen if -setning analyseres lysstøtfangerne for å være sikker på at ingen av dem blir større enn vår bestemte terskel. Hvis enten venstre, høyre, venstre senter, høyre senter, venstre foran eller høyre frontlyskaster går over terskelen, vil Roomba svinge litt i riktig vinkel for å unngå å treffe en vegg. Derfor navigerer du i labyrinten.

Resten av koden brukes til å plotte banen som Roomba har tatt, og deretter sende resultatene til e -posten din

Trinn 5: Kopier koden

% Formål: Basert på størrelsene vil roomba gå gjennom en hage og skille grønnsaker/frukt som er klare til å bli hentet. % Innganger: Lightbump -sensorer, Cliff -sensorer, Bump -sensorer, bilde fra kamera % Outputs: Når lyssensorer er større enn terskelen, vil roomba snu og ta et bilde, pip hvis radiusen til % grønnsaker/frukt er mellom et bestemt område. Koden brytes når roomba støter på % et objekt, sender astronauten en e -post om hvor mange frukter som er klare til å bli hentet og en kartlegging av roombas bevegelse. % Bruk: Hvis og mens utsagn, plotte kommandoer, e -postkode fra MATLAB

k = 0

tic

timerVal = tic

mens det er sant

v =.2; % velocity r.setDriveVelocity (v, v);% roomba go forward L = r.getLightBumpers; LC = L. venstre senter; Rr = L. høyre; Lf = L. venstre; RC = L.rightCenter; LF = L. venstreFront; RF = L.rightFront; Q = 75; % terskel. RTH = 30; %Høy rød terskel RTL = 10; %Lav rød terskel B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; hvis S.leftFront> PL1 || S.rightFront> PL1 % oppdager om fargen på bakken er over terskelen r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % pause i 2 sekunder img = r.getImage; %take image imshow (img)%display image [centers3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscircles (centre3, radii3); %se etter sirkler med radier m/i angitt område i bildet hvis radii3> = r1 T = 1 k = k+1 dist1 = 0,2.*forløpt Tid %Hvis radius oppdaget er større enn eller lik minimumskravet til en moden frukt, da teller Roomba denne frukten ellers hvis radii3 <= r3 T = 0 annet T = 0 dist2 = 0,2.*elapsedTime %Hvis ikke, teller det ikke fruktenden

hvis T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.turnAngle (78) %Hvis en frukt ble oppdaget, viser du tallet på Roomba, %lager en lyd og snur elseif T == 2 r.turnAngle (78) %Hvis det oppdages 2 frukter, snu deretter for å fortsette gjennom %garden ellers r.turnAngle (78) %Hvis det ikke oppdages frukt, så snu for å fortsette gjennom slutten av %garden end hvis 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 %Hvis noen av lysstøtfangernes verdier går over terskelen, så %Roomba vil svinge litt i riktig retning for å unngå at %treffer en vegg

hvis B.right == 1 || B. venstre == 1 || B.front == 1 dist3 = 0,2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Hvis noen av bumbers blir truffet, så spiller roomba lyd, snurrer rundt, %og bryter koden

pause slutt

ende scatter (0.533, 0, '^') hold på scatter (0.533, dist1, '<') hold på scatter (-dist2, dist1, 'v') hold på scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

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

setpref ('Internett', 'E_mail', post); setpref ('Internett', 'SMTP_Server', vert) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', vert); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', port); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (mail, 'Hei Astronaut! Det er så mange frukter i hagen', kmsg, {'movement.png'})

Anbefalt: