Радиомодем за 7 долларов

Wireless technologies
Tutorial
Доброе время суток!
Расскажу я как можно собрать себе радиомодем мощностью 100мВт на 433МГц, по стоимости выходящий примерно на 6-7 долларов. Мощный радиомодем за 200 рублей — заманчиво? Тогда начнём.
Внешний вид
Требуются скиллы пайки немного выше среднего и опыт заказа в интернет-магазинах.


С чего всё началось
Захотел я себе телеметрию на коптер. Но покупать готовый радиомодем 3DRadio — задушила жаба, ибо пара стоит 39 долларов. Было принято решение изготовить функциональный аналог, но не такой дорогой. По случаю купил радиомодули RFM22B, и опробовал на них открытый проект OpenBee. Получилось в районе 22 долларов пара (гуглить по запросу «openbee 433мгц»). Получив удовлетворительный результат, было принято решение ещё более удешевить конструкцию, применив вместо дорогих RFM22 дешёвые их аналоги Si4432.

Конструкция

Модем состоит из радиомодуля Si4432 и управляющего им контроллера на базе ATMega8/168/328. Подойдёт любой. Если применяете старшие версии (168 и 328) — конфигуратор параметров модема будет чутка покрасивее. Радиомодуль питается 3.3 вольтами через стабилизатор AMS1117-3.3. Процессор питается 5 вольтами, и работает на 16МГц, частота стабилизирована кварцем. Линии связи с радиомодулем согласованы по уровню напряжения при помощи стабилитронов.
Спецификация компонентов
Si4432 — 100mW 433MHz радиомодуль производства Silabs.
ATMega8 либо ATMega168 либо ATMega328
Кварц Murata CSTCE16M0V53-R0 16MHz. В принципе, подойдёт и выводной кварц, но устанавливать его придётся с обратной стороны платы, и нужны будут конденсаторы на землю.
AMS1117-3.3 (LM1117)
VD1-VD3 — BZV55C3V3 — стабилитрон на 3,3V, без выводов
VD4 — LL4148 (DL4148) — выпрямительный диод, также без выводов
C1 — 1000pF (типоразмер 0805). Можно не ставить.
C2,C3 — 4.7...25 uF танталовый (типоразмер 1210)
C4 — 0.1uF (0.01...0.2uF)
R1-R3 — 470 Ом (470...510)
R4,R5 — 4.7 K (4.7...10K)
R6,R7 — 1K (0...2K)
R8,R9 — 330 Ом (220...680)
R0 — 0 Ом — перемычка
Все резисторы типоразмера 0805, в скобках указан возможный диапазон значений, однако, лучше придерживаться указанных.
LED1,LED2 — светодиоды SMD, типоразмер 0805, разных цветов.

Также, кроме собственно компонентов модема, для его повторения понадобятся: ISP программатор и FTDI адаптер(Девайс по ссылке не покупал, но выглядит он интересно — якобы в нём есть ISP). Можно обойтись и исключительно ISP программатором.
Внимательный читатель тут же заметит, мол «какой модем за 7 баксов, если только 328-ая мега стоит 200 рублей?» А также заметит, что все ссылки в спецификации ведут на интернет-магазины. К сожалению, если покупать компоненты в России, модем выйдет золотой (как, впрочем, и всё, что производится в России). Поэтому, чтобы достичь минимальной стоимости — приходится заказывать радиодетали в Китае. Отрицательный момент — придётся ждать прихода посылок. Однако, Si4432 так и так заказывать в Азии, так что ждать всё равно придётся. Зачастую партия из 10 штук, тех же ATMega328, получается по цене такая же, как партия из 5 штук. Надо мониторить цены и искать подходящий вариант.
Так всё-таки, откуда 7 долларов? Считаем:
Si4432 — 4$
ATMega8 — 0.8$ (только партия 10 шт.)
AMS1117 — 1$ (на самом деле — это 10 стабилизаторов (0,1$) в партии 20 шт)
Рассыпушка — светодиоды 2х5 руб, резисторы-конденсаторы — 10х0,3+4х4 руб (конечно, если покупать не в чипидипе)
Если мы категорически не желаем покупать радиодетали партиями — ну, тогда модем подорожает на доллар засчёт цены меги.
Плата — бесплатно или 10 руб, раствор для травления, паяльник, припой и прочее — в рассчёт не принимаю, ибо это не одноразовые вещи, и у кого-то они наверняка уже есть.

Схема и плата

Принципиальная схема устройства представлена на рисунке ниже:
Schematic
Печатная плата была разведена в Sprint Layout в 2 вариантах: под антенну-спиральку, и под установку ВЧ разъёма типа SMA. Оба варианта оптимизированы под ЛУТ. Если вам не нравится заливка сеточкой (лучше для ЛУТ) — можно включить в редакторе сплошную.
Layout

Сборка платы

Сборка проходит в 2 этапа:
На первом — устанавливаются мелкие детали, стабилизатор, процессор.
После чего необходимо прошить процессор при помощи ISP программатора бутлоадером Arduino. Это делается для упрощения себе жизни — после заливки бутлоадера нет необходимости тыкать ISP в плату, чтобы залить новую прошивку. Заливается тестовая прошивка, чтобы не попалить радиомодуль.
На втором этапе на плату устанавливается радиомодуль, после чего заливается «боевая» прошивка.
Сборка
Собственно, на изображении 1 — вытравленная плата, 2 — установлена мелочёвка, 3 — залита тестовая прошивка, 4 — установлен радиомодуль, плата покрыта лаком, 5 — установлен экран от помех, из жести.

Прошивка

Прошивка модема написана в Arduino. Программист из меня никакой (я инженер) — поэтому качество кода весьма так себе. Можете подсказать, где можно что-то улучшить — буду рад.
В основу программы положен проект OpenBee. Собственно, мои изменения — это настроечный режим, который не был сделан в оригинальной прошивке, и исправление косяка с очисткой буфера передачи. Также в оригинальной прошивке был косяк — не настраивалась частота (дефайн был, но потом данные затирались данными из EEPROM, которые никогда не записывались) и радиометка устройства. Сейчас всё настраивается.
Процесс прошивки выглядит следующим образом:
Записывается бутлоадер при помощи ISP. Для платы на меге8 — бутлоадер для платы «Arduino NG or older w/ATMega8». Для платы на меге 168 и 328 — «Arduino Pro or Pro mini (5V,16MHz) w/ ATMega 168» и «Arduino Pro or Pro mini (5V,16MHz) w/ ATMega 328» соответственно.
Мой способ ISP
image
Способ называется «Voodoo», несложно догадаться, почему =)

Записывается тестовая прошивка. Уже напрямую из Arduino. Она инициализирует EEPROM, мигает светодиодами и выставляет все ноги процессора в режим High-Z.
Про заливку в мегу 8
При заливке в мегу8 есть неприятный момент — бутлоадер стартует очень долго (около 6 секунд). Может понадобиться принудительная перезагрузка путём замыкания ноги Reset на землю. Это надо сделать в момент, когда в ардуино появляется надпись «Uploading...» (замкнуть и сразу же отпустить ресет — я делал это пинцетом, дабы ноги рядом)

Ну, и в последнюю очередь, записывается рабочая прошивка. Также из Arduino.

Настройка

Настройка модема происходит при включении модема с замкнутым на +5V выводом «SET».
При этом в порт на скорости 9600 бод выдаётся настроечное меню, в котором можно поменять рабочую частоту, скорость последовательного порта и радиомодуля, и т.н. радиометку (RF Header), по которой модемы «сцепляются» друг с другом.
Обязательно нужно настроить радиометку, чтобы отделить свои модемы от остальных устройств. Крайне не рекомендуется метка OLRS (это метка по умолчанию для всех устройств Open LRS, к которым относится и модем).

Бег по граблям

Для интересующихся
Естественно, не обошлось без косяков. Внимательно присмотревшись к рисунку печатной платы и собранного устройства — видно, что они разные. Косяк обнаружился внезапно — модем отсылал данные, но ничего не принимал. Оказалось, что нога nIRQ радиомодуля заведена на D2 меги не просто так. Она вызывает прерывание (что я поначалу проглядел в коде). Причём, прерывание генерится только с ноги D2 или D3. Я же, для удобства разводки, завёл nIRQ на D5. Пришлось переразводить. В итоге, nIRQ заведена на D3. Также ошибкой было завести изначально выход радиомодуля на MISO атмеги. При программировании меги с впаянным модулем — есть реальный шанс спалить радиомодуль. Переразвёл.

Запись тестовой и «боевой» прошивки из Ардуино ведётся с использованием стандартного USB-UART преобразователя на FTDI. Разъём на модеме не совместим со стандартным «ардуиновским», подключать RX-TX, TX-RX, DTR-Reset, +5, GND. При отсутствии в хозяйстве FTDI (как так???) — прошивку можно залить и при помощи ISP.
Есть в прошивке неустранённая недоработка. По-идее, скорость последовательного порта ограничена 115К. Однако, из-за записи в EEPROM uint — по факту скорость может быть не более 65535 бод. В связи с чем поставлена затычка — при превышении 65534 — записывается 57600. Если есть желание — можно отключить конфигурирование с компьютера, и задать скорость в прошивке. Однако, большого смысла это делать — нет, ибо максимальная скорость в аэро канале — 57600.
Также есть ограничение на длину пакета, принятого по последовательному порту. Это 37 байт. Это ограничение было введено авторами оригинального проекта, и, видимо, обусловлено глубиной буфера радиомодуля (64 байта). Тут я ничего не менял.

Хочу повторить!

Исходники, чертежи печатной платы, схема — находятся в каталоге по ссылке.

Вариант для плохишей (с)

Если 100 мВт вам недостаточно — есть вариант переделать этот модем на модуль RFM23BP. Его выходная мощность составляет 1 ватт.
Надо понимать, что использование такой штуки — незаконно в этой стране.

UPD.
По мотивам комментария. Проверил волновое сопротивления дорожки к SMA разъёму. В принципе, всё было неплохо (60 ом), однако, для пущего согласования немного изменил ширину дорожки. Заменил файл платы.
Tags:радиомодем433mhz
Hubs: Wireless technologies
+83
130.3k 439
Comments 75
Wireless Systems Engineer
from 100,000 to 200,000 ₽ON SemiconductorСанкт-Петербург
Разработчик С/C++ (Junior/middle)
from 80,000 ₽EltexНовосибирск
Tech Lead DevOps Engineer
from 5,000 to 5,600 $Atto Trading Technologies LLCКиев
Программист ReactJS, JavaScript
from 70,000 to 120,000 ₽Kvando Technologies, Inc.Remote job
Java-разработчик
from 100,000 ₽EltexНовосибирск

Top of the last 24 hours