Ардуино и пульт дистанционного управления

Алиса, Ардуино и Blynk — делаем собственное устройство

На данной странице размещена инструкция по простому подключению ардуиноподобных устройств, имеющих доступ к сети. Обязательно пригодится тем, кто:

  • любит «дешево и сердито»;
  • не любит готовые решения, и предпочитает мозговой штурм и пайку;
  • еще думает над своей концепцией УД (можно использовать, как пример);
  • кто «в теме», но пока имеет сложности с подключением собственных наработок к Умному дому Яндекса.

Схема подключения

Все вышеупомянутые компоненты должны быть подключены в соответствии со схемой ниже. Конечно, если это необходимо мы можем использовать и другие контакты.

Как видите, подключение простое. Подаем питание (5В) и подключаем напрямую к входным контактам ИК-приемник и модуль реле.

Схема подключения устройства удаленного управления ПК.

Сперва, рассмотрим схему подключения устройства удаленного управления ПК с использованием модуля KY-022. Данный вариант более простой в подключении и можно обойтись без пайки.

Схема подключения устройства удаленного управления ПК.

Второй вариант схемы устройства удаленного управления ПК более компактный и представляется в виде девайса, у которого нет дополнительных проводов.

Второй вариант схемы устройства удаленного управления ПК более компактный

Все элементы распаиваются на плате и устройство можно подключить в любой доступный USB разъем. Главное, чтобы IR приемник был в пределах видимости.

Также пригодятся знания о распиновке IR приемника.

Также пригодятся знания о распиновке IR приемника.

Устройство ИК приемника. Принцип работы

Приемники инфракрасного излучения получили сегодня широкое применение в бытовой технике, благодаря доступной цене, простоте и удобству в использовании. Эти устройства позволяют управлять приборами с помощью пульта дистанционного управления и их можно встретить практически в любом виде техники. Но, несмотря на это, постепенно Bluetooth модуль набирает все большую популярность.

Принцип работы IR ресивера. Обработка сигнала

Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Используется при изготовлении датчика препятствия и дальномера для Arduino. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Под действием инфракрасного излучения в фотодиоде, у которого между p и n областями создана дополнительная область из полупроводника (i-область), начинает течь ток. Сигнал поступает на усилитель и далее на полосовой фильтр, который настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц и защищает приемник от помех. Помехи могут создавать любые бытовые приборы.

Приложение Blynk

Этакий разработчик идей, имеющий открытый вход к запуску на платформе Ардуино. Главное требование в использовании – наличие интернета: Wi-Fi или мобильный трафик. Только в этом случае Blynk будет готов к выполнению. Начать использование можно спустя несколько минут, после окончания настроек. Программой поддерживается АО по выбору пользователя.

Основные функции приложения Blynk заключаются в управлении устройствами при помощи удаления и добавления протоколов HTTP, а также запросов GET и POST. Значения параметров можно обновлять и получать. Запросы обновляются в самом приложении.

Вариативность – важная точка программы. Имея связь с работающими платформами, можно соединиться с сервером любым удобным способом. Данный инстинктивный портал обладает простотой в использовании над проектом. Библиотека постоянно обновляется для всех приложений Arduino Blynk.

Клиентов, желающих включать кофе машинку со своего смартфона, заинтересует это приложение. Это, пожалуй, единственный сервис с подобными возможностями. И не смотря на, то, что он практически безлимитный, является трудным Openhab. В сравнении с другими сервисами обладает быстрой скоростью при запуске.

Необходимые компоненты

  • Ардуино
  • ИК-приемник (я использовал VS1838B)
  • Два цветных светодиода и два резистора к ним (220 Ом) (см. Расчет резистора для светодиода)

Подключите ИК-приемник в соответствии с datasheet. В моем случае распиновка VS1838B следующая:

Я подключил контакт SIGNAL к контакту 11 Ардуино. Напряжение питания для ик-приемника VS1838B 5В.

Кроме того, чтобы сигнализировать, что Ардуино действительно распознает нажатие кнопок на пульте дистанционного управления, я добавил два светодиода. Светодиоды будут переключаться в ответ на нажатие соответствующих кнопок. Эти светодиоды подключены через резисторы к контактам 2 и 3 Ардуино.

Шаг 4: Настройка кодов: меню и подменю

Перед загрузкой кодов нам нужно визуализировать их. Нужно создать меню с необходимыми функциями.

Создать меню несложно, но процедура довольно запутана. Я прокомментировал каждую часть кода для удобства.

Я бы хотел использовать библиотеку, но вместо этого решил создать единую монолитную программу, чтобы вам не пришлось скачивать что-либо еще. Это облегчит понимание устройства кода. Создание меню — очень полезный навык, необходимый для любого программиста.

Как только вы открыли файл с кодом, в первую очередь нужно посмотреть на строки в зеленой рамке. Эти константы ограничивают область меню и подменю. Отсчет начинается с числа 0, т.е. если ввести «2», программа создаст три меню.

На третьем фото показано, как работают ограничения. Если вы попытаетесь прочитать несуществующий массив, программа оповестит вас об этом и вернет в исходное положение.

После ознакомления с фотографиями укажите имя меню в массиве символов меню (см. фото 2). Данный код рассчитан на три меню, но вы можете добавить столько, сколько вам нужно, повторив структуру на четвертом изображении и внеся соответствующие настройки в массив и домены.

Подменю будут содержаться в одном массиве, поэтому вам придется указать функции каждого меню в массиве подменю. Вы должны прописать массивы подменю в коде, который выделен зеленым квадратом. При добавлении или удалении меню нужно будет добавить или удалить эти константы.

Программа отслеживает вашу позицию в массиве меню/подменю. Например, если вы меняете положение в меню, эта переменная также изменяется. Когда вы нажимаете кнопку, вы отправляете трансмиттеру данные о вашей позиции, таким образом устройство выполняет полученную команду.

Необходимо скопировать и вставить коды, которые были получены при чтении сигналов устройства в соответствующие меню и подменю. Проследите, чтобы индексы сигналов совпадали, иначе пульт не будет работать.

После этого нужно сохранить полученный код.

Содержание:

У вас есть устройство, на экране которого вы перелистываете по порядку пять позиций с помощью кнопки перелистывания:

1. Вкл/Выкл
2. Звук громче
3. Звук тише
4. Следующий канал
5. Предыдущий канал

Нажимая на кнопку настройки, вы включаете ИК-приёмник, наводите пульт на устройство и жмёте ту кнопку на пульте, которую нужно скопировать (после этого устройство будет имитировать эту кнопку), на экране под выбранной вами позицией появится код, это код кнопки который будет посылаться на телевизор с инфракрасного диода. Затем вы выключаете ИК-приёмник. И когда вы нажимаете третью кнопку наведя её на телевизор, код посылается и вы можете грубо говоря делать с телевизором то, что могли бы сделать с пультом. Естественно, список позиций можно пополнять, и в общем крутить и улучшать код как вам захочется.

Другая сторона 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), который позволяет прикрепить к серву планку. Так, к одной планке крепятся оси двух сервов, и планка становится «бедром». При этом один серв крепится на теле, а другой становится частью голени. К нему стоит прикрутить еще планку, просто чтобы удлинить или сделать конечность поинтересней. Немного кропотливой работы — и платформа готова (удобные наборы отверток, ключей, пинцеты, кусачки и прочее сильно ускоряют дело).

Платформа в сборе

Платформа в сборе

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector