Мазмуну:

Garden Helper Roomba Bot: 8 кадам
Garden Helper Roomba Bot: 8 кадам

Video: Garden Helper Roomba Bot: 8 кадам

Video: Garden Helper Roomba Bot: 8 кадам
Video: You’re welcome 😚 #Roomba #maintenance 2024, Июль
Anonim
Garden Helper Roomba Bot
Garden Helper Roomba Bot

Киара Майерс, Ахмад Альгадир жана Мэдисон Типпет

Максаты:

Бул көрсөтмө сизге MATLABты колдонуп, Roomba Botту кантип программалоону үйрөтөт, бакчаны аралап, тегерек формалуу жемиштерди/жашылчаларды аныктап, алардын өлчөмүнө жараша терип алышат. Бул робот сизге канча жемиш терүүгө даяр экенин жана ал басып өткөн жолду эскертип, сизге электрондук кат жөнөтөт.

Өзгөчөлүктөрү:

  • Жарык сенсорлорун колдонуп, дубалдарды аныктап, аларга тийбеш үчүн бир аз бурулат
  • Бакчанын аягындагы ташка тийгенде программаны бузуу үчүн дөмпөк сенсорлорун колдонот
  • Бакчанын айланасын аныктоо үчүн сүрөттү иштетүүнү колдонот жана андан кийин анын радиусун аныктайт
  • Мөмөнүн бар экендигин көрсөткөн түстүү лента табуу үчүн жар жээк сенсорлорун колдонот

1 -кадам: материалдар жана материалдар:

  • Бир ноутбук
  • MATLAB 2017
  • Roomba чаң соргуч
  • Raspberry Pi
  • Жыгач блоктор
  • Ак кагаз
  • Кара кагаз
  • Түстүү кагаздын түстүү тасмасы/жука тилкеси
  • Large Rock

2-кадам:

3 -кадам: "Бакчаңызды" чогултуу

Сиздин чогултуу
Сиздин чогултуу
  1. Кара кагазыңызды алып, ар кандай өлчөмдөгү тегерекчелерди кесиңиз
  2. Бул кара чөйрөлөрдү чоң ак кагазга чаптаңыз

    Бул контраст мөмөнү аныктоодо керек болот

  3. Роботуңуз үчүн лабиринт сыяктуу бакча жолун куруу үчүн жыгач блокторуңузду колдонуңуз

    Биз жогоруда сүрөттөлгөн U түрүндөгү жолду тандап алдык

  4. Бакчаңыздын аягында роботтун жасалганын билиши үчүн таш же эшик же башка нерсени кошуңуз
  5. Ак кагазыңызды тегерек менен бактын дубалдарына чаптаңыз

    Камерага дубалдарыбыз өтө кыска болгондуктан, скотч менен чаптадык

  6. Түстүү кагазды/түстүү кагаздын ичке тилкесин мөмөнүн алдына жерге коюңуз

4 -кадам: Код жазуу

Бакты аралоо

Бумп сенсорлорун колдонуу: Программаны иштетүү үчүн, кодду бузулганга чейин ар кандай if операторлору аркылуу өтүүчү while операторуна жайгаштырабыз. Эгерде бамперлердин бири урулса, бул алардын маанисинин чындыкка барабар болушуна алып келет (бул логикалык мааниси 1ге барабар). If оператору алардын маанилеринин бири 1ге барабар болгондо кодду бузуу үчүн колдонулат.

Клифф сенсорлорун колдонуу: Убакыт ичинде, биз if операторун колдонуп, Roombaга ал өсүмдүктүн жайгашкан жерине келгенде айтабыз. Roomba кабаттагы түстүү лентаны кызыл жарыкты текшерүү аркылуу аныктайт. Эгерде сол же оң жардын сенсору жерге караганда чоңураак түскө ээ болсо, анда роботту 2 секундга токтотуп коёт (пауза буйругун колдонуу менен). Бул 2 секунддун ичинде Roomba мөмөнүн сүрөтүн алып, көрсөтөт. Командада курулган imfindcirclesти колдонуп, чөйрөлөрүңүздүн радиусуна диапазон коюңуз, жана Roomba сиздин мөмөңүздү табат.

Сүрөт иштетүүнү колдонуу: if билдирүүсүнүн ичине биз башка if билдирүүсүн киргизебиз: эгерде радиус аныкталса, radii3 бышкан жемишке болгон минималдуу талабыбыздан чоң же барабар, r1 (муну сиз чечесиз), андан кийин эсептеп көрүңүз Roomba канча жемиш даяр жана бак аркылуу улантуу үчүн бурулат. Болбосо, кезек бак аркылуу улантуу. Эскертүү: бурулган бурчту тууралашыңыз керек болот, анткени ар бир Roomba башкача

Жарык бамперлерди колдонуу: if if дагы бир сөзүндө, жарык бамперлери анализденет, алардын эч бири биздин аныкталган чектен ашпайт. Эгерде сол, оң, сол борбор, оң борбор, сол алдыңкы же оң алдыңкы жарык бампери босогодон ашып кетсе, анда Roomba дубалга тийбеш үчүн тиешелүү бурчта бир аз бурулат. Демек, лабиринтте чабыттоо.

Коддун калган бөлүгү Roomba басып өткөн жолду пландап, анан электрондук почтага жыйынтыктарды жөнөтүү үчүн колдонулат

5 -кадам: Кодду көчүрүү

% Максаты: Өлчөмүнө жараша бөлмө бакчадан өтүп, терип алууга даяр болгон жашылчаларды/мөмөлөрдү айырмалайт. % Киргизүүлөр: Lightbump сенсорлору, Cliff сенсорлору, Bump sensors, камерадан келген сүрөт % Чыгымдар: Жарык сенсорлору босогодон чоңураак болгондо Roomba бурулуп, сүрөттү алат, эгер % жашылчалардын/жемиштердин радиусу белгилүү бир диапазондун ортосунда болсо, сигнал берет. Roomba % объектиге урунганда код бузулат, астронавтка канча мөмө -жемиш даяр экени жөнүндө электрондук кат жөнөтөт жана бөлмө кыймылынын картасы. % Колдонуу: If and while операторлору, пландоо буйруктары, MATLABдан электрондук почта коду

k = 0

тик

timerVal = tic

чын болсо

v =.2; % ылдамдыгы r.setDriveVelocity (v, v);% roomba алга L = r.getLightBumpers; LC = L.leftCenter; Rr = L.right; Lf = L.сол; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; Q = 75; % босого. RTH = 30; %Жогорку кызыл босого RTL = 10; %Төмөн кызыл босого B = r.getBampers 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; %image imshow (img)%дисплей сүрөтү [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscircles (борборлор3, радиустар3); %radius3> = r1 T = 1 k = k+1 dist1 = 0.2., анда Roomba бул мөмөнү эсептейт elseif radii3 <= r3 T = 0 башка T = 0 dist2 = 0.2.*өттүTime %Эгерде жок болсо, анда жемиштин аягы эсептелбейт.

if 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) %Эгерде эч кандай жемиш аныкталбаса, анда %бактын аягында улантуу үчүн буруңуз. if 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 %Эгерде жарык бамперлеринин кандайдыр бир мааниси босогодон жогору болсо, анда %Roomba %дубалга тийбөө үчүн тиешелүү багытта бир аз бурулат

if B.right == 1 || B.left == 1 || B.front == 1 dist3 = 0.2.*ElapsedTime r.stop r.beep ('F#*2, F#*2, c, F#*2, F#*2') r.turnAngle (360) %Эгерде bbers урулат, андан кийин roomba үн ойнойт, айланасында %айланат жана кодду бузат

үзүлүү аягы

чачыранды бүтүрүү (0.533, 0, '^') чачыратууну кармап туруу (0.533, dist1, '<') чачыратууну кармоо (-dist2, dist1, 'v') чачыроону кармоо (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

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

setpref ('Интернет', 'E_mail', почта); setpref ('Интернет', 'SMTP_Server', хост) реквизиттер = 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', 'true'); 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'})

Сунушталууда: