Turinys:

Sodo pagalbininkas Roomba Bot: 8 žingsniai
Sodo pagalbininkas Roomba Bot: 8 žingsniai

Video: Sodo pagalbininkas Roomba Bot: 8 žingsniai

Video: Sodo pagalbininkas Roomba Bot: 8 žingsniai
Video: samsung VC RP30W robotas siurblys veikia namuose 2024, Liepa
Anonim
Sodo pagalbininkas Roomba Bot
Sodo pagalbininkas Roomba Bot

Kiara Myers, Ahmad Alghadeer ir Madison Tippet

Tikslas:

Ši pamoka išmokys jus, kaip programuoti „Roomba Bot“, naudojant MATLAB, naršyti po sodą ir aptikti apskritimo formos vaisius/daržoves, kurie yra pakankamai prinokę, kad juos būtų galima nuskinti pagal jų dydį. Šis robotas taip pat siunčia jums el. Laišką, įspėdamas, kiek vaisių paruošta skinti ir kokiu keliu jis nukeliavo.

Funkcijos:

  • Naudoja šviesos jutiklius, kad aptiktų sienas ir šiek tiek pasisuktų, kad jų nepataikytų
  • Naudoja smūgio jutiklius, kad nutrauktų programą, kai ji atsitrenkia į uolą sodo gale
  • Naudoja vaizdo apdorojimą, kad aptiktų apskritimą sode ir nustatytų jo spindulį
  • Naudoja uolų jutiklius, kad aptiktų spalvotą juostelę, rodančią vaisiaus buvimą

1 žingsnis: medžiagos ir reikmenys:

  • Vienas nešiojamas kompiuteris
  • MATLAB 2017 m
  • „Roomba“dulkių siurblys
  • Raspberry Pi
  • Mediniai blokai
  • Baltas popierius
  • Juodasis popierius
  • Spalvota juosta/plona spalvoto popieriaus juostelė
  • Didelis Rokas

2 žingsnis:

3 žingsnis: Surinkite savo „sodą“

Surinkimas tavo
Surinkimas tavo
  1. Paimkite juodą popierių ir supjaustykite įvairaus dydžio apskritimus
  2. Užklijuokite šiuos juodus apskritimus ant didelio balto popieriaus

    Šis kontrastas bus būtinas nustatant vaisius

  3. Naudokite savo medžio drožles, kad sukonstruotumėte į labirintą panašų sodo taką, kuriuo galėtų judėti jūsų robotas

    Mes pasirinkome U formos kelią, kaip parodyta aukščiau

  4. Sodo pabaigoje pridėkite akmenį ar duris ar kitą objektą, kad jūsų robotas žinotų, jog tai padaryta
  5. Užklijuokite baltą popierių ratu ant sodo sienų

    Mes priklijavome kibirus, nes mūsų sienos buvo per trumpos fotoaparatui

  6. Įdėkite spalvotą juostelę/ploną spalvoto popieriaus juostelę ant žemės prieš vaisių

4 žingsnis: kodo rašymas

Naršymas sode

„Bump Sensors“naudojimas: norėdami paleisti programą, mes įdedame kodavimą į „while“teiginį, kuris kartoja įvairius „if“teiginius, kol kodas nesulaužomas. Jei bet kuris buferis nukentės, jo vertė bus lygi tiesa (kuri „Boolean“reikšme yra 1). Jei teiginys naudojamas kodui sulaužyti, kai viena iš jų reikšmių lygi 1.

„Cliff Sensors“naudojimas: per teiginį „while“mes naudojame „if“teiginį, kad „Roomba“praneštų, kada jis atvyko į gamyklos vietą. „Roomba“aptinka spalvotą juostą ant grindų, ištyrusi raudonos slenkstį, kurią nustato uolos jutikliai. Jei kairysis arba dešinysis uolos jutiklis aptinka spalvą, kurios slenkstis didesnis nei žemės, jis sustabdys robotą 2 sekundėms (naudojant pauzės komandą). Per šias 2 sekundes „Roomba“paims ir parodys vaisiaus vaizdą. Naudodami integruotą komandą „Imfindcircles“, nustatykite savo apskritimų spindulių diapazoną ir „Roomba“ras jūsų vadinamąjį vaisių.

Vaizdo apdorojimo naudojimas: teiginyje if įterpiame kitą if teiginį, kuriame sakoma: jei aptiktas spindulys, spinduliai3, yra didesnis arba lygus mūsų minimaliam prinokusio vaisiaus reikalavimui, r1 (jūs nusprendžiate), tada suskaičiuokite ir rodykite „Roomba“, kiek vaisių yra paruošta, ir pasuka, kad tęstų sodą. Jei ne, posūkis tęsti sodą. Pastaba: gali tekti pakoreguoti pasukimo kampą, nes kiekviena „Roomba“yra skirtinga

Naudojant šviesos buferius: kitame teiginyje šviesos buferiai yra analizuojami, kad įsitikintumėte, jog nė vienas iš jų neviršija nustatytos ribos. Jei kairysis, dešinysis, kairysis centras, dešinysis centras, kairysis priekinis arba dešinysis priekinis bamperis viršija slenkstį, tada „Roomba“šiek tiek pasisuks tinkamu kampu, kad neatsitrenktų į sieną. Vadinasi, naršymas labirinte.

Likusi kodo dalis naudojama „Roomba“pasirinktam keliui nubrėžti, o tada rezultatai siunčiami į jūsų el

5 veiksmas: nukopijuokite kodą

Tikslas: Atsižvelgiant į jų dydį, „Roomba“eis per sodą ir išskiria daržoves/vaisius, kurie yra paruošti pasiimti. % Įėjimai: „Lightbump“jutikliai, „Cliff“jutikliai, smūgio jutikliai, vaizdas iš fotoaparato Kodas nutrūksta, kai „Roomba“atsitrenkia į % objektą, atsiunčia astronautui el. Laišką apie tai, kiek vaisių yra paruošta surinkti, ir „Roomba“judėjimo žemėlapį. Naudojimas: jei ir kai teiginiai, braižymo komandos, el. Pašto kodas iš MATLAB

k = 0

tikas

timerVal = tikas

kol tiesa

v = 0,2; % velocity r.setDriveVelocity (v, v);% roomba eiti į priekį L = r.getLightBumpers; LC = L. kairysis centras; Rr = L.teisingas; Lf = L. kairė; RC = L. dešinysis centras; LF = L. kairė priekinė dalis; RF = L. dešinė priekis; Q = 75; % slenkstis. RTH = 30; %Aukšta raudona slenkstis RTL = 10; %Žemas raudonas slenkstis B = r.getBampers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; jei S.leftFront> PL1 || S.rightFront> PL1 % nustato, ar spalva žemėje viršija slenkstį r.stop pauzė (2) praėjoTime = toc (timerVal-2) tic timerVal = tic % pause 2 sekundes img = r.getImage; %fotografuoti vaizdą (img)%rodyti vaizdą [centrai3, spinduliai3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = kratiniai (centrai3, spinduliai3); %ieškokite spindulių apskritimų su nurodytu diapazonu paveikslėlyje, jei spinduliai3> = r1 T = 1 k = k+1 dist1 = 0,2.*praėjo laikas, tada „Roomba“skaičiuoja šį vaisių, jei spinduliai3 <= r3 T = 0 dar T = 0 dist2 = 0,2.*praėjo laikas

jei T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Jei buvo aptiktas vaisius, rodykite numerį „Roomba“, %kelia triukšmą ir pasukite elseif T == 2 r.turnAngle (78) %Jei aptinkami 2 vaisiai, tada pasukite, kad tęstumėte per %sodą else r.turnAngle (78) %Jei vaisių neaptinkama, pasukite, kad tęstumėte per %sodo pabaigos jei 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) pabaiga %Jei kuri nors šviesos buferio vertė viršija slenkstį, tada %the Roomba šiek tiek pasisuks reikiama kryptimi, kad %nepataikytų į sieną

jei B. dešinė == 1 || B. kairė == 1 || B. front == 1 dist3 = 0.2.*Praleistas laikas r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Jei nukenčia bumbuliai, tada roomba groja garsą, sukasi aplink, %ir sulaužo kodą

pertraukos pabaiga

pabaigos sklaida (0,533, 0, '^') palaikykite sklaidą (0,533, dist1, '<') sulaikykite sklaidą (-dist2, dist1, 'v') palaikykite sklaidą (-dist2, 0, 'd') saveas (gcf, „Movement.png“)

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

setpref („Internetas“, „El. paštas“, paštas); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', paštas); props.setProperty ('mail.smtp.host', priegloba); props.setProperty ('mail.smtp.port', prievadas); 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', prievadas); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (paštas, „Sveiki, astronautai! Sode yra daug vaisių“, kmsg, {'motion.png'})

Rekomenduojamas: