Remote sensor 433 mhz что это такое
Перейти к содержимому

Remote sensor 433 mhz что это такое

  • автор:

Remote sensor 433 mhz что это такое

Простейший комплект из приемника и передатчика ISM-диапазона 433 МГц завоевал заслуженную популярность в среде любителей электроники. Комплекты дешевы (даже в «Чипе-Дипе» их можно купить рублей за 300, а на Ali, говорят, вообще за полтинник), просты и надежны. Кроме того (о чем вы, возможно, не подозреваете), это самый дальнодействующий и проникающий способ беспроводного обмена данными — сигнал на частоте 433 МГц куда лучше проходит через препятствия и действует на более далеком расстоянии, чем в популярном диапазоне 2,4 ГГц (433 МГц полностью задерживаются стенкой в полметра бетона, а Wi-Fi умирает уже на 10 сантиметрах). Допускаю, что недавно появившиеся модули MBee-868, будучи снабженными соответствующей (направленной) антенной, «стреляют» дальше, но они как минимум на порядок дороже, сложнее в подключении, требуют управления энергосбережением и предварительной настройки. И вдобавок частота 868 МГц вдвое хуже проходит через препятствия (хотя, конечно, несравненно лучше частоты 2,4 ГГц).

О приемниках-передатчиках 433 МГц написано очень много (в том числе и на хабре, конечно). Однако, правильно включать в схему этот комплект по какой-то странной причине, кажется, не умеет никто. Когда я в который раз прочел вот тут, что комплект «принимал на 8-ми метрах в пределах прямой видимости, 9-ый метр осилить не удалось», мое терпение лопнуло. Какие еще 8 метров?! В 40-50 я бы поверил, хотя в реальности, наверное, дальность еще больше.

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

У меня такой комплект работает за городом на расстоянии примерно 25-30 метров под острым углом к бревенчатой стенке, так, что на пути сигнала оказывается примерно метр (в сумме) стен и перегородок, причем частично экранированных фольгированным утеплителем. На гораздо меньшем расстоянии, почти прямо за стенкой, WiFi уже полностью теряет сигнал. В городе сигнал добивает от одного конца трехкомнатной городской квартиры к другому через две межкомнатные перегородки, а также с балкона, где по прямой линии между передатчиком и приемником не менее 80 сантиметров кирпичной кладки и гипсолитовая перегородка. Никаких более дорогих вариантов комплектов, упомянутых в приведенном обзоре, я не употреблял.

Дополнительный плюс комплекта в том, что в паузах передатчик не потребляет ничего, причем без всяких специальных режимов Sleep, просто по принципу своего устройства (ток потребления в покое сравним с токами коллекторной утечки запертого транзистора, то есть порядка 100 нА).

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

Подключение передатчика

Передатчик (он носит название FS1000A), как мы видим из его схемы ниже, представляет собой простейший генератор на основе ПАВ-резонатора на 433 МГц. Генератор собран на транзисторе Q1, а транзистор Q2, на базу которого подаются цифровые данные — просто ключ, который подключает генератор к питанию (к шине GND) при наличии высокого уровня (логической единицы) на входе. Питание может быть от 5 до 12 вольт, причем, по утверждению производителей, чем выше питание, тем дальше работает связь.

Принципиальных преимуществ увеличенного питания в рамках своей задачи я не заметил. Тем не менее, не следует пренебрегать фактом, что особых требований к питанию тут не предъявляется, и при повышенном напряжении девайс будет работать только лучше. Удобно подключать передатчик непосредственно к напряжению с адаптера 9-12 вольт, аккумулятора или комплекта из 6 батареек (контакт Vin Arduino). При нестабилизированном питании, которое может превышать 12 вольт (как, например, у аккумуляторов) я обычно развязываю передатчик от основной схемы отдельным 9-вольтовым стабилизатором (можно простейшим 78L09), причем разницы в работе между питанием 9 и 12 вольт я не наблюдаю никакой. У Uno или Nano можно для питания самого контроллера и остальных схем (например, датчиков) при этом использовать встроенный стабилизатор 5 вольт, а для Mini (особенно — его дешевых клонов) я бы посоветовал поставить отдельный 5-вольтовый стабилизатор, подключив его к выводу 5V.

Следует отметить, что в последнее время стали появляться передатчики, выглядящие несколько нестандартно (см. рис. ниже). Оказалось, что отсутствие дросселя L1 (трехвиткового), от которого остались только отверстия — фикция, он просто заменен на соответствующий SMD-компонент. Хуже в этом варианте другое: неряшливая полиграфия может ввести в заблуждение относительно подключения выводов данных и питания. Правильное подключение показано на рисунке, оно для всех вариантов одинаково:

Самое поразительное в этом деле — то, что при перепутанном подключении данных и питания передатчик на небольших расстояниях продолжает работать! Если вы рассмотрите схему, то поймете в чем дело: база Q2 через резистор при этом оказывается подключенной к питанию, транзистор всегда открыт, и влияния на работу схемы не оказывает. А логический высокий уровень на шине питания просто запитывает в нужный момент генератор. Несуразности начинаются на некотором расстоянии — понятно, что из логического вывода источник питания получается плохой.

Подключение приемника

При приобретении приемника (он может носить название вроде MX-RM-5V или XD-RF-5V) обращайте внимание на длину выводов — мне как-то попалась целая партия с укороченными штырьками, отчего из стандартного разъема PBS приемник вываливался при малейшем перекосе и его приходилось к плате специально крепить.

У приемника схема гораздо сложнее (я ее не буду воспроизводить, но можете ознакомиться, например, тут). Она должна принять и усилить высокочастотный сигнал, отфильтровать частоту 433 МГц, выделить всплески и преобразовать их в логические уровни. Приемник имеет подстроечный дроссель (посередине платы), но без точных приборов для измерения амплитудно-частотной характеристики я его крутить не советую — скорее всего, вы ничего не улучшите, а только испортите.

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

Стандартный метод снижения помех, известный в мои времена каждому школьнику, собравшему хоть один радиоприемник или усилитель, заключается в том, что для чувствительных к помехам узлов необходимо делать отдельное питание, по максимуму изолированное от остальных схем. Можно его делать разными методами: когда-то ставили отдельный стабилитрон, сейчас часто изолируют питание проблемного узла LC-фильтром (так рекомендуется поступать, например, для АЦП, посмотрите даташиты на AVR-контроллеры). Но в наших условиях, когда современные компоненты невелики и дешевы, проще просто поставить на приемник отдельный от всего остального стабилизатор.

Стабилизатор, например, типа LP2950-5.0 плюс два необходимых конденсатора к нему в самом дешевом варианте (когда оба конденсатора — керамические, в диапазоне 1–3,3 мкФ) добавит к стоимости вашей схемы рублей шестьдесят максимум. Но я предпочитаю не экономить: на выходе ставлю обычный керамический, а на входе электролит (10–100 мкФ), причем твердотельный (полимерный) или танталовый. Обойтись керамическими конденсаторами и там и там можно, если входное напряжение 7-12 вольт поступает с батареек-аккумуляторов или с другого аналогового стабилизатора. Импульсные стабилизированные источники и простейшие нестабилизированные выпрямители требуют дополнительной фильтрации. Можно использовать дешевый алюминиевый электролит, если ставить параллельно ему керамический 0,1 мкФ, еще лучше поставить на входе последовательную индуктивность в несколько долей или единиц миллигенри.

Стабилизатор следует устанавливать прямо около приемника, длина проводников должна быть минимальна. Вместо LP2950 можно взять LM2931 или аналогичный с маленьким проходным напряжением (это особенно важно, если схема питается от батареек — для обычного LM78L05 входное напряжение должно быть не менее 7,5, а лучше 8-9 вольт).

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

В простейшем варианте в качестве антенн можно обойтись обрезками одножильного провода сечением не меньше 0,5 мм и длиной 17 см ± 1-3 мм. Не следует употреблять многожильный монтажный провод! В продаже имеются более компактные спиральные антенны, но я лично их эффективность не испытывал. Кончик антенны и у передатчика и у приемника запаивается в соответствующее отверстие в углу платы (не ошибитесь в модернизированном варианте передатчика — там слово ANT тоже не на месте, см. рис. выше).

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

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

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

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

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

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

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

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

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

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

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

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

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

Remote sensor 433 mhz что это такое

Вы здесь: Home Железо Без проводов (433/315мгц) Беспроводной датчик температуры и влажности на базе радиомодулей 433/315

Вариант беспроводного датчика температуры на attiny13. На фото можно разглядеть датчик ds18b20 с резистором , attiny13 на платке-переходнике, радиопередатчик с антенной, а так же кейс для батареек 3хААА

Передатчик основан на примерах алгоритма передачи данных и на примерах считывания датчиков DHT11/22 и DS18B20 (смотрите примеры на Си для м/к) .

В отличии от других вариантов реализации (Например nRF24LE1 или WI-FI ESP8266) беспроводной передачи данных — этот вариант может быть собран на очень дешевом микроконтроллере Attiny13, стоимость которого всего 50 центов !!

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

Так как передатчик не имеет внешних настроек,то все настройки задаются перед компиляцией прошивки. Для удобства разработан конструктор прошивки,который находится внизу данной страницы. Данный подход упростит разработку устройств тем,кто плохо знаком с языком Си.

Поддерживаемые микроконтроллеры: Attiny85, Attiny45, Attiny25, Attiny13, Attiny2313(НЕТ АЦП !). Возможно добавить и другие м/к.

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

Если у Вас будет несколько передатчиков,то ключи должны быть у всех разные.

Выбор протокола:

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

Для троичного протокола необходима библиотека RemoteSwitch.

Для двоичного протокола — RCswitch.

Аналоговый вход (АЦП):

Передатчик может передавать состояние аналогового входа (АЦП), например с фоторезистора(датчика освещенности). Для этого необходимо задать ключ,если значение ключа равно нулю, то код, отвечающий за АЦП не компилируется и не занимает памяти в микроконтроллере. Размер кода в прошивке занимает примерно 60 байт.

Аналоговый вход находится на PB2(7 нога м/к). В Attiny2313 АЦП нет.

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

На схемах отображены только основные детали. К выводу PB0(5 нога) для экономии энергии могут подключатся выводы питания датчиков и радиомодуля (через транзистор)- в этом случае они будут запитыватся только в момент опроса датчика. У Attiny2313 распиновка отличается -смотрите в даташите.

radio dht

Вариант с DS18B20:

radio ds

Внимание !! Если датчик будет использоватся на улице(при минусовой температуре), то необходимо использование кварца ! Для этого необходимо пересчитать фьюзы и указать частоту кварца в соотсвествующем поле. Attiny13 кварц не поддерживает ! Для использования кварца необходимо поменять используемые выводы микроконтроллера соотсвествующей галкой , т.к. кварц подключается на выводы PB3, PB4 по стандартной схеме.

Экономия энергии при работе от батареи:

Микроконтроллеры Amtel умеют «засыпать» и включатся по прерыванию или по таймеру Watchdog — это может хорошо сэкономить заряд батареи или аккумулятора.

При использовании Watchdog время обновления и отправки данных может быть только кратно 8 секундам(8,16..64..256..).В обычном же режиме без использования Watchdog время кратно 5 секундам (используется обычный _delay_ms(5000)).

Если ,например, Attiny85 при работе 8мгц имеет потребление около 7 мА.(тут и ниже ток будет указан в милиамперах для удобства сравнения), а при работе на 1мгц(используя делитель на 8) 2 мА,то в спящем режиме ток падает до 0.01 мА !

У Attiny13 параметры экономии ещё лучше: при 9.6 мгц потребление около 5мА(5в) 2.5мА(3.3в), при 1.2 мгц (используя делитель на 8) — 1.5мА(5в) 0.7мА(3.3в), в спящем режиме до 0.005мА.

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

Прошивка микроконтроллера:

При генерации hex файла конструктор показывает командую строку для загрузки через утилиту avrdude.

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

При использовании делителя,возможно м/к откажется прошиваться — для исправления ситуации воспользуйтесь опцией -B 20.

При прошивке через плату Arduino необходимо указать СОМ порт.

Оптимизация размера прошивки:

При использовании Attiny13, где всего 1024 байт, могут возникнуть трудности с размером прошивки. Некоторые комбинации настроек могут уместить все необходимые функции:

1. Двоичный протокол занимает меньше кода,чем троичный.

2. Хотя ключи можно писать шестизначные, но если датчиков мало,то ограничтесь 5 значными значениями (до 32767).

3. Включение делителя может так же уменьшить код.

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

Конструктор прошивки:

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

Home`s Smart © 2013-2016. г.Киров.
Цитирование материалов возможно только со ссылкой на сайт. Использование фотоматериалов только с разрешения авторов.

Датчик движения и датчик открытия двери Wofea 433 МГц

Приехали датчики в консолидированной посылке, шли где то две недели.
В упаковке были только датчики:
Батареек в комплекте нет.
Датчик движения комплектуется ножкой для крепления. Чувствительность у датчика довольно высокая, мою прихожую полностью покрывает. Метров с трех четко срабатывает. Повторное срабатывание где то через 30 секунд.
Схемотехника датчика стандартная: ПИР сенсор, управление на микросхеме BIS0001, кодер радиоканала тоже обычный 1527
Питание две батарейки АА. Потребление не замерял, но вроде как у них в ждущем режиме 150мкА, в режиме передачи около 20 мА. Пока не разбирался передает ли состояние низкого уровня батареек
Магнит обычный, внутри корпуса ботается.
В датчике оказался не геркон а датчик холла.
Питание батарейка 2032, тоже пока не знаю передает ли состояние низкого уровня батарейки.

С помощью лога радиореле, были выяснены коды которые передают датчики. В прошивку EspHome радиореле были добавлены сенсоры:

В Home assistant сенсоры сразу подхватились. Была добавлена автоматизация включения света в прихожей по этим датчикам на 2 минуты.

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

    , , ,
  • 24 мая 2020, 20:34
  • автор: Gelmer
  • просмотры: 7175

И каждому в организму по карте/токену.))

Но дать системе информацию о твоем местоположении это. «одел шапочку из фольги»

Логика с ярким светом вписывается в желание снять видео злодея покрасивее. Чтобы легче было идентифицировать. И ИК подсветка тут не друг…

Будете смеяться, но один знакомый Новый Русский лет 10 назад имел сейф в доме в стене. Но так-же имел скрытую охранную сигнализацию. И ему добрые люди посоветовали сделать так, что при сработке дом обесточивался. Идея была: не дать ворюгам шанса воспользоваться мощными инструментами. И да, его пытались «вставить», но безуспешно…

Обладаю точно такими же датчиками. Приобрел на Али по акции — набор по 5 штук тех и тех.

Про PIR-датчики могу сказать следующее. У них «гуляют» значения посылаемых кодов. Если код перевести из HEX в DEC, то разброс достигает 20 единиц. Например, один и тот же датчик в разное время (зависимости тут никакой, просто случайность) может послать код 5175872, или 5175884, или 5175887. Поэтому при настройке автоматики надо указывать не «принят код такой-то», а «принят код в диапазоне от и до».

Датчики открытия в этом плане получше — у них четко зафиксированы посылаемые коды, без всяких разбросов. Срабатывание датчика дублируется также светодиодом, который загорается на короткое время. У этих датчиков другая беда — они посылают код только в момент отдаления магнита (т.е, как бы открытия двери). И на этом всё. При закрытии двери никакого сигнала не посылается. Возможно, для охранной системы это нормально (пришел сигнал — значит, кто-то дверь открыл). Но вот для умного дома вряд ли сгодится, т.к. хочется мониторить не только факт открытия двери, но также и факт ее закрытия.
При разборке обнаружил, что на плате есть посадочное место для тактовой кнопки (на фото в обзоре хорошо видно, где именно). Припаял туда кнопку ради любопытства, провертел в крышке дырочку и через нее вывел стержень кнопки наружу. При нажатии кнопки (при этом близость магнита не имеет значения) датчик посылает тот же самый сигнал, что и при отдалении магнита. При долгом нажатии и удержании кнопки сигнал все равно посылается только один раз (в отличие от многих пультов, которые при удержании кнопки начинают повторять отправку сигнала).
Возникла идея использовать эту недокументированную возможность для мониторинга механического концевика, провода которого припаять к плате датчика вместо кнопки. Но смущает один момент — если контакты будут замкнуты в течение долгого времени (от упомянутого концевика), то не вызовет ли это быструю просадку батарейки?

433MHz (aka RF) sensors and devices are good value

If you’ve used any of the following examples you probably own some of the ‘old’ technology discussed on this page. I unknowingly had a lot of it – a RF remote control for my ceiling LED lights (picture below) used the 433MHz RF band.

  • A wireless ‘RF’ doorbell sends a radio signal to a chime.
  • A door contact sends a signal to a burglar alarm.
  • A motion sensor send a signal to a light.
  • A water leak sensors ends a signal to a siren
  • A wall switch or remote control sends a signal to a socket, or a relay or a door lock.
  • A push switch sends a signal to a garage door
types of wireless

Sensors that tell you say, whether a door is open can signal whether they are on / off using Bluetooth, Wifi, Z-wave or Zigbee. Yesterday’s sensors and gadgets mostly use 433MHz (also called RF ) for wireless communication.

The 433MHz frequency is still used in remote controlled sockets and home security systems. The 433MHz signal can travel the length of the house and the battery in say, a doorbell push will last for months or a year. These switches are inexpensive (a few £ each). In comparison, a switch that works over wifi needs to be plugged into a power outlet and its signals probably don’t travel far.

making 433MHz smarter

433MHz RF systems unfortunately aren’t part of smart home automation platforms such as Google or Alexa. For example, if you wanted an alert on your phone when the basement was flooding; or you wanted the heating to respond to temperatures in various rooms, you’d need something proprietary. The way forward is to use a bridge e.g a Sonoff RF bridge – to connect them. This bridge connects your RF devices to home automation platforms like Google Home or Home Assistant (described here). Your RF devices can now talk to the home automation system. Hence projects such as this smarter letterbox.

The first thing to become clear about is that 433MHz devices are either signal ‘senders’ or signal ‘receivers’. On the left is a light relay (receiver) and a socket (also a receiver). The other devices send / transmit signals into the ether and a receiver will react if it’s been taught the signal.

pairing is how 433MHz works in practice

Get yourself a 433MHz push button and the plug-in wireless chime (M2D 300m 433MHz 60 chimes) as shown below. Often they don’t need to be the same brand. Press the chime button to select a tune; press the set button for a couple of seconds. An LED will turn on to show it’s ready to learn a button. Press the white button and the chime will now sound when the doorbell is pressed.

It is common for different 433MHz devices to be compatible with each other. For example, the chime can learn the signal from the door contact sensor above. You can set a different chime sound should the door be opened. You can also teach the chime the signal from a PIR sensor (main picture) so that anyone crossing its path will cause a chime sound.

Similar set up to above. The Digoo ROSA wireless alarm/siren can also be taught to respond to these sensors. The massive noise this device makes is appropriate for home security and less good for a doorbell!

how it doesn’t work

After experimenting with a lot of devices (and do try everything a few times each) you’ll have a lot of happy surprises as to what works with what. You’ll see that not every 433MHz device is compatible with everything – for example the HomeEasy RF system is its own system. A garage door remote need to send a secure code to the lock (called a ‘rolling code’).

If you also wanted a doorbell button to send an alert to your phone or computer; or turn on a light or boost the water heating or close the blinds, the next step is to integrate the RF system with the wifi system of a home automation platform. So get the Sonoff RF Bridge. The bridge reads many kinds of 433MHz signals so you can use its sensors to trigger events.

Sonoff® RF Bridge wifi and 433MHz

make use of a Sonoff RF bridge
  • This device is a 433MHz receiver that listens for RF signals such as a press on that white doorbell button above. Install the app Ewelink on your phone and use it to ‘learn’ your sensor’s code.
  • The bridge can also send a 433MHz signal to say, a RF socket. You can use the app to set up a time schedule for a socket. For example, if my laptop charger was plugged into an RF controlled socket, I’d make the socket turn off a couple of times a day. That way I can’t overcharge a battery and ruin it as I’ve done several times. I have smart sockets controlling electricity-hungry lights and they’re on a schedule that turns them off every two hours. A motion sensor turns them on as required.
  • This Sonoff RF bridge is indeed a bridge – it receives 433MHz signals and it can send out RF signals to RF devices and inform you via wifi to your phone. The video below by Csongor Varga illustrates the bridge you’ve now made between different systems.
  • There more fun to be had by connecting Ewelink to IFTTT or Amazon Alexa or Google Home.
going further with the Sonoff RF bridge – Tasmota & MQTT
No need to flash the Sonoff: since 2020, a Home Assistant custom component allows you to use the Sonoff RF bridge without the need to open it and flash it with new firmware. If you prefer this approach, as do I, see my eWeLink project.

I’ve so far mentioned sensing and sending RF with the bridge and phone app. You may have devices that you need to work in the way you want – for example, I want to know not just the temperature of a room but also to see a graph of how fast the room heats up and cools down. For this I installed different software on the Sonoff RF bridge and connected it to Home Assistant.

There is a choice of software to use on the RF bridge – there’s openmqttgateway which provides a bridge that responds to a variety of 433MHz, Bluetooth and other senders. The software turns received data into MQTT messages which Home Assistant can process. The software I used for my Sonoff RF bridge is called Tasmota which also turns received RF into MQTT messages for Home Assistant. Tasmota can be installed on many modern devices. I went for it because has a web interface that makes it easy to see what’s being sent.

Scarily, what follows involves taking apart your bridge. You’ll need some ‘female headers’, Dupont jumper wires, a 3.3v FTDI unit and some flashing software.

Похожие публикации:

  1. Fubag что за фирма
  2. Vac vdc что значит
  3. Как зарядить крону в домашних условиях
  4. Что такое технологическая установка

Еще раз о передатчиках и приемниках 433 МГц

Простейший комплект из приемника и передатчика ISM-диапазона 433 МГц завоевал заслуженную популярность в среде любителей электроники. Комплекты дешевы (даже в «Чипе-Дипе» их можно купить рублей за 300, а на Ali, говорят, вообще за полтинник), просты и надежны. Кроме того (о чем вы, возможно, не подозреваете), это самый дальнодействующий и проникающий способ беспроводного обмена данными — сигнал на частоте 433 МГц куда лучше проходит через препятствия и действует на более далеком расстоянии, чем в популярном диапазоне 2,4 ГГц (433 МГц полностью задерживаются стенкой в полметра бетона, а Wi-Fi умирает уже на 10 сантиметрах). Допускаю, что недавно появившиеся модули MBee-868, будучи снабженными соответствующей (направленной) антенной, «стреляют» дальше, но они как минимум на порядок дороже, сложнее в подключении, требуют управления энергосбережением и предварительной настройки. И вдобавок частота 868 МГц вдвое хуже проходит через препятствия (хотя, конечно, несравненно лучше частоты 2,4 ГГц).

О приемниках-передатчиках 433 МГц написано очень много (в том числе и на хабре, конечно). Однако, правильно включать в схему этот комплект по какой-то странной причине, кажется, не умеет никто. Когда я в который раз прочел вот тут, что комплект «принимал на 8-ми метрах в пределах прямой видимости, 9-ый метр осилить не удалось», мое терпение лопнуло. Какие еще 8 метров?! В 40-50 я бы поверил, хотя в реальности, наверное, дальность еще больше.

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

У меня такой комплект работает за городом на расстоянии примерно 25-30 метров под острым углом к бревенчатой стенке, так, что на пути сигнала оказывается примерно метр (в сумме) стен и перегородок, причем частично экранированных фольгированным утеплителем. На гораздо меньшем расстоянии, почти прямо за стенкой, WiFi уже полностью теряет сигнал. В городе сигнал добивает от одного конца трехкомнатной городской квартиры к другому через две межкомнатные перегородки, а также с балкона, где по прямой линии между передатчиком и приемником не менее 80 сантиметров кирпичной кладки и гипсолитовая перегородка. Никаких более дорогих вариантов комплектов, упомянутых в приведенном обзоре, я не употреблял.

Дополнительный плюс комплекта в том, что в паузах передатчик не потребляет ничего, причем без всяких специальных режимов Sleep, просто по принципу своего устройства (ток потребления в покое сравним с токами коллекторной утечки запертого транзистора, то есть порядка 100 нА).

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

Подключение передатчика

Передатчик (он носит название FS1000A), как мы видим из его схемы ниже, представляет собой простейший генератор на основе ПАВ-резонатора на 433 МГц. Генератор собран на транзисторе Q1, а транзистор Q2, на базу которого подаются цифровые данные — просто ключ, который подключает генератор к питанию (к шине GND) при наличии высокого уровня (логической единицы) на входе. Питание может быть от 5 до 12 вольт, причем, по утверждению производителей, чем выше питание, тем дальше работает связь.

Принципиальных преимуществ увеличенного питания в рамках своей задачи я не заметил. Тем не менее, не следует пренебрегать фактом, что особых требований к питанию тут не предъявляется, и при повышенном напряжении девайс будет работать только лучше. Удобно подключать передатчик непосредственно к напряжению с адаптера 9-12 вольт, аккумулятора или комплекта из 6 батареек (контакт Vin Arduino). При нестабилизированном питании, которое может превышать 12 вольт (как, например, у аккумуляторов) я обычно развязываю передатчик от основной схемы отдельным 9-вольтовым стабилизатором (можно простейшим 78L09), причем разницы в работе между питанием 9 и 12 вольт я не наблюдаю никакой. У Uno или Nano можно для питания самого контроллера и остальных схем (например, датчиков) при этом использовать встроенный стабилизатор 5 вольт, а для Mini (особенно — его дешевых клонов) я бы посоветовал поставить отдельный 5-вольтовый стабилизатор, подключив его к выводу 5V.

Следует отметить, что в последнее время стали появляться передатчики, выглядящие несколько нестандартно (см. рис. ниже). Оказалось, что отсутствие дросселя L1 (трехвиткового), от которого остались только отверстия — фикция, он просто заменен на соответствующий SMD-компонент. Хуже в этом варианте другое: неряшливая полиграфия может ввести в заблуждение относительно подключения выводов данных и питания. Правильное подключение показано на рисунке, оно для всех вариантов одинаково:

Самое поразительное в этом деле — то, что при перепутанном подключении данных и питания передатчик на небольших расстояниях продолжает работать! Если вы рассмотрите схему, то поймете в чем дело: база Q2 через резистор при этом оказывается подключенной к питанию, транзистор всегда открыт, и влияния на работу схемы не оказывает. А логический высокий уровень на шине питания просто запитывает в нужный момент генератор. Несуразности начинаются на некотором расстоянии — понятно, что из логического вывода источник питания получается плохой.

Подключение приемника

При приобретении приемника (он может носить название вроде MX-RM-5V или XD-RF-5V) обращайте внимание на длину выводов — мне как-то попалась целая партия с укороченными штырьками, отчего из стандартного разъема PBS приемник вываливался при малейшем перекосе и его приходилось к плате специально крепить.

У приемника схема гораздо сложнее (я ее не буду воспроизводить, но можете ознакомиться, например, тут). Она должна принять и усилить высокочастотный сигнал, отфильтровать частоту 433 МГц, выделить всплески и преобразовать их в логические уровни. Приемник имеет подстроечный дроссель (посередине платы), но без точных приборов для измерения амплитудно-частотной характеристики я его крутить не советую — скорее всего, вы ничего не улучшите, а только испортите.

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

Стандартный метод снижения помех, известный в мои времена каждому школьнику, собравшему хоть один радиоприемник или усилитель, заключается в том, что для чувствительных к помехам узлов необходимо делать отдельное питание, по максимуму изолированное от остальных схем. Можно его делать разными методами: когда-то ставили отдельный стабилитрон, сейчас часто изолируют питание проблемного узла LC-фильтром (так рекомендуется поступать, например, для АЦП, посмотрите даташиты на AVR-контроллеры). Но в наших условиях, когда современные компоненты невелики и дешевы, проще просто поставить на приемник отдельный от всего остального стабилизатор.

Стабилизатор, например, типа LP2950-5.0 плюс два необходимых конденсатора к нему в самом дешевом варианте (когда оба конденсатора — керамические, в диапазоне 1–3,3 мкФ) добавит к стоимости вашей схемы рублей шестьдесят максимум. Но я предпочитаю не экономить: на выходе ставлю обычный керамический, а на входе электролит (10–100 мкФ), причем твердотельный (полимерный) или танталовый. Обойтись керамическими конденсаторами и там и там можно, если входное напряжение 7-12 вольт поступает с батареек-аккумуляторов или с другого аналогового стабилизатора. Импульсные стабилизированные источники и простейшие нестабилизированные выпрямители требуют дополнительной фильтрации. Можно использовать дешевый алюминиевый электролит, если ставить параллельно ему керамический 0,1 мкФ, еще лучше поставить на входе последовательную индуктивность в несколько долей или единиц миллигенри.

Стабилизатор следует устанавливать прямо около приемника, длина проводников должна быть минимальна. Вместо LP2950 можно взять LM2931 или аналогичный с маленьким проходным напряжением (это особенно важно, если схема питается от батареек — для обычного LM78L05 входное напряжение должно быть не менее 7,5, а лучше 8-9 вольт).

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

В простейшем варианте в качестве антенн можно обойтись обрезками одножильного провода сечением не меньше 0,5 мм и длиной 17 см ± 1-3 мм. Не следует употреблять многожильный монтажный провод! В продаже имеются более компактные спиральные антенны, но я лично их эффективность не испытывал. Кончик антенны и у передатчика и у приемника запаивается в соответствующее отверстие в углу платы (не ошибитесь в модернизированном варианте передатчика — там слово ANT тоже не на месте, см. рис. выше).

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

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

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

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

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

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

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

Разберем принципы формирования данных на конкретном примере. Пусть у нас имеется выносной датчик температуры-влажности. Он выдает значения (переменные temperature и humidity) в формате действительного числа со знаком (float). Чтобы было проще разбираться на приемном конце, будем все приводить к виду положительного целого числа с числом десятичных разрядов не менее 4, переводить разряды по отдельности в ASCII-символы, передавать получившуюся строку, а на приемном конце выполнять обратные операции. Конечно, можно упростить задачу (например, обойтись без преобразования в 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 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; i99) hh=99; //получаем влажность в %, целое число . . . . . //выводим куда-то > //end проверка сигнатуры DAT > //end данные приняты > //прием > // end loop 

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

  • Arduino
  • передатчик 433 МГц
  • приемник 433 МГц

Прием данных от беспроводных датчиков на частоте 433МГц

Добрый день, уважаемые читатели! В этой статье я расскажу про то, как можно просто и легко принимать и обрабатывать данные на Arduino и ESP8266/32 от различных беспроводных устройств и датчиков, работающих на частоте 433 MHz. Про радиомодули 433MHz и их применение для связи между двумя Arduinами не писал только самый ленивый. Например такой ленивый, как ваш покорный слуга. Но в данной статье я хотел бы акцентировать ваше внимание на приеме данных, причем не от другой Arduinы или ESP, а от готовых беспроводных пультов и сенсоров, предлагаемых китайской электронной промышленностью в огромных объемах и вариантах. Это послужит основой для дальнейшего описания работы самодельного устройства охранно-пожарной сигнализации, так как в нем, помимо проводных, могут быть использованы и весьма распространенные беспроводные пульты и датчики: движения (PIR), протечки, пожарные извещатели, сигнализаторы метана и угарного газа и т.д. и т.п.

Важное замечание: в данной статье я буду рассматривать принципы передачи данных с помощью “обычных” приемников для 433 MHz. Трансиверы LoRa, LoRaWAN и LPWAN – это совершенно другие технологии связи (хотя и иногда использующие те же частоты), и они требуют отдельного рассмотрения.

Обзор LPD диапазона 433 МГц

В России (и не только) для портативных маломощных радиостанций с 2004 года решением ГКРЧ разрешен к использованию диапазон частот 433,075 МГц – 434,790 МГц, называемый также LPD (Low Power Device – маломощные радиостанции), максимальная не лицензируемая мощность в данном диапазоне составляет всего 10 мВт (максимальная – 20 мВт, но уже потребуется получить особое приглашение разрешение). Иногда этот диапазон называют как ISM-диапазон, хотя, на мой взгляд, это более широкое понятие. Диапазон LPD 433 МГц не подлежит лицензированию, т. е. не требуется получать специальное разрешение на частоту и регистрацию самого устройства. В диапазоне LPD работают многие устройства, такие как радиопульты для открытия дверей и гаражей, автомобильные радиосигнализации, различные датчики и устройства радиоуправления. Плюсы LPD диапазона в том, что помехи от промышленного производства и электролиний не оказывают на эту часть радиоспектра сильного влияния. А в условиях работы на открытой местности дальность связи существенно возрастает из-за отсутствия строений вообще. Еще один ощутимый плюс — все оборудование для LPD диапазона имеет довольно компактные размеры.

Частота 433.92 МГц выделена для работы маломощных цифровых передатчиков таких как: радиобрелки автосигнализаций, брелки управления шлагбаумами на стоянках, различные датчики и другие подобные системы. Поэтому практически по всех DIY-модулях передатчик и приемник заранее настроены на эту частоту.

Виды модуляции

Сама по себе несущая частота передатчика никакой информации не передает. Чтобы приемник получил какую-то информацию, передатчик должен эту информацию закодировать и модулировать несущую частоту этим кодом (в данной статье мы говорим только о передаче информации в цифровом виде, а не “голосом”). Этот процесс загрузки полезного сигнала для отправки в высокочастотный сигнал называется модуляцией. Разрешенный ГКРЧ класс излучения в диапазоне 433 МГц — 16K0F3E, то есть частотная модуляция с полосой не шире 16 кГц. Но на практике сплошь и рядом встречаются устройства и с другими типами модуляции, например OOK.

Родственники дядюшки Ляо производят огромное количество устройств модулей для LPD диапазона с разными типами модуляции и кодирования сигнала, часто не совместимые друг с другом. Если вы интересовались данной темой, то наверняка сталкивались с сокращениями – ASK, OOK, FSK, PSK, 16-QAM и многими другими. Если вы хорошо знаете предмет, смело крутите страницу вниз до следующей главы. Ну а для начинающих давайте кратенько разберемся, что означают виды модуляции ASK/OOK, FSK и PSK.

ASK – амплитудная модуляция

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

Амплитудные виды модуляции обеспечивает высокую эффективность использования полосы пропускания и имеют простую конструкцию приемника. Но эти методы имеют невысокую энергетическую эффективность (так как средний уровень мощности существенно меньше максимального), требуют очень высокого отношения сигнал/шум для демодуляции сигнала (это связано с тем, что шум влияет на амплитуду), особенно учитывая то, что сигналов в диапазоне LPD передаются с очень малой мощностью. Однако они достаточно просты в реализации и поэтому все ещё находят применение. Более подробно об этом виде модуляции вы можете почитать тут.

ООК – амплитудная манипуляция

Наиболее простым подвидом амплитудной модуляции сигнала ASK является амплитудная манипуляция или OOK (ON OFF Keying). Если говорить простыми словами, то при логической единице на входе передатчика последний включен и передает сигнал в эфир, при логическом ноле – выключен.

Модуляция OOK продлевает срок службы батареи, поскольку во время логического нуля несущая не передается. Следовательно, в течение этого времени передатчик может находиться в состоянии “выключено”. Как раз этот тип модуляции наиболее часто используется в системах инженерной сигнализации и охранных системах. Но модуляция ASK обеспечивает большую устойчивость к помехам по сравнению с модуляцией OOK.

FSK – частотная модуляция

FSK означает частотную манипуляцию. При частотной модуляции на выходе передатчика изменяется не амплитуда сигнала, а частота несущей. Модулированный сигнал будет иметь частоту f1, когда двоичный вход равен единице, и будет иметь частоту f2, когда двоичный вход равен нулю. Сам передатчик при этом работает всегда с постоянной мощностью и амплитудой.

К достоинствам FSK можно отнести постоянную мощность сигнала передатчика (что позволяет использовать высокоэффективные методы усиления) и более высокую помехозащищенность канала связи. Модуляция FSK работает гораздо лучше, чем OOK/ASK при наличии помех. Реализации передатчика и приемника FSK просты для приложений с низкой скоростью передачи данных. Но FSK использует большую полосу пропускания по сравнению с другими методами модуляции, такими как ASK и PSK. Следовательно, это не эффективно с точки зрения пропускной способности. Более подробно об FSK вы можете почитать тут.

PSK – фазовая модуляция

Как и следует из названия, при фазовой модуляции изменяется не частота и не амплитуда сигнала, а его фаза. На рисунке изображен тип модуляции PSK с использованием двоичной фазовой манипуляции. При этом логическая 1 представлена сменой фазы несущей на 180 градусов, а логический 0 — без сдвига фазы радиочастотной несущей.

PSK модуляция

PSK это самый энергоэффективный метод модуляции по сравнению по сравнению с ASK и FSK. Еще одним важным преимуществом является то, что PSK менее подвержен ошибкам по сравнению с модуляцией ASK и занимает ту же полосу пропускания, что и ASK. Более высокая скорость передачи данных может быть достигнута с использованием специальных подвидов PSK модуляции как QPSK, 16-QAM, 64-QAM и т. д. К недостаткам можно отнести сложность алгоритмов декодирования принятого сигнала. Более подробно об PSK вы можете почитать тут.

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

BPSK-двоичная фазовая манипуляция

Как уже упоминалось выше, в PSK двоичные 1 и двоичные 0 представлены разными фазами несущей, каждая из которых находится на расстоянии 180 градусов друг от друга. Самая простая схема BPSK использует две фазы для представления двух двоичных цифр и известна как двоичная фазовая манипуляция. На рисунке выше как раз проиллюстрирован данный метод. Этот метод передачи данных считается наиболее надежным методом цифровой модуляции и используется для беспроводной связи на большие расстояния, в том числе в сотовой связи. Подробнее здесь.

QPSK – квадратурная фазовая манипуляция

Это метод цифровой фазовой модуляции PSK. QPSK более эффективно использует полосу пропускания, поскольку каждая точка сигнала представляет два бита. В отличие от BPSK этот метод использует фазовые сдвиги, кратные уже 90 градусам. То есть за каждое изменение фазы сигнала мы можем передать не 1 бит, а целых два: 00, 01, 10, 11. То есть этот метод имеет вдвое большую пропускную способность, чем BPSK. Он более надежен по сравнению с другими методами модуляции, кроме BPSK. Подробнее здесь.

QAM – квадратурная амплитудная модуляция

Это метод цифровой модуляции представляет собой комбинацию методов амплитудной и фазовой модуляции. QAM использует концепцию двух частот сигнала; один, смещенный на 90 градусов относительно другого, может передаваться на той же несущей. Для QAM каждая несущая модулируется ASK/PSK. Следовательно, символы данных имеют разные амплитуды и фазы. Подробнее здесь.

Есть еще целая куча достаточно методов модуляции, но рамках данной статьи нам они будут совсем не интересны. Да даже BPSK/QPSK/QAM, в общем-то не нужны. Но если вы желаете “углубить и расширить” свои познания, можете воспользоваться тем же ресурсом, которым пользовался я, либо любым аналогичным. А мы переходим к способам кодирования информации.

Передача двоичных данных по радиоканалу

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

Большинство самых простых и дешевых пультов, датчиков движения, дыма и прочая-прочая работают с использованием модуляции ASK/ООК. То есть любое передающее устройство может передавать в эфир только “единицы” (так как “нули” это и есть отсутствие передачи). В простейшем случае этого вполне достаточно: есть сигнал с датчика, значит он сработал. Нет – все тихо сидим на попе ровно . Нужно два датчика – немного изменяем частоту передатчика и добавляем еще один приемник (на другую частоту). Но когда датчиков много, это становится очень накладно – ведь приходится иметь некоторое множество приемников и передатчиков на разные частоты. Ерунда выходит.

Для того, чтобы обеспечить передачу цифровых данных от некоторого множества источников радиосигнала на одной и той же частоте применяется кодирование, а по сути еще одна модуляция. Только на этот раз не логические уровни превращаются в радиосигнал, а цифровые данные превращаются в последовательность импульсов. Кодирование реализовано достаточно просто – примерно по тому же самому принципу сканируются одномерные штрихкоды в магазине. И по тому же самому принципу работает передача данных по любым другим однопроводным шинам передачи данных, например One Wire или Single Bus.

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

Видите разницу? А она есть!

  • PWM – широтно-импульсная модуляция (всем известный ШИМ). ШИМ кодирует данные, отправляя короткий импульс, затем длинную паузу или длинный импульс, а затем короткую паузу. В зависимости от используемого протокола одно означает единицу, другое – ноль. Обратите внимание, что общая длина каждой передачи имеют фиксированное значение, которое может изменяться в зависимости от протокола.
  • PPM – позиционно-импульсная модуляция (ППМ). PPM кодирует данные, отправляя импульс фиксированной длины, затем короткую или длинную паузу перед отправкой следующего импульса: короткий период означает ноль, длинный означает единицу (или наоборот, в зависимости от используемого протокола). Обратите внимание, что длина импульса всегда постоянна, а вот паузы между ними имеют разную длину.

Но и это еще не всё! На следующем уровне, “выше” физического уровня ASK/ООК и канального уровня PWM/PPM, в дело вступают протоколы передачи данных.

Протоколы (способы) передачи данных

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

Протоколов передачи данных производители разных устройств напридумывали ой как много. Даже в рамках одного и того же формата передачи данных (PWM или PPM) они могут существенно отличаться друг от друга, что делает их не всегда совместимыми друг с другом. Например погодные датчики от одной метеостанции могут не работать с другой, даже если используется та же частота и тот же формат передачи данных (вид “верхней” модуляции, назовем это так). Например просто потому, что длительность и форма импульсов выбрана другой. Различные любители зачастую тоже изобретают свои личные алгоритмы и протоколы передачи, что так же не вносит никакой ясности.

Для самых простых и популярных случаев (среди китайской продукции) протокол будет выглядеть примерно так:

  • Каждый пакет данных начинается со “стартового” импульса заданной длительности, затем идет пауза для того, чтобы приемник успел приготовиться к приему данных
  • “Единицы” и “ноли” кодируются импульсами разной длительности и периода следования
  • После передачи пакета определенной длины обычно идет достаточно длинная пауза, а затем передача несколько повторяется для исключения ошибок

В качестве примера отлично подойдет описание протокола в довольно известной библиотеке rc-switch:

  • минимальная длина передачи в миллисекундах, принимаемая за базовую условную единицу (УЕ)
  • стартовый сигнал – два значения: длительность передачи и длительность паузы в УЕ
  • двоичная единица – два значения: длительность передачи и длительность паузы в УЕ
  • двоичный ноль – два значения: длительность передачи и длительность паузы в УЕ
  • инверсия полезного сигнала (используется или нет)

Таким образом можно описать и PWM и PPM модуляцию.

< 350, < 1, 31 >, < 1, 3 >, < 3, 1 >, false >
  • Минимальная длина импульса на выходе передатчика – 350 микросекунд
  • Каждая передача начинается с импульса 1*350 мкс, затем идет пауза 31*350 мкс, общая длительность стартовой посылки ~ 32*350 = 11,2 миллисекунд
  • Каждый полезный бит информации передается одним включением передатчика. Если длина передачи в три раза меньше длины паузы, то это означает, что мы приняли двоичную единичку, если наоборот – ноль.
  • Инверсия данных не используется.

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

В рамках данной статьи я не имею никакой возможности рассматривать все протоколы, но есть отличный ресурс, где можно найти описание протокола передачи данных для нужного вам девайса: https://github.com/merbanan/rtl_433

Кодирование передаваемых данных

Ок, с принципами передачи цифровых данных через канал связи ASK/ООК мы с вами в первом приближении ознакомились. Поток сознания цифр передавать условно можем и даже так же условно можем их принять. Но что нам дают эти цифры (код)? Далее в дело вступает кодирование более высокого уровня. Здесь так же существует множество вариантов, и делается это в первую очередь не для того, чтобы усложнить нам с вами (т.е. пользователям и потребителям) жизнь, а для того, чтобы лучше защитить канал передачи данных усложнить жизнь различным кулхацкерам. Рассмотрим некоторые из самых известных:

  • В самом простом случае передатчик всегда передает один и тот же фиксированный код, который “прошит” в его внутренней памяти. Либо постоянную часть кода (адрес) плюс некую переменную (данные). Так работает подавляющее большинство простейших радиопультов, датчиков протечек, дыма и т.д. В датчиках температуры вместо кода передается адрес, номер канала и данные об метеоусловиях. Но все передается “в открытом виде” – такие пакеты легко перехватить, расшифровать и “задавить” помехами с помощью другого приемника и (или) передатчика. Для брелоков управления различают версии с “прошитым” кодом-адресом и “обучаемые”, то есть адрес которых может изменить сам пользователь.
  • Если требуется большая защита канала связи, то можно применить “плавающий код”. В этом случае кодовая посылка изменяется на основе предыдущего кода по определенному алгоритму, известному и передатчику, и приемнику. Но неизвестному хакеру. Но в этом случае возможна “рассинхронизация” приемника и передатчика, да и алгоритм преобразования можно подобрать, перехватив достаточно большое количество кодов. Именно поэтому на некоторых типах автосигнализаций, если приемник перестал реагировать на команды с пульта, необходимо зажать кнопку на пульте на длительное время – пульт переберет весь цикл изменений и приемник получит возможность вновь синхронизироваться.
  • В ещё более сложных устройствах (например в автомобильных сигнализациях с обратной связью) может применяться диалоговый способ передачи: в этом случае и в пульте, и в автомобиле есть и приемник и передатчик; а при каждом сеансе связи они обмениваются зашифрованными данными друг с другом. В этом случае обмен данными осуществляется по всем шпионским правилам, с использования ключей шифрования и прочих премудростей. Зато надежно.

Как ни крути, вся эта мешанина форматов, протоколов и кодировок только усложняет нашу с вами “программистскую” работу с радиоканалами. А что делать? Не переживайте – в большинстве случаев китайская промышленность использует простые протоколы и передает код в открытом виде. Безусловно, безопасность использования таких брелоков и сенсоров в охранных системах вызывает большие сомнения. Но большинство готовых китайских GSM-сигнализаций, которые можно найти на Ali и в наших магазинах, ничтоже сумняшеся используют такие сенсоры и для охранных подсистем. Не надежно, конечно, но зато очень дешево. И ничего, очень даже пользуются спросом у населения. Обзор одной такой сигнализации есть и на моем сайте.

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

Эти же датчики я использовал и в своем проекте “Термостат + ОПС“, но стараюсь использовать радиоканал только для инженерных датчиков – протечки, задымления и т.д.. Конечно же, никто не запрещает использовать и пульты и датчики движения, там более что их продается много, но перехватить, подавить и подделать такие сигналы особого труда не составляет, даже воспользовавшись банальной самоделкой на arduino. А подавлять и имитировать сигналы для инженерных датчиков особого смысла как бы не имеет.

Во всех этих дешевых сенсорах может использоваться разные протоколы, но при этом формат передачи один и тот же: общая длина передачи составляет всего 24 бита, из них:

  • 20 бит отведено под индивидуальный адрес передатчика
  • 4 последних бита отведено под полезную нагрузку (значения от 0x00 до 0x0F), например это может быть факт срабатывания датчика, номер нажатой на брелоке кнопки или состояние батареи.

Если посчитать длительность передачи одной кодовой посылки, то для примера протокола, приведенного выше, то получим:

  • стартовый бит – 32*350 мкс = 11,2 миллисекунд
  • 24 бита, длительность каждого 4 * 350 мкс = 1400 мкс, что в сумме составит 33,60 миллисекунд

В сумме одна посылка составит 44,8 мс, затем следует небольшая пауза и посылка повторяется 3-5 раз. То есть на всю передачу обычно уходит от 50 до 250 мс, в зависимости от количества повторов передачи. Пульты управления (брелоки) так они вообще повторяют посылку все время, пока нажата кнопка на пульте.

Например возьмем пульт управления (брелок):

  • адрес – 0x0000D3A8 (к примеру, у разных пультов они разные)
  • кнопка 1 – 0x01 (последний бит)
  • кнопка 2 – 0x02 (предпоследний бит)
  • кнопка 3 – 0x04 (пред-предпоследний бит)
  • кнопка 4 – 0x08 (пред-пред-предпоследний бит)

Как видите, этим кодом можно передать нажатие любой комбинации из 4 кнопок одновременно.

Иногда полезный сигнал кодируется сразу несколькими битами (но в пределах того же общего протокола передачи). Например вот достаточно “продвинутый” датчик движения с радиоканалом:

  • адрес – 0x0003153C (к примеру)
  • 0x00 (пустая посылка, только адрес) – включение датчика (вставили батарейки или нажали кнопку активации)
  • 0x03 (установлено 2 бита: 0x01 и 0x02 ) – tamper или попытка вскрытия датчика
  • 0x06 – обнаружено движение в зоне контроля
  • 0x0D – низкий уровень заряда батарей, замените плиз

Разные производители используют разные коды команд (полезных данных), не совместимые друг с другом. В последующих статьях я постараюсь рассказать о некоторых из них, с которыми мне удалось лично пообщаться.

На этом с микро-“теорией” передачи стоит уже завязывать, и давайте уже определимся с электронной составляющей: модулями приемников.

Модули для приема радиосигналов

Для разработчиков Arduino-устройств (и ESP8266 / ESP32 конечно же) доступны достаточно большое множество готовых радиомодулей для организации беспроводной связи по различным технологиям и в различных частотных диапазонах. Для получения данных с пультов и датчиков нам интересен только модуль приемника, но очень часто они продаются комплектами, поэтому в таблице они приведены парами. Приемник обозначен символами RX, передатчик соответственно – TX. Все модули можно купить на известной китайской площадке.

MX-FS-03V (или FS1000A) (TX)

MX-RM-5V (RX)

ASK/ООК 433,90 MHz -105 dB

WL102-341 (TX)

WL101-341 (или RX470-4) (RX)

ASK/ООК 433,92 MHz -108 dB

RX500-4 (RX)

ASK/ООК 433,92 MHz -107 dB

SYN115 (TX)

SYN480R (RX)

ASK/ООК 433,92 MHz -107 dB

H34B (TX)

H3V4F (RX)

ASK/ООК 433,92 MHz -102 dB

H34A (TX)

H5V4D (RX)

ASK/ООК 433,92 MHz -102 dB

RXB6 (RX)

ASK/ООК 433,92 MHz -116 dB

RXB8 (или ZRW8K) (RX)

ASK/ООК 433,92 MHz -114 dB

RXB14 (RX)

ASK/ООК 433,92 MHz -115 dB
  1. В таблице указана только небольшая часть предлагаемых в поднебесной модулей радиоприемников на 433 МГц. Я не в состоянии прошерстить весь али и впихнуть сюда все возможные варианты. При выборе ориентируйтесь в первую очередь на совместимость с вашим микроконтроллером по питанию и выходным уровням.
  2. Характеристики, приведенные в таблице – заявленные, то есть взяты со страниц товара. Реальные характеристики могут отличаться от заявленных.
  3. В таблице приведены только “чистые” модули (без встроенных кодировщиков). В этом случае все “обязанности” по кодированию и декодированию сигнала возлагаются на микроконтроллер и программиста (или библиотеку). Но можно легко приобрести модули с встроенной микросхемой кодирования / декодирования сигнала, которая будет излучать в эфир уже закодированный сигнал, и принимать, соответственно, только “свой” код.

Лично я пользовался только MX-RM-5V, RX470-4 и SYN480R. Что могу сказать из лично своего опыта.

  • MX-RM-5V модуль пятивольтовый, и с ESP32/8266 работает крайне неохотно (оно и понятно, питания не хватает).
  • RX470-4 отказался принимать сигнал уже в нескольких метрах от датчика (может брак попался?).
  • SYN480R – у меня работают отлично, я ими очень доволен. Компактный и чувствительный модуль, в настройке не нуждается. И это при трех вольтовом питании. При должной развязке от МК ловит сигнал более чем за 100 метров от приемника (хотя на таком расстоянии иногда бывают ошибки в принимаемых данных).

Подключение приемника к микроконтроллеру

Во-первых, к любому приемнику необходимо подключить антенну к выводу, обозначенному как ANT. Для простейшей антенны типа “полуволновой вибратор” длина должна составлять 14233/433,92 = 32.9 см. Можно также сделать “четверть-волновой вибратор”, тогда его длина должна быть всего 16,5 см (но чувствительность будет несколько хуже). Провод можно скрутить в спираль.

А можно просто взять и купить готовые китайские “спиральки” на 433 МГц, иногда они идут в комплекте с самим приемником. Они довольно компактны, но зачастую плохо паяются.

Подключение к микроконтроллеру зависит от напряжения питания оного. Если напряжение питания приемника соответствует напряжению питания микроконтроллера, то ничего согласовывать не требуется. То есть в простейшем случае просто соединяем выход приемника DO / DATA / Data Out напрямую к микроконтроллеру без каких либо подтяжек и резистивных делителей.

Схема 1. МК и его GPIO выбраны весьма условно. Вы вольны использовать другой по своему усмотрению и datasheet-у на МК

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

Схема 2. Вывод GPIO и номиналы резисторов выбраны условно. Их можно изменять в некоторых пределах, соблюдая пропорции.

А вот с питанием приемников 433 МГц все немного интереснее. Любой микроконтроллер – это источник радиопомех в довольно широком диапазоне частот. В том числе, эти помехи могут проникать на приемник и по шинам питания. То есть для достижения максимальной чувствительности нам очень желательно “развязать” по питанию микроконтроллер и приемник (простое добавление фильтрующих конденсаторов зачастую не решает проблему). Как это сделать? С помощью отдельного стабилизатора, конечно же! Если ваш приемник допускает питание 3,3В, то я рекомендую вам использовать такую вот схему:

Схема 3. Вывод GPIO и стабилизатор выбраны условно. Можно использовать другие компоненты

Допустим я имею страстное желание подключить SYN480R к ESP32 или ESP8266. Поскольку SYN480R может работать при напряжении питания от 3.3 до 5.5В у меня есть три варианта:

  • Схема 1. Запитать приемник с вывода 3V3 какой-нибудь платы ESP32-DevKit (при её использовании), используя тот же самый стабилизатор, от которого питается и сам микроконтроллер. Помехи имеют место быть, дальность связи снижается. Но для опытов сгодится и так.
  • Схема 2. Запитать приемник от 5В, подаваемых плату ESP32-DevKit, а выход приемника подключить к ноге ESP через делитель. В этом случае приемник будет частично развязан от МК через внутренний стабилизатор платы ESP32-DevKit. Не забудьте про фильтрующие конденсаторы.
  • Схема 3. Поставить на приемник “свой собственный” стабилизатор 3,3В. Поскольку ток потребления приемника весьма небольшой, достаточно будет какого-нибудь дешевого L78L33. В этом случае помехе будет еще сложнее добраться с МК до приемника.

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

Программная реализация

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

Если вы создаете свое устройство на базе Arduino – микроконтроллеров или ESP8266, то проще всего воспользоваться уже готовой и проверенной библиотекой rc-switch. На данный момент она поддерживает 12 протоколов передачи данных. Примеры использования есть на github:

#include RCSwitch mySwitch = RCSwitch(); void setup() < Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2 > void loop() < if (mySwitch.available()) < Serial.print("Received "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); mySwitch.resetAvailable(); >>

Для ESP32 и ESP-IDF я немного переделал её реализацию под ESP-IDF (ссылка кликабельна, можете пользоваться совершенно бесплатно). Формально, исходная библиотека должна нормально работать и на ESP32 (я давно не проверял). Моя версия полностью адаптирована под ESP32, но только для ESP-IDF, так как для настройки GPIO и прерываний используются специфичные для ESP-IDF функции. Как и для измерения интервалов времени. Из существенных изменений только одно: кроме адаптации я добавил отправку полученного кода (после приема всей посылки) в некую “входящую” очередь для последующей обработки через вызов xQueueSendFromISR() (потом другая задача, которая “занимается” обработкой входных данных по входам сигнализации, получает этот код из очереди и обрабатывает его).

if (rxDetectProtocol(i, cntChanges)) < // receive succeeded for protocol i, post data to external queue QueueHandle_t queueProc = (QueueHandle_t)arg; if (queueProc) < input_data_t data; data.source = IDS_RX433; data.rx433.protocol = i; data.rx433.value = rx433_GetReceivedValue(); data.count = rx433_GetReceivedBitLength(); // reset recieved value rx433_ResetAvailable(); // we have not woken a task at the start of the ISR BaseType_t xHigherPriorityTaskWoken = pdFALSE; // post data xQueueSendFromISR(queueProc, &data, &xHigherPriorityTaskWoken); // now the buffer is empty we can switch context if necessary. if (xHigherPriorityTaskWoken) < portYIELD_FROM_ISR(); >; > else < // reset recieved value rx433_ResetAvailable(); >;

Ну и немного переделал её под себя “по вкусу”. Какую версию используете вы – решать только вам.

Ну а на этом, пожалуй стоит завершить данное повествование. В дальнейшем планирую сделать мини-обзор беспроводных датчиков и брелоков, которые подходят под описание в данной статье. Ну а уже затем сможем закрепить полученные знания, продолжив серию статей “Термостат + ОПС“, завершив её рассказом про охранно-пожарную подсистему.

Разрешите откланяться, ваш Александр aka kotyara12.

Если Вам понравилась статья – кликните на рекламное объявление, этого будет вполне достаточно для поддержки автора. Вам это ничего не стоит, а мне – приятно. Здоровья и успехов в творчестве.

Открытый проект беспроводной системы сбора данных на модулях 433 МГЦ

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

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

Состав, назначение и характеристики системы

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

Описание радио сенсора

Схема радио сенсора

Микроконтроллер DD1 программируется на плате через разъем X2. К разъему X3 может непосредственно подключаться PC через интерфейс RS232. Большинство настольных компьютеров будет работоспособно с такой схемой. Кнопки BT1 и BT2 подают сигнал на цифровые входы радио сенсора. Контакты 23. 28 микроконтроллера DD1 служат аналоговыми входами. Перемычками J1. J3 задаётся номер радио сенсора в сети. Для корректной работы все радио сенсоры в сети должны иметь разные номера. Светодиод VD4 зажигается в моменты передачи радио пакетов. В режиме настройки параметров светодиод непрерывно мигает. Радио сенсор работает от кварцевого резонатора частотой 16 МГц. Такая частота выбрана для технологического удобства. Для улучшения энергетических параметров радио сенсора частота кварцевого резонатора должна быть уменьшена. Этого можно добиться небольшими изменениями в программе. Без значительных трудностей с профайлингом программы на C можно уменьшить частоту до 4 МГц.

Принцип работы радио сенсора

Радио сенсор построен на основе микроконтроллера ATMEGA8 и модуля передатчика TX433N. К радио сенсору может быть подключена локальная проводная сеть датчиков с интерфейсом 1-Wire. В данной версии радио сенсора на 1-Wire шину подключаются температурные датчики DS18S20. Это цифровые датчики с точностью ±0.5°C и диапазоном измерения -55°C to +125°C, производимые фирмой Maxim Integrated Products, Inc. Шина 1-Wire может объединять множество датчиков, образуя сеть. Программа радио сенсора в момент его включения способна идентифицировать все 1-Wire устройства, подключенные в эту шину. Но в текущей версии обрабатываются данные только c температурных датчиков. В общем случае для 1-Wire шины разработано большое количество разнообразных устройств, включающих: аналогово-цифровые преобразователи, цифровые потенциометры, часы реального временя, различные типы памяти и известные под маркой iButton® электронные ключи.

Радио сенсор способен также измерять и передавать значение напряжения со встроенных аналоговых входов. Аналоговые входы рассчитаны на диапазон входного напряжения 0. 10 В и входное сопротивление не менее 10 КОм. Аналоговые входы имеют разрешение 10 бит и могут использоваться для подключения датчиков с аналоговыми и цифровыми выходами по напряжению. Для обеспечения точности измерения радио сенсор снабжен функцией калибровки аналоговых входов.

Для универсальности приложений радио сенсоры выполнены так, что могут питаться от внешнего источника напряжения или от автономного источника напряжением 3.6. 5 В с очень малым потреблением энергии.

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

Поскольку в радиосети может работать одновременно несколько передатчиков, то во избежание конфликтов связанных с одновременной синхронной передачей пакетов разными радио сенсорами применен способ случайного генерирования длительности пауз между периодами активности в радио сенсорах. Для этого в радио сенсорах применяется программный генератор случайных чисел (ГСЧ). Разное время включения радио сенсоров обеспечивает достаточно хорошую рандомизацию ГСЧ, но для усиления рандомизации применен способ формирования начальной комбинации ГСЧ на основе уникального кода первого обнаруженного датчика DS18S20 в сети 1-Wire.

Для сосуществования сети радио сенсоров вблизи других аналогичных сетей (например, в многоквартирном доме) реализовано кодирование передаваемых пакетов на основе 4-байтного ключа с помощью криптоалгоритма RC4. Приемник другой радиосети, не зная ключа не может случайно или намерено принять и расшифровать пакеты выдаваемые радио сенсорами соседней сети.

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

Радио сенсоры в сети идентифицируются по своим номерам, которые передаются в каждом пакете. Номер задаётся перемычками на плате радио сенсора. В сети может быть до 8-и радио сенсоров.

Для мгновенной активизации в ответ на некоторые события радио сенсоры снабжены двумя цифровыми входными линиями. При спаде сигнала на какой-либо из цифровых линий ниже 1.5 В радио сенсоры входят в рабочее состояние и сразу же начинают передачу сигнала с информацией о состоянии этих линий. Центральный приемник в ответ на принятое сообщение без задержек способен дать соответствующий сигнал внешнему исполнительному устройству. Используя эту возможность, можно построить, например, удобную систему управления освещением на беспроводных автономных выключателях.

У радио сенсора ряд параметров может быть изменен с компьютера или другого устройства через встроенный последовательный интерфейс. Параметры можно изменить временно только в ОЗУ микроконтроллера радио сенсора до следующего включения, либо сделать новые параметры постоянными с сохранением их в EEPROM микроконтроллера.

При редактировании параметров применяется простой протокол командной строки поддерживаемый всеми программами для PC типа HyperTerminal.

При включении радио сенсора программа микроконтроллера проверяет целостность данных в EEPROM с помощью механизма контрольной суммы и в случае сбоя возвращает параметры в состояние по умолчанию.

Технические характеристики радио сенсора версии 1.0:

  • Напряжение питания номинальное: 5 В
  • Ток потребления в активном режиме: 27 мА
  • Ток потребления в пассивном режиме: 64 мкА
  • Выходная мощность радиопередатчика: 10 мВт
  • Частота работы радиопередатчика: 433.92 МГц
  • Пределы регулировки скорости передачи: 100. 2000 бит/с
  • Тип кодирования при передаче радио пакетов: Манчестер
  • Длина пакетов (фиксированная): 11 байт
  • Длина преамбулы: 2 байта
  • Максимальное количество устройств на шине 1-Wire: 4
  • Количество аналоговых входов: 6
  • Диапазон напряжения на аналоговых входах: 0. 10 В
  • Входное сопротивление аналоговых входов: 10 кОм
  • Скорость работы последовательного интерфейса: 115200 бит/с
  • Формат данных последовательного интерфейса:8, n,1
  • Диапазон номеров радио сенсоров: 0. 7
  • Температура эксплуатации (оценочно): -20. +50 °C
Регулируемые параметры радио сенсора и их значения по умолчанию

Мнемоника в протоколе

Значение по умолчанию

WDTPER

Установка пред-делителя сторожевого таймера (WDT) микроконтроллера ATMEGA8. Определяет с какой частотой происходит активизация микроконтроллера.
Возможные значения задания периода активизации:
0: 16 мс,1: 32 мс, 2: 65 мс, 3: 0.13 с, 4: 0.26 с, 5: 0.52 с, 6: 1 с, 7: 2.1 с

WDTDVC

Определяет какая по счету активизация сторожевого таймера вызовет процедуру считывания датчиков и посылки радио пакета. После выполнения процедуры считывания-отправки счет начинается заново. Допускаются значения от 0 до 255.

WDTDVV

Максимальная величина вариации. Вариация — это случайное целое число, добавляемое к WDTDVC после каждой активизации процедуры считывания-отправки при расчете реального числа активизаций WDT до следующей процедуры считывания-отправки. Допускаются значения от 0 до 255.

BTRATE

Величина, определяющая скорость передачи радио пакетов. Равна числу тактов осциллятора, формирующих интервал в половину бита. В версии 1.0 частота осциллятора равна 16 МГц. Допускаются значения от 4000 до 65535. Величина 16000 означает скорость передачи 500 бит/с.

SFLAGS

Системные флаги. При представлении в двоичном виде начиная счет справа налево:
0-й бит – единица означает отключение посылки информации о состоянии аналоговых входов
1-й бит – единица означает отключение посылки информации с температурных датчиков
3-й бит – единица означает отключение реакции на цифровые входы
4-й бит – указывает, что вместо кода состояния 1-го аналогового канала будет передаваться калибровочная константа АЦП

PREAMB

0xD9C2

Код преамбулы. Изменением кода преамбулы можно усилить защиту от влияния соседних сетей. Изменять можно только на специальные рассчитанные значения

REFCOD

Калибровочная константа АЦП

KEYCOD

Ключ шифрования для алгоритма RC4. Должен быть идентичен ключу приемника

При редактировании параметров радио сенсора через терминал компьютера можно использовать следующие команды (Все команды должны заканчиваться нажатием клавиши “ENTER”):

Символы команды

Описание действия

[Мнемоника]= [новое значение]

Редактирование параметра. Новое значение может быть введено в десятичном или шестнадцатеричном виде (с префиксом 0x)

Вызов значений всех рабочих параметров из RAM

Сохранить параметры в EEPROM из RAM

Восстановить параметры из EEPROM в RAM

Восстановить параметры по умолчанию в RAM

Показать номер радио сенсора

Выйти из режима редактирования

Показать результаты измерения всех аналоговых каналов

Калибровка АЦП радио сенсора заключается в том, что в его специальный параметр REFCOD записывается код преобразования АЦП для известного входного напряжения.

Например, можно подать на аналоговый вход 1 радио сенсора напряжение 2.5 В. Определить код АЦП можно по команде “^”. Код первого входа будет в первой строчке списка. Необходимо этот код записать в параметр REFCOD. Далее этот код может быть передан в пакете с данными на центральный приемник. (см. параметр SFLAGS). Таким образом устройства принимающие данные от радио сенсоров могут провести корректировку полученных значений в соответствии с калибровочным кодом каждого радио сенсора.

Оптимизация энергопотребления радио сенсора.

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

После подачи питания микроконтроллер выполнив начальные инициализации и отправив первые пакеты с данными входит в режим Power-down. В этом режиме прекращается работа кварцевого генератора и останавливается тактирование внутреннего процессора и периферии, но продолжает работать внутренний RC генератор WDT. Генератор WDT потребляет некоторый ток, который является доминирующим током в потреблении радио сенсора в выключенном состоянии.

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

Через некоторое время WDT выдает сигнал включающий кварцевый генератор и активизирующий процессор. Для стабилизации генератора схемой микроконтроллера делается задержка около 5 мс. В это время ток потребления радио сенсора значительно увеличивается.

Результат измерений тока потребления радио сенсора в момент активизации WDT

Чаще всего радио сенсор должен находиться в выключенном режиме гораздо дольше чем период следования сигналов активизации от WDT. Для этого в программе реализован счетчик включений по достижении определенного значения, которого программа инициирует рабочий цикл радио сенсора, а иначе программа сразу же переводит микроконтроллер опять в режим Power-down. Контрольное значение счетчика пересчитывается программой по определенному алгоритму после каждого рабочего цикла.

Результат измерений тока потребления радио сенсора в рабочем цикле

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

Установкой рабочих параметров можно увеличить скорость передачи пакетов и уменьшить их количество. Но увеличивать скорость выше 1000 бит/с не рекомендуется из-за возможного ухудшения качества связи. По экспериментальным данным при скорости 500 бит/с и отправке одного пакета длительность рабочего цикла равнялась 0.215 сек.

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

Модуль передатчика в выключенном состоянии практически не вносит никакого влияния, а в режиме передачи потребляет 5. 8 мА при напряжении питания 3.6..5 В соответственно. Опираясь на представленные данные, можно легко вычислить необходимую емкость элемента питания для автономной работы радио сенсора заданное время. Так, например, при напряжении питания 3.6 В и активизации радио сенсора каждые 30 сек. на 0.215 сек емкости литиевой батарей фирмы Tadiran размера AA будет достаточно для непрерывной работы радио сенсора в течение 555 дней.

Еще лучшие энергетические параметры может дать снижение частоты кварцевого резонатора до 4 МГц. Снижение частоты ниже 4 МГц не приведет к существенной экономии потребления поскольку здесь уже будет доминировать ток радио передатчика

Описание центрального приемника

Схема центрального приемника

Центральный приемник построен на основе приемного модуля RX433. Модуль RX433 построен по 2-х транзисторной сверхрегенеративной схеме с компараторам на основе операционного усилителя LM358. Чувствительность модуля равна -106 dBm, это равно приблизительно 1 мкВ при 50 Ом антенне. Полоса захвата сигнала равна 1 МГц. Экспериментальные измерения показали, что модуль способен принимать данные со скоростью до 10 кбит/c.

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

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

В случае прихода радио пакетов с информацией от цифровых входов радио сенсоров микроконтроллер переключает состояние ключей VT2, VT3 в случае, если в радио пакете выставлен в единицу бит первого и второго входов соответственно (соответствует нажатию кнопок BT1 и BT2 на макете радио сенсора).

Светодиод VD1 зажигается в момент приема и обработки принятого радио пакета.

К разъему X3 подключается внешнее устройство через интерфейс RS232 для съема данных с центрального приемника по протоколу MODBUS в режиме ASCII. Также к нему может подключаться компьютер для настройки рабочих параметров.

Микроконтроллер центрального приемника так же, как и микроконтроллер радио сенсора программируется на плате через разъем X2

Принцип работы центарального приемника

Задача центрального приемника (ЦП) — непрерывно вести прием поступающих по эфиру от удаленных радио сенсоров пакетов, размещение информационного содержания из них в своей внутренней памяти и по запросу от внешних устройств выдача накопленной информации по последовательному интерфейсу. В случае поступления пакетов с информацией о состоянии цифровых входов радио сенсоров ЦП немедленно переключает состояние своих двух соответствующих цифровых выходов.

ЦП снабжен алфавитно-цифровым ЖК-индикатором. В данной версии приемника индикатор используется для тестирования.

ЦП взаимодействует с внешними устройствами по сокращенной версии протокола MODBUS в качестве подчиненного устройства в режиме ASCII.

Как и радио сенсор ЦП позволяет модифицировать некоторые свои рабочие параметры через последовательный интерфейс с компьютера. Рабочие параметры также имеют значения по умолчанию, восстанавливаемые в случае сбоев во внутренней памяти EEPROM микроконтроллера.

При нормальной работе ЦП по последовательному интерфейсу обрабатывает пакеты MODBUS, в случае поступления символа ESC (шестнадцатеричное число 0x1B), например, из программы HyperTerminal, ЦП переходит в режим редактирования параметров. Выход из режима также по приходу символа ESC.

ЦП обрабатывает только одну функцию протокола – 03 (чтение 2-байтных регистров).

Структура принимаемого ЦП пакета по протоколу MODBUS в режиме ASCIIИнтерпретация полей блока данных функции 3

При запросе данных из ЦП внешнее устройство должно использовать функцию 3 протокола MODBUS. С помощью этой функции устройство может прочитать содержимое 3-х массивов: массива идентификаторов температурных датчиков DS18S20, массива значений температуры с температурных датчиков, массива состояний аналоговых входов с радио сенсоров.

Интерпретация полей блока данных при запросе выполнения функции 3 внешним устройством показана на рисунке выше. Первые два символа кодируют тип данных, т. е. элемент какого из 3-х массивов требуется прочитать. Символы 3-й и 4-й задают 1-й и 2-й индексы двумерного массива с данными. 1-й индекс задает номер радио сенсора, 2-й – номер температурного датчика или номер аналогового входа. Индексация начинается с нуля.

Принята следующая кодировка поля типа данных:

  • 1 — идентификаторы температурных датчиков
  • 2 — значения температуры с температурных датчиков
  • 3 — значения с аналоговых входов (АЦП) удаленных датчиков

Поле “количество читаемых регистров” должно иметь значение 1 при чтении температуры и значений АЦП поскольку они выражаются 2-байтными величинами значение 3 при чтении идентификаторов так как они состоят из 6-и байт.

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

Значения АЦП представляются также в формате с младшим байтом впереди.

Идентификаторы представлены 6-ю байтами вместо 8-и, которые обычно выдаются 1-Wire устройствами. Отбрасываются кода семейства устройств и контрольная сумма.

Пример команды запроса чтения внешним устройством значения 1-го аналогового входа 0-го радио сенсора:

:010303000001B8

Регулируемые параметры ЦП и их значения по умолчанию:

Мнемоника в протоколе

Значение по умолчанию

BTRATE

Величина, определяющая скорость передачи радио пакетов. Равна числу тактов осциллятора, формирующих интервал в половину бита. В версии 1.0 частота осциллятора равна 16 МГц
Допускаются значения от 4000 до 65535. Величина 16000 означает скорость передачи 500 бит/с

PREAMB

0xD9C2

Код преамбулы. Изменением кода преамбулы можно усилить защиту от влияния соседних сетей. Изменять можно только на специальные рассчитанные значения

KEYCOD

Ключ шифрования для алгоритма RC4. Должен быть идентичен ключу приемника

DEVADR

Адрес устройства в протоколе MODBUS

При редактировании параметров центрального приемника через терминал компьютера можно использовать следующие команды (Все команды должны заканчиваться нажатием клавиши “ENTER”):

Символы команды

Описание действия

[Мнемоника]= [новое значение]

Редактирование параметра. Новое значение может быть введено в десятичном или шестнадцатеричном виде (с префиксом 0x)

Вызов значений всех рабочих параметров из RAM

Сохранить параметры в EEPROM из RAM

Восстановить параметры из EEPROM в RAM

Восстановить параметры по умолчанию в RAM

Выйти из режима редактирования

Программное обеспечение и программирование микроконтроллеров

Проекты программ радио сенсора и центрального приемника, находящиеся в репозитарии, написаны на С для среды разработки IAR Embedded Workbench.

Для бесплатного скачивания на сайте фирмы IAR помимо прочих доступна 30-дневная оценочная версия среды разработки IAR Embedded Workbench для AVR. Ее возможностей хватает чтобы скомпилировать приведенные проекты

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

  • General options
    o Processor configuration = ATmega8
    o Memory model = small
    o System configuration = no use dialog
    o Library Configuration = CLIB
    o Printf formatter = medium
    o Scanf formatter = medium
  • C/C++ compiler: o Optimization = Size, High, all optimizations enabled
  • Linker
    o Output format = Other, Intel Standart
    o Linker command file = [текущая директория проекта] \lnkm8s.xcl

После компиляции в поддиректории проекта debug\exe\ появляется HEX-файл Proj.a90 с образом исполняемой программы для загрузки в микроконтроллер.

Для программирования микроконтроллеров используется программа и очень простое аппаратное приспособление с сайта http://www.LancOS.com.

При программировании необходимо внимательно следить за установкой конфигурационных бит микроконтроллера. Они должны быть установлены так как показано на скриншоте. Иначе микроконтроллер в схеме может оказаться неработоспособным. Биты секретности BootLock12. BootLock01 и Lock2, Lock1 могут выставляться по усмотрению. Установки конфигурационных бит в данной версии радио сенсора и центрального приемника одинаковые.

Внешний вид программы PonyProg и панель установки конфигурационных бит

Как устроено декодиривание радио протокола

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

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

  • пакетная передача с фиксированной длиной.
  • обнаружение пакетов и синхронизация на основе кодированной преамбулы.
  • манчестерское кодирование информационных битов.
  • дополнительная выборка (oversampling).
  • точно известная скорость передачи данных.

Фиксированная длина пакетов и известная скорость передачи упрощают структуру декодера и повышают вероятность декодирования данных.

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

Кодированная преамбула позволяет синхронизировать прием и повышает вероятность обнаружения пакетов данных искаженных помехами одновременно снижая вероятность ложного обнаружения пакетов при их отсутствии в условиях непрерывного шумового потока. Преамбула использует NRZ кодировку и передается с вдвое большей скоростью чем информационные биты. Она специально вычислена на основе ряда критериев один из которых — это минимальные побочные максимумы автокорреляционной функции, а другой — это минимальный максимум кросс корреляции на всем множестве возможных двоичных кодов с манчестерским кодированием. Вычисления для 16-битной преамбулы легко выполнить прямым перебором ввиду короткой битовой длины. Здесь дан пример такой утилиты

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

Диаграмма поясняющая принцип действия декодера радио протокола

На рисунке выше изображена диаграмма, поясняющая принцип действия декодера радио протокола. Зеленым цветом обозначен цифровой поток исходящий из модуля приемника RX433. Микроконтроллер ЦП выполняет выборку двоичного сигнала из этого потока со скоростью в 8 раз превышающую скорость передачи битов. Таким образом в течении передачи одного бита микроконтроллер принимает 8 отсчетов сигнала, а в течении времени передачи преамбулы микроконтроллер принимает 64 отсчета.

На начальном этапе в микроконтроллере ЦП непрерывно выполняется процедура корреляции входного потока отсчетов с 64-битным шаблоном преамбулы. Для двоичного сигнала это сумма значений битов получившихся после побитной операции сложения по модулю 2 текущего буфера входных отсчетов и битов шаблона.

В момент, когда значение корреляции достигает некоторой контрольной границы микроконтроллер принимает решение о начале приема битов данных и запускает процедуру вычисления корреляции с шаблоном бита равного 1. В качестве привязки для отсчета битовых интервалов берется точка максимума на корреляционной функции преамбулы после того как она превысила контрольную границу. В конце каждого битового интервала, через каждые 8-мь отсчетов микроконтроллер принимает решение о значении принятого бита. Корреляция больше 3 означает прием единицы, в обратном случае – нуля.

Как видно при приеме бита возможно искажение значений до 3 отсчетов из 8 без возникновения ошибки. Относительная доля искаженных значений отсчетов при приеме преамбуле должна быть меньше поскольку она служит еще и источником синхронизации. В связи с этим оправдано выбирать граничное значение детектирования преамбулы на 5-6 единиц меньше значения ее пика автокорреляции т.е. в данном случае 58-59.

Моделирование декодера радио протокола

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

Модель состоит из трех основных составляющих: модели передатчика, модели канала передачи и модели приемника.

Модель передатчика формирует поток двоичных данных по формату повторяющий поток излучаемый реальным передатчиком. Модель передатчика позволяет легко варьировать такие параметры как количество байт в пакете, количество формируемых пакетов до завершения работы модели, скорость передачи, код преамбулы. Перечисленные параметры можно редактировать в рабочем пространстве (Workspace) MATLAB. Модель может выдавать пакеты как со случайными данными так и с определенными данными заданными в ручную в подсистеме генератора пакетов.

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

Канал передачи имитирует шум наблюдающийся на выходе приемника в паузах и во время приема данных.

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

В модели приемника самым интересным регулируемым параметром является коэффициент дополнительной выборки (oversampling), обозначаемый как переменная k в рабочем пространстве MATLAB. Этот коэффициент означает количество отсчетов в приемнике приходящихся на один бит данных. От его величины в наибольшей степени зависит помехоустойчивость приемника. Поскольку от этого коэффициента зависят вектора (в терминологии MATLAB) шаблонов преамбулы и бита данных а также границы принятия решений, то его непосредственно менять в рабочем пространстве MATLAB нежелательно, для этого нужно поменять соответствующее значение в файле “initmod.m” в директории файлов модели. Указанный файл выполняется всегда при загрузке модели. Он создает в рабочем пространстве MATLAB переменные, и рассчитывает зависимые параметры. После изменении в нем коэффициента дополнительной выборки в командной строке MATLAB нужно выполнить команду initmod.

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

Для запуска модели нужно сделать текущей директорию с файлами модели и в командной строке MATLAB ввести команду “model”.

Дополнительные источники информации:

  • Пример применения оверсэмплинга с чипами Chipcon
  • Протокол MODBUS
  • Спецификация приемника 433 МГц
  • Спецификация передатчика 433 МГц

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *