Хабрахабр

Пульт дистанционного управления из смартфона

В двух предыдущих статьях я рассказал об использовании смартфона для управления игрушечным автомобилем, как непосредственно голосом, так и с использованием другого смартфона по блютус. Но управление было примитивным — отдавалась команда, автомобиль выполнял команду, останавливался и ждал следующей команды. Это было связано с большой скоростью движения автомобиля для комнатных условий (приблизительно 1,2 м/с), а так же с продолжительным временем отдания команды и невозможностью оперативно вмешиваться в движение, используя меню. Даже штатный пульт ДУ не давал возможности управления. В новой версии ДУ с графическим интерфейсом я решил применить ШИМ для регулировки скорости и имитировать управление рулем.

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

image

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

GR.GET.POSITION c1, xx, yy
r6=(xx-xc)*(xx-xc)+(yy-yc)*(yy-yc)
IF r6<rkn THEN GR.TOUCH touched, x, y IF y < 120 THEN DO GR.TOUCH touched, x, y GR.GET.POSITION c1, x1,z1 GR.MOVE c1 ,x-x1, y1 GR.RENDER UNTIL !touched ENDIF GR.GET.POSITION c1, x1,z1 POPUP STR$(x1/w) BT.WRITE "#"+STR$(x1/w)
ENDIF

Наименьшая скважность сигнала 20%, наибольшая 80%. Теоретическая возможная частота 10 Гц. На самом деле наверное около 4 — 5 Гц, поскольку сигналы на модуляцию идут в общем потоке команд и некоторые из них также имеют временную задержку. Поэтому при низкой скважности хорошо заметна вибрация.

Справа красная кнопка — стоять на месте. Две зеленых кнопки — верхняя движение вперед, нижняя назад. В нижней части экрана три фиолетовых кнопки выбора направления движения влево, прямо и вправо. Две белых кнопки — остановка программ пульте ДУ и на машинке. Для управления направлением движения помимо кнопок я использовал так же акселерометр. При
включении, соответствующего режима, в центре кнопки появляется кружок меньшего диаметра и того же, но более темного цвета. При горизонтальном положении смартфона, проекция вектора ускорения силы тяжести на ось 0Y равняется 0, что соответствует движению прямо (смотрите рисунок выше).

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

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

SENSORS.READ 1, sx, sy, sz IF (sy<=1)&(sy>-1)&(lrsh) THEN rsh=1 lsh=1 lrsh=0 GR.HIDE cc13 GR.HIDE cc15 GR.SHOW cc17 GR.RENDER BT.write "f" pause 100 ENDIF IF (sy>2)&(rsh) THEN rsh=0 lsh=1 lrsh=1 GR.HIDE cc13 GR.HIDE cc17 GR.SHOW cc15 GR.RENDER BT.write "r" pause 100 ENDIF IF (sy<-2)&(lsh) THEN lsh=0 rsh=1 lrsh=1 GR.HIDE cc17 GR.HIDE cc15 GR.SHOW cc13 GR.RENDER BT.write "l" pause 100 ENDIF

Вот так работает пульт ДУ. Работа программы управления автомобилем тоже претерпела изменения, но не очень значительные. В дальнейшем я хочу дополнить программу функциями запоминания команд и выполнения их в автоматическом режиме.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть