Cuprins:
- Pasul 1: Materiale și consumabile:
- Pasul 2:
- Pasul 3: Asamblarea „grădinii” tale
- Pasul 4: Scrierea codului
- Pasul 5: Copiați codul
Video: Garden Helper Roomba Bot: 8 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Kiara Myers, Ahmad Alghadeer și Madison Tippet
Scop:
Acest instructable vă va învăța cum să programați un Roomba Bot, folosind MATLAB, pentru a naviga printr-o grădină, detectând fructe / legume în formă circulară care sunt suficient de coapte pentru a fi culese în funcție de mărimea lor. De asemenea, acest robot vă trimite un e-mail, care vă avertizează câte fructe sunt gata de culese și calea pe care a călătorit.
Caracteristici:
- Folosește senzori de lumină pentru a detecta pereții și a se roti ușor pentru a evita lovirea lor
- Folosește senzori de lovire pentru a sparge programul atunci când lovește stânca la capătul grădinii
- Folosește procesarea imaginilor pentru a detecta un cerc din grădină și apoi a determina raza acestuia
- Folosește senzori de stâncă pentru a detecta o bandă colorată care indică prezența unui fruct
Pasul 1: Materiale și consumabile:
- Un laptop
- MATLAB 2017
- Roomba Vaccum Cleaner
- Raspberry Pi
- Blocuri de lemn
- Hartie alba
- Foaie neagra
- Bandă colorată / bandă subțire de hârtie colorată
- Stâncă mare
Pasul 2:
Pasul 3: Asamblarea „grădinii” tale
- Luați-vă hârtia neagră și tăiați cercuri de diferite dimensiuni
-
Bandați aceste cercuri negre pe o hârtie albă mare
Acest contrast va fi necesar la detectarea unui fruct
- Utilizați blocurile de lemn pentru a construi o cale de grădină asemănătoare unui labirint pentru ca robotul dvs. să poată naviga
Am ales o cale în formă de U așa cum se arată mai sus
- La sfârșitul grădinii dvs. adăugați o piatră sau o ușă sau un alt obiect pentru ca robotul dvs. să știe că s-a terminat
-
Bandați hârtia albă cu cercul pe pereții grădinii
Am folosit găleți pentru a o lipi, deoarece pereții noștri erau prea scurți pentru cameră
- Puneți bandă colorată / fâșie subțire de hârtie colorată pe pământ în fața fructului
Pasul 4: Scrierea codului
Navigând prin grădină
Utilizarea senzorilor Bump: Pentru a rula programul, plasăm codarea într-o instrucțiune while care parcurge diverse instrucțiuni if până când codul este rupt. Dacă vreunul dintre bare de protecție este lovit, va rezulta ca valoarea lor să fie egală cu adevărat (care în Boolean este o valoare de 1). O instrucțiune if este utilizată pentru a sparge codul atunci când una dintre valorile lor este egală cu 1.
Utilizarea senzorilor Cliff: în cadrul declarației while, folosim o declarație if pentru a spune Roomba când a ajuns la locația unei plante. Roomba detectează banda colorată de pe podea examinând pragul de roșu pe care îl ridică senzorii de stâncă. Dacă senzorul stâncă sau dreapta de stâncă detectează o culoare cu un prag mai mare decât cel al solului, atunci va opri robotul timp de 2 secunde (folosind comanda pauză). În aceste 2 secunde, Roomba va lua și va afișa o imagine a fructului. Folosind comanda imfindcircles încorporată, setați un interval pentru razele cercurilor dvs., iar Roomba dvs. va găsi așa-numitul fruct.
Utilizarea procesării imaginii: în cadrul instrucțiunii if, încorporăm o altă instrucțiune if care spune: dacă raza detectată, radii3, este mai mare sau egală cu cerința noastră minimă de fructe coapte, r1 (tu decideți acest lucru), apoi numărați și afișați pe Roomba câți fructe sunt gata și se întorc pentru a continua prin grădină. Dacă nu, rândul va continua prin grădină. Notă: poate fi necesar să reglați unghiul pe care îl rotiți, deoarece fiecare Roomba este diferit
Utilizarea barei de protecție a luminii: într-o altă instrucțiune if, bare de protecție a luminii sunt analizate pentru a fi siguri că niciuna dintre ele nu devine mai mare decât pragul nostru determinat. Dacă fie stânga, dreapta, centrul stânga, centrul drept, stânga față sau dreapta bara de protecție luminoasă depășește pragul, atunci Roomba se va întoarce ușor în unghiul corespunzător pentru a evita lovirea unui perete. Prin urmare, navigarea în labirint.
Restul codului este folosit pentru a trasa calea luată de Roomba și apoi pentru a trimite rezultatele la adresa dvs. de e-mail
Pasul 5: Copiați codul
Scop: În funcție de dimensiunile lor, roomba va trece printr-o grădină și va distinge legumele / fructele care sunt gata pentru a fi culese. % Intrări: senzori Lightbump, senzori Cliff, senzori Bump, imagine de la cameră% Ieșiri: Ori de câte ori senzorii de lumină sunt mai mari decât pragul roomba se va întoarce și va face o imagine, emite un semnal sonor dacă raza% legume / fructe este între un anumit interval. Codul se sparge atunci când roomba se lovește de% un obiect, îi trimite astronautului un e-mail despre câte fructe sunt gata să fie% ridicate și o mapare a mișcării roomba. % Utilizare: instrucțiuni If și while, trasarea comenzilor, cod de e-mail de la MATLAB
k = 0
tic
timerVal = tic
în timp ce este adevărat
v =.2; % speed r.setDriveVelocity (v, v);% roomba merge înainte L = r.getLightBumpers; LC = L.leftCenter; Rr = L.drept; Lf = L.stânga; RC = L.rightCenter; LF = L.stângaFront; RF = L.frightFront; Q = 75; % prag. RTH = 30; % Prag roșu ridicat RTL = 10; % Prag roșu scăzut B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; dacă S.leftFront> PL1 || S.rightFront> PL1% detectează dacă culoarea de pe sol este peste pragul r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pause timp de 2 secunde img = r.getImage; % take image imshow (img)% display image [centres3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscircles (centres3, radii3); % căutați cercuri de raze cu intervalul specificat în imagine dacă razele3> = r1 T = 1 k = k + 1 dist1 = 0,2. * scurs Timp% Dacă raza detectată este mai mare sau egală cu% cerința minimă pentru un fruct copt, atunci Roomba numără acest fruct altfel dacă razele 3 <= r3 T = 0 altul T = 0 dist2 = 0,2. * scurs Timp% Dacă nu, atunci nu ia în calcul sfârșitul fructului
if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Dacă a fost detectat un fruct, afișați numărul pe Roomba,% faceți un zgomot și rotiți elseif T == 2 r.turnAngle (78)% Dacă sunt detectate 2 fructe, atunci întoarceți-vă pentru a continua prin% grădina else r.turnAngle (78)% Dacă nu sunt detectate fructe, atunci întoarceți-vă pentru a continua prin% capătul grădinii dacă 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% Dacă oricare dintre valorile barei de protecție a luminii depășește pragul, atunci% Roomba se va întoarce ușor în direcția corespunzătoare pentru a evita% lovirea unui perete
dacă B.right == 1 || B.stânga == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Dacă oricare dintre bumbere sunt lovite, apoi roomba redă sunet, se învârte în jur,% și rupe codul
sfârșitul pauzei
end scatter (0.533, 0, '^') hold on scatter (0.533, dist1, '<') hold on scatter (-dist2, dist1, 'v') hold on scatter (-dist2, 0, 'd') saveas (gcf, 'Movement.png')
kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'
setpref ('Internet', 'E-mail', mail); setpref ('Internet', 'SMTP_Server', gazdă) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', gazdă); 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 (poștă, „Bună ziua astronaut! Există multe fructe în grădină”, kmsg, {'movement.png'})
Recomandat:
Varcolacii lui Miller's Hollow (狼人 殺) Circuit Helper: 4 pași
The Werewolves of Miller’s Hollow (狼人 殺) Circuit Helper: Acest proiect este destinat persoanelor cărora le place să joace The Werewolves of Miller’s Hollow, iar această cutie este folosită pentru a juca cu 8 persoane, cu trei vârcolaci, doi săteni și trei roluri speciale (Văzător, Vrăjitoare și Vânător). Această casetă este făcută pentru a înlocui
Breadboard Wire Helper: 10 pași (cu imagini)
Breadboard Wire Helper: Acest instructable arată cum să construiți un instrument care să ajute la simplificarea și îngrijirea prototipurilor de breadboard
Ultimate Electronics Helper -- Alimentator de masă variabil cu mâini ajutătoare: 12 pași (cu imagini)
Ultimate Electronics Helper || Alimentator de masă variabil cu mâini ajutătoare: Când lucrați cu electronice, sunt necesare aproape întotdeauna două instrumente. Astăzi vom crea aceste două elemente esențiale. Și vom face, de asemenea, un pas mai departe și le vom uni pe acestea două în asistența electronică supremă! Desigur, vorbesc despre
Roomba Bot the Bulider: 5 pași (cu imagini)
Roomba Bot the Bulider: Bot the Builder este un roomba, care cu „apucători” atașat la față va putea muta obiecte în jur. Codul cu acesta este setat pentru a înregistra prima mișcare cu o casetă GUI pe care o puteți controla cu doar un clic al mouse-ului. După
Cum se face un bot paralel BOE-Bot folosind cipul de ștampilă de bază: 7 pași
Cum se face un Parallax BOE-Bot folosind cipul de ștampilă de bază: Acest instructable arată construcția și modificarea robotului Parallax BOE-Bot de ștampilă de bază