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

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

    Вот так работает пульт ДУ. Работа программы управления автомобилем тоже претерпела изменения, но не очень значительные. В дальнейшем я хочу дополнить программу функциями запоминания команд и выполнения их в автоматическом режиме.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 19

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

              Я тоже попробовал писать на смартфоне в AIDE, после Android Studio не хватает ее системы автдополнения, конечно в AIDE кое-что есть, но не того уровня.
                0
                В Бейсике вообще нет автодополнения (контекстной подсказки ) так что все приходится печатать вручную. Правда я мышку использую, а Без неё вообще бы тихий ужас. Надо попробовать подключить клавиатуру.
                Посмотрел сейчас что такое AIDE. И первый отзыв — нельзя сохранять проекты. Увы мне это не нравится.
                  0
                  Что значит нельзя сохранять проекты? У меня несколько учебных проектов сохранено, я постоянно что-то дописываю, тренируюсь так сказать:-)Может это в бесплатной версии эта фича отключена, но я заплатил, там деньги небольшие, все сохраняется. Надо попробовать там такое извращение как визуальное создание макетов:-)
                    0
                    Спасибо, надо будет посмотреть. Кстати, я попробовал к смартфону подсоединить через кабель OTG разветвитель USB а через него подсоединил мышку и клавиатуру все отлично работает и вроде энергию не очень потребляют. А отзыв это не мой а там прочитал
            +1
            C одной стороны это вроде всего дишь «POC», но лишать кнопочки без подписей (или глифов) не очень хорошо.
              0
              Согласен. Ну это прототип программы все-таки, кроме того там есть всплывающие подсказка popup. А создание и вставка глифов удлиннило бы создание и усложнило код. B Бейсике ведь все пишется. Поэтому я их раскрасил. Зеленое — движение. Красное — стоп.
              +1
              А как смартфон управляет моторчиками?
                0
                У меня всего 3 статьи в первой статье я как раз рассказываю об этом. А кратко на Самсунге работает программа, которая создает световые пятна на экране, они считываются фототранзисторами и тем самым управляют моторчиками.
                  0
                  Понятно, что можно управлять исполнительными устройствами по:
                  1. Bluetooth/wifi
                  2. sms, звонками или мессенджерами, в общем через интернет или сотовоую сеть
                  3. инфра/ультразвуком с динамика
                  4. звуком с аудиовыхода
                  5. вибрацией
                  6. световыми пятнами на экране/световой модуляцией экрана
                  7. NFC
                  8. ИК порт. Везде ли он есть?

                  А есть ли у смартфонов более традиционные органы взаимодействия?
                  Скажем, до USB или до UART в порту зарядки можно достучаться программно?
                    0
                    У меня была идея наладить связь наиболее простым способом, другими тоже можно, но задача значительно усложняется. А здесь 4 транзисторных ключа, а при желании можно расширить до любого разумного предела. Кроме того доступное средство программирования.
                +1
                такие посты без видео не считаются :(
                  0
                  Принимаю вашу критику. Только третьей руки у меня нет чтобы снимать, и все же постараюсь в ближайшее время выложить.
                  0
                  Статья в Юном Технике за 89-91 года была — управление проектором с помощью ПК — тот же принцип, только фотоэлементы цепляли к телевизору:)
                    0
                    Да я и не претендую на авторство. В комментарии к моей 1 статье один товарищ приводит пример подобного решения для передачи информации с плашета на микропроцессор.

                  Only users with full accounts can post comments. Log in, please.