Съдържание:
- Стъпка 1: Материали и консумативи:
- Стъпка 2:
- Стъпка 3: Сглобяване на вашата „градина“
- Стъпка 4: Написване на кода
- Стъпка 5: Копирайте кода
Видео: Градински помощник Roomba Bot: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Киара Майърс, Ахмад Алгадир и Мадисън Типет
Предназначение:
Тази инструкция ще ви научи как да програмирате Roomba Bot, използвайки MATLAB, за да се движите през градина, откривайки плодове/зеленчуци с кръгла форма, които са достатъчно узрели, за да се берат въз основа на техния размер. Този робот също ви изпраща имейл, като ви предупреждава колко плодове са готови за бране и пътя, по който е пътувал.
Характеристика:
- Използва сензори за светлина за откриване на стени и леко завъртане, за да се избегне ударът им
- Използва сензори за удари, за да наруши програмата, когато удари скалата в края на градината
- Използва обработка на изображения, за да открие кръг в градината и след това да определи радиуса му
- Използва сензори за скали, за да открие цветна лента, която показва наличието на плод
Стъпка 1: Материали и консумативи:
- Един лаптоп
- MATLAB 2017 г.
- Прахосмукачка Roomba
- Малина Пи
- Дървени блокчета
- Бяла хартия
- Черна хартия
- Цветна лента/тънка лента от цветна хартия
- Голяма скала
Стъпка 2:
Стъпка 3: Сглобяване на вашата „градина“
- Вземете черната си хартия и изрежете кръгове с различни размери
-
Залепете тези черни кръгове върху голяма бяла хартия
Този контраст ще бъде необходим при откриване на плод
-
Използвайте дървените си блокове, за да изградите градинска пътека, подобна на лабиринт, за да може вашият робот да се движи
Избрахме П-образна пътека, както е на снимката по-горе
- В края на вашата градина добавете камък или врата или друг предмет, за да може роботът ви да знае, че е свършен
-
Залепете бялата си хартия с кръга върху стените на градината
Използвахме кофи, за да го залепим, защото стените ни бяха твърде къси за камерата
- Поставете цветна лента/тънка лента от цветна хартия на земята пред плода
Стъпка 4: Написване на кода
Придвижване в градината
Използване на Bump Sensors: За да стартираме програмата, ние поставяме кодирането в оператор while, който циклично преминава през различни оператори if, докато кодът се счупи. Ако някоя от броните е засегната, това ще доведе до тяхната стойност, равна на true (което на булева стойност е стойност 1). Оператор if се използва за разбиване на кода, когато една от техните стойности е равна на 1.
Използване на сензори за скали: В рамките на оператора while използваме оператор if, за да съобщим на Roomba кога е пристигнал на мястото на растението. Roomba разпознава цветната лента на пода, като изследва прага на червеното, което сензорите на скалата улавят. Ако сензорът за лява или дясна скала открие цвят с по -голям праг от този на земята, той ще спре робота за 2 секунди (с помощта на команда за пауза). През тези 2 секунди Roomba ще вземе и покаже изображение на плода. Използвайки вградената команда imfindcircles, задайте диапазон за радиусите на кръговете си и вашата Roomba ще намери вашите така наречени плодове.
Използване на обработка на изображения: В рамките на оператора if, ние вграждаме друго изявление if, което казва: ако откритият радиус, radii3, е по -голям или равен на нашето минимално изискване за зрял плод, r1 (вие решавате това), след това пребройте и покажете на Roomba колко плодове са готови и се обърнете, за да продължите през градината. Ако не, завой да продължи през градината. Забележка: може да се наложи да регулирате ъгъла на завъртане, защото всяка Roomba е различна
Използване на светлинни брони: В друго изявление if светлинните брони се анализират, за да се гарантира, че нито една от тях не става по -голяма от определения ни праг. Ако лявата, дясната, лявата централна, дясната централна, лявата предна или дясната предна светлинна броня надхвърли прага, тогава Roomba ще се завърти леко в подходящия ъгъл, за да избегне удара в стена. Следователно, навигиране в лабиринта.
Останалата част от кода се използва за начертаване на пътя, изминат от Roomba и след това изпращане на резултатите до вашия имейл
Стъпка 5: Копирайте кода
% Предназначение: В зависимост от размерите си, roomba ще премине през градина и ще разграничи зеленчуци/плодове, които са готови за прибиране. % Входове: Lightbump сензори, сензори Cliff, Bump сензори, изображение от камерата % Outputs: Когато светлинните сензори са по -големи от прага, roomba ще се обърне и ще направи изображение, бипкане, ако радиусът на % зеленчуци/плодове е между определен диапазон. Кодът се прекъсва, когато Roomba се натъкне на % обект, изпраща на астронавта имейл за това колко плодове са готови да бъдат събрани % и картиране на движението на Roomba. % Употреба: Ако и докато изявления, начертаване на команди, имейл код от MATLAB
k = 0
тик
timerVal = tic
докато е вярно
v = 0,2; % скорост r.setDriveVelocity (v, v);% roomba върви напред L = r.getLightBumpers; LC = L.лев център; Rr = L. дясно; Lf = L.наляво; RC = L. rightCenter; LF = L.leftFront; RF = L. rightFront; Q = 75; % праг. RTH = 30; %Висок червен праг RTL = 10; %Нисък червен праг B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; ако S.leftFront> PL1 || S.rightFront> PL1 % открива дали цветът на земята е над прага r.stop пауза (2) elapsedTime = toc (timerVal-2) tic timerVal = tic % пауза за 2 секунди img = r.getImage; %take image imshow (img)%display image [центрове3, радиуси3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = виски кръгове (центрове3, радиуси3); %потърсете кръгове с радиуси w/в определен диапазон в изображението, ако radii3> = r1 T = 1 k = k+1 dist1 = 0.2.*elapsedTime %Ако откритият радиус е по -голям или равен на минималното %изискване на зрял плод, тогава Roomba брои този плод иначе ако radii3 <= r3 T = 0 else T = 0 dist2 = 0.2.*elapsedTime %Ако не, тогава не брои края на плода
ако T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78) %Ако е открит плод, тогава покажете номера на Roomba, %издавайте шум и завъртете elseif T == 2 r.turnAngle (78) %Ако бъдат открити 2 плода, завъртете, за да продължите през %градина иначе r.turnAngle (78) %Ако не се открият плодове, завъртете, за да продължите през %края на градината ако LC> Q r.stop r.turnAngle (-7) иначе ако RC> Q r.stop r.turnAngle (7) иначе ако 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 %Ако някоя от стойностите на светлинните брони надхвърля прага, тогава %на Roomba ще се завърти леко в подходящата посока, за да избегне %удряне в стена
ако B. право == 1 || B.наляво == 1 || B.front == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Ако някой от бумбери са ударени, след това roomba възпроизвежда звук, завърта се, %и нарушава кода
краен край
крайно разсейване (0.533, 0, '^') задържане на разсейване (0.533, dist1, '<') задържане на разсейване (-dist2, dist1, 'v') задържане на разсейване (-dist2, 0, 'd') освен (gcf, 'Movement.png')
kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123#' host = 'smtp.gmail.com' port = '465'
setpref ('Интернет', 'E_mail', поща); setpref ('Internet', 'SMTP_Server', host) reps = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', поща); props.setProperty ('mail.smtp.host', хост); props.setProperty ('mail.smtp.port', порт); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'вярно'); props.setProperty ('mail.smtp.socketFactory.port', порт); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (поща, „Здравей астронавт! В градината има толкова много плодове“, kmsg, {'motion.png'})
Препоръчано:
Градински монитор: 3 стъпки
Градински монитор: Това е най -новата и пълна версия на моите градински монитори, направих предишни версии с различни приложения, като една с LCD и друга с ESP8266. Въпреки това документирах тази версия по -добре, затова реших да я кача. Когато c
Автоматичен градински поливач - 3D печат - Arduino: 10 стъпки (със снимки)
Автоматичен градински поливач | 3D печат | Arduino: Аз съм запален градинар, но поливането на вашите растения на ръка по време на сухи периоди отнема известно време. Този проект ме освобождава от поливането, така че мога да работя върху другите си проекти. Също така е чудесно да се грижите за градината, докато сте далеч от дома, и растението
Слънчеви градински светлини на по -голяма слънчева система: 6 стъпки
Слънчеви градински светлини на по -голяма слънчева система: Търсех 12v система за градинско осветление за задния двор. Докато разглеждах онлайн за системи, нищо не ме грабна и не знаех по кой път искам да отида. Ако трябва да използвам трансформатор в захранването си или да отида в слънчевата система. Аз вече
Градински влак - Arduino Wireless NMRA DCC: 4 стъпки (със снимки)
Градински влак - Arduino Wireless NMRA DCC: В допълнение към предишните инструкции с DCC на система за релси, аз разработих идеята допълнително с ръчна DCC командна станция с клавиатура и LCD дисплей. Командната станция съдържа цялото кодиране, необходимо за инструкциите на NMRA DCC, но
Градински навес/работилница нагревател: 3 стъпки
Нагревател за градински навес/работилница: Преди няколко години построих градински навес/работилница с двойна изолация и инсталирах 750-ватов нагревател на вентилатора, за да поддържам вътрешната температура над нулата. Нагревателят на вентилатора се регулира с обикновен аналогов термостат, използващ двуметална лента. Жалко