Чотириногий робот-павук створений для демонстрації роботи сервомашинок під управлінням контролера Arduino (для гуртка робототехніки).
У робота два режими:
- автономний - робот рухається вперед, при виявленні перешкоди (використовується ультразвуковий датчик) повертається і рухається далі;
- зовнішнє управління за допомогою інфрачервоного пульта.
Використовувалися сервомашинки Turnigy TGY-9025MG металевим редуктором.
Як ніг робота використовувалися заглушки для струменевих картриджів, скріплені за допомогою полікапролактона
Корпус був зроблений з пакувального матеріалу для комп'ютерів. Для сервомашинок потрібне окреме харчування. В якості джерела живлення використовується Li-po батарея Turnigy 2S 1600 mAh.
Ось вид зверху і знизу робота в процесі складання.
Для управління сервоприводом в Arduino є стандартна бібліотека Servo. На платах, відмінних від Mega, використання бібліотеки відключає можливість використання analogWrite () (PWM) на пінах 9 і 10 (незалежно підключені до цих пінам серви чи ні). На платах Mega, до 12 серв можуть використовуватися без впливу на функціональність PWM, але використання від 12 до 23 сервомашинок відключить PWM на пінах 11 і 12. Cервопрівод підключається 3-ма проводами: харчування, земля і сигнальний. Харчування - червоний провід. Чорний (або коричневий) провід - земля підключається до GND висновку Arduino, сигнальний (помаранчевий / жовтий / білий) провід підключається до цифрового висновку контролера Arduino. Будемо використовувати висновки 5,6,7,8 Arduino.
Напруга видається батареєю 7.4 - 8.4 В. Оскільки для харчування сервоприводів необхідна напруга 4.8 - 6.0 В будемо використовувати стабілізатор напруги 5В, зібраний на мікросхемі L7805. Одна мікросхема постійно перегрівалася, проблема вирішилася установкою паралельно двох мікросхем L7805.
Для виявлення перешкод будемо використовувати ультразвуковий датчик HC-SR04, який дозволяє визначати відстань до об'єкта в діапазоні від 2 до 500 см з точністю 0.3 см. Якщо відстань до перешкоди менше 10 см, робот робить поворот і рухається далі вперед.
Як пульта використовується пульт lg, приймач ІК-сигналів - TSOP31238 (1-GND, 2 - + 5V, 3-OUT).
І весь робот в зборі (плата Arduino харчується від батарейки Крона).
Приступимо до написання скетчу
Для управління сервоприводами використовується Arduino бібліотека Servo. Нам необхідно реалізувати сукупність рухів сервоприводів для руху робота-павука вперед, назад, повороту за годинниковою стрілкою і повороту проти годинникової стрілки. Крім того необхідно реалізувати функції зупинки робота, а також для економії електроенергії передбачимо режим засипання (коли сервоприводи знаходяться в режимі detach) і пробудження (переклад сервоприводів в режим attach). Тому кожен рух робота складається з декількох кроків.
Наприклад рух вперед складається з наступних кроків:
- ліва передня нога вперед;
- права передня нога вперед;
- ліва задня нога вперед;
- права задня нога вперед;
- чотири ноги разом назад (що призведе до перетягування тіла робота-павука).
Дані для кута повороту кожної серви на кожному кроці для кожного руху робота-павука зберігаються в тривимірному масиві arr_pos.
Процедура course (int variant) реалізує переміщення сервоприводів для кожного кроку наступних рухів робота-павука: вперед, назад, повороту за годинниковою стрілкою і повороту проти годинникової стрілки.
Для зупинки, засинання і пробудження робота-павука існує процедура go_hor_all ()
Реалізуємо просте ІК-управління з пульта. Вибираємо 7 клавіш, дані про коди заносимо в скетч у вигляді констант. І в циклі loop () реалізуємо логіку вибору рухів робота-павука при натисканні клавіш ІК-пульта. Програма отримання коду get_ir_kod () викликається по перериванню CHANGE на вході 2. Використовується Arduino бібліотека IRremote.
До режиму управління робота з ІЧ-пульта додамо автономний режим. В автономному режимі робот буде рухатися вперед, при досягненні перешкоди робот буде робити поворот і знову рухатися вперед. Ультразвуковий датчик HC-SR04 дозволяє визначати відстань до об'єкта в діапазоні від 2 до 500 см з точністю 0.3 см. Сенсор випромінює короткий ультразвуковий імпульс (в момент часу 0), який відбивається від об'єкта і приймається сенсором. Відстань розраховується виходячи з часу до отримання луни і швидкості звуку в повітрі. Якщо відстань до перешкоди менше 10 см, робот робить поворот і рухається далі вперед. Перехід з режиму ІК-урядування в автономний режим виробляємо натисканням клавіш "жовта" і "синя".
Для роботи з датчиком HC-SR04 будемо використовувати Arduino бібліотеку Ultrasonic. Конструктор Ultrasonic приймає два параметри - номера пинов до яких підключені висновки Trig і Echo:
Виходить такий код
Архів з скетчем та бібліотеками Ultrasonic і IRremote можна скачати нижче