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

По възможност привлякох сина си (8 години) да участва. Какво точно успяхме да направим заедно и какво не — това е определено в част от статията, може би на някого ще му е полезно.
Общо описание на робота
Първо, няколко думи за самия робот (идея). Не ми се искаше да сглобявам нещо стандартно в началото. В същото време комплектът компоненти беше доста стандартен — шаси, мотори, ултразвуков сензор, сензор за линия, светодиоди, пиратка. В началото от този „супов набор“ измислих робот, който охранява своята територия. Той се насочва към нарушителя, който е преминал линията на кръга, след което се връща в центъра. Въпреки това, в този вариант бе необходима начертана линия, плюс излишна математика, за да остане постоянно в кръга.
Следователно, след известно обмисляне, промених идеята и реших да направя робот-„ловец“. В началото той се завърта около оста си, избирайки близка цел (човек). Ако „жертвата“ е открита, „ловецът“ включва мигача и сирената и започва да се движи към нея. Когато човекът се отдалечи/отбяга, роботът избира нова цел и я преследва, и т.н. Такъв робот не се нуждае от ограничен кръг и може да работи на открита територия.
Както виждате, това до голяма степен наподобява играта „гоненица“. Въпреки че в крайна сметка роботът не стана достатъчно бърз, той честно взаимодействува с хората около него. Особено това се харесва на децата (понякога обаче изглежда, че те скоро ще го стъпчат, сърцето ми се свива…). Мисля, че това е добро решение за популяризиране на техническото конструиране.
Структура на робота
И така, определихме идеята, нека преминем към компоновка. Списъкът с елементи се формира от това, какво трябва да може роботът. Тук всичко е доста очевидно, така че незабавно ще погледнем на номерирането:

Мозъците на робота са платка Arduino Uno (1); получихме я от комплекта, поръчан от Китай. За нашите нужди е напълно достатъчна (ориентираме се по броя на използваните пинове). От същия комплект взехме готово шаси (2), на което се закрепват два водещи колела (3) и едно задно (свободно въртящо се) (4). Комплектът включваше и готов акумулаторен отсек (5). Отпред на робота е поставен ултразвуков сензор (HC-SR04) (6), отзад — драйвер за двигатели (L298N) (7), в централната част — светодиод-мигалка (8), а леко настрани — пищялка (9).
На етапа на компониране гледаме:
— да се побере всичко
— да е балансирано
— да е рационално разположено
Отчасти китайските ни колеги вече направиха това вместо нас. Така например тежкият акумулаторен отсек е поставен в центъра, а водещите колела са точно под него. Всички останали платки са леки и могат да се разположат по периферията.
Нюанси:
- В шасито от комплекта има много заводски отвори, но не успях да разбера каква е логиката зад тях. Двигателите и акумулаторният блок се закрепиха без проблем, след това започна 'подгонката' със сверлине на нови отвори, за да се закрепи всяка платка.
- Много ми помогнаха бронзовите стълбове и другият крепеж от запасите (понякога се налагаше да се справям сам).
- Проводниците от всяка платка прокарах през зажимите (отново намерени в запасите). Много удобно, всички проводници са подредени и не висят.
Отделни блокове
Сега ще мина през блоковете и ще разкажа персонално за всеки.
Акумулаторен отсек
Ясно е, че роботът трябва да има добър източник на енергия. Вариантите могат да бъдат различни, аз избрах вариант с 4 AA батерии. Те дават приблизително 5 V, и напрежението може директно да се подаде на пин 5V на платката Arduino (без стабилизатор).
Разбира се, имах известна предпазливост, но това решение е напълно работещо.
Тъй като захранването е необходимо навсякъде, за удобство направих по централната част на робота два конектора: един 'раздава' земя (отдясно), а вторият — 5 V (отляво).

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

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

Още една железария, където трябваше да търся компромисно решение. Ултразвуковият сензор дава нестабилни числа при реални препятствия. Всъщност, това беше очаквано. Идеално работи на състезания, където има гладки, равни и перпендикулярни повърхности, а ако пред него „преминават“ нечии крака — тук трябва да се въведе допълнителна обработка.
Като такава обработка поставих на три измервания. Въз основа на тестове с реални деца (по време на тестовете нито едно дете не пострада!), се оказа, че е напълно достатъчен за нормализиране на данните. Физиката тук е проста: имаме сигнали, отразени от необходимите обекти (даващи изискваното разстояние) и отразени от по-далечни, например, стени. Вторите представляват случайни отклонения в измерванията от вида 45, 46, 230, 46, 46, 45, 45, 310, 46… Именно техният медианен филтър отсява.
След обработка получаваме разстоянието до най-близкия обект. Ако то е по-малко от определена прагово стойност - включваме сигнализацията и отиваме направо към нарушителя.
Сирена и мигача
Вероятно, най-простите елементи от всичко изброено. Те се виждат на снимките по-горе. По хардуера тук няма много за писане, затова сега ще преминем към кода.
Програмата за управление
Не виждам смисъл да описвам кода подробно, който се нуждае - връзка в края на статията, там всичко е достатъчно читательного. Обаче, общата структура би било добре да обясня.
Първото, което ми се наложи да разбера: роботът е устройство за реално време. По-точно, да си напомня, защото и преди, и сега все пак се занимавам с електроника. Следователно, веднага забравяме за повикването delay(), което много хора обичат да използват в примерни скриптове и което просто "замразява" програмата за указан период от време. Вместо това, както съветват опитни хора, въвеждаме таймери за всеки блок. Изминал е необходимият период - изпращаме действие (увеличаваме яркостта на LED светодиода, включваме двигателя и т.н.).
Таймерите могат да бъдат взаимосвързани. Например, звуковият сигнал работи синхронно с мигача. Това малко опростява програмата.
Естествено, всичко разбиваме на отделни функции (мигач, звук, завой, движение напред и т.н.). Ако не го направим така, после вече няма да можем да разберем откъде и накъде.
Нюанси на педагогиката
Всичко, което беше описано по-горе, правих във свободното си време вечер. В спокойния режим прекарах около три седмици на робота. На това можеше да се завърши, но обещах да ви разкажа за работата с детето. Какво може да направимо на такава възраст?
Работа по инструкция
Проверявахме всяка част поотделно - LED светодиоди, звуков сигнал, моторчета, сензори и т.н. Има много готови примери - някои директно в средата за разработка, други може да се намерят в интернет. Това безспорно е приятно. Взимаме кода, свързваме частта, уверяваме се, че работи, и след това започваме да го променяме според нашата задача. Свързванията по схемата и под някакъв мой контрол детето прави само. Това е добре. Работата стриктно по инструкцията също трябва да се умее.
Редът на работа ("от частно към общо")
Това е сложен момент. Трябва да се научим, че голям проект (например „да направим робот“) се състои от малки задачи (като „да свържем сензор“, „да свържем моторите“ и т.н.), а те, от своя страна, се състоят от още по-малки стъпки (като „да намерим програма“, „да свържем платка“, „да заредим фърмуера“). Изпълнявайки по-или-иначе ясни задачи от ниско ниво, ние „затваряме“ задачите от средно ниво, а от тях вече се сглобява общият резултат. Обяснявах, но мисля, че осъзнаването ще дойде едва след време. Някъде, може би, към тийнейджърска възраст.
Монтаж
Свердление, резби, винтове, гайки, запояване и мирис на смола — как без това. Детето получи основен навик „Работа с поялник“ — успяхме да споим няколко съединения (малко му помогнах, не мога да скрия). Не забравяйте за обяснението за безопасност.
Работа на компютър
Програмата за робота я написах аз, но все пак успяхме да постигнем някои допълнителни резултати.
Първо: английски. В училище току-що започнаха, затова ние „с мъка“ разбирахме какво е pishalka, migalka, yarkost и друг транслит. Поне осъзнахме това. Умишлено не използвах родни английски думи, тъй като не сме достигнали до този етап.
Второ: ефективна работа. Учене на бързи комбинации от клавиши, как бързо да се извършват стандартни операции. Периодично, когато пишехме програмата, сменяхме местата с сина ми, и аз му казвах какво трябва да направи (замяна, търсене и т.н.). Трябваше да повторя отново и отново: „източи с двоен клик“, „задръж Shift“, „задръж Ctrl“ и така нататък. Процесът на обучение тук не е бърз, но мисля, че уменията постепенно ще се натрупват „в подсъзнанието“.
Скрит текстМожете да кажете, че казаното по-горе е почти очевидно. Но, честно казано, тази есен ми се случи да преподавам информатика в 9-ти клас в едно училище. Това е ужас. Ученците не знаят такива елементарни неща като Ctrl + Z, Ctrl + C и Ctrl + V, маркиране на текст с задържан Shift или с двоен клик на словото и други. Това при положение, че те са в третата година на обучение по информатика… Направете изводите сами.
Трето: слепи печат. Коментарите в кода поверих на детето да ги отпечата (нека тренира). Веднага поставихме ръцете правилно, за да може пръстите постепенно да запомнят разположението на клавишите.
Както виждате, при нас всичко още започва. Уменията и знанията ще продължаваме да доразвиваме, ще ни трябват в живота.
Между другото, за перспективата…
По-нататъшно развитие
Роботът е готов, движи се, мига и издава звуци. Какво да правим сега? Вдъхновени от постигнатото, планираме да го доработим. Имаме идея за дистанционно управление — нещо подобно на луноход. Би било интересно да контролираш движението на робота, докато седиш зад условен пулт, дори ако той се движи на съвсем различно място. Но това вече ще бъде отделна история...
И накрая, всъщност, героите на тази статия (видео при клик):
Благодаря за вниманието!
→
Източник: habr.com
