Гайд для новичков Arduino
На данной странице находится максимально подробный гайд по началу работы с Arduino, в котором можно найти ответы на все вопросы касательно установки, подключения и загрузки прошивки, а также по работе с моими проектами. Внимательно изучите гайд, прежде чем писать мне на почту или в нашу группу ВК, если у вас что-то не получается, тут есть ответы на все вопросы. Также прилагаю список уроков на этом сайте, где можно найти ещё больше базовой информации:
- Начало работы
- Работа с Arduino IDE
- Первая прошивка, ошибки, FAQ
- Питание платы
Список требуемых деталей для сборки БК
1) Arduino Uno R3 — 1 шт. ~ 7 долларов:
2) LCD2004 жк-модуль ~ 6 долларов:
3) Модуль Bluetooth HC-05 ~ 4 доллара:
4) OBD ELM327 Bluetooth сканер ~ 4 доллара:
5) Резистор 10 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус ~ 3 доллара.
№2. Arduino Biped (Малыш Dino)
Baby Dino — двуногий робот на базе Arduino. Для своего движения он задействует пять сервоприводов: по два для каждой ноги и один для головы. Он также использует ультразвуковой датчик для обнаружения препятствий и их избегания. А теперь посмотрим, как это сделать!
Для реализации этого проекта необходимы следующие компоненты:
Наименование | Количество, шт. | |
Микроконтроллер Arduino Mega 2560 | 1 | |
Батарея 9В | 1 | |
Ультразвуковой датчик SparkFun Ultrasonic Sensor — HC-SR04 | 1 | |
Серво-мотор SG90 Micro-servo motor | 5 |
Схема соединения элементов:
Итак, Малыш DINO — робот-динозавр, сделанный из картона (раскрой деталей прилагается в источнике). Он может двигаться на 2 конечностях, находить препятствия и обходить их справа или слева.
Для начала сборки убедимся, что все необходимые детали (из списка выше) есть в наличии и перейдём к сборке сервоприводов. Необходимо будет скачать программу, загрузить её на Arduino, присоединить сервоприводы согласно диаграмме и проверить их ориентацию. Далее необходимо скачать дизайн-макет, распечатать его на принтере на картоне и вырезать по контурам. Финальная сборка включает присоединение сервоприводов, присоединение ультразвукового сенсора, прокладку кабелей и подсоединение батареи питания. И это всё! Робот готов.
Автор проекта сообщает, что полная сборка занимает у него около 4-х часов.
Сборка
В среде Arduino IDE прошиваем наш микроконтроллер, собираем схему для проверки:
Скетч есть на сайте проекта, дополнительно выложил на Google Drive, ссылка в конце статьи. Убедившись что всё работает, можно собирать в более компактный вид, для будущей установки в корпус. Питание соединяем проводами, а линию данных через разъём PLS:
Получился такой себе «бутерброд»:
Что бы ничего не закоротило, между платами наклеил небольшой кусочек двухстороннего скотча
Теперь нужно делать корпус.
Делать корпус буду конечно же из дерева, в закромах нашлась дубовая доска, толщиной 20 мм. Разметил и с помощью стамески выдолбил место под платы:
Ножовка, наждачный круг и не ограниченное время — получаем это:
Корпус решил сделать немного под наклоном, что бы экран лучше читался:
Корпус не опрокидывается, так как доска, из которой он был сделан, была довольно толстая (20 мм).
С помощью дремеля, вырезал отверстие для USB-кабеля:
Для передней панели нашёл у себя синее затемнённое оргстекло, вырезал из него кусочек нужного размера:
Примеряем все части «пазла»:
Пропитываем корпус льняным маслом, собираем и склеиваем всё вместе
Алгоритм работы скетча:
До кода Setup() определяются номера выводов, тип колокольного звонка, алгоритм работы кнопки фиксирующей опускание трубки, объявляются переменные и функции, подключаются библиотеки, и создаются объекты для работы с ними.
В коде setup() конфигурируются выбранные выводы, инициируется работа GSM/GPRS Shield, звук переводится на разъём гарнитуры, выполняется цикл ожидания готовности GSM/GPRS Shield к работе (регистрация в сети оператора). И после выполнения всех указанных действий выполняется оповещение о готовности к работе, путем включения колокольного звонка на 1 секунду.
Код цикла loop() разделён на две основные части: совершение исходящих звонков (данная часть выполняется если телефонная трубка снята) и приём входящих вызовов (данная часть выполняется если трубка лежит на телефоне).
Совершение исходящих звонков состоит из следующих действий:
- Обнуление переменных, проверка связи с оператором, вывод сигнала в трубку телефона о готовности к работе.
- Дальнейшие действия происходят в отдельном цикле, выход из которого возможен только если положить трубку на телефон. Так же в этом цикле постоянно сбрасывается голосовое соединение, не давая другим абонентам позвонить нам при снятой трубке.
- Если начинается набор номера, то отключаем сигнал в телефонной трубке, подсчитываем количество импульсов набираемых цифр. После каждой введённой цифры из значение добавляется в строку с номером, которая проверяется на корректность (достижение 11 знаков, или совпадение с коротким номером). При желании Вы можете добавить или удалить некоторые короткие номера из скетча.
- Если номер в строке корректен, то производится его набор, с дальнейшей проверкой состояния связи. Если связь установлена, то выполняется пустой цикл ожидания её разрыва.
- При разрыве голосового соединения выполняется цикл вывода коротких звуковых сигналов в телефонную трубку. Этот цикл выполняется постоянно, пока не положить трубку на телефон.
Приём входящих вызовов состоит из следующих действий:
- Отключение тонального сигнала в телефонной трубке (на случай если он был).
- Дальнейшие действия происходят в отдельном цикле, выход из которого возможен только если снять трубку с телефона при отсутствии входящего вызова.
- Если зафиксирован входящий вызов, то выполняется цикл включающий колокольный звонок, пока входящий вызов не изменит свой статус или не будет поднята трубка.
- Если статус вызова изменился по причине поднятия трубки, то устанавливается голосовое соединение, и выполняется пустой цикл ожидания разрыва этого соединения.
- После разрыва голосового соединения выполняется цикл вывода коротких звуковых сигналов в телефонную трубку. Этот цикл выполняется постоянно, пока не положить трубку на телефон.
В конце скетча определена функция управления колокольным звонком. Данная функция принимает один параметр типа bool ( true — ударить в колокол и освободить его / false — освободить колокол). В зависимости от значения переменной modeBEEL функция работает с колокольными звонками собранными на базе соленоида, родного звонка телефона, сервопривода или электромотора.
Nod Bang — киваем головой и делаем бит
Сложность: 2/5.
Время: 3/5.
Идея в том, чтобы не просто кивать в такт музыке, а кивками самому генерировать звук. Эндрю Ли сделал специальное устройство, которое следит за положением головы и в момент наклона воспроизводит нужный звук.
В наушники он встроил акселерометр, кнопки отвечают за выбор звука, а Arduino — за воспроизведение звука на компьютере через MIDI-интерфейс. Чтобы всё выглядело эффектнее, у кнопок есть подсветка, и они тоже делают бит.
ШИМ Arduino
Широтно-импульсная модуляция (ШИМ) — это процесс управления напряжением за счет скважности сигнала. То есть используя ШИМ мы можем плавно управлять нагрузкой. Например можно плавно изменять яркость светодиода, но это изменение яркости получается не за счет уменьшения напряжения, а за счет увеличения интервалов низкого сигнала. Принцип действия ШИМ показан на этой схеме:
ШИМ ардуино
Когда мы подаем ШИМ на светодиод, то он начинает быстро зажигаться и гаснуть. Человеческий глаз не способен увидеть это, так как частота слишком высока. Но при съемке на видео вы скорее всего увидите моменты когда светодиод не горит. Это случится при условии что частота кадров камеры не будет кратна частоте ШИМ.
В Arduino есть встроенный широтно-импульсный модулятор. Использовать ШИМ можно только на тех пинах, которые поддерживаются микроконтроллером. Например Arduino Uno и Nano имеют по 6 ШИМ выводов: это пины D3, D5, D6, D9, D10 и D11. В других платах пины могут отличаться. Вы можете найти описание интересующей вас платы в этом разделе.
Для использования ШИМ в Arduino есть функция analogWrite(). Она принимает в качестве аргументов номер пина и значение ШИМ от 0 до 255. 0 — это 0% заполнения высоким сигналом, а 255 это 100%. Давайте для примера напишем простой скетч. Сделаем так, что бы светодиод плавно загорался, ждал одну секунду и так же плавно угасал и так до бесконечности. Вот пример использования этой функции:
Идеи для авто на основе маленькой платы с маленьким процессором — Arduino
Компы давно и плотно вошли в нашу жизнь. Аппаратная платформа Arduino — это одна из последних разработок с открытым программным кодом, которая построена на обычной печатной схеме. Подробнее о том, как с помощью такой платы сделать разные устройства для авто, мы расскажем далее.
С помощью платы Arduino можно соорудить автомобильный бортовой компьютер, который сможет:
- рассчитать расход горючего;
- вывести информацию о температуре антифриза;
- рассчитать скорость движения, а также расстояние поездки;
- вывести потраченное горючее за определенный километраж;
- определить обороты мотора и т.д (автор видео — канал Arduino Tech PTZ).
Помимо устройства Arduino вам также потребуется жидкокристаллический модуль, адаптер Блютуз НС-05, а также сканер ELM327 и резисторное устройство на 10 кОм. Разумеется, необходимо приготовить и звуковой индикатор, монтажные провода и сам корпус устройства.
Процедура сборки осуществляется следующим образом:
- Сначала настраиваем Блютуз адаптер. К пинам устройства нужно припаять провода — к двум нижним и верхним контактам.
- Сам модуль подключается к плате для настройки, для этого необходимо открыть программу Arduino IDE 1.0.6 или любую другую версию, после его залить скетч в схему через USB-выход.
- Когда загрузка будет завершена, нужно зайти в меню Сервис — Монитор порта и выставить скорость 9600.
- Затем собирается схема с платой, адаптером и заранее подготовленным дисплеем. Сначала подключается Блютуз адаптер.
- После этого в схему добавляется дисплей. Более подробное описание подключения вы найдете на фото ниже.
- Резисторный элемент на 10 кОм используется для управления яркостью и контрастностью дисплея. Поэтому при первом подключении вы можете заметить, что изображения нет, если это так, то его нужно просто настроить путем поворота резистора.
- Далее, производится подключение дополнительной клавиши, которая будет выполнять функцию переключения экранов с информацией. Один контакт от кнопки идет к элементу GND, второй — к контакту 10. Чтобы подключить бипер, плюсовой контакт соединяется с 13 пином, а минусовой — с GND.
- Затем, используя то же программное обеспечение Arduino IDE 1.0.6, нужно залить скетч. Теперь вам остается только настроить бортовой компьютер и подключить его к автомобилю.
Фотогалерея «Схема подключения БК»
GPS-трекер
Чтобы собрать GPS-трекер на базе Arduino, вам потребуется:
- сама плата, процесс описан на примере модели Mega 2560;
- модуль GSM/GPRS, который будет использоваться для передачи данных на сервер;
- а также Arduino GPS-приемник, в примере мы рассмотрим модель SKM53 (автор видео об изготовлении трекера на примере платы SIM 808 — канал Alex Vas).
Как производится подключение схемы:
- Сначала осуществляется подключение модуля к основной плате, по умолчанию установлена скорость передачи данных 115200.
- После подключения нужно включить девайс и установить одинаковую скорость для всех портов — как последовательных, так и программных.
- GSM передатчик подключается к контактам 7 и 8 на основной микросхеме.
- Затем производится настройка модуля путем ввода команд. Все команды мы описывать не будем, их и так можно найти в Интернете без проблем. Рассмотрим только самые основные. AT+SAPBR=3,1,«CONTYPE»,«GPRS» — команда определяет тип подключения, в данном случае это GPRS. AT+SAPBR=3,1,«APN»,«internet.***.ru», где *** — это адрес оператора мобильной сети, который будет использоваться. AT+HTTPINIT — по этой команде производится инициализация HTTP.
- Нужно отметить один нюанс — при написании серверной составляющей интерфейса, желательно предусмотреть прием и выведение данных для нескольких адаптеров. Нужно установить переключатель на три позиции, это даст возможность получать данные от восьми автомобилей.
- Затем производится написание скетча на микросхеме. Сам скетч также можно найти в Сети, писать его необязательно. Учтите, если будут использоваться два активных последовательных порта, это может привести к ошибкам в передачи и отправке информации.
Парктроник
Чтобы соорудить парктроник, вам потребуются такие составляющие:
- сама микросхема;
- ультразвуковое устройство, в данном случае это дальномер HC-SR04:
- шесть светодиодных элементов;
- шесть резисторных элементов сопротивлением на 220 Ом;
- соединительные провода типа «папа-папа»;
- пьезодинамический элемент;
- макетная схема для сборки.
Процедура сборки выглядит следующим образом:
- Для начала на макетной схеме необходимо установить светодиодные элементы, подготовленные заранее. Отрицательный контакт у всех светодиодов будет общим. Короткий контакт — катод — следует подключить к отрицательной шине, которая имеется на макетной плате.
- К более длинным контактам диодов, то есть анодам, необходимо подключить резисторные элементы на 200 Ом, если вы не будете их использовать, это приведет к перегоранию диодов.
- На центральной части производится монтаж ультразвукового устройства. На этом контроллере есть четыре контакта. Vcc — это контакт питания на пять вольт, Echo — это выходной контакт, Trig — это вход, а GND — это заземление.
- После того, как дальномер будет установлен, к его выходам следует подключить проводку. В частности, контакт Echo подключается к выходу 13, Trig — к 12 контакту. GND, соответственно, необходимо соединить с заземлением, которое имеется на схеме контроллера, а оставшийся выход Vcc соединяется с 5-вольтовым питанием на плате Arduino.
- После выполнения этих действий нужно соединить проводку с контактами резисторных элементов. А также они подключаются последовательным образом к пинам на плате — используются пины от 2 до 7.
- Следующим этапом будет подключение пьезопищалки, которая и будет предупреждать водителя о приближении к препятствию. Минусовой выход, как вариант, можно будет объединить с отрицательным контактом установленного ранее дальномера. Что касается положительного контакта, то он соединяется с пином под номером 11 на микросхеме.
- Для того, чтобы устройство в конечном итоге работало в нормальном режиме, дополнительно нужно будет написать, после чего загрузить код программы в плату. В этом коде необходимо точно указать дистанцию, при приближении к которой начнут загораться диодные элементы и будет срабатывать пищалка. Причем тональность пищалки должна быть разной, чтобы водитель мог узнать, когда приближение к препятствию будет критическим. Сам код либо пишется самостоятельно, либо берется уже готовый вариант из Интернета. Вариантов скетчей очень много, вам нужно только выбрать наиболее подходящий для вашего устройства (автор видео — канал Arduino Prom).
Другая сторона Bluetooth
Самый удобный способ подключения — это стандартные утилиты Linux. Для работы нам понадобятся утилиты sdptool, rfcomm (входят в состав пакета bluez в репозиториях Ubuntu), а также minicom (пакет так и называется). Инструкции по работе с этими утилитами можно найти в Сети.
Алгоритм движения
Примеры походок. В воздух поднимаются лапы одного цвета, остальные стоят на земле и держат робота
Для гексапода самой простой походкой будет такая: ноги делятся на две группы по три ноги, и одна из групп полностью на земле, другая — в воздухе, переставляется вперед. Это далеко не единственная возможная походка. Можно в воздухе держать только две лапы или даже одну, а остальные четыре или пять — на земле. Для октапода походок тоже множество. Мы возьмем самую простую, также с двумя группами по четыре ноги.
Итак, что нам нужно делать для работы с 16 сервоприводами и выбранной походкой? Правильный ответ — читать про инверсную кинематику (ИК). Объем статьи не позволяет развернуть тему широко, но материалов в интернете предостаточно. Вкратце, ИК решает задачу нахождения необходимых управляющих сигналов для того, чтобы система в пространстве заняла нужное положение. Для ноги это значит, что по координатам точки, куда должна попасть стопа, следует определить углы сервоприводов, которые для этого нужно выставить. А управляя координатами стоп, можно управлять положением тела. У нас 2DOF-ноги, оси параллельны, поэтому стопа перемещается всегда в одной плоскости. Задача ИК в данном случае сводится к 2D-пространству, что сильно ее упрощает.
Пускай для каждой ноги локальным началом координат O будет вал верхнего серва, то есть бедра. И у нас есть координаты точки A, куда нужно попасть стопе. Тогда легко увидеть, что нужно решить задачу нахождения точек пересечения двух окружностей (см. схему ног одной стороны, там на самой правой ноге это проиллюстрировано). Найдя точку B пересечения окружностей (выбрав любую из них), несложно посчитать искомые углы, используя перевод из декартовых координат в полярные. В коде решение этой задачи выглядит так:
где x и y — координаты точки, куда нужно дотянуться стопой; hipStartAngle — угол, на который повернуто «бедро» изначально (при среднем положении серва), аналогично — shinStartAngle. Кстати, в этих расчетах углы, очевидно, в радианах, а в объекты Servo их передавать нужно уже в градусах. Полный работоспособный код прошивки, включающий этот кусочек, выложен на GitHub, см. ссылку в конце статьи. Это кусок ИК, но кроме него нужно еще немного довольно простого кода, чтобы использовать эту ИК на всех ногах (см. функции legsReachTo(), legWrite()). Также необходим будет код, который собственно реализует походку — движение одной группы ног «назад» (чтобы робот двигался вперед), в то время как другая группа ног приподнимается и переставляется вперед для следующего шага, см. функцию stepForward(). Она делает один шаг с заданными параметрами. Этими параметрами, кстати, можно сделать и шаг назад, несмотря на название функции. Если эту функцию вызывать в цикле, то робот будет шагать вперед.
Теперь получение команд и их интерпретация. Добавим в программу состояние:
И в главном цикле исполнения loop() будем смотреть на текущее состояние (переменная state) и дергать stepForward(), если движемся вперед (с поворотом или без), и опять же stepForward(), но с отрицательным аргументом xamp, если надо двигаться назад. Повороты при этом будут обрабатываться в legWrite(), и для поворота направо ноги с правой стороны будут стоять на месте (пока левые гребут). Вот такой вот конь-танк. Брутально, зато очень просто и работает. Плавный поворот можно сделать только с 3DOF-ногами, пример этого можно увидеть в репозитории buggybug.
В остальных случаях — стоим. Далее здесь же, в loop(), будем вычитывать из последовательного порта команды и изменять state по ним:
На этом основные моменты прошивки закончились, остальное — всякая мелочевка. Хотя есть еще один, пожалуй, важный момент — возможность точной подстройки сервов. Даже при самой аккуратной сборке, если всем сервам подать команду повернуться на 90°, все равно некоторые из них получатся чуть со сбитым углом. Потому нужна возможность его подстраивать. Как у меня это сделано, можно посмотреть в методах hipsWrite() и shinsWrite() и собственно в массивах тонких настроек hipsTune[] и shinsTune[].
Сборка
Для подобных конструкций не нужно ничего особенного: подойдет листок оргстекла подходящей толщины (с ближайшей хозяйственной барахолки) и лобзик либо ножовка, чтобы выпиливать детальки. И конечно, дрель, чтобы сверлить отверстия. Вместо оргстекла можно использовать фанеру (тогда на финальной конструкции можно еще сделать памятную надпись выжигателем). Можно использовать и листы или уголки алюминия. Со Слейпниром я пошел как раз по пути использования алюминиевого уголка с ребрами в 1 см (купил где-то в строительном супермаркете).
Будущий «скелет» и одна «мышца»
Основой будет прямоугольная рама. Конечности — 4-сантиметровые полосочки. Стоит также запастись множеством маленьких болтиков, гаечек. Режем уголок на нужные кусочки, вырезаем пазы для сервов, сверлим дырочки для крепежных болтов и шурупов. Конструкцию лучше раз показать, чем описывать. Размеры могут быть любые, роботы должны быть разнообразны. Но помни: чем длиннее ноги, тем больший рычаг придется толкать сервоприводу и тем больше будет на него нагрузка. Вплоть до невозможности провернуться и даже поломки. Но 4–5 см — без проблем.
Для бюджетных легких роботов часто не заморачиваются на отдельное шарнирное соединение конечностей, и вся нагрузка ложится целиком на вал сервопривода. При маленьком весе это совсем не критично. А при большем весе стоит подумать о сервах с металлическими шестеренками и шариковым подшипником вала.
В комплекте с каждым сервом, как правило, поставляется пара-тройка шурупов и набор насадок, которые можно закрепить шурупом на валу для различных применений. Нам больше всего подойдет одиночный «рог» (или horn), который позволяет прикрепить к серву планку. Так, к одной планке крепятся оси двух сервов, и планка становится «бедром». При этом один серв крепится на теле, а другой становится частью голени. К нему стоит прикрутить еще планку, просто чтобы удлинить или сделать конечность поинтересней. Немного кропотливой работы — и платформа готова (удобные наборы отверток, ключей, пинцеты, кусачки и прочее сильно ускоряют дело).
Платформа в сборе