LABA 120 - Mit App Inventor2 * Bluetooth PDU Управление устройствами на ATTINY 2313a через Bluetooth

LABA 120 - Mit App inventor 2 * Bluetooth PDU

Управление устройствами на ATTINY 2313a через Bluetooth

и обратной связью с датчиками

Омск, начало 20-10-2017



Побочным продуктом адаптера ттл уровней на к1533ла3
стала система дистанционного управления на контролере
AVR ATtiny2313 подключенного через блютуз адаптер
BlueTooth HC-05 к телефону или планшету под управлением андроид




софт для авр написан на Bascom AVR
и подойдет для многих других контролеров данного семейства.
Даже для Ардуино. Для скачивания доступен исходник для баском,
Bascom-avr если быть точным. и готовый бинарный файл, для непосредственной
прошивки в контролер, если кому лень возиться с исходником.
Для прошивки под WIN 7, я использую Программатор AVR USBASP.




Самый важный момент, когда вроде все правильно
но все равно не работает,




посмотрите какие FUSE — фьюзы,
установлены в контролере. Есть там одно место где частота
тактового генератора делится на 8

это сильно влияет на связь по
ком порту — RS232. Если с вашего АVR данные отправляются
нормально, а обратно ни чего не принимается, это тот случай.
С остальными fuse по аккуратнее, Контролер вы не убьете
но и работать может перестать


для Андроид девайса программа написана на
Mit App Inventor 2. И также доступна в виде исходника
и готового APK файла для непосредственной установки.
Я оправляю APK на Андроид из Total Commander
через ADB плагин. Вам повезло если при включении
отладки по USB, компьютер нашел подходящий драйвер.
Если такой фокус не прокатил, можно использовать
WiFi ADB. Который легко скачивается
с Гугль Плей - Google play. Настройка не сложная.

В Тотале обычно этот плагин установлен, если нет, то скачиваете
его здесь, или где захотите , хоть с 4PDA,
замечательный сайт, там много вкусностей.
Установка простая, достаточно открыть архив.





В последствии будет еще доступна программа для ПК
для управления контролером, ну и команды применяемые в
данном устройстве, сможете увидеть в исходниках.

А еще далее, если тема будет интересна читателям,
вся эта хрень будет управляться по интернету.
Через сайт на PHP, А также будет предпринята попытка
заменить Bluetooth на WiFi

Идея такого девайса бала задумана давно, но из за некоторых
трудностей с БТ адаптерами, не была реализована

На данный момент на пульте имеется 12 кнопок для непосредственной
отправки команд. Предусмотрено отключение контролера при потере
соединения. А та же имеется возможность получить сигнал с контролера
о состоянии четырех датчиков рассчитанных на замыкание




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

на данный момент она просто смонтирована на макетной плате
и управляет включением светодиодов

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



Помеченые красным выводы обязательно занятые
Обведенные синим, заняты иногда, точнее сюда подключается программатор
работающий по SPI протоколу, В последствии датчики столновения 4 штуки

На более продвинутом AVR
или ARDUINO может быть значительно увеличена. А также увеличено и количество
датчиков установленных на «марсоходе» вплоть до анализаторов газов, давления
атмосферы, температуры, влажности..

на этом сайте пока нет желания заморачиваться с форумом
поэтому вопросы и хотелки добавляйте к видео на ютубе
Пожелания будут учитываться в окончательно конструкции

Ладно погнали

вот эта макетная плата

макетная плата с attiny 2313 и bluetooth hc-05


LCD дисплей тут не применяется, остался от другого проекта
а вот Андроид с софтом





Дизайн не супер но другого пока нет

Слева три кнопки с залипанием нажал включил — нажал выключил
типа как на машине фары-печка-дворники

Справа три кнопки переключают, как коробка передач 1-2-3
и отдельная отключающая кнопка

по середине классическая схема вперед назад
влево вправо, стоп

в верхней строке -




кнопка подключение к последнему удачному соединению
кнопка разрыва связи
кнопка выбора БТ устройств из списка
индикатор что связь установлена
четыре индикатора датчиков препятствий
чекбокс звукового сигнала срабатывания датчиков
последняя нажатая кнопка в правом ряду

средний блок






тут все просто
при нажатии вперед назад сбрасывается лево право
средняя кнопка сбрасывает все

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

Нарастающий счетчик, показывает, что программа еще не зависла.

Бывает и сообщение

по середине экрана, на работу не влияет,
но тихо бесит. Издержки телефонного програмирования



и вот эта хрень в работе

рис 3

BasCom - AVR замечательная IDE

для написания программ для контролеров AVR Пользоваться ей гораздо проще чем Arduino Software (IDE) Кстати может кто не в курсе Arduino это жирный контролер AVR Установленный на плате с USB преобразователем и программатором



Здесь исходник для BasCom - AVR Развернуть...

Кому влом вникать можно просто скачать и прошить





Если вы будете использовать именно BlueTooth HC-05
то програмно в коде для АВР можно не заморачиваться
проверкой обрыва связи, на этом адаптере, имеется вывод
сигнализирующий о коннекте

Исходник для Mit App Inventor 2

Mit App Inventor 2 , вещь замечательная, колоссальная, великолепная, потрясающая.
кодить на ней быстро, легко, и просто. И есть одно значительное НО
так как система полностью ON-LINE, может настать одно прекрасное утро
когда ее не станет, уже сейчас, собираешься применить некоторые компоненты, а их нет.
Но если моментально накодить и вывести результат, Лучше не придумаешь



Переменные




BT - Имя Bluetooth Модуля , с последнего подключения
CL1- хранит, была ли нажата кнока левого блока
CL2- итп
CL3-

Блок инициализация приложения при запуске

Интервал тамера 300, почти 3 раза в секунду
Таймер остановлен

Mit App Inventor 2 - Component
Screen1.Inialize
ListPicker1.Enable= Fulse
Clock1.TimerEnable= Fulse
Clock1.TimerInterval=300

Обработчик кнопки разрыва соединени

Mit App Inventor 2 - Component
Button1.Click
BluetoothClient1.Disconnect
ListPicker1.Text="reconnect"

Адреса БлюТуз устройств

адреса сопряженых с планшетом , Bluetooth устройств, загружаются в список when ListPicker1.BeforePicking
ListPicker1.Elements=BluetoothClient1.AddressesAndName

Обработчик нажатий среднего блока кнопок

меняются картинки на кнопках




запускается таймер
на контролер отправляется команда

Button2.Click
Clock1.TimerEnable= True
Button2.Image = "FW.png"
BluetoothClient1.SendText "R"
Label2.Text="Right"

Цвет индикаторов датчиков


индикаторы это элемент LABEL их цвет управляется
свойством BackGroundColor , и по вызову функции
все индикаторы окрашиваются в зеленый



Обработчик событий таймера

Функция сброса цвета индикаторов датчиков
Нарастающий счетчик в Label L_cnt
Логические блоки -
Если Блютуз коннект установлен
и Если содержимое входного буфера больше ноля
То в метку Label1 считываются данные из буфера блютуз клиента

Затем по Bluetooth соединению отправляется символ "М"
дабы контролер не подумал что пропала связь,
если долго не нажимать кнопок управления

when Clock1.Timer
Label2.Text=Label2.Text+1
if BluetoothClient1.IsConnexted
then
if BluetoothClient1.BytesAvailableToReceive > 0
then 
Label1.Text=BluetoothClient1.ReceiveText

(BluetoothClient1.BytesAvailableToReceive)
BluetoothClient1.SendText "M"

Затем логические блок IF проверяет полученые от AVR данные
которые как мы помним находятся в элементе Label1
и Если в итих данных содержится символ "Y" который
отправляет контролер получив символ "М"
ТО первый квадратик окрашивается в красный цвет
показывая что связь еще не оборвалась

Следующий блок IF проверяет данные на содержания символа "1"
который передается при срабатывании датчика 1, при его наличии


окрашивается соответствующий индикатор, и вызывается функция
BP, которая при установленом чекбоксе
SND проигрывает плеером звуковой сигнал

Проверка на остальные датчики аналогична

if contains text(Label1.Text,"Y")
then Label3.BackGroundColor="RED"
call beep

Звуковой сигнал

Функция BP при установленом чекбоксе
SND проигрывает плеером звуковой сигнал



Кнопка Last

Устанавливает соединение с посленим устройством с которым связывались ранее

эта кнопка будет активна только при установленом чекбоксе "ON"
это сделано для предотвращения случайного нажатия кнопки отключения.
Что в не подходящий момент, при маленьких экранах телефонов
сделать это не так уж и трудно, а потеря управления может быть черевата

Далее в переменную Global BT считывает из хранилища телефона
через элемент TinyDB1 ранее сохраненое значения адреса Блютуз устройства

Если связь успешно устанавливается ТО -
запускается таймер
цвет текста кнопки вызова устройств из списка становится синим

на кнопку выводится имя BlueTooth устройства
и чекбокс разрешения установки связи сбрасывается



Подключение к БлюТуз модулю из списка


При нажати на нее откроется список с приконнектченными устройствами
тыкаете в нужное и ву аля.
Все тоже самое, только еще методом TinyDB1.StoreValue
сохраняется в базу устройства адрес Bluetooh адаптера

При неудачной попытке коннекта, на кнопку красными буквами выводится "reconnect"
должно красными, но на деле черными, Чтото пошло не так

when ListPicker1.AfterPicking
if BluetoothClient1.Connect (ListPicker1.Selection)
then 
ListPicker1.TextColor="BLUE"
ListPicker1.Text=ListPicker1.Selection
BluetoothClient1.SendText "0"
Clock1.TimerEnable= True
CheckBox1.Checked= fulse
TinyDB1.StoreValue ("bta",ListPicker1.Text)

Предохранитель от несанкционированного отключения

Обработчик события CheckBox1 Changed, в нем блок IF
проверяет включен он или нет, усли включен ТО -
открывает доступ к кнопкам LAST OFF и RECONNECT

Если отключен то наоборот, выполняется блок ELSE



Правый блок кнопок



Посредством метода BluetoothClient1.SendText
Отправляет контролеру через БлюТуз номер кнопки, в данном случае "1"
в метку l_right записывает номер кнопки
выполняется Player4.Start - Плеер проигрывает звук
для остальных кнопок этого ряда, меняется только номер кнопки


Левый блок кнопок



Тут децл по сложнее
при нажатии на кнопку проверяется одноименная переменная СВ1
если она не нажималась ранее, и в ней 0
посылается код кнопки контролеру на включение нагрузки
в переменную СВ1 заносится единица, сама кнопка меняет окрас
и плеер пиликает звук

при обратной ситуации, когда в переменной уже есть единица
она обнуляется, а контролеру передается код на отключение
этой же нагрузки, и снова меняется окрас на обратный
и опять пи пи

и так для каждой кнопки




СКАЧАТЬ


Вопросы можно задать

тут