Pull to refresh

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

Reading time2 min
Views9.6K
В двух предыдущих статьях я рассказал об использовании смартфона для управления игрушечным автомобилем, как непосредственно голосом, так и с использованием другого смартфона по блютус. Но управление было примитивным — отдавалась команда, автомобиль выполнял команду, останавливался и ждал следующей команды. Это было связано с большой скоростью движения автомобиля для комнатных условий (приблизительно 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

Вот так работает пульт ДУ. Работа программы управления автомобилем тоже претерпела изменения, но не очень значительные. В дальнейшем я хочу дополнить программу функциями запоминания команд и выполнения их в автоматическом режиме.
Tags:
Hubs:
Total votes 29: ↑21 and ↓8+13
Comments19

Articles