NooLite — система радиоуправления освещением, или первый шаг к умному дому / Хабр

NooLite — система радиоуправления освещением, или первый шаг к умному дому / Хабр Вертолеты

Делаем три:

Привязываем выключатель к силовым блокам. Если у вас набор(там есть 7 наборов, для наиболее распространённых применений), то делать ничего не надо — пульт и блок уже связаны. Если у вас они были приобретены по отдельности — то перед использованием их надо связать. Делается это просто:

  1. Нажимаем кнопку на силовом блоке(задняя поверхность гибкая, и его не надо разбирать — просто сдавить с двух сторон). Светодиод на нем начнет медленно мигать.
  2. Нажимаем сервисную кнопку на пульте управления. Загорается светодиод на пульте.
  3. Жмем ту кнопку, которую хотим присвоить этому силовому блоку. Светодиод на пульте погаснет, а на блоке — начнет быстро мигать.
  4. Подтверждаем привязку, нажав кнопку на блоке еще раз. Светодиод на блоке начнет мигать медленно — ждет еще одной привязки. К нему можно подключить еще одну кнопку, или другой пульт. Если вам этого не надо — нажимаете кнопку еще раз, блок выходит из режима привязки.

Теперь кнопкой из третьего пункта можно включать или выключать(или регулировать освещение — зависит от пульта) блок из первого пункта.

Все, мы можем включать и выключать освещение по-новому. Одну лампу или другую. Или обе сразу:
image
image
image
Третья кнопка, на которой нарисован частично закрашенный кружок — сценарная. Это означает, что к ней можно привязать не просто включение или выключение света, а любое состояние системы или отдельного блока. Можно взять отдельный пульт с тремя сценарными кнопками, и назначить на одну включение всего света, на вторую — выключение, а на третью — включение одной лампы, комфортное для просмотра телевизора, например.
Делается это тоже очень просто. Сначала надо привязать каждый блок, который будет участвовать в будущем сценарии к этой кнопке. Все тоже самое, но после нажатия сервисной кнопки — жмем сценарную кнопку, дожидаемся подтверждения, выходим из режима привязки. Повторяем со всеми блоками. Потом включаем/выключаем/регулируем яркость всех светильников другими кнопками, и записываем сценарий — нажимаем и держим сценарную кнопку. Через две секунды все блоки моргнут светом — сценарий записан. Теперь при нажатии этой кнопки все блоки примут то состояние, в котором были на момент записи — включатся, выключатся, или установят яркость.

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

Как и чем управлять

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

NooLite — система радиоуправления освещением, или первый шаг к умному дому / Хабр

Итак, если мы хотим установить привод в крайнее левое положение нужно слать импульсы длительностью 0,9мс с интервалом 20мс, если в крайнее правое — длительность 2,1мс, интервал тот же, ну со средними положениями аналогично. Как оказалось, регуляторы скорости управляются аналогично. Те, кто в теме скажут что это

, который реализовать на любом микроконтроллере — плевое дело. Вот и я так решил, купил в местном магазине сервомашинку и склепал на макетке для нее так называемый сервотестер на ATtiny13. И тут оказалось, что ШИМ не совсем простой, а с подводными камнями.

Как видно из вышеприведенной диаграммы, скважность (отношение длительности импульса к длительности периода) от 5% до 10% (в дальнейшем я за крайние положения принимаю импульсы длительностью 1,0мс и 2,0мс) для 256-значного ШИМ счетчика ATtiny13 это соответствует значениям от 25 до 50.

Но это при условии, что на заполнение счетчика уйдет 20мс, а на деле так не получится и для частоты 9,6МГц и предделителя 1024 нужно ограничить счетчик значением 187(ТОР), в таком случае у нас получится частота 50,134Гц. В большинстве (если не во всех) сервомашинок нету точного генератора опорной частоты и поэтому частота управляющего сигнала может немного плавать.

Если оставить ТОР счетчика 255, то частота управляющего сигнала будет 36,76Гц — на некоторых приводах оно будет работать (возможно с глюками), но далеко не на всех. Итак, теперь у нас 187-значный счетчик, для него 5-10% соответствуют значениям от 10 до 20 — всего 10 значений, немного дискретно получится. Если думаете поиграть с тактовой частотой и предделителем ниже привожу сравнительную табличку для 8-битного ШИМа:

NooLite — система радиоуправления освещением, или первый шаг к умному дому / Хабр
NooLite — система радиоуправления освещением, или первый шаг к умному дому / Хабр

Я не думаю, что для китайской сервомашинки есть существенная разница в 600 и 1200 значений, поэтому вопрос с точностью позиционирования можно считать закрытым.

О выключателях:

Выключатель, а точнее пульт управления:

image

Плоская штука с тремя сенсорными кнопками. Коробочка:

image

Внутри тоже руководство:

image

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

— фото комплектных руководств.


Кнопок у в каждом пульте три, но символы меняются в зависимости от модели. В верхнем левом углу просто светодиод:

image

Он зажигается при нажатии на любую кнопку, а еще служит индикатором некоторых режимов. Перевернем:

image

Плата, крепеж под шуруп, полоски клейкой ленты для крепежа на плоских поверхностях.


Поддеваем отверткой, чтобы изучить подробнее:

image

Рамка, крепеж, и сам пульт:

image

Пульт, в свою очередь, тоже разбирается на три части:

image


Рамку, плату, и пластик с изображениями. Чтобы его разобрать, надо аккуратно подковырнуть две капли термоклея, которые удерживают этот бутерброд вместе. Плата пульта управления:

image

Сенсорные кнопки:

image

Нажимаем — загорается светодиод.

image

Значит ничего не сломали в процессе разборки. Собираем обратно.


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

О силовых блоках

Силовой блок — это вот такая

ктулху

штука:

image


Если присмотреться — то на нем есть обозначение:

image

SL-111-200. Первые две буквы — тип блока, он означает, какие лампы можно подключать к этому блоку.

SN — Лампы накаливания, галогенные лампы, в том числе на 12 вольт(через трансформатор).ST — Галогенные лампы на 12 вольт(электронный блок питания).SL — Люминесцентные и энергосберегающие лампы, светодиодные светильники, и любые другие нагрузки.

Первые два поддерживают регулировку яркости, а последний тип — нет. Зато через него можно подключать люминесцентные лампы. Последние цифры — означают мощность, которую можно подключить через такой блок. 200 — это 200 ватт, еще бывают на 300, 500 и аж на 3 и 5 киловатт. Через два последних можно включать даже прожекторы и обогреватели, возникни такая нужда.

Смотрите про коптеры:  Полетный контроллер на Ардуино? На STM32F104! Руководство по сборке. | Пикабу

Поставляется каждый блок вот в такой коробочке:
image
С рассказом на задней стороне, почему эта система самая лучшая:
image
И с достаточно подробной инструкцией внутри:
image
Подключать — просто.
image
Где перечеркнутый кружочек и чОрные провода — подключаем лампу. Где написано 220 вольт и белые провода — этим концом подключаемся к сети. Расположение фазы значения не имеет. Один белый провод — это антенна, ее не надо никуда подключать, просто вытянуть. Если сильно согнуть или обмотать вокруг корпуса — работать не будет, просто не примет сигнал от пульта. Одно неудобство — провода многожильные, и просто так в мои любимые клеммники не вставить. Пришлось залудить :)Откроем, надавив сбоку на защелки:
image
Мы же помним, что не разобрав устройство, нельзя считаться его полноценным хозяином, да? 🙂 Внутри вот такая платка:
image
Две микросхемы, чуть-чуть рассыпухи, кварц, светодиод, кнопка. На обратной стороне:
image
Симистор, резистор, три конденсатора. Конденсаторное питание, стало быть. Соответственно, все части системы могут потенциально находится под напряжением, не рекомендую открывать корпус и трогать пальцами внутренности, если не отключили оба провода.

Радиоуправление и своими руками: истории из жизни, советы, новости и юмор — лучшее | пикабу

В этом посте постараюсь обзорно рассказать про то, как можно ощутить полёт, не тратя на это большие деньги и время. Как летать, смотря “глазами” самолёта и ощущать неподдельное удовольствие!

Всем привет! Летать как птица – давняя и самая заветная мечта человечества. Веками мы неистово желали познать это прекрасное ощущение, которое приходило к нам лишь во сне.

В наш век технологий, ощутить это может любой желающий. В этом посте я расскажу, как это осуществить, не прибегая к большим расходам и моём пути в авиамоделизм и FPV-полёты.

Вначале расскажу, что же такое FPV – это аббревиатура First Person View, то есть вид от первого лица. То же самое, что и VR – только не виртуальная. Мой путь в FPV начался с возврата к авиамоделизму, которым многие из вас занимались в детстве, расскажу об этом подробно, а так же поведаю о современных возможностях и технологиях.

Часть первая, назовём её Stage #1:

Постройка самодельного радиоуправляемого самолёта.

Самолёт строил из обычной потолочной плитки и скотча, а так же всякого подножного мусора.

Чертежи моего самолёта, а так же наклейки на него, можно скачать на Патреоне.

Для этого этапа вам потребуется купить:

– аппаратуру радиоуправления (в моём случае это FlySky i6, рекомендую именно её), цена которой около 2000 рублей на вторичке, вместе с приёмником.

– сервоприводы управления рулями TowerPro SG90, цена около 500 рублей за пачку на алиэкспресс ,

– двигатель бесколлекторный 1400 – 2200 KV для авиамоделей

регулятор оборотов двигателя

– аккумулятор LiPo 1600 – 2200 mAh.

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

– пачка пропеллеров на 9 или 10 дюймов

колёсики для авиамоделей по желанию.

Можно по частям, а можно купить кит.

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

Рекомендую перед первым полётом потренироваться на симуляторе, коих сейчас превеликое множество (например Aerofly RC7), иначе разложите миллиард % в первом же полёте. Я для тренировки использовал обычный джойстик со стиками, этого вполне достаточно, чтобы понять моторику управления и получить базовые навыки.

На этом этапе будет как-то так:

Далее: уверенно летаем, поднимаемся в воздух, садимся, но чего-то не хватает. Правильно – камеры! Хочется онборд-видео и шикарных пейзажей с места полёта. Мой самолёт изначально проектировался под установку камеры на вроде GoPro либо Xiaomi Mi Action Cam.

Назовём это Stage #2:

Установка камеры на самолёт.

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

И вот, после того, как вы совершили свои первые полёты с камерой, отсмотрели снятый материал, вам захотелось перейти на следующий уровень, а именно – полёты от первого лица, то есть установка видика (ага, это слово есть в современном мире), то есть – видеопередатчика на самолёт.

Назовём Stage #3: установка видеопередатчика.

Для этого этапа вам потребуется совсем немного:

– приобрести видеопередатчик

– приобрести антенны, в моём случае – две антенны пагода на алиэкспрессе

– приобрести маску или очки для FPV. В моём случае это самые дешевые Eachine EV800, цена около 2000 на вторичке.

Камеры, как GoPro третьей серии, а так же Mi Action Cam поддерживают видеовыход. То есть камера может одновременно снимать и передавать видеосигнал на видеопередатчик, который транслирует его на маску в радиодиапазоне. Вся передача аналоговая, потому вместе с вами могут быть зрители, которые смотрят в такие же маски, либо ТВ-приёмник на нужной частоте. Вся видеосистема независимая и подключается через стабилизатор напряжения к аккумулятору на самолёте. Можно приобрести специальную FPV-камеру, гуглится по запросу.

И вот, в итоге мы получаем это:

На данном этапе начинается болезнь: после первого ощущения полёта и контроля от первого лица, мозг начинает вырабатывать гигантское количество эндорфинов и нейромедиаторов в кровь при каждом полёте, пытаясь подстроиться под новые ощущения: ощущения, которые были доступны только в самых ярких фантазиях и снах – чувство полёта! Это настолько круто, что через какое-то время, пропадает ощущение реальности – начинаешь чувствовать самолётом, думать самолётом. Все его крены, потоки воздуха, ощущаются как свои собственные. Я даже пару раз врезался в себя на приземлении, потому что тело двигалось не в ту сторону, какую чувствуешь.

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

Ответ – да. Можно и нужно!

Следующая часть Stage #4: установка полётного контроллера

Для этой части вам придется сменить аппаратуру на более совершенную, которая имеет телеметрию, в моём случае это Frsky Taranis QX7 и установить полётный контроллер, в моём случае это Matek Wing F405, а так же датчик GPS. Полётный контроллер – это бортовой компьютер, который анализирует данные со всего самолёта и даёт много замечательных плюх, а именно:

– имеет гироскоп и автостабилизацию: теперь не нужно крутить ручки для ровного полёта

– показывает данные о напряжении и расходе батареи: можно узнать, сколько “топлива” осталось в банках

Смотрите про коптеры:  Syma X5UW: обзор, характеристики, инструкция на русском языке

– показывает OSD – данные о высоте, скорости, скороподъёмности (да, у вас теперь есть варио), пройденной дистанции и расстоянию до дома

– показывает координаты по GPS при вынужденной посадке

– имеет функцию возврата домой, полёт по маршруту, удержание высоты, направления и прочее-прочее, что вы сами настроите.

Полётник просто подключается к компьютеру через программу iNAV или Betaflight внутри которой происходит вся настройка самолёта и его режимов.

В итоге мы имеем:

Теперь мы имеем полноценный дрон-БПЛА! Можем летать, снимать видео с высоты и получать ещё больший кайф от полётов!

Вот такую краткую историю своего пути в небо изложил для вас. Профи – не ругайтесь. Я знаю, что есть квадрокоптеры, очки, дальнолёты и ещё много-много всего крутого и замечательного в этом мире. Пойдете ли вы по моему пути, купите готовый кит-самолёт или квадрокоптер на бенгуд или алике – ваше дело. Я лишь хотел привлечь внимание к теме полётов и рассказать обзорно о современных технологиях и возможностях. Надеюсь мой рассказ будет вам полезен и интересен!

Кстати вот, чертежи моего самолёта в векторе вы можете скачать тут.

Наклейки для печати на формате А4 вы можете скачать тут.

Если вам понравился мой рассказ и то, что я делаю, поддержите лайком на пикабу или любым доступным способом ❤ подписывайтесь на мой Патреон, в ближайшем будущем выложу много всего полезного и интересного для 3д печати по своей модели, и не только!

§

Всем привет! Решил написать продолжение про самолёт из протолочки. Начало тут: https://radiocopter.ru/story/gotovimsya_k_poletam_vo_vremya_covid19_8180292?utm_source=linkshare&utm_medium=sharing

Начну со схем.

Схема подключения приемника:

Здесь к blue pill подключается радиомодуль, контроллер двигателя и две сервомашинки. Аккумулятор подключается к контроллеру управления двигателя, на нем стоит стабилизатор на 5 вольт, с которого берется питание для управляющей электроники. Сервомашинки также запитываются с этих 5 вольт. Радиомодуль питается от 3,3 вольт со стабилизатора blue pill. Здесь имеется делитель напряжения, который подключен к аккумулятору, для контроля его напряжения. Информация  шлется на пульт управления.

Сам приемник:

Программа для приемника: тут

Схема подключения пульта управления:

Здесь чуть побольше компонентов. Аккумулятор подключается на порт 5 вольт blue pill. Для зарядки аккумулятора к нему подключен модуль зарядки. С blue pill при помощи 3,3 вольт запитывется экран, радиомодуль, джойстики. Потенциометры джойстиков подключены к каналам АЦП blue pill, их тактовые кнопки и остальные две подключены на остальные порты в режиме вход.

Пульт управления внутри:

В меню пульта 4 строки: 1 строка – это режим полета, во 2 строке просто отображаются данные АЦП и т.д. в 3 строке настраиваются чувствительность рулей и субтример (начальное положение элевонов), в 4 строке ничего нет (можно добавить).

Нажатие правого джойстика – переход на одну строку вниз, левый – на одну строку вверх, нажатие одновременно двух джойстиков заходит в подменю выбранной строки, аналогично производится выход. Две другие кнопки используется для настройки чувствительности в меню строки Sensors, их одновременное длительное нажатие, в любом нахождении меню, включает подсветку. В режиме полета нажатие любого из джойстиков активирует работу двигателя или дективирует, чтобы при заходе в режим полета двигатель не работал сразу и случайно не отпилить себе пальцы винтом не поранил крутящим винтом.

При отключении пульта во время работы приемника, через 2 секунды отключается двигатель.

Расскомментировав эти строчки в main.c (до надпсиси END OF DEBUG_RC OUT):

пульт можно подключить по USB к ПК при помощи любой Terminal программы (я пользовался CoolTerm), в которой нужно выбрать COM порт и присоединится к blue pill:

и в окне получить информацию о подключении радиомодуля:

Считывая установочные данные, записанные в регистры радиомодуля, можно убедиться, что модуль работает и данные совпадают с установленными. В данном случае я получил статус работы радиомодуля, его мощность передачи (максимальная), номер канала (11), скорость передачи (1 Мбит в секунду), размер передаваемого пакета (32 байта – максимальный) и количество бит контрольной суммы (в моем случае 16 бит). Если модуль не подключен или неисправен в терминал выводит такое сообщение:

Зайдя сюда в подменю Settings:

в терминал посыпятся такие строчки:

Здесь данные в таком порядке: X1: значение c АЦП правого джойстика по вертикали, Y1: значение c АЦП правого джойстика по горизонтали, значение с АЦП левого джойстика, которым управляется двигатель, значения только по вертикали, далее напряжения аккумулятора пульта, напряжения аккумулятора на приемнике, значение кнопки правого джойстика, значение кнопки левого джойстика, значения кнопок что находятся справа на пульте, субтример, чувствительность 1 и 2 (2 не используется), а также статус связи с приемником.

Как видно сигнала нет, так как примник был отключен. Также я зажал кнопку правого джойстика и просто левую кнопку, они выдают “1”.

Включаю приемник и перевожу правый джойстик в правый верхний угол:

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

АЦП на Blue Pill имеет разрешение 12 бит, максимальное значение котрого 4095, но в терминале видно, что оно 255, все потому что я 12 бит перевел в 8 бит (1 байт), так как один элемент массива передоваемого пакета равен 1 байту, чтобы одним байтом можно было слать значения одной из осей джойстика.

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

Использовать джойстики для управления в таких проектах, вместо нормальных стиков не очень хорошо. Во-первых, для управления газа стик должен сохранять свое положение, а не быть подпружиненным и возвращаться на середину, убрать эту пружинку в джойстика очень проблемно, но я думаю можно. Во-вторых, это должны быть стики, так сказать длинные палочки, для более плавного и точного управления за счёт отдаления пальца от центра потенциометра или увеличения радиуса, это можно решить, наколхозив что-то длинное на джойстики. Специальные стики заточены именно под это, что нельзя сказать про джойстики, но на них цена уже совсем другая, например: стик FlySky.

Крыло сложно в управлении (по-моему мнению) по сравнению с моделями, имеющими хвост со стабилизатором и килем.

И наконец, то, чего мы так долго ждали!!! Видео полетов. К сожалению, видео очень короткое, так как полет был недолгий.

В ВИДЕО ПРИСУТСТВУЕТ ПАРУ ПЛОХИХ СЛОВ!

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

Самолёт полетел вполне уверенно, но что-то пошло не так, если честно, я не понял в чем причина, может это из-за джойстиков или все-таки конструкция крыла. Я думаю, что на этом я не остановлюсь и попробую как-нибудь еще, пересмотрев ошибки.

Смотрите про коптеры:  LADA Vesta SE/SW Cross/CNG Руководство по эксплуатации автомобиля и его модификаций

Всем спасибо!

Ссылки на товары которые я использовал:

Отладочная плата Blue Pill

Радиомодуль

Программатор St-Link

Набор из контроллера, двигателя винта и сервомашинок

Джойстики

Стики от FlySky

Модуль зарядки

Макетная плата

Экран от Nokia 5110

Тактовые кнопки

Аккумулятор

§

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

ЧТО НАМ ПОНАДОБИТСЯ

– модель самого простого автомобиля (китайского производства);

– соленоид открывания дверей ВАЗа, аккумулятор 12В 2400А/ч;

– АРУ автомобиля;

– аккумуляторы и зарядные устройства к ним;

– радиатор;

– кусок резины для усиления бампера;

– паяльник, припой, слесарный инструмент;

– электронно-измерительная аппаратура.

Формирование и обработка передаваемых данных

Это второй крупный недостаток большинства обзоров по нашей теме: авторы ограничиваются какой-то локальной задачей, не формулируя ее в общем виде, как передачу произвольных данных одним пакетом. Как вы поняли из описания выше, передаваться нашим комплектом может только простая последовательность бит. Стандартная библиотека

кодирует их специальным образом (каждая тетрада кодируется 6-ю битами, впереди добавляется синхронизирующий заголовок, и еще добавляется контрольная сумма для всего пакета) и на выходе превращает в более привычную последовательность байт. Но разбираться с ней уже приходится программисту самостоятельно.

Далее мы считаем, что передатчик и приемник подключены к Arduino. Кроме VirtualWire, в связи с бумом «умных домов», есть еще много всякого подобного, вроде RC-Switch или RemoteSwitch, но они ориентированы на другие задачи, и для передачи произвольных данных их употреблять явно не стоит.

Максимальная длина одного сообщения в VirtualWire равна 27 байт (см. документацию). Передача одного полного сообщения (оно автоматически дополняется сигнатурой 0xb38, значением длины сообщения и контрольной суммой) при выбранной мной скорости 1200 бит/с составляет 0,35 секунды.

Чем больше, кстати, выбранная скорость передачи, тем дальность передачи будет меньше. По опыту применения RS-232 известно, что при увеличении дальности допустимая скорость передачи экспоненциально падает: на скорости 19200 неэкранированная линия работает на 15 метров, на 9600 — 150 метров, а на скорости 1200 — более километра.

Инициализация передатчика в VirtualWire выглядит так:

. . . . .
#include <VirtualWire.h>
. . . . .
void setup() {
  vw_setup(1200); // Скорость соединения VirtualWire
  vw_set_tx_pin(10);   // Вывод передачи VirtualWire D10
. . . . .
}

Разберем принципы формирования данных на конкретном примере. Пусть у нас имеется выносной датчик температуры-влажности. Он выдает значения (переменные temperature и humidity) в формате действительного числа со знаком (float). Чтобы было проще разбираться на приемном конце, будем все приводить к виду положительного целого числа с числом десятичных разрядов не менее 4, переводить разряды по отдельности в ASCII-символы, передавать получившуюся строку, а на приемном конце выполнять обратные операции.

На практике для формирования сообщения удобно воспользоваться типом String, примерно так:

. . . . .
// глобальные переменные в начале
#define ledPin 13 //вывод светодиода (D13, вывод 19 ATmega) 
char msg[13];
volatile int tmpr=0;
volatile int hum=0;
. . . . .
void loop() {
  delay(1000); //пауза 1 c
float temperature;
float humidity;
. . . . .  //здесь получаем значения temperature и humidity с датчика
//температуру с десятыми в целое положительное число 4 разряда:
  tmpr = temperature*10 2731; //2731 = абсолютный ноль в десятых градуса
//влажность в целое число 4 разряда:
  hum = humidity*10 1000; 
// формируем сообщение:
  digitalWrite (ledPin,HIGH); //зажигаем светодиод — начало передачи
  String strMsg="DAH"; //сигнатура - данные
  strMsg =tmpr; //температуру в строку
  strMsg =hum; //присоединяем влажность
  strMsg.toCharArray(msg,12); //переводим строку в массив, 12 – количество знаков
// и посылаем:
  vw_send((uint8_t *)msg, strlen(msg)); // передача сообщения
  vw_wait_tx(); // ждем завершения передачи
  delay(500); //пауза 500 мс
  digitalWrite (ledPin, LOW); //гасим светодиод — конец передачи
}

Если требуется передавать более точные числа с большим количеством разрядов, то вы просто увеличиваете длину массива msg. Глобальные «волатильные» переменные tmpr и hum нужны в случае, если вы осредняете несколько показаний, в противном случае они тоже могут быть объявлены локальными внутри функции loop().

Сообщение, как видите, состоит из значений преобразованных температуры и влажности, в ASCII-строках по четыре байта каждое, предваряемых строкой из трех символов «DAH» (символы могут быть любыми другими из таблицы ASCII). Это сигнатура, которая позволит выделить данное сообщение из числа возможных других, посылаемых аналогичными устройствами.

Заметьте также, что при преобразовании строки в массив необходимо указать на один символ больше, чем суммарная длина сообщения (3 4 4=11), это учитывается нулевой символ, замыкающий строку. А величина массива msg[] должна быть указана с запасом и может быть любой, в данном случае от 13 до 27 байт. При передаче все равно отправится ровно столько, сколько вернет функция strlen(msg), то есть 11 байт нулевой символ.

В приемной части полученный массив ASCII-кодов придется разбирать (парсить). Но сначала нужно его принять. Для инициализации приема выполняются следующие действия:

#include <VirtualWire.h>
char str[5]; вспомогательная строка для преобразований ASCII в число
  uint8_t buf [VW_MAX_MESSAGE_LEN];  //буфер для хранения принятых данных
  uint8_t buflen = VW_MAX_MESSAGE_LEN;  // max длина принятых данных
. . . . .

void setup() {
  vw_set_rx_pin(2); //D2 Вывод приемника VirtualWire
  vw_setup(1200); // Скорость соединения VirtualWire
. . . . .
} 

Собственно прием с разборкой строки такой:

void loop() {
  vw_rx_start();  // готовность приема
  buflen = VW_MAX_MESSAGE_LEN; //размер буфера задавать каждый раз
 if (vw_have_message()) { //ждем приема
 if (vw_get_message(buf, &buflen)) // Если данные приняты
  {
    vw_rx_stop(); //останавливаем прием и парсим:
        for (byte i=0; i<3; i  )  // получить первые три байта
                str[i]= buf[i]; // 
                str[3]='';
      if ((str[0]=='D')&&(str[1]=='A')&&(str[2]=='H')) {
//сигнатура правильная, датчик обнаружен
       for (byte i=3;i<7;i  )  // Получить четыре байта температуры
                str[i-3]= buf[i]; // упаковать их в строку
      int tmpr=atoi(str); //преобразовать в целое число
      tmpr=tmpr-2731; //вычесть 2731, получаем в десятых долях Цельсия
. . . . .//здесь можно поделить на 10 и преобразовать во float, если надо
. . . . . // здесь выводим температуру куда-то
// влажность:
      for (byte i=7;i<11;i  )  // Получить четыре байта влажности
                str[i-7]= buf[i]; // упаковать их в строку
      int hh = atoi(str); //преобразовать в целое число
      hh=(hh-1000)/10;
      if (hh>99) hh=99; //получаем влажность в %, целое число
. . . . . //выводим куда-то
   } //end проверка сигнатуры DAT
  } //end данные приняты
 } //прием 
} // end loop

Надеюсь, у вас теперь будет меньше вопросов по применению этих дешевых и удобных в применении устройств.

Оцените статью
Добавить комментарий

Adblock
detector