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

в 18:23, , рубрики: BASIC, diy или сделай сам, Программирование, смартфон управляет, смартфоны, управление устройством по блютус

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

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

На картинке показана машинка, которой управляет смартфон, и ниже смартфон с работающей программой дистанционного управления по блютус.

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

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, что соответствует движению прямо (смотрите рисунок выше).

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

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

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

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

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

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

Автор: volkovfedor

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js