В двух предыдущих статьях я рассказывал об использовании смартфона для управления игрушечной машинкой как напрямую голосом, так и с помощью другого смартфона через Bluetooth. А вот управление было примитивным – давалась команда, машина выполняла команду, останавливалась и ждала следующей команды.
Это было связано с высокой для комнатных условий скоростью автомобиля (около 1,2 м/с), а также длительным временем подачи команды и невозможностью оперативно вмешаться в движение с помощью меню.
Даже штатный пульт не обеспечивал управления.
В новой версии пульта дистанционного управления с графическим интерфейсом я решил использовать ШИМ для регулировки скорости и имитации рулевого управления.
На картинке показана машина, управляемая со смартфона, а ниже — смартфон с работающей программой дистанционного управления по Bluetooth.
Вверху экрана есть ползунок (зеленый кружок), который можно перемещать пальцем.
Когда вы убираете палец с экрана, относительное расстояние от ползунка до левой границы экрана передается на управляющий смартфон, где генерируется широтная модуляция импульсного сигнала.
Наименьшая скважность сигнала составляет 20 %, наибольшая — 80 %.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
Теоретически возможная частота составляет 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
Вот как работает пульт дистанционного управления.
Работа программы управления автомобилем также претерпела изменения, но не очень существенные.
В будущем хочу дополнить программу функциями запоминания команд и автоматического их выполнения.
Теги: #Сделай сам или Сделай сам #Смартфоны #программирование #основы #управление устройством через Bluetooth #управление смартфоном #управление смартфоном
-
Якоби, Карл Густав Якоб
19 Oct, 24 -
Через Kickstarter Собрано Более $1 Млрд.
19 Oct, 24 -
Разваливающийся Тигр, Скрытый Каньон
19 Oct, 24