Смартфон управляет игрушечным автомобилем

За прошедшее десятилетие у многих появилось один два смартфона лежащих без дела, так и у меня. Решил применить смартфон для управления чем-нибудь, ну например, автомобилем.
Для начала выбрал игрушечный автомобиль из Лего. Он может двигаться вперед и назад, поворачивать вправо и влево и имеет пульт ДУ c ИК лучами. В качестве драйвера двигателей машинки используется микросхема LB1836, которая имеет четыре информационных входа. In1, In2 — управляют ходовым двигателем, In3, In4 — управляют приводом руля, по схеме 0, 0 или 1, 1 — нерабочее состояние. 0, 1 или 1, 0 — вращение двигателя в одну или другую сторону.

Логические 0 и 1 на входах формирует приемник ИК лучей игрушки при получении сигналов от ДУ.

Я для передачи сигналов от смартфона к машинке решил использовать экран смартфона, поскольку другие каналы передачи технически сложные и дорогие в реализации. К входам микросхемы LB1836 я решил подсоединить свое устройство, которое будет получать сигналы от смартфона.

Схема передачи сигналов такая. Программа в смартфоне создает световые пятна заданной продолжительности на экране, устройство их регистрирует и формирует логические 0 и 1 той же продолжительности на входах LB1836 без какой либо логической обработки, что очень упрощает конструкцию устройства. То есть, я просто подменил приемник ИК лучей своим устройством.

Устройство приема световых сигналов состоит из 4 ячеек. Каждая ячейка представляет собой фототранзистор L-3DP3C KGB подсоединенный к усилителю на npn транзисторе KT315. Питание берется с управляемой машинки. Выход, как я уже говорил, подсоединяется к соответствующему входу драйвера двигателя. Маломощные двигатели могут питаться прямо от выхода, но вращаться будут только в одну сторону. Но зато их будет четыре!



О выборе элементов устройства могу сказать следующее. Транзисторы я взял те, какие у меня были с давних времен. Фототранзисторы купил те, что были в магазине. Так что, желающие повторить схему, не тратьте время на поиски, воспользуйтесь теми элементами, что вам доступны. Кстати, вначале я усилитель собрал на микросхеме LM 324N с четырьмя операционными усилителями. Тоже хорошо работает, но мне показались его габариты слишком большими.
Устройство собрал на картонке, используя полоски медной фольги и элементы конструктора Лего.



Фототранзисторы помещены на дно световых колодцев диаметром 5мм и глубиной 9 мм, что бы исключить боковое засвечивание. В световые колодцы вставлены металлизированные плёнки, свёрнутые в трубочку, что значительно повышает чувствительность фототранзисторов, за счет увеличения светового потока.



Вот такой получился автомобиль.



Для разработки программы я взял, приложение BASIC! из Googl Play Маркет. Это приложение позволяет писать программы для Android, создавать файлы apk и работать со всеми сенсорами и устройствами смартфона.

Листинг программы

DO
 LET s$="Говорите команду: вперёд назад вправо влево или стоп"
 TTS.INIT
 TTS.SPEAK s$
 TTS.STOP

 STT.LISTEN "Говорите"
 STT.RESULTS theList
 LIST.SIZE theList, theSize
 LET kom$="неудача"

 FOR k = 1 TO theSize
  LIST.GET theList, k, theText$
  IF (theText$="вперед") THEN kom$="вперёд"
  IF (theText$="назад") THEN kom$="назад"
  IF (theText$="вправо") THEN kom$="вправо"
  IF (theText$="влево") THEN kom$="влево"
  IF (theText$="стоп") THEN kom$="стоп"
 NEXT k
 PRINT kom$ 

 GR.OPEN 255, 0, 0, 0
 GR.BRIGHTNESS 0.7
 GR.ORIENTATION 1
 GR.SCREEN w, h

 a = 255
 r = 255
 g = 255
 b = 255
 fill = 1
 GR.COLOR a,r,g,b,fill

 LET wc=0.95*h
 LET hc=w
 LET m=36
 GR.CLS

 GR.CIRCLE n5, hc/m*9.5,wc,w/15.6
 GR.CIRCLE n4, hc/m*13.5,wc,w/15.6
 GR.CIRCLE n3, hc/m*18,wc,w/15.6
 GR.CIRCLE n2, hc/m*22.5,wc,w/15.6 
 GR.CIRCLE n1, hc/m*26.5,wc,w/15.6

 FOR i=1 TO 5
  GR.HIDE i
 NEXT i

 IF (kom$="вперёд") THEN 
  GR.SHOW 2
  PAUSE 300
  GR.HIDE  2

 ENDIF

 IF (kom$="назад") THEN
  GR.SHOW 1
  PAUSE 300
  GR.HIDE 1
 ENDIF

 IF (kom$="влево") THEN
  GR.SHOW 2
  GR.SHOW 4
  PAUSE 300
  GR.HIDE 2
  GR.HIDE 4
 ENDIF

 IF (kom$="вправо") THEN
  GR.SHOW 2
  GR.SHOW 5
  PAUSE 300
  GR.HIDE 2
  GR.HIDE 5
 ENDIF

 IF (kom$="стоп") THEN GOTO  qq
 GR.BRIGHTNESS  0.1
 GR.CLOSE
UNTIL 0    

! ONERROR:

qq:
LET s$="программа закончила работу"
TTS.INIT
TTS.SPEAK s$
TTS.STOP
GR.BRIGHTNESS 0.1
GR.CLOSE
END 

В программе используется управление голосом как наиболее целесообразное в моем случае. Объект TTS преобразует текст в речь. Объект STT преобразует речь в текст. При работе STT обязательно должен быть включен Wi Fi, потому что записанная фонограмма отправляется на сервер в интернете, откуда приходит результат распознавания, это несколько слов, или фраз. Программа проверяет, есть ли команда в списке, выводит команду на экран и выполняет её. Если текст не распознан программа выводит сообщение об этом. Все это повторяется в бесконечном цикле. Завершение работы программы производится командой «стоп» или нажатием клавиши возврат. Геометрические размеры взяты относительными, чтобы автоматизировать привязку на разных экранах с разными размерами и разрешением, что не всегда получается. Круги, которые рисуются на экране, являются объектами и номеруются автоматически по мере их создания.

Команда GR.SHOW 2 — означает показать круг, который был создан вторым. Его номер содержится в n4. Можно было написать GR.SHOW n4. В строке IF (theText$=«вперед») THEN kom$=«вперёд» вы заметите различие в значениях величины в команде присваивания — «вперед» и «вперёд». Дело в том, что STT упорно возвращает «вперед», хотя бывают случаи «вперёд», тогда программа не распознает команду. От этого можно было избавиться, но я не стал усложнять программу, а просто поправил написание при выводе на экран. Еще бывают сбои при распознавании команды «влево». Впрочем, возможно это особенности моего произношения.

К сожалению, я не могу вставить сюда клип показывающий работу программы.
Посмотрите здесь.
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 38

    +3
    В «Юном технике» предлагали тем же способом считывать команды с экрана телевизора, к которому подключён БК-0010.
      0
      Я сам в 90 году опубликовал статью в журнале «Радио» как подсоединить программируемый калькулятор БЗ 34 к управлению устройствами, а вскоре у меня появились компьютеры вначале Электроника 85, а затем пошли PC, начиная с 286 и я про эту ерунду забыл, но я все равно с сожалением думал, почему на них нет такого простого непрофессионального, «любительского» интерфейса, что бы включить выключить свет, мотор, считать данные с датчика, ну как в Ардуино сейчас, так скажем, в те времена ни ардуино, ни смартфонов не было.
      +1
      Класс! А я уже давно голову ломаю как проще сопрядить разные устройства со смартфоном)
        +2
        Вот уж не сказал бы, что это простой способ.
          0
          А в чем вы видите сложность?
            0
            Мне кажется, usb-serial использовать проще. Никакого механического бандажа, только стандартные разъемы. Но на 100% не уверен на счет поддержки в Android таких чипов, хотя уверен, что должно быть.
              0
              Я с вами согласен, более того я хочу развить вашу мысль. Можно передавать команды от смартфона к машинке, через блютуз или другие каналы радио связи, но тогда придётся создавать довольно-таки сложное электронное устройство на чипах, которое можно сделать только очень опытный электронщик или в заводских условиях. А здесь устройство типа «Сделай сам».
                0
                Готовые устройства на чипах из китая от 200 рублей
                  0
                  Да, ниже пишут, что уже есть ардуино с возможностью подключения смартфонов. А я хотел, чтобы было как можно проще, именно для самодельщиков.
        +1

        А вот видео Вы бы лучше на Youtube закинули. Это, кстати, решит проблему вставки в пост.

          0
          Странно, раньше получалось из контакта видео вставить, теперь нет.
            0

            Я видел что оно (видео) есть.
            Но сейчас в некоторых странах нет доступа к вк, у некоторых может не быть впна или может быть не настроен. Да и вообще пдключать впн чтоб посмотреть видео про машинку в вк? Серьёзно?
            Если хотите чтоб его смотрели — залейте на yt.

              0
              Спасибо за совет, попробую, только не знаю как.
                0
                На планшете не получалось, пришлось включить ноутбук, но ютубе, что то никто и смотреть не хочет).
          0
          Спасибо за подсказку. Я написанием статей не связывался и много не знаю.
            0
            команды можно передавать через mini jack — аналог, 2 канала, для 4 моторов хватит.
            Если нужно больше, можно создать простенькую плату для расшифровки сигнала.
              0
              Это как это можно через джек подключить устройства?
                0
                Имеется ввиду управление тоновым набором? Есть готовые решения, например, это. Телефон передает тоновый сигнал, а дешифратор интерпретирует его как команды.
              +1
              Специально зашёл посмотреть на способ соединения смартфона с периферией.
              Очень удивился) Выбранный способ, конечно, не сильно лагучий, но очень уж непрямой (читай — некпдшный, хоть в проекте это и не важно).
              Быстрогугл дал вот такую наводку, cxem.net/arduino/arduino50.php
              Думаете, сложнее было бы?
                0
                «Очень удивился» это и было целью моего проекта, как вы назвали. Я и сам удивился когда сделал. Мне хотелось напрямую соединиться смартфон с машинкой, а неэффективность или лагучесть связи. Кого сейчас удивит машинка управляемая ардуино, школьники собирают и программируют, я в такой организации у нас в Ухте работал. Ну, конечно, что вы предложили эффективнее, но это ардуинно использует смартфон для связи, или смартфон будет использовать ардуино.
                  +1
                  Сложнее. Там на стороне ардуины предполагается поднимать USB Host. Возможно, для одного отдельно взятого телефона это получится сделать, но универсальный хост, который будет работать со всем зоопарком устройств — задача нетривиальная.
                  И да, это при условии, что гугл не грохнул этот «Open Accessory» — в массы оно явно не пошло…
                  +3
                  Когда то экспериментировал с передачей данных с планшета на микроконтроллер через экран.
                  На планшете мигают два квадратика. Один задаёт такт, другой передаёт биты.
                  www.youtube.com/watch?v=RbQw6dTKIl0
                    +2
                    Подозреваю, что эту идею претворил и использовал кто-нибудь еще раньше, а мы всего лишь эпигоны.
                      0
                      А по сути Вы нашли быстрый способ соединить несоедимое, когда возникла необходимость. В принципе можно было организовать побайтовую передачу, что ускорило бы канал передачи, но это бы усложняло устройство.
                    +1
                    Может еще и ШИМ управление можете реализовать таким образом?
                      0
                      Частота обновления экрана 60 Гц. В BASIC! временную задержку можно сделать не менее 20 милисекунд, я так так прочитал в мануле, так что если скважность самая маленькая 10%, то частота не превысит 5 Гц. Вроде все правильно я посчитал? Если частота устраивает, то можно и ШИМ. А вообще надо попробовать.
                      +1
                      Спасибо! Вы открыли для меня BASIC!, до этого все попытки найти удобоваримый basic для Андроид не увенчались успехом. Сижу, осваиваю. А способ управления через экран и светодиоды я собирался использовать несколько раз за последние 30 лет, начиная ещё с Радио86РК, правда так ни разу и не дошло. Теперь вот снова задумался.
                        0
                        Желаю успеха! Передача управляющих сигналов через экран, способ конечно не эффективный и дилетантский, но позволил быстро соединить на данный момент несоединимое, смартфон и игрушку ирешить задачу, которую сам себе задал, сделать машинку управляемую голосом. Перед этим я где-то прочитал о микроволновке управляемой голосом, смотрю а в fro-basic есть возможность голос переводить в текст.
                          0
                          Передача управляющих сигналов через экран

                          Блин, сутки уже бьюсь над укрощением «касания» (команда GR.TOUCH). Могли бы Вы набросать пример программки, просто ожидающей касаний, и выводящей на экран координаты последнего касания. Чувствую себя тупым. Заранее благодарен.
                          И почему не работает
                          стандартный пример?
                          do
                          gr.touch touched, x, y
                          until touched
                          gr.front 0
                          print «You touched the screen at coordinate »; x; «x»; y
                          end
                            0
                            GR.OPEN
                            GR.ORIENTATION 1
                            DO
                            GR.TOUCH touched, x, y
                            UNTIL 0

                            ONGRTOUCH:
                            PRINT x, y
                            GR.ONGRTOUCH.RESUME
                            END
                            ! запустите потыкаете вэкран
                            ! для выхода кнопка возврат
                              0
                              Не объявлен графический режим, а используете операторы графики.
                                0
                                Ошибся.
                                  0
                                  Еще раз!
                              0
                              Пары чисел это координаты точек в которые вы тыкали пальцем
                                0
                                Вы прям спасли меня! Хотя насчёт графического режима у меня был проблеск в последний момент. Руководство черпаю отсюда: rfobasic, многое неясно. Может ещё подскажете, есть ли возможность в графическом режиме шрифт крупней сделать (gr.text.draw), потому что при разрешении экрана 720*1280 буквы только под микроскопом видны.
                                в fro-basic есть возможность голос переводить в текст

                                А также текст в голос, причём намного лучше, чем специализированные программы для этого, которые я пробовал.
                                  0
                                  Посмотрите в примерах, там есть ответ на ваш вопрос.
                                    0
                                    Искал в примерах, не нашёл. Практически все программы из примеров с графическим интерфейсом работают в уголке моего смартфона, шрифт везде один и тот же микроскопический. Может есть другие руководства?
                                0
                                При установке СОЗДАЕТСЯ ПАПКА с файлами много примеров откройте ее в бейсике и выберите файл
                                /storage/emulated/0/rfo-basic/source/Sample_Programs/f12_graphics_text.bas

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