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

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

Комментарии (19)


  1. CKOPOCTb
    05.11.2018 22:33
    -1

    Код — ад.


    1. volkovfedor Автор
      06.11.2018 05:12

      Не сложнее чем C++ или тем более Java. Не разворачивать из-за этого на компьютере андроид студию или заморачиваться с эклипсом при отладке, я же не профессиональный программист. А здесь и пишется и отлаживается прямо на смартфоне. Кроме того, здесь приведены фрагменты кода и вы поэтому просто не знаете назначение переменных и чем они управляют и поэтому кажется сложно. Но я думаю понятно, что в первом случае считывается координаты объекта на экране и определяется что-что ползунок, а затем определяется точное положение. А во втором случае я думаю вы поняли что считываются показания сенсора и по определенному алгоритму обрабатываются, чтобы определить направление движения.


      1. CoolCmd
        06.11.2018 13:23

        я думаю в первую очередь имелись ввиду зашифрованные названия переменных: lrsh, cc15, rkn. последнее название вообще за границами добра и зла. перед выкладыванием в статью можно было и причесать.


        1. volkovfedor Автор
          06.11.2018 17:38

          Да конечно надо причесать, но я не думал что кто-то будет так дотошно рассматривать. Там видно запрашивается значение координат да и ладно. Ну можно было написать RadiusKnopki или даже RadiusButton вместо rkn, но врядли было бы понятнее, все лучше понимается в контексте программы. Я медленно печатаю тем более на экранной клавиатуре смартфона и поэтому пишу сс вместо с1 или ссс вместо с3. Кнопки у меня состоят из двух кружков большого светлого и малого темного и они соответственно обозначаются обозначаются например c13 и сс13 и мне понятно что они относятся к одной фигуре. l — левый, r — правый, sh — фигура(shape) я в начале хотел сделать кнопки разно формы, потом сделал все круглые а обозначение осталось. То есть логика есть в именах, но только для меня. А вообще я согласен с замечанием.


      1. CKOPOCTb
        06.11.2018 14:09

        Я написал до форматирования.


      1. saag
        06.11.2018 16:41

        А здесь и пишется и отлаживается прямо на смартфоне.

        Я тоже попробовал писать на смартфоне в AIDE, после Android Studio не хватает ее системы автдополнения, конечно в AIDE кое-что есть, но не того уровня.


        1. volkovfedor Автор
          06.11.2018 17:59

          В Бейсике вообще нет автодополнения (контекстной подсказки ) так что все приходится печатать вручную. Правда я мышку использую, а Без неё вообще бы тихий ужас. Надо попробовать подключить клавиатуру.
          Посмотрел сейчас что такое AIDE. И первый отзыв — нельзя сохранять проекты. Увы мне это не нравится.


          1. saag
            07.11.2018 07:42

            Что значит нельзя сохранять проекты? У меня несколько учебных проектов сохранено, я постоянно что-то дописываю, тренируюсь так сказать:-)Может это в бесплатной версии эта фича отключена, но я заплатил, там деньги небольшие, все сохраняется. Надо попробовать там такое извращение как визуальное создание макетов:-)


            1. volkovfedor Автор
              07.11.2018 08:01

              Спасибо, надо будет посмотреть. Кстати, я попробовал к смартфону подсоединить через кабель OTG разветвитель USB а через него подсоединил мышку и клавиатуру все отлично работает и вроде энергию не очень потребляют. А отзыв это не мой а там прочитал


  1. thomasR
    06.11.2018 04:35
    +1

    C одной стороны это вроде всего дишь «POC», но лишать кнопочки без подписей (или глифов) не очень хорошо.


    1. volkovfedor Автор
      06.11.2018 04:50

      Согласен. Ну это прототип программы все-таки, кроме того там есть всплывающие подсказка popup. А создание и вставка глифов удлиннило бы создание и усложнило код. B Бейсике ведь все пишется. Поэтому я их раскрасил. Зеленое — движение. Красное — стоп.


  1. Tsvetik
    06.11.2018 10:59
    +1

    А как смартфон управляет моторчиками?


    1. volkovfedor Автор
      06.11.2018 11:06

      У меня всего 3 статьи в первой статье я как раз рассказываю об этом. А кратко на Самсунге работает программа, которая создает световые пятна на экране, они считываются фототранзисторами и тем самым управляют моторчиками.


      1. Tsvetik
        06.11.2018 11:20

        Понятно, что можно управлять исполнительными устройствами по:
        1. Bluetooth/wifi
        2. sms, звонками или мессенджерами, в общем через интернет или сотовоую сеть
        3. инфра/ультразвуком с динамика
        4. звуком с аудиовыхода
        5. вибрацией
        6. световыми пятнами на экране/световой модуляцией экрана
        7. NFC
        8. ИК порт. Везде ли он есть?

        А есть ли у смартфонов более традиционные органы взаимодействия?
        Скажем, до USB или до UART в порту зарядки можно достучаться программно?


        1. volkovfedor Автор
          06.11.2018 11:42

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


  1. watti
    06.11.2018 12:13

    такие посты без видео не считаются :(


    1. volkovfedor Автор
      06.11.2018 12:49

      Принимаю вашу критику. Только третьей руки у меня нет чтобы снимать, и все же постараюсь в ближайшее время выложить.


  1. anonymous
    06.11.2018 15:37

    Статья в Юном Технике за 89-91 года была — управление проектором с помощью ПК — тот же принцип, только фотоэлементы цепляли к телевизору:)


    1. volkovfedor Автор
      06.11.2018 15:47

      Да я и не претендую на авторство. В комментарии к моей 1 статье один товарищ приводит пример подобного решения для передачи информации с плашета на микропроцессор.