В сети можно найти массу примеров использования радиомодулей на 433 МГц совместно с Arduino. Обычно эти примеры ограничиваются чем-то вроде «а давайте подключим библиотеку VirtualWire , воспользуемся парой процедур из нее, и опа, все магическим образом работает». Само собой разумеется, меня такое положение дел не устраивает, потому что я хочу знать точно, как эти модули общаются с Arduino, и что именно они передают в эфир. Давайте же во всем разберемся!
Так выглядят классические радиомодули на 433 МГц:
На фото слева находится передатчик, а справа — приемник. Модули осуществляют одностороннюю связь. Для двусторонней потребуется два приемника и два передатчика. На AliExpress комплект из двух передатчиков и двух приемников обойдутся вам в районе 2$ с доставкой, или даже дешевле.
Как ни странно, в пределах одной комнаты модули вполне сносно обмениваются данными без каких-либо антенн. Однако для лучшей работы антенны к ним лучше припаять. В качестве антенны можно использовать медный провод длиной 1/4 длины волны, то есть, в нашем случае, около 17 сантиметров. Это будет так называемая штыревая антенна . В качестве альтернативы можно использовать цилиндрические спиральные антенны . Они существенно короче штыревых антенн (4-15% длины волны), правда и радиус действия у них меньше. Как вы можете видеть по фото, я решил использовать штыревые антенны. Штыревая антенна и цилиндрическая спиральная антенна являются частными случаями монополя .
Fun fact! Существуют другие, но совместимые передатчики на 433 МГц, в частности раз и два . Кроме того, есть и альтернативный приемник . Но он не вполне совместим, так как на выходе всегда выдает какой-то сигнал, независимо от того, осуществляется ли реально сейчас передача, или нет.
Для своих экспериментов я также использовал купленный на eBay пульт от гаража с внутренним DIP-переключателем:
При некотором везении такие пульты все еще можно найти как на eBay, так и на AliExpress по запросу вроде «garage door opener 433mhz with dip switch». Но в последнее время их вытесняют «программируемые» пульты, умеющие принимать и копировать сигнал других пультов. Доходит вплоть до того, что продавцы высылают пульты без DIP-переключателя даже в случае, если он явно изображен на представленном ими фото и указан в описании товара. Полагаться на внешнюю схожесть пульта с тем, что использовал я, также не стоит. Впрочем, если вы решите повторить шаги из этой заметки, наличие или отсутствие DIP-переключателя не сыграет большой роли.
Модули крайне просто использовать в своих проектах:
Как приемник, так и передатчик, имеет пины VCC, GND и DATA. У приемника пин DATA повторяется дважды. Питаются модули от 5 В. На фото слева собрана схема, в который светодиод подключен к пину DATA приемника. Справа собрана схема с передатчиком, чей пин DATA подключен к кнопке и подтягивающему резистору. Плюс в обоих схемах используется стабилизатор LM7805. Проще некуда.
Fun fact! Один из способов угона автомобилей или кражи из них ценных вещей заключается в том, чтобы во время, когда водитель ставит автомобиль на сигнализацию, глушить несущую пульта от сигнализации, те самые 433 МГц. Водитель в спешке может на заметить, что машина не мигнула фарами, и оставить ее без сигнализации. Приведенная выше схема с приемником и светодиодом в сущности является вполне законченным устройством, определяющим, не глушит ли кто-нибудь соответствующие частоты.
При нажатии на кнопку светодиод загорается. Если посмотреть на сигнал, выдаваемый приемником, с помощью осциллографа , он будет выглядеть как-то так:
Вскоре после отпускания кнопки на какое-то время появляется, и затем исчезает, шум. Сказать по правде, мне этот эффект не совсем понятен. Он может возникать в результате дребезга контактов, либо просто потому что модули не рассчитаны на продолжительную передачу постоянного сигнала.
Если же попробовать понажимать кнопки на пульте, светодиод замигает. Осциллограмма при этом будет примерно следующей:
Можно заметить явное соответствие между полученным сигналом, и положением DIP-переключателей в пульте в сочетании с нажатой кнопкой. Это соответствие иллюстрирует следующая табличка, где точка представляет короткий сигнал на осциллограмме, а тире — длинный:
Замочек — — .. — .. .. — .. .. .. .. — .
Вверх — — .. — .. .. — .. .. .. — .. .
Квадратик — — .. — .. .. — .. .. — .. .. .
Вниз — — .. — .. .. — .. — .. .. .. .
Как видите, каждый бит информации передается дважды. К сожалению, на данном этапе нельзя с полной уверенностью сказать, то ли это особенность работы приемника, то ли пульт действительно так передает данные, например, для борьбы с помехами. Понять, что же действительно происходит в эфире, нам поможет Software-Defined Radio. Я лично использовал LimeSDR, но в данном конкретном случае подойдет, пожалуй, любая железка, в том числе и RTL-SDR . Тема SDR ранее подробно рассматривалась в заметке Начало работы с LimeSDR, Gqrx и GNU Radio .
Запишем сигнал при помощи Gqrx и откроем получившийся файл в Inspectrum:
Здесь мы видим такие же короткие и длинные сигналы, что нам показал осциллограф. Кстати, такой способ кодирования сигнала называется On-Off Keying . Это, пожалуй, самый простой способ передачи информации при помощи радиоволн, который только можно вообразить.
Используя GNU Radio, можно пойти чуть дальше, и построить зависимость амплитуды сигнала от времени. Соответствующий проект ( исходники на GitHub ):
Запускаем, и на Scope Plot видим:
Практически такой же сигнал, что нам показал осциллограф!
Как видите, копеечные радиомодули на 433 МГц дают нам огромный простор для творчества. Их можно использовать не только друг с другом, но и со многими другими устройствами, работающими на той же частоте. Можно вполне успешно использовать их в чисто аналоговых устройствах без какого-либо микроконтроллера, например, с таймером 555 . Можно реализовывать собственные протоколы с чексуммами, сжатием, шифрованием и так далее, безо всяких ограничений, скажем, на длину пакета, как у NRF24L01 . Наконец, модули прекрасно подходят для broadcast посылки сообщений.
А какие потрясающие применения этим радиомодулям приходят вам на ум?
Дополнение: Также вас могут заинтересовать посты Наблюдаем за самолетами при помощи RTL-SDR и ADS-B , Декодируем сигнал с OOK-модуляцией и паяем кликер и Изучаем сигналы NRF24L01 с помощью LimeSDR .