Arduino.ru
Собрал выносной термосенсор (в пробке от большой бутылки 🙂 состоящий из Attiny85, датчика DS18B20 и модема HC-12. Предполается мобильное питание, поэтому озадачился энерпотреблением. Потратив несколько часов на чтение мануалов и форумов, удалось понизить общее потребление всей схемы в режиме сна примерно до 30мкА (22 мкА по даташиту берет НС-12, еще 5-6 должна брать тинька, оставшиеся 2-3мкА — видимо погрешность измерений). Результат меня полностью устраивает (честно говоря, ожидал порядка 100-200мкА).
Но это касается режима сна. В активном же режиме выяснилась неприятная особенность. Настроив по советам импортных форумов задержки для перехода HC-12 из активного режима в сон и обратно, я получил следующие процедуры (комментарии на английском — цитаты из форума по ссылке)
Видно, что переход HC-12 в сон занимает порядка 150мс, а выход из сна — 250-300мс. С учетом того, что все это время модем потребляет около 15мА, выходит, что на эти периоды приходится три четверти всего расхода батарейки. Довольно непроизводительно, ИМХО.
Собственно, вопрос — как уменьшить это время?
Путь экспериментально подобрать задержки, уменьшая их пока не найнет глючить — вариант мне не нравится. Один раз настроишь, а потом изменится напряжение батарейки или температура в комнате и все поедет. Хотелось бы каких-то обоснованных данных, какое минимальное время ставить в каждом пункте. К сожалению, на НС-12 я не нашел нормального даташита, все что выложено в инете — по сути «инструкции пользователя» с минимумом подробностей.
Радио модуль 433.4МГц HC-12 (Trema-модуль V2.0)
Trema-модуль HC-12 — это беспроводной полудуплексный модуль UART позволяющий передавать и принимать данные в диапазоне частот от 433,4 МГц до 473МГц на скорости от 1200 до 115200 бод.
Видео:
Спецификация:
- Напряжение питания: 3,3 . 5 В
- Потребляемый ток при передаче данных: 100 мА
- Диапазон частот: 433,4 . 473 МГц
- Мощность передатчика: до +20 дБм
- Чувствительность приёмника: до -117 дБм
- Дальность связи: до 1 КМ на открытой местности (на скорости 1200 бод)
- Интерфейс: UART
- Поддерживаемые скорости UART: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
- Установки по умолчанию: FU3, 9600 бод, 8-N-1, CH001
- Рабочая температура: -25 . +75°C
- Рабочая частота: 433 МГц
- Коэффициент стоячей волны: <=1.5 на 433МГц
- Импеданс: 50Ω
- Длина с коаксиальным шнуром: 10 . 15 см
- Разъём: IPEX
Все модули линейки «Trema» выполнены в одном формате
Подключение:
Trema-модуль HC-12 подключается к Arduino по шине UART (можно использовать как аппаратную так и программную шину).
- Вывод модуля TX подключается к аппаратному (фиксированному) или программному (назначенному) выводу RXArduino. Это линия шины UART для передачи данных от модуля к Arduino.
- Вывод модуля RX подключается к аппаратному (фиксированному) или программному (назначенному) выводу TXArduino. Это линия шины UART для передачи данных в модуль от Arduino.
- Вывод модуля S подключается к любому выводу Arduino номер которого указывается в скетче. Это линия перевода модуля в режим AT-команд. Модуль будет воспринимать AT-команды, только во время подачи на этот вывод низкого уровня.
Модуль удобно подключать 4 способами, в зависимости от ситуации:
Способ — 1 : Используя провода, Piranha UNO и программный UART
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ — 2 : Используя провода, Piranha ULTRA и аппаратный UART
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha ULTRA.
С данным подключением будет использоваться второй аппаратный UART на Piranha ULTRA. Стоит заметить, что программный порт на UNO безошибочно работает на скорости до 57600 бод, в то время как аппаратный без проблем может работать на скорости 115200, вдвое большей.
Способ — 3 : Используя Trema Set Shield
В примерах ниже мы будем использовать программный UART на 8 и 9 цифровых выводах, поэтому для удобства подключения можно установить модуль в 3-ю ячейку Trema Set Shield. Так же на этих выводах находиться аппаратный порт Piranha ULTRA, что ещё больше упрощает работу с модулем.
Способ — 4 : Используя проводной шлейф и Shield
Используя 2-х и 3-х проводные шлейфы, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Способ — 5 : Напрямую к ПК через USB-UART
Используя USB-UART преобразователь Piranha можно подключить напрямую к ПК. При этом можно получать данные и отправлять команды на Arduino по радиоканалу, как если бы Arduino была подключена по проводу. Пример скетча для данного подключения.
Питание:
Входное напряжение питания 3,3 или 5 В постоянного тока, подаётся на выводы V и G модуля. Для работы от 3,3 В джампер под пайку сзади модуля должен быть запаян.
Подробнее о модуле:
Модуль работает в диапазоне частот от 433,4 МГц до 473МГц, имеет возможность выбора каналов от 1 до 100, возможность выбора восьми вариантов мощности передатчика от -1 дБм до 20 дБм при этом расстояние передачи может достигать 1000 метров на открытой местности при скорости передачи данных в эфире 5000 бит/с.
Модуль является полудуплексным, это означает что он может принимать или отправлять данные.
Режимы работы модуля
Модуль имеет четыре режима работы: FU1, FU2, FU3, FU4 и режим приём AT команд. Для перехода в режим приёма AT команд вывод S модуля необходимо прижать к земле (режим логического «0»). Режимы FU отвечают за приём и передачу данных последовательного порта.
Режим FU1 — режим относительно низкого энергопотребления, с током покоя 3,6 мА. В этом режиме можно выбирать скорость передачи данных по проводу arduino-модуль, но скорость в эфире постоянна и равна 250`000 бит/сек.
Режим FU2 — режим очень низкого энергопотребления, с током покоя 80 мкА. В этом режиме скорости передачи данных могут быть 1200, 2400 и 4800 бит/сек. Скорость в эфире фиксирована и равна 250`000 бит/сек. В этом режиме интервал между пакетами данных должен быть больше 1 секунды, иначе данные будут потеряны.
Режим FU3 — режим по умолчанию, потребляемый ток покоя 16 мА, скорость передачи данных в эфире автоматически переключается в зависимости от скорости проводного последовательного порта по следующей таблице:
Скорость передачи по проводу, бит/сек | 1`200/2`400 | 4`800/9`600 | 19`200/38`400 | 57`600/115`200 |
Скорость передачи в эфире, бит/сек | 5`000 | 15`000 | 58`000 | 236`000 |
Чем ниже скорость передачи по проводу — тем больше расстояние передачи модуля.
Режим FU4 — режим максимальной дальности, ток покоя 16 мА, поддерживает только одну скорость передачи равную 1200 бит/сек при этом скорость передачи в эфире уменьшается до 500 бит/сек, для наибольшей дальности связи. В этом режиме можно передавать не больше 60 байтов за раз, при этом интервал между пакетами должен превышать 2 секунды во избежание потерь данных.
Таблица режимов
Режимы: | FU1 | FU2 | FU3 | FU4 | Комментарий |
---|---|---|---|---|---|
Ток покоя | 3,6 мА | 80 мкА | 16 мА | 16 мА | Среднее значение |
Задержка передачи | 15-25 мс | 500 мс | 4-80 мс | 1000 мс | Передача одного байта |
Дальность передачи, W = 20 дБм | до 100 м | до 100 м | до 600м на 9600 бит/сек; до 1000 метров на 2400 бит/сек | до 1800 метров на 1200 бит/сек | Прямая видимость и идеальные условия, зависит от антенны. |
Для того чтобы модули могли связаться друг с другом у них должен быть выставлен одинаковый режим работы и скорость.
Чувствительность приёмника
Чувствительность приёмника модуля зависит от скорости передачи данных по следующей таблице:
Скорость передачи в эфире | 5`000 бит/сек | 15`000 бит/сек | 58`000 бит/сек | 236`000 бит/сек |
Чувствительность приёмника | -117 дБм | -112 дБм | -107 дБм | -100 дБм |
AT команды модуля:
Для перехода в режим AT команд необходимо притянуть вывод S модуля к земле (логическому нулю). Для входа в режим AT команд модулю необходимо 40 миллисекунд. Для выхода из режима AT команд модулю необходимо 80 миллисекунд.
- AT
тестовая команда, при удачном выполнении модуль возвращает «OK»
- AT+Bxxxx
Команда установки скорости обмена данными с микроконтроллером, где «xxxx» это скорость. Может быть 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200. Пример:
AT+B4800, при удачном выполнении модуль вернёт «OK+B4800»
- AT+Cxxx
Команда смены канала, «xxx» — номер канала (001-100). Значение по умолчанию 001. Пример: «AT+C042» сменит канал на 42 и рабочая частота станет 449,8 МГц. Приёмник модуля очень чувствительный и при использовании на скорости больше 9600 бит в секунду или если модули находятся на небольшом расстоянии друг от друга каналы лучше использовать через один, так как возможны перекрёстные помехи на соседних каналах.
- AT+FUx
Команда смены режима работы модуля. По умолчанию FU3. Для передачи данных модули должны находится в одном режиме.
- AT+ Px
Команда установки уровня мощности передатчика, «x» — от 1 до 8 по следующей таблице:
X | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Мощность (дБм) | -1 | 2 | 5 | 8 | 11 | 14 | 17 | 20 |
Чем выше мощность, тем больше расстояние излучения модуля. При уменьшении мощности на 6 дБ рабочее расстояние уменьшается в 2 раза. Значение по умолчанию — 8.
- AT+Ry
Запрос одного параметра модуля, где «y»: B — запросить скорость передачи данных, C — запросить канал, F — запросить режим работы и P — запросить мощность передатчика. Например: при запросе»AT+RB» модуль ответит «OK+B9600».
- AT+RX
Запросить все параметры модуля.
- AT+Uxxx
Установка параметров передачи данных. Биты данных, бит чётности, стоп-бит. Например, чтобы установить 8 бит данных, бит чётности и 1 стоп-бит посылаем модулю «AT+U8E1», модуль ответит «OK».
- AT+V
Запросить версию прошивки. При запросе «AT+V» модуль ответит «www.hc01.com HC-12 v2.6»
- AT+SLEEP
Перевод в режим сна. Потребляемый ток в данном режиме 22 микроампера. Передача данных в данном режиме невозможна
- AT+DEFAULT
Сброс параметров модуля на значения по умолчанию
- AT+UPDATE
Установка модуля в режим ожидания обновления прошивки
Примеры:
Пример тестирования модуля и сброса настроек на заводские.
Данный скетч сбрасывает настройки модуля на заводские и включает встроенный светодиод Arduino если получен положительный ответ от модуля.
Перевод модуля в режим ручного ввода AT команд
Пример входа в режим ввода AT команд в мониторе порта Arduino. После каждой команды необходим символ новой линии или возврата каретки. Скорость передачи должна быть выставлена на 9600 бод.
Подключение модуля через USB-UART преобразователь
Пример дистанционной отправки команд Arduino, при этом один модуль подключён к ПК через USB-UART преобразователь, второй подключён к Arduino на которую загружен этот скетч. При отправке ключевого слова «toggle» из монитора последовательного порта встроенный светодиод платы будет менять своё состояние.
Соединение двух Arduino через беспроводной UART
Данный пример передаёт «как есть» всё что он получает от модуля в серийный порт Arduino. Пример можно использовать для проверки связи между модулями и для обмена данными между двумя Arduino через беспроводной UART. Для соединения двух Arduino необходимо загрузить данный скетч в обе.
Передача массива и включение светодиода на расстоянии
В примере используются два модуля и две платы Arduino. Модули должны быть установленны на один канал и режим работы (см. первый пример).
Пример передачи массива. Включаем светодиод значением первого байта. Arduino с передатчиком посылает заголовок и массив; Arduino с приёмником ждёт заголовок и принимает массив. Тип массива может быть только byte, char, int8_t или uint8_t,
Скетч принимает массив из скетча выше и включает встроенный светодиод по значению первого байта
Пример переключения каналов модуля.
Пример смены канала передатчика. Передаётся байт на 1-м канале, затем канал переключается и передаётся байт на 3-м канале.
Одинаковый скетч для двух приёмников. Приёмники должны быть установленны на 1-й и 3-й каналы.
Если в последовательный порт приходит байт 0xAA, встроенный светодиод включается. Если приходит любой другой байт, светодиод выключается. Канал модуля должен быть 001 или 003. Выставить канал можно при помощи скетча выше «Перевод модуля в режим ручного ввода AT команд». Для этого из монитора порта необходимо ввести AT+C001 и enter для одного модуля и AT+C003 и enter для другого. Так же это можно сделать автоматически, при помощи скетча «Пример тестирования модуля и сброса настроек на заводские» заменив при этом команду AT+DEFAULT на AT+C003 для одного из модулей.
Обзор беспроводных модулей HC-12
Иногда возникает необходимость иметь связь между оборудованием, приборами, какими-то своими схемами на расстоянии и при этом нет возможности или не целесообразно использовать провода. В этом случае приходится строить беспроводную связь. Реализовать это можно большим количеством способов, но совсем недавно на глаза мне попались беспроводные модули HC-12 на GearBest (ссылка HC-12 на AliExpress), о которых речь пойдет дальше. Стоимость модулей составляет около 4-5$ за штуку.
Для начала технические характеристики беспроводных модулей HC-12:
- Рабочая частота – 433,4 – 473,0 МГц
- Используется только внешняя антенна, PCB антенна на модуле отсутствует
- Дальность передачи информации – до 1000 — 1800 м на открытом пространстве в зависимости от режима работы
- Мощность передатчика – до 100 мВт (доступны настройки для 8 уровней мощности)
- Количество каналов передачи данных – 100
- Четыре рабочих режима
- Встроенный микроконтроллер (присутствует на модуле) STM8S003F3
- Интерфейс для коммуникации с внешними устройствами – UART
- Потребляемый ток – от 3,6 мА до 16 мА в зависимости от режима работы
- Пиковое потребление тока – до 100 мА (передача данных)
- Потребление тока в ждущем режиме – 80 мкА
- Напряжение питания – от 3,2 В до 5,5 В
- Настройка модуля AT командами
Параметры модуля по умолчанию:
- UART: 9600, 8N1
- Канал 001 (433,4 МГц)
- Мощность передачи 100 мВт
Разработчики этого устройства предлагают следующие сферы применения продукта:
- Беспроводные датчики
- Устройства для охраны и безопасности
- Беспроводное управление роботами
- Телеметрия и дистанционное управление в промышленности
- Автоматическое получение данных
- Системы POS
- Системы входа без ключа
- Беспроводные сети для ПК и т.д.
Однако, предлагаемые производителем сферы применения не исчерпывают все области, где можно применить беспроводную связь. Ограничением в данном случае будет только фантазия радиолюбителей и инженеров.
Модули HC-12 работают как беспроводной удлинитель UART и не вносят каких-либо изменений в передачу информации — что отправил на одном конце, то получил на другом.
Данные модули позиционируются в продаже как заменяющие Bluetooth модули:
В некоторой степени это на самом деле более выгодно: намного больший радиус передачи, более компактное исполнение модуля (справа на фото Bluetooth модуль HC-05, о которых подробно рассказывалось в данной статье), возможность использования внешней антенны, однако отсутствие штатной PCB антенны можно поставить в минус, а кроме этого при соединении с ПК или планшетом понадобится еще один модуль для связи, в то время как Bluetooth есть практически во всех устройствах. Таким образом, модули HC-12 расширяют линейку беспроводных модулей и дают большее поле для конструирования собственных устройств.
Модуль представляет собой печатную плату с необходимыми элементами размером 27,8 х 14,4 мм. Беспроводной модуль имеет возможность подключения антенны двумя способами: подключение антенны через разъем IPEX20279-001E-03 (ANT1) или просто припаять кусочек провода (к контакту 6) (ANT2) или другой разъем (контакты 7,8 — земля). Для подключения к другим устройства модуль имеет пятиконтактный разъем (PLS/PBS), где 1 – плюс питания, 2 – земля, 3 – RxD, 4 – TxD, 5 – SET. Вывод 5 SET подтянут 10 кОм резистором к плюсу питания. Этот вывод необходим для активации настроек при помощи AT команд. Активация происходит при подключении вывода к низкому уровню, то есть к земле.
Модули построены на базе микросхемы SI4463 (микросхема в корпусе QFN-20), к этой же микросхеме подключен кварцевый резонатор на 30 МГц, необходимый для работы. Сама по себе эта микросхема (микроконтроллер) имеет интерфейс SPI, но модуль подключается по UART. Дело в том, что на модуле присутствует еще один микроконтроллер — STM8S003F3, он выступает в роли преобразователя интерфейсов. Кроме этого микроконтроллер STM упрощает взаимодействие с SI4463. Дело в том, что по UART нам необходимо всего лишь отправить байты данных как они уже отправляются в «воздух», но напрямую по SPI так сделать не получится, так как необходимо выполнять дополнительные команды. Микроконтроллер STM реализует все необходимые команды для этого и упрощает настройку и управление модулем HC-12 посредством собственных AT команд.
Диапазон питания модуля HC-12 определяет LDO (Low Dropout) регулятор напряжения (регулятор напряжения с низким падение напряжения на регулирующем элементе) XC6206 (элемент в корпусе SOT-23 с маркировкой 662K). Диод и транзистор на модуле под микроконтроллером STM относятся к схеме согласования UART. Элемент в шестиногом корпусе SC-70 – это переключатель AS179-92LF. Функционал наглядно показан на электрической схеме выше – переключение антенного выхода на приемный и передающий выводы микросхемы SI4463.
Контакты модуля HC-12 выполнены таким образом, что их можно использовать для пайки к разъемам PLS/PBS, либо припаивать напрямую к контактным площадкам другой печатной платы. При этом антенну может заменить печатный проводник (PCB антенна).
В продаже кроме модулей HC-12 (на базе микроконтроллера SI4463) есть так же практически идентичный модуль на базе микроконтроллера СС1101, обладающего практически теми же параметрами. Справа СС1101, слева SI4463:
Однако отличия между ними существуют как в плане элементной базы, так и в программной составляющей. Между собой в стоковом состоянии модули не соединяются. Для работы в паре одному из модулей необходимо модифицировать прошивку, если это возможно. А именно Зеленый модуль является модулем HC-11, что часто не указывают при продаже. HC-11 имеет несколько другую структуру работы и, хотя и схожие, но с различиями, AT команды.
Для подключения к компьютеру используем стандартный USB-UART переходник:
После подключения питания модуль начинает сразу работать со стандартными параметрами, заложенными производителем и ждет поступления данных по UART. Для изменения параметров модуля необходимо замкнуть вывод SET на землю, что активирует управление AT командами. Для HC-12 применимы 12 AT команд.
AT команда | Описание |
---|---|
AT | Тестовая команда. |
AT+Bxxxx | Команда изменения скорости передачи данных (может быть 1,200bps, 2,400bps, 4,800bps, 9,600bps, 19,200bps, 38,400bps, 57,600bps, и 115,200bps) |
AT+Cxxxx | Команда изменения канала связи (от 1 до 127). Шаг частоты канала 400 кГц, при больших расстояниях и скоростях больше 9,600bps рекомендуется не использовать частоты 5 соседних каналов выбранного канала, что бы сохранить полноценную работоспособность |
AT+FUx | Команда выбора режима работы (FU1, FU2, FU3, FU4). FU1 — режим сохранения энергии, потребляемый ток 3,6 мА. FU2 — экстремальный режим сохранения энергии, потребляемый ток 80 мкА. FU3 — режим полной скорости, потребляемый ток 16 мА. FU4 — режим максимальной дальности, потребляемый ток 16 мА, только скорость 1,200bps, количество информации не более 60 байт, интервал передачи пакетов рекомендуется использовать около 2 секунд для предотвращения потери данных |
AT+Px | Команда выбора передающей мощности (от 1 до 8) |
AT+Ry | Запрос установленных параметров модуля (AT+RB — baud rate, AT+RC — канал передачи данных, AT+RF — режим работы, AT+RP — мощность передачи) |
AT+Rx | Получение всех параметров: режим работы, baud rate, канал передачи данных, мощность передачи |
AT+Uxxx | Команда выбора data bits, check bit и stop bit |
AT+V | Запрос версии программного обеспечения модуля |
AT+SLEEP | Команда перехода в спящий режим, ток потребления в спящем режиме 22 мкА. Для выхода из спящего режима необходимо послать AT команду |
AT+DEFAULT | Сброс параметров настроек модуля до заводских |
AT+UPDATE | Вход в режим ожидания обновления программного обеспечения модуля. После ввода команда необходимо закрыть COM порт и запустить софт для обновления (HC-1X updater) |
При построении схем с применением модулей HC-12 необходимо учитывать несколько факторов:
Радиоуправление на Arduino с HC-12 (2 servo)
Для начала настроим оба модуля на нужную скорость обмена данными.
И загружаем скетч в плату:
Далее заходим в Инструменты -> Монитор порта , внизу справа выбираем скорость обмена данными 9600 бод и отправляем команду AT+B57600 .
В ответ должно прийти:
Такую операцию необходимо провести для обеих плат. Обратите внимание, что если в будущем Вы решите перенастроить плату, в скетче надо будет заменить строку hc12.begin(9600); на hc12.begin(57600); .
Подробнее обо всех настройках НС-12 написано в этой статье.
1) Управление одним серводвигателем
1) Arduino ( Uno , Nano или Mega ) (две штуки);
2) Серийный беспроводной микроконтроллер HC-12 (две штуки);
3) Любой серводвигатель для Arduino (у меня Tower Pro 9g SG90 );
4) Любой потенциометр.
2) Управление двумя серводвигателями
1) Arduino ( Uno , Nano или Mega ) (две штуки);
2) Серийный беспроводной микроконтроллер HC-12 (две штуки);
3) Любой серводвигатель для Arduino (у меня Tower Pro 9g SG90 ) (две штуки);