Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-23 15:10
Kiara Myers, Ahmad Alghadeer dhe Madison Tippet
Qëllimi:
Ky udhëzues do t'ju mësojë se si të programoni një Roomba Bot, duke përdorur MATLAB, për të lundruar nëpër një kopsht, duke zbuluar fruta/perime në formë rrethore që janë mjaft të pjekura për t'u zgjedhur në bazë të madhësisë së tyre. Ky robot gjithashtu ju dërgon një email, duke ju paralajmëruar se sa fruta janë gati për tu zgjedhur dhe rrugën në të cilën ka udhëtuar.
Karakteristikat:
- Përdor sensorë të dritës për të zbuluar muret dhe për t'u kthyer pak për të shmangur goditjen e tyre
- Përdor sensorë të përplasjes për të prishur programin kur godet shkëmbin në fund të kopshtit
- Përdor përpunimin e imazhit për të zbuluar një rreth në kopsht dhe më pas të përcaktojë rrezen e tij
- Përdor sensorë të shkëmbinjve për të zbuluar një shirit me ngjyrë që tregon praninë e një fruti
Hapi 1: Materialet dhe Furnizimet:
- Një laptop
- MATLAB 2017
- Pastrues vakum Roomba
- Raspberry Pi
- Blloqe druri
- Letër të bardhë
- Letër e zezë
- Shirit me ngjyra/shirit i hollë letre me ngjyrë
- Shkëmb i madh
Hapi 2:
Hapi 3: Montimi i "Kopshtit" tuaj
- Merrni letrën tuaj të zezë dhe prerë rrathë të madhësive të ndryshme
-
Ngjitini këto rrathë të zinj në një letër të madhe të bardhë
Ky kontrast do të jetë i nevojshëm kur zbuloni një frut
-
Përdorni blloqet tuaja të drurit për të ndërtuar një shteg kopshti të ngjashëm me labirint për robotin tuaj për të lundruar
Ne zgjodhëm një shteg në formë U siç është paraqitur më sipër
- Në fund të kopshtit tuaj shtoni një shkëmb ose derë ose një objekt tjetër që roboti juaj ta dijë se është bërë
-
Ngjiteni letrën tuaj të bardhë me rrethin në muret e kopshtit
Ne përdorëm kova për ta ngjitur sepse muret tona ishin shumë të shkurtra për kamerën
- Vendosni shirit me ngjyrë/shirit të hollë letre me ngjyrë në tokë para frutave
Hapi 4: Shkrimi i Kodit
Lundrimi në Kopsht
Përdorimi i sensorëve të përplasjes: Për të ekzekutuar programin, ne vendosim kodimin në një deklaratë while, e cila kalon nëpër deklarata të ndryshme nëse nuk prishet kodi. Nëse goditet ndonjë nga parakolpët, kjo do të rezultojë në vlerën e tyre të barabartë me të vërtetë (që në Boolean është një vlerë prej 1). Një deklaratë if përdoret për të thyer kodin kur njëra prej vlerave të tyre është e barabartë me 1.
Përdorimi i Sensorëve Cliff: Brenda deklaratës while, ne përdorim një deklaratë if për t'i treguar Roomba kur ka mbërritur në vendndodhjen e një fabrike. Roomba zbulon shiritin me ngjyrë në dysheme duke ekzaminuar pragun e së kuqes që kapin sensorët e shkëmbit. Nëse sensori i shkëmbit majtas ose djathtas zbulon një ngjyrë me një prag më të madh se ajo e tokës, atëherë ai do ta ndalojë robotin për 2 sekonda (duke përdorur komandën e pauzës). Gjatë këtyre 2 sekondave, Roomba do të marrë dhe shfaq një imazh të frutave. Duke përdorur rrethinat e ndërtuara në komandë, vendosni një gamë për rrezet e qarqeve tuaja dhe Roomba juaj do të gjejë të ashtuquajturin frutin tuaj.
Përdorimi i përpunimit të imazhit: Brenda deklaratës if, ne vendosim një deklaratë tjetër if që thotë: nëse rrezja e zbuluar, radii3, është më e madhe ose e barabartë me kërkesën tonë minimale për një frut të pjekur, r1 (ju vendosni për këtë), pastaj numëroni dhe shfaqni Roomba sa fruta janë gati dhe kthehen për të vazhduar nëpër kopsht. Nëse jo, radha për të vazhduar nëpër kopsht. Shënim: mund t'ju duhet të rregulloni këndin që ktheni sepse çdo Roomba është e ndryshme
Përdorimi i parakolpave të dritës: Në një deklaratë tjetër if, parakolpët e dritës analizohen për të qenë të sigurt se asnjë prej tyre nuk bëhet më i madh se pragu ynë i përcaktuar. Nëse parakolpi i dritës së majtë, të djathtë, të majtë, të djathtë, të përparme të majtë ose të djathtë para shkon mbi pragun, atëherë Roomba do të kthehet pak në këndin e duhur për të shmangur goditjen e një muri. Prandaj, lundrimi në labirint.
Pjesa tjetër e kodit përdoret për të vizatuar rrugën e marrë nga Roomba dhe më pas dërgoni rezultatet në emailin tuaj
Hapi 5: Kopjoni Kodin
% Qëllimi: Bazuar në madhësinë e tyre, dhoma do të kalojë nëpër një kopsht dhe do të dallojë perimet/frutat që janë gati për tu marrë. % Inputet: Sensorë Lightbump, Sensorë Cliff, Sensorë Bump, imazh nga kamera % Rezultate: Sa herë që sensorët e dritës janë më të mëdhenj se pragu, dhoma e dhomës do të kthehet dhe do të marrë një imazh, bip nëse rrezja e % perimeve/frutave është midis një diapazoni të caktuar. Kodi prishet kur roomba përplaset me një objekt, i dërgon astronautit një email se sa fruta janë gati për t'u marrë % dhe një hartë të lëvizjes së dhomës. % Përdorimi: Nëse dhe ndërsa deklaratat, komandimi i komandave, kodi i postës elektronike nga MATLAB
k = 0
tik
timerVal = tic
ndërsa e vërtetë
v =.2; % shpejtësia r.setDriveVelocity (v, v);% roomba shkoni përpara L = r.getLightBumpers; LC = L.leftCenter; Rr = L.djathtas; Lf = L.majtas; RC = L. RightCenter; LF = L.leftFront; RF = L. Djathtas; Q = 75; % pragu. RTH = 30; %Pragu i lartë i kuq RTL = 10; %Pragu i ulët i kuq B = r.getBumpers S = r.getCliffSensorë; r1 = 24; r3 = 10; PL1 = 1800; nëse S.leftFront> PL1 || S.rightFront> PL1 % zbulon nëse ngjyra në tokë është mbi pragun r.ndaloni pauzën (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % pauzë për 2 sekonda img = r.getImage; %marrë imazhin imshow (img)%imazhin e shfaqjes [cent3, radii3] = imfind rrethon (img, [30 50], 'Objekti i polaritetit', 'i errët', 'Ndjeshmëria', 0.9); h = rrathët (qendrat3, rrezet3); %shikoni për qarqet e rrezeve w/në diapazonin e caktuar në imazh nëse radii3> = r1 T = 1 k = k+1 dist1 = 0.2.*koha e kaluar %Nëse rrezja e zbuluar është më e madhe ose e barabartë me kërkesën minimale %të një fruti të pjekur, atëherë Roomba e numëron këtë frutë radiif3 <= r3 T = 0 tjetër T = 0 dist2 = 0.2.*koha e kaluar %Nëse jo, atëherë nuk e numëron fundin e frutit
nëse T == 1 r.setLEDDigrit (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Nëse zbulohet një frut, atëherë shfaq numrin në Roomba, %bën zhurmë dhe kthehet elseif T == 2 r.turnAngle (78) %Nëse zbulohen 2 fruta, atëherë kthehuni për të vazhduar nëpër %kopsht tjetër r.turnAngle (78) %Nëse nuk zbulohen fruta, atëherë kthehuni për të vazhduar nëpër %fundin e kopshtit nëse LC> Q r.ndal r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.ndalo r.turnAngle (-7) elseif RF> Q r.ndal r. turnAngle (7) elseif Lf> Q r.ndal r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) fund %Nëse ndonjë nga vlerat e parakolpave të dritës shkon mbi pragun, atëherë %Roomba do të kthehet pak në drejtimin e duhur për të shmangur %goditjen në një mur
nëse B. drejtë == 1 || B.majtas == 1 || B.front == 1 dist3 = 0.2.*Koha e kaluar r.ndal r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Nëse ndonjë nga goditen numrat, pastaj roomba luan zë, rrotullohet rreth, %dhe thyen kodin
fund pushimi
shpërndarja fundore (0.533, 0, '^') mbajeni shpërndajeni (0.533, dist1, '<') mbajeni shpërndajeni (-dist2, dist1, 'v') mbani shpërndarjen (-dist2, 0, 'd') saveas (gcf, 'Movement.png')
kmsg = num2str (k) mail = '[email protected]' fjalëkalim = 'Srsora123#' host = 'smtp.gmail.com' port = '465'
setpref ('Internet', 'E_mail', postë); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mail); props.setProperty ('mail.smtp.host', host); 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 (postë, 'Përshëndetje Astronaut! Ka kaq shumë fruta në kopsht', kmsg, {'Movement.png'})
Recommended:
Termometër ndriçues - Drita e Vitamizuar e Kopshtit (eNANO De Jardin): 6 hapa
Termometër ndriçues - Drita e Vitamizuar e Kopshtit (eNANO De Jardin): Drita e vitaminizuar e kopshtit me arduino NANO dhe një sensor të temperaturës BMP180. Drita jonë e thjeshtë e kopshtit do të ketë një fuqi sekrete: do të jetë në gjendje të tregojë temperaturën e jashtme me anë të një kodi ngjyrash dhe vezullimi. Funksionimi i tij është si më poshtë: ishtë
Ndihmësi i telit të bukës: 10 hapa (me fotografi)
Ndihmësi i telit të bukës: Ky udhëzues tregon se si të ndërtoni një mjet për të ndihmuar në bërjen e prototipit të bukës më të lehtë dhe më të pastër. Unë e quaj atë Breadboard Wire Helper
DIY - Ndihmësi i parkimit i bazuar në Arduino V2: 6 hapa
DIY - Ndihmësi i Parkimit i bazuar në Arduino V2: Kur jeta ju jep banane !!!!! Thjesht hani ato. Nevoja është nëna e shpikjeve, dhe unë nuk do ta mohoj këtë fakt. Sinqerisht, kjo është hera e dytë që përplasem në murin e garazhit që kur u transferuam në këtë shtëpi të re. Kaq është, nuk do të kishte
Ndihmësi i fundit elektronik -- PSU e Parë e Variablit me Duart Ndihmuese: 12 hapa (me fotografi)
Ndihmësi i fundit elektronik || PSU i Vargut të Ndryshëm me Duart Ndihmuese: Kur punoni me pajisje elektronike, dy mjete janë pothuajse gjithmonë të nevojshme. Sot do të krijojmë këto dy gjëra thelbësore. Dhe ne gjithashtu do ta bëjmë një hap më tej dhe do t'i bashkojmë këto të dyja në ndihmësin e fundit elektronik! Sigurisht që po flas për
Ndihmësi i karkalecave: 6 hapa
Ndihmësja e karkalecave: karkalecat, e njohur gjithashtu si 釣 Chinese në gjuhën kineze, është një nga hobi më unik dhe më popullor për tajvanezët. Shumë tajvanezë shkojnë në karkaleca gjatë fundjavave. Nga shijimi i luftës me karkalecat dhe ngrënia e karkalecave, karkalecat janë padyshim një nga më të mirat