Опитът от създаването на първия робот на Arduino (робот „ловец“)

Здравейте

В тази статия искам да опиша процеса на сглобяване на първия ми робот с помощта на Arduino. Материалът ще бъде полезен и на други начинаещи като мен, които искат да направят някаква „самоходна количка“. Статията е описание на етапите на работа с моите допълнения върху различни нюанси. В края на статията е дадена връзка към крайния код (най-вероятно не най-идеалният).

Опитът от създаването на първия робот на Arduino (робот „ловец“)

При възможност привличах сина си (8 г.) в участие. Какво точно работи с него и какво не - посветих част от статията на това, може би ще бъде полезно за някого.

Общо описание на робота

Първо, няколко думи за самия робот (идеята). Всъщност не исках да сглобявам нещо стандартно в началото. В същото време наборът от компоненти беше доста стандартен - шаси, двигатели, ултразвуков сензор, линеен сензор, светодиоди, пищялка. Първоначално от този „сервиз за супа“ е изобретен робот, който пази своята територия. Той кара към нарушителя, който е пресекъл кръговата линия, след което се връща към центъра. Въпреки това, тази версия изисква начертана линия, плюс допълнителна математика, за да остане в кръга през цялото време.

Затова след известно мислене промених малко идеята и реших да направя робот „ловец“. В началото се завърта около оста си, избирайки близка цел (човек). Ако „плячката“ бъде открита, „ловецът“ включва мигащи светлини и сирена и започва да кара към нея. Когато човекът се отдалечи/избяга, роботът избира нова цел и я преследва и т.н. Такъв робот не се нуждае от ограничен кръг и може да работи на открити площи.

Както можете да видите, това много прилича на игра на догонване. Въпреки че в крайна сметка роботът не се оказа достатъчно бърз, той честно взаимодейства с хората около себе си. Особено го харесват децата (понякога обаче изглежда, че ще го стъпчат, сърцето им прескача...). Мисля, че това е добро решение за популяризиране на техническия дизайн.

Структура на робота

И така, взехме решение за идеята, нека да продължим оформление. Списъкът с елементи се формира от това, което роботът трябва да може да прави. Всичко тук е съвсем очевидно, така че нека веднага да разгледаме номерацията:

Опитът от създаването на първия робот на Arduino (робот „ловец“)

„Мозъците“ на робота са дъска arduino uno (1); беше в комплект поръчан от Китай. За нашите цели е напълно достатъчно (ние се фокусираме върху броя на използваните щифтове). От същия комплект взехме готово шаси (2), на което са закрепени две задвижващи колела (3) и едно задно (свободно въртящо се) (4). В комплекта е включено и готово отделение за батерии (5). В предната част на робота има ултразвуков сензор (HC-SR04) (6), отзад има моторен драйвер (L298N) (7), в центъра има LED мигач (8) и малко до отстрани има пищялка (9).

На етапа на оформлението разглеждаме:

- така че всичко да пасне
- да бъдат балансирани
- да бъдат рационално разположени

Нашите китайски колеги вече частично направиха това за нас. И така, тежкото отделение за батерии е поставено в центъра, а задвижващите колела са разположени приблизително под него. Всички останали дъски са олекотени и могат да се поставят по периферията.

нюанси:

  1. Шасито от комплекта има много фабрични дупки, но още не съм разбрал каква е логиката в тях. Двигателите и акумулаторната батерия бяха закрепени без проблеми, след което започна „настройката“ с пробиване на нови дупки за закрепване на тази или онази платка.
  2. Месинговите стелажи и другите крепежни елементи от складовите помещения бяха голяма помощ (понякога трябваше да ги извадим).
  3. Прекарах шините от всяка платка през скобите (пак ги намерих на склад). Много удобно, всички кабели лежат добре и не висят.

Индивидуални блокове

Сега ще мина блокове и ще ви разкажа лично за всеки един.

отделение за батерии

Ясно е, че роботът трябва да има добър източник на енергия. Опциите могат да варират, аз избрах опцията с 4 АА батерии. Общо те дават приблизително 5 V и това напрежение може да бъде приложено директно към 5V извода на платката Arduino (заобикаляйки стабилизатора).

Разбира се, имах известна предпазливост, но това решение е доста работещо.

Тъй като захранването е необходимо навсякъде, за удобство направих два конектора в центъра на робота: единият „разпределя“ земята (вдясно), а вторият - 5 V (вляво).

Опитът от създаването на първия робот на Arduino (робот „ловец“)

Двигатели и драйвер

Първо, относно монтирането на двигателите. Стойката е фабрична, но с големи допуски. С други думи, двигателите могат да се клатят няколко милиметра наляво и надясно. За нашата задача това не е критично, но на места може да има ефект (роботът ще започне да се движи настрани). За всеки случай поставих двигателите строго успоредни и ги фиксирах с лепило.

Опитът от създаването на първия робот на Arduino (робот „ловец“)

За управление на двигателите, както писах по-горе, се използва драйверът L298N. Според документацията той има три пина за всеки двигател: един за промяна на скоростта и чифт пинове за посоката на въртене. Тук има един важен момент. Оказва се, че ако захранващото напрежение е 5 V, тогава контролът на скоростта просто не работи! Тоест, или изобщо не се върти, или се върти на максимум. Това е функцията, която ме накара да „убия“ няколко вечери. В крайна сметка намерих споменаване някъде в един от форумите.

Най-общо казано, имах нужда от ниска скорост на въртене при завъртане на робота - така че да има време да сканира пространството. Но тъй като нищо не излезе от тази идея, трябваше да го направя по различен начин: малък завой - стоп - завой - стоп и т.н. Отново не толкова елегантно, но работещо.

Тук също ще добавя, че след всяко преследване роботът избира произволна посока за нов завой (по или обратно на часовниковата стрелка).

Ултразвуков сензор

Опитът от създаването на първия робот на Arduino (робот „ловец“)

Друг хардуер, при който трябваше да търсим компромисно решение. Ултразвуковият сензор произвежда нестабилни числа върху реални препятствия. Всъщност това се очакваше. В идеалния случай работи някъде в състезания, където има гладки, равни и перпендикулярни повърхности, но ако нечии крака „мигат“ пред него, трябва да се въведе допълнителна обработка.

Като такава обработка задам среден филтър за три точки. Въз основа на тестове върху реални деца (нито едно дете не е пострадало по време на тестовете!) се оказа напълно достатъчно за нормализиране на данните. Физиката тук е проста: имаме сигнали, отразени от необходимо обекти (даващи необходимото разстояние) и отразени от по-отдалечени, например стени. Последните са случайни емисии при измервания от формата 45, 46, 230, 46, 46, 45, 45, 310, 46... Именно тях медианният филтър отрязва.

След цялата обработка получаваме разстоянието до най-близкия обект. Ако е по-малко от определена прагова стойност, тогава включваме алармата и караме направо към „нарушителя“.

Мигачка и сирена

Може би най-простите елементи от всички по-горе. Те могат да се видят на снимките по-горе. Тук няма какво да се пише за хардуера, така че сега нека продължим код.

Контролна програма

Не виждам смисъл да описвам кода подробно, кой има нужда от него - връзката е в края на статията, там всичко е доста четливо. Но би било хубаво да се обясни общата структура.

Първото нещо, което трябваше да разберем, беше, че роботът е устройство в реално време. По-точно да запомня, защото и преди, и сега все още се занимавам с електроника. И така, веднага забравяме за предизвикателството забавяне (), който обичат да използват в примерни скици и който просто „замразява“ програмата за определен период от време. Вместо това, както съветват опитни хора, въвеждаме таймери за всеки блок. Необходимият интервал е изтекъл - действието е извършено (увеличава яркостта на светодиода, включва двигателя и т.н.).

Таймерите могат да бъдат свързани помежду си. Например туитърът работи синхронно с мигача. Това малко опростява програмата.

Естествено, ние разделяме всичко на отделни функции (мигащи светлини, звук, завиване, движение напред и т.н.). Ако не направите това, тогава няма да можете да разберете какво идва откъде и къде.

Нюанси на педагогиката

Правех всичко описано по-горе в свободното си време вечер. По спокоен начин прекарах около три седмици на робота. Това можеше да свърши до тук, но обещах да ви разкажа и за работата с дете. Какво може да се направи на тази възраст?

Работете според инструкциите

Първо проверихме всеки детайл поотделно - светодиоди, пищялка, двигатели, сензори и т.н. Има голям брой готови примери - някои направо в средата за разработка, други могат да бъдат намерени в интернет. Това със сигурност ме радва. Взимаме кода, свързваме частта, уверяваме се, че работи, след което започваме да я променяме, за да отговаря на нашата задача. Детето прави връзките по схемата и под мое наблюдение. Това е добре. Освен това трябва да можете да работите стриктно според инструкциите.

Ред на работа („от конкретно към общо“)

Това е труден момент. Трябва да научите, че големият проект („направете робот“) се състои от малки задачи („свържете сензор“, „свържете двигатели“...), а тези от своя страна се състоят от още по-малки стъпки („намерете програма“, „свързване на платка.“, „изтегляне на фърмуер“...). Изпълнявайки повече или по-малко разбираеми задачи от по-ниско ниво, ние „затваряме“ задачите от средното ниво и от тях се формира общият резултат. Обясних, но мисля, че реализацията няма да дойде скоро. Някъде, вероятно, от юношеството.

Монтаж

Пробиване, резби, винтове, гайки, запояване и мирис на колофон – къде щяхме да сме без него? Детето получи основното умение „Работа с поялник“ - успя да запои няколко връзки (помогнах малко, няма да го скрия). Не забравяйте за обяснението за безопасност.

Работа с компютър

Написах програмата за робота, но все пак успях да постигна някои благоприятни резултати.

Първо: английски. Тъкмо го бяха започнали в училище, така че се мъчихме да разберем какво е пищалка, мигалка, яркост и други транслитерации. Поне това разбрахме. Съзнателно не използвах родни английски думи, тъй като все още не сме достигнали това ниво.

Второ: ефективна работа. Научихме комбинации от клавишни комбинации и как бързо да извършваме стандартни операции. Периодично, когато пишехме програмата, със сина ми си разменяхме местата и аз казвах какво трябва да се направи (замяна, търсене и т.н.). Трябваше да повтарям отново и отново: „щракнете двукратно за избор“, „задръжте Shift“, „задръжте Ctrl“ и така нататък. Процесът на обучение тук не е бърз, но мисля, че уменията постепенно ще се отлагат „в подкорието“.

Скрит текстМоже да се каже, че горното е почти очевидно. Но, честно казано, тази есен имах възможността да преподавам информатика в 9-ти клас в едно училище. Това е ужасно. Учениците не знаят такива основни неща като Ctrl + Z, Ctrl + C и Ctrl + V, избиране на текст със задържане на Shift или двойно щракване върху дума и т.н. И това при положение, че са били трета година информатика... Направете си извода.

Трето: писане с докосване. Поверих коментарите в кода на детето да ги пише (нека се упражнява). Веднага поставихме ръцете си правилно, така че пръстите ни постепенно да запомнят местоположението на клавишите.

Както виждате, ние все още започваме. Ще продължим да усъвършенстваме уменията и знанията си, те ще бъдат полезни в живота.

Между другото, за бъдещето...

По-нататъшно развитие

Роботът е направен, кара, мига и бипка. Сега какво? Вдъхновени от това, което сме постигнали, планираме да го усъвършенстваме допълнително. Има идея да се направи дистанционно - като луноход. Би било интересно, седейки на дистанционно управление, да контролирате движението на робот, който се движи на съвсем различно място. Но това ще е друга история...

И накрая, всъщност героите на тази статия (видео чрез щракване):

Опитът от създаването на първия робот на Arduino (робот „ловец“)

Спасибо за внимание!

Линк към кода

Източник: www.habr.com

Добавяне на нов коментар