На картинке показана машинка, которой управляет смартфон, и ниже смартфон с работающей программой дистанционного управления по блютус.
В верхней части экрана находится ползунок (зеленый кружок), перемещаемый пальцем.
При снятии пальца с экрана относительное расстояние от слайдера до левой границы экрана передается управляющему смартфону, где и формируется широтная модуляция импульсного сигнала.
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)
thomasR
06.11.2018 04:35+1C одной стороны это вроде всего дишь «POC», но лишать кнопочки без подписей (или глифов) не очень хорошо.
volkovfedor Автор
06.11.2018 04:50Согласен. Ну это прототип программы все-таки, кроме того там есть всплывающие подсказка popup. А создание и вставка глифов удлиннило бы создание и усложнило код. B Бейсике ведь все пишется. Поэтому я их раскрасил. Зеленое — движение. Красное — стоп.
Tsvetik
06.11.2018 10:59+1А как смартфон управляет моторчиками?
volkovfedor Автор
06.11.2018 11:06У меня всего 3 статьи в первой статье я как раз рассказываю об этом. А кратко на Самсунге работает программа, которая создает световые пятна на экране, они считываются фототранзисторами и тем самым управляют моторчиками.
Tsvetik
06.11.2018 11:20Понятно, что можно управлять исполнительными устройствами по:
1. Bluetooth/wifi
2. sms, звонками или мессенджерами, в общем через интернет или сотовоую сеть
3. инфра/ультразвуком с динамика
4. звуком с аудиовыхода
5. вибрацией
6. световыми пятнами на экране/световой модуляцией экрана
7. NFC
8. ИК порт. Везде ли он есть?
А есть ли у смартфонов более традиционные органы взаимодействия?
Скажем, до USB или до UART в порту зарядки можно достучаться программно?volkovfedor Автор
06.11.2018 11:42У меня была идея наладить связь наиболее простым способом, другими тоже можно, но задача значительно усложняется. А здесь 4 транзисторных ключа, а при желании можно расширить до любого разумного предела. Кроме того доступное средство программирования.
watti
06.11.2018 12:13такие посты без видео не считаются :(
volkovfedor Автор
06.11.2018 12:49Принимаю вашу критику. Только третьей руки у меня нет чтобы снимать, и все же постараюсь в ближайшее время выложить.
anonymous
06.11.2018 15:37Статья в Юном Технике за 89-91 года была — управление проектором с помощью ПК — тот же принцип, только фотоэлементы цепляли к телевизору:)
volkovfedor Автор
06.11.2018 15:47Да я и не претендую на авторство. В комментарии к моей 1 статье один товарищ приводит пример подобного решения для передачи информации с плашета на микропроцессор.
CKOPOCTb
Код — ад.
volkovfedor Автор
Не сложнее чем C++ или тем более Java. Не разворачивать из-за этого на компьютере андроид студию или заморачиваться с эклипсом при отладке, я же не профессиональный программист. А здесь и пишется и отлаживается прямо на смартфоне. Кроме того, здесь приведены фрагменты кода и вы поэтому просто не знаете назначение переменных и чем они управляют и поэтому кажется сложно. Но я думаю понятно, что в первом случае считывается координаты объекта на экране и определяется что-что ползунок, а затем определяется точное положение. А во втором случае я думаю вы поняли что считываются показания сенсора и по определенному алгоритму обрабатываются, чтобы определить направление движения.
CoolCmd
я думаю в первую очередь имелись ввиду зашифрованные названия переменных: lrsh, cc15, rkn. последнее название вообще за границами добра и зла. перед выкладыванием в статью можно было и причесать.
volkovfedor Автор
Да конечно надо причесать, но я не думал что кто-то будет так дотошно рассматривать. Там видно запрашивается значение координат да и ладно. Ну можно было написать RadiusKnopki или даже RadiusButton вместо rkn, но врядли было бы понятнее, все лучше понимается в контексте программы. Я медленно печатаю тем более на экранной клавиатуре смартфона и поэтому пишу сс вместо с1 или ссс вместо с3. Кнопки у меня состоят из двух кружков большого светлого и малого темного и они соответственно обозначаются обозначаются например c13 и сс13 и мне понятно что они относятся к одной фигуре. l — левый, r — правый, sh — фигура(shape) я в начале хотел сделать кнопки разно формы, потом сделал все круглые а обозначение осталось. То есть логика есть в именах, но только для меня. А вообще я согласен с замечанием.
CKOPOCTb
Я написал до форматирования.
saag
Я тоже попробовал писать на смартфоне в AIDE, после Android Studio не хватает ее системы автдополнения, конечно в AIDE кое-что есть, но не того уровня.
volkovfedor Автор
В Бейсике вообще нет автодополнения (контекстной подсказки ) так что все приходится печатать вручную. Правда я мышку использую, а Без неё вообще бы тихий ужас. Надо попробовать подключить клавиатуру.
Посмотрел сейчас что такое AIDE. И первый отзыв — нельзя сохранять проекты. Увы мне это не нравится.
saag
Что значит нельзя сохранять проекты? У меня несколько учебных проектов сохранено, я постоянно что-то дописываю, тренируюсь так сказать:-)Может это в бесплатной версии эта фича отключена, но я заплатил, там деньги небольшие, все сохраняется. Надо попробовать там такое извращение как визуальное создание макетов:-)
volkovfedor Автор
Спасибо, надо будет посмотреть. Кстати, я попробовал к смартфону подсоединить через кабель OTG разветвитель USB а через него подсоединил мышку и клавиатуру все отлично работает и вроде энергию не очень потребляют. А отзыв это не мой а там прочитал