Досвід створення першого робота на Ардуїно (робот-«мисливець»)

Здравствуйте.

У цій статті я хочу описати процес збирання свого першого робота на ардуїно. Матеріал буде корисний іншим таким же новачкам, як і я, які захочуть виготовити якийсь «самобіглий візок». Стаття є описом етапів роботи з моїми доповненнями з різних нюансів. Посилання на підсумковий код (швидше за все, не найідеальніший) дано наприкінці статті.

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

У міру нагоди я залучав до участі свого сина (8 років). Що саме з ним виходило, а що ні — на це я виділив частину статті, можливо, комусь знадобиться.

Загальний опис робота

Спочатку кілька слів про сам робот (ідея). Збирати щось типове на старті не дуже хотілося. У той же час набір компонентів був досить стандартним — шасі, двигуни, ультразвуковий датчик, датчик лінії, світлодіоди, пищалка. Спочатку з цього «супового набору» придумали робот, який охороняє свою територію. Він їде на порушника, який перетнув лінію кола, а потім повертається до центру. Однак у цьому варіанті була потрібна прокреслена лінія плюс зайва математика, щоб постійно залишатися в колі.

Тому після деяких обдумувань я дещо змінив ідею і вирішив робити робота-мисливця. На старті він повертається навколо своєї осі, обираючи поблизу ціль (людини). Якщо "жертва" виявлена, "мисливець" включає мигалку та сирену, і починає їхати на неї. Коли людина відходить/відбігає, робот вибирає нову мету і переслідує її, і таке інше. Такому роботі не потрібне обмежене коло, і воно може працювати на відкритій території.

Як бачите, це багато в чому нагадує гру «наздоганялки». Хоча в результаті робот і не вийшов досить жвавим, але він чесно взаємодіє з оточуючими його людьми. Особливо це подобається дітям (іноді, правда, здається, що вони ось-ось розтопчуть його, аж серце їсть…). Думаю, для популяризації технічного конструювання це гарне рішення.

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

Отже, ми визначилися з ідеєю, перейдемо до компонування. Список елементів формується з того, що має вміти робот. Тут все цілком очевидно, тому одразу подивимося на нумерацію:

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

"Мізки" робота - плата arduino uno (1); була у замовленому з Китаю наборі. Для наших цілей її цілком вистачає (орієнтуємося на кількість пінів, що використовуються). З цього ж набору ми взяли готове шасі (2), на яке кріпляться два провідні колеса (3) і одне заднє (вільне обертання) (4). Також у наборі був готовий відсік батареї (5). Попереду у робота стоїть ультразвуковий датчик (HC-SR04) (6), ззаду – драйвер двигунів (L298N) (7), по центру – світлодіод-мигалка (8), і трохи осторонь – пищалка (9).

На етапі компонування ми дивимося:

щоб все влізло
щоб було збалансовано
щоб було раціонально розміщено

Частково це зробили за нас китайські колеги. Так, важкий відсік батареї поставлений в центр, і приблизно під ним стоять провідні колеса. Решта плати легкі, їх можна розміщувати по периферії.

нюанси:

  1. У шасі з набору є багато отворів заводу, але яка в них логіка — я так і не розібрався. Двигуни та акумуляторний блок закріпилися без проблем, далі почалося «припасування» зі свердлінням нових отворів, щоб закріпити ту чи іншу плату.
  2. Дуже виручили латунні стійки та інше кріплення із запасників (іноді доводилося викручуватися).
  3. Шини від кожної плати пропускав через затискачі (знову ж таки знайшов у запасниках). Дуже зручно, всі дроти лежать красиво і не бовтаються.

Окремі блоки

Тепер пройдуся блоків і розповім персонально про кожен.

Батарейний відсік

Зрозуміло, що робот повинен мати гарне джерело енергії. Варіанти можуть бути різні, я вибрав варіант із 4 акумуляторами АА. У сумі вони дають приблизно 5, і таку напругу можна прямо подати на пін 5V плати arduino (минаючи стабілізатор).

Деяка настороженість, звичайно, у мене була, але це рішення цілком працездатне.

Так як харчування потрібне скрізь, то для зручності я зробив по центру робота два роз'єми: один роздає землю (праворуч), а другий - 5 В (ліворуч).

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

Двигуни та драйвер

Спочатку для кріплення двигунів. Кріплення заводське, але виготовлене з великими допусками. Іншими словами, двигуни можуть «віхляти» на пару міліметрів ліворуч-праворуч. Для нашого завдання це не критично, а ось десь може і впливати (робота почне відводити убік). Про всяк випадок я виставив двигуни строго паралельно і зафіксував клеєм.

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

Для керування двигунами, як я писав вище, використовується драйвер L298N. За документацією у нього три піна на кожен двигун: один для зміни швидкості та пари пінів для направлення обертання. Тут є важливий момент. Виявляється, якщо напруга живлення 5, то регулювання швидкості просто не працює! Тобто або зовсім не крутить, або крутить максимум. Ось така особливість, через яку я вбив пару вечорів. Зрештою, знайшов згадку десь на одному із форумів.

Взагалі кажучи, низька швидкість обертання мені була потрібна під час розвороту робота — щоб він мав запас часу просканувати простір. Але, оскільки з таким задумом нічого не вийшло, довелося робити інакше: невеликий поворот - зупинка - поворот - зупинка і т. д. Знову ж таки, не так витончено, але працездатно.

Ще тут додам, що після кожного переслідування робот вибирає випадковий напрямок нового повороту (за або проти годинникової стрілки).

Ультразвуковий датчик

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

Ще одна залізяка, де довелося шукати компромісне рішення. Ультразвуковий датчик на реальних перешкодах дає нестабільні цифри. Власне, це було очікувано. Ідеально він працює десь на змаганнях, де є гладкі, рівні та перпендикулярні поверхні, а от якщо перед ним «миготять» чиїсь ноги — тут потрібно вводити додаткову обробку.

Як таку обробку я поставив медіанний фільтр на три відліки. Виходячи з тестів на реальних дітях (під час тестів жодна дитина не постраждала!), її виявилося цілком достатньо для нормалізації даних. Фізика тут проста: ми маємо сигнали, відбиті від потрібних об'єктів (що дають необхідну відстань) і відбиті від далеких, наприклад, стін. Другі являють собою випадкові викиди у вимірах виду 45, 46, 230, 46, 46, 45, 45, 310, 46… Саме їхній медіанний фільтр і відсікає.

Після всієї обробки ми отримуємо відстань до найближчого об'єкта. Якщо вона менша за деяку порогову величину — тоді ми включаємо сигналізацію і їдемо прямо на «порушника».

Мигалка та сирена

Мабуть, найпростіші елементи зі всього перерахованого. Їх видно на фотографіях вище. Залізом тут писати нема чого, тому тепер перейдемо до код.

Програма управління

Розписувати детально код я сенсу не бачу, кому потрібно — посилання наприкінці статті, там усе досить читальна. А ось загальну структуру було б непогано пояснити.

Перше, що довелося осмислити: робот це пристрій реального часу. Точніше, згадати, бо й раніше, і зараз все одно займаюсь електронікою. Значить, відразу забуваємо про виклик затримка (), який дуже люблять використовувати в скетчах-прикладах, і який просто заморожує програму на вказаний проміжок часу. Натомість, як радять досвідчені люди, вводимо таймери на кожен блок. Пройшов необхідний проміжок – виконали дію (збільшили яскравість світлодіода, включили двигун тощо).

Таймери можуть бути взаємопов'язані. Так, наприклад, пищалка працює синхронно з мигалкою. Це трохи спрощує програму.

Звичайно, все розбиваємо на окремі функції (мигалка, звук, поворот, рух уперед і так далі). Якщо так не робити, то потім уже не розібратися, що звідки й куди.

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

Все, що було описано вище, я робив у вільний час вечорами. У неспішному режимі я витратив на робота десь тижнів зо три. На цьому можна було б завершитися, але я ще обіцяв вам розповісти про роботу з дитиною. Що можна здійснити в такому віці?

Робота з інструкції

Кожну деталь ми спочатку перевіряли окремо - світлодіоди, пищалка, мотори, датчики і т.д. Є велика кількість готових прикладів - якісь прямо в середовищі розробки, інші можна знайти в інтернеті. Це, безперечно, тішить. Беремо код, підключаємо деталь, переконуємося, що працює, далі починаємо змінювати під своє завдання. Підключення за схемою та під деяким моїм контролем дитина робить сама. Це добре. Працювати чітко за інструкцією теж треба вміти.

Порядок роботи («від часткового до загального»)

Оце складний пункт. Потрібно привчати, що великий проект («зробити робота») складається з дрібних завдань («підключити датчик», «підключити мотори»…), а ті, у свою чергу, ще з дрібніших кроків («знайти програму», «підключити плату », «Завантажити прошивку»…). Виконуючи більш-менш зрозумілі завдання нижнього рівня, ми «закриваємо» завдання середнього рівня, та якщо з них вже складається загальний результат. Пояснював, але, гадаю, усвідомлення прийде ще не скоро. Десь, мабуть, до підліткового віку.

Монтаж

Свердління, різьблення, гвинти, гайки, паяння та запах каніфолі — куди ж без цього. Дитина отримала базовий скіл «Робота з паяльником» — вдалося спаяти кілька з'єднань (я трохи допомагав, не приховую). Не забувайте про пояснення техніки безпеки.

Робота на комп'ютері

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

Перше: англійська. У школі його тільки-но почали, тому ми «зі скрипом» розбирали, що таке pishalka, migalka, yarkost та інший трансліт. Зрозуміли хоч би це. Я усвідомлено не став використовувати рідні англійські слова, оскільки до цього ми ще не дійшли.

Друге: ефективна робота. Навчали гарячі комбінації клавіш, як швидко виконувати типові операції. Періодично, коли писали програму, ми змінювалися із сином місцями, і я казав, що потрібно зробити (заміну, пошук тощо). Доводилося повторювати знову і знову: "виділі подвійним кліком", "затисні Shift", "затисні Ctrl" і так далі. Процес навчання тут не швидкий, але, на мою думку, навички поступово відкладуться «в підкірку».

Прихований текстВи можете сказати, що описане вище це майже очевидно. Але, чесно, цієї осені мені довелося вести інформатику у 9-х класах в одній школі. Це жах. Учні не знають таких елементарних речей, як Ctrl+Z, Ctrl+C та Ctrl+V, виділення тексту із затисненим Shift-ом або подвійним кліком на слові та інше. Це при тому, що у них тривав третій рік навчання інформатиці… Висновок зробіть самі.

Третє: сліпа печатка. Коментарі в коді я довірив друкувати дитині (нехай тренується). Відразу поставили правильно руки, щоб пальці поступово запам'ятовували розташування клавіш.

Як бачите, у нас все ще тільки-но починається. Навички та знання відточуватимемо і далі, у житті знадобляться.

До речі, про перспективу...

Подальший розвиток

Робот зроблений, їздить, блимає та пищить. Що ж тепер? Надихнувшись досягнутим, ми плануємо доопрацьовувати його далі. Є задум зробити дистанційне управління - за типом місяцехода. Було б цікаво, сидячи за умовним пультом, контролювати рух робота, який їздить зовсім на іншому місці. Але це вже буде окрема історія.

І наприкінці, власне, герої цієї статті (відео на кліку):

Досвід створення першого робота на Ардуїно (робот-«мисливець»)

Дякуємо за увагу!

Посилання на код

Джерело: habr.com

Додати коментар або відгук