Для этого проекта я, чтобы удобнее было выполнять паяльные работы, выбрал микроконтроллер SAMD21E18 в корпусе TQFP32 (того же размера, что и популярный контроллер ATmega328). Правда, к сожалению, этот микроконтроллер продаётся пустым. Для того чтобы прошить в него загрузчик, необходимо специальное устройство — Atmel-ICE. Прошивка загрузчика оказалась самой сложной частью проекта. А в остальном тому, кто решит воспроизвести мой проект, никаких специальных инструментов не понадобится. Всё, что нужно, собрано на плате коммуникатора. А на передней панели, что необязательно, можно разместить подсветку клавиатуры.
Сначала я назвал моё устройство «Armageddon communicator» (отсюда и его теперешнее название — «Armachat»), но я не думаю, что оно способно пережить какую-нибудь воображаемую всемирную катастрофу.
Программная часть устройства пока не готова полностью. Но уже сейчас можно составлять и сохранять сообщения, можно их отправлять и принимать (с подтверждением доставки), можно повторно отправлять с устройства на устройство неотправленные сообщения с высокой вероятностью их успешной доставки.
Более свежая версия коммуникатора, Ergo, с разделённой клавиатурой:
Почему я использовал SAMD21E18
Я выбрал для изготовления Armachat именно этот контроллер по следующим причинам: он совместим с Arduino, потребляет мало энергии, имеет встроенную поддержку USB, поддерживает USB OTG, имеет много флеш-памяти, для него существует MSD-загрузчик от Adafruit, обновление его прошивки выглядит так же, как запись данных на USB-диск. Он ещё и недорого стоит.
А если говорить об энергопотреблении SAMD21E18, то оно и правда очень низкое. Полное энергопотребление Armachat с включённым дисплеем — 60 мА: 20 мА потребляет модуль LoRa, ещё 20 мА — подсветка дисплея и ещё 20 мА — микроконтроллер. Мне удалось загрузить Armachat и заняться отправкой сообщений, используя питание от генератора Стирлинга.
Материалы
- Печатные платы — главная плата и плата передней панели.
- Радиомодуль LoRa — RFM95W. 868 МГц для Европы, 915 МГц для США. Или — эквивалентный модуль, подходящий для использования там, где вы живёте.
- Микроконтроллер SAMD21E18A-AU в корпусе TQFP32.
- LDO-регулятор напряжения на 3,3 В — AP2114H-3.3TRG1.
- Контроллер заряда аккумулятора — MCP73831.
- MOSFET-транзисторы — BSS123 (3).
- Микропереключатели DTS-63K, сила переключения 1 Н (30).
- Микропереключатель TACTM-35N-F.
- Литий-ионный аккумулятор формата 18650.
- Аккумуляторный отсек — BHC-18650-1P.
- Micro-USB порт — Molex MX-105017-0001.
- LCD-дисплей — 1,8 дюйма TFT LCD, 128x160, ST7735, например, такой.
- Резисторы, 0603, SMD — 1,5 кОм (2), 4,7 кОм (7), 10 Ом (1).
- Конденсаторы, 0603 — 100 мкФ (2), 1 мкФ (1), 4,7 мкФ (4).
- Танталовый конденсатор 1206, SMD — T491A107M004AT, 4 В, 100 мкФ.
- Краевой SMA-разъём под коаксиальный кабель Adam Tech RF2-143-T-17-50-G или RF2-145A-T-17-50-G-HDW.
- Излучатель звука, SMD — LD-BZEL-T61-0505.
- Светодиод, 0603, красный, для индикатора заряда аккумулятора.
- Антенна — GSM-ANT-SV03 SMA Male. Должна соответствовать используемой частоте LoRa.
- Переключатель питания (движковый) — C&K Components JS202011AQN или Ninigi MSS-2245.
- Крепёжные винты — M2×5 мм (12).
- Распорные болты — M2×5 мм (6).
- Светодиоды, 0802, Right Angle Package, зелёные (30) (необязательно) для подсветки клавиатуры.
- Резистор, 0603, 100 Ом (необязательно) для подсветки клавиатуры.
Инструменты и программы
- Паяльник и припой (подходящие для работы с компонентами для поверхностного монтажа).
- Отвёртки.
- Программатор Atmel-ICE.
- Компьютер с установленными на нём программами:
Сборка устройства
Собрать мой коммуникатор довольно просто. Я собрал два десятка прототипов, используя лишь ручную пайку, и никаких проблем у меня не возникло.
1. Монтаж элементов на печатной плате
Рис. A
На плате (Рис. A) нужно распаять микроконтроллер, а также все активные и пассивные компоненты (за исключением дисплея, модуля LoRa, кнопок и SMA-разъёма для антенны), ориентируясь на указания, которые имеются на плате.
2. Программирование микроконтроллера
Для записи загрузчика в SAMD21E18, я использую Arduino IDE и программатор Atmel-ICE.
Рис. B
В меню Arduino IDE нужно пройти по пути Arduino > Preferences > Additional Boards Manager URLs
и добавить в соответствующее поле (Рис. B) следующий URL:
https://www.mattairtech.com/software/arduino/beta/package_MattairTech_index.json
Рис. C
Затем в меню Tools
надо выбрать пункт Boards Manager
и установить MattairTech
. После завершения установки нужно пройти по пути Tools > Boards
и выбрать плату MattairTech MT-D21E (rev B)
(Рис. C).
Рис. D
После того, как будет выбрана эта плата, в меню Tools
появятся новые настройки (Рис. D). Там надо выбрать следующее:
- Clock Source: INTERNAL_OSCILLATOR
- Serial Config: ONE_UART_ONE_WIRE_TWO_SPI
Рис. E
Теперь надо подключить плату программатора Atmel-ICE к нашей плате, к контактам GND, VCC, SWC, SWD и RST (Рис. E).
В меню Tools
надо выбрать Programmer: Atmel-ICE
. Затем нужно воспользоваться командой Burn Bootloader
. Теперь можно загружать на устройство скетчи по USB.
‣ Альтернативный вариант: В Atmel Studio запишите специальный файл ARMABOOT.bin
, который можно найти на моей GitHub-странице. После этого загружать прошивки на устройство можно будет, перетаскивая файлы мышью, как при работе с обычным USB-диском.
3. Загрузка первой прошивки
Если на устройство прошит файл ARMABOOT.bin
— подключите Armachat к компьютеру по USB и дважды нажмите на кнопку RESET
для активации загрузчика.
Если к вашему Armachat уже подключён дисплей — он начнёт мигать.
Скопируйте файл first.uf2
, который можно найти на моей GitHub-странице, на диск, появившийся в системе после подключения Armachat. Подождите завершения записи и снова нажмите на RESET
. Если вы услышали звуковой сигнал — значит прошивка заработала.
UF2-прошивки можно создавать и самостоятельно. Для этого вам понадобятся следующие библиотеки (их можно найти и на моей GitHub-странице):
- playground.arduino.cc/Code/Keypad
- github.com/adafruit/Adafruit-GFX-Library
- github.com/adafruit/Adafruit-ST7735-Library
- github.com/sandeepmistry/arduino-LoRa
- github.com/cmaglie/FlashStorage
Ещё вам понадобится исходный код отсюда. Скомпилируйте этот код и загрузите на устройство с использованием Arduino IDE.
4. Пайка оставшихся компонентов
Рис. F
Теперь к плате нужно припаять дисплей (Рис. F), после чего на плату можно подать питание. Если на дисплей выводятся сообщения — значит, плата работает. Если дисплей чист — попробуйте понажимать на кнопку RESET
или нажать её и удерживать. Если это не помогло — проверьте шлейф дисплея. После того, как дисплей заработает, можно приклеить его к плате.
Рис. G
Рис. H
Теперь (Рис. G) надо припаять к плате LoRa-модуль. Если после этого подать на плату питание и на экране будет выведено LoRa init succeeded
— это значит, что всё идёт по плану. Если такая надпись выведена не будет — надо проверить подключение радиомодуля к плате.
Рис. I
И, наконец, нужно припаять к плате кнопки и SMA-разъём для антенны (Рис. I).
5. Подсветка передней панели (необязательно)
Рис. J
Это необязательный шаг, на котором нужно припаять к передней панели соответствующие светодиоды. Мне хотелось сделать качественную подсветку клавиатуры, поэтому я использовал 30 светодиодов — по одному для каждой кнопки (Рис. J). После пайки передняя панель крепится к устройству с помощью распорных болтов и винтов M2.
Использование Armachat
Рис. K
Управление коммуникатором осуществляется с использованием «горячих клавиш». На Рис. K показан главный экран. В надписях, выведенных на нём, можно увидеть упоминание этих клавиш.
Рис. L
S: Setup
— открывает раздел, где можно настроить параметры LoRa — частоту, другие параметры передачи данных, установить свой ID от 0 до 10 (Рис. L).
Рис. M
С: Contacts
— открывает адресную книгу, которая (пока) рассчитана на 10 записей с фиксированными именами (Рис. M). Я работаю над новой прошивкой, которая позволит пользователям Armachat выбирать собственное имя, которое автоматически будет синхронизировано с адресными книгами тех, с кем они общаются.
N: New message
— новое сообщение. Клавиши клавиатуры имеют различные функции, на них влияет клавиша Alt
. Так, в режиме «нижнего регистра» клавиша Enter
отправляет сообщение. В других режимах она играет роль клавиши-стрелки «Вправо», а Del
играет роль клавиши-стрелки «Влево». Кнопка Пробел
позволяет вводить пробелы, точки и запятые.
После отправки сообщения Armachat ожидает подтверждения его доставки. Если доставка не подтверждена — сообщение сохраняется в памяти с атрибутом undelivered
, указывающем на то, что оно не доставлено получателю.
Устройства Armachat при включении отправляют сообщение alive
. Каждое устройство, получившее подобное сообщение, пытается отправить недоставленные сообщения.
Рис. N
M: Messages
— этот раздел позволяет читать новые сообщения и даёт доступ к отправленным/полученным/недоставленным сообщениям (Рис. N).
Как видите, программная часть Armachat устроена очень просто, но я напряжённо работаю над её новыми функциями. LoRa открывает перед нами практически безграничные сетевые возможности, в число которых входит маршрутизация, перенаправление, шифрование сообщений. А само устройство на данном этапе работы имеет большой объём свободной флеш-памяти и немалую незадействованную вычислительную мощь.
Исследования расстояния передачи сообщений
Технология LoRa известна тем, что позволяет передавать данные на значительные расстояния. Вот каких максимальных расстояний передачи данных мне удалось достичь с использованием Armachat в моём посёлке с учётом того, что приёмник и передатчик разделяло не свободное пространство, а небольшие холмы и строения, и того, что устройство использовалось на максимальной мощности и с параметром Spread factor, установленным в значение 12:
- 700 метров до шлюза, находящегося в саду, на террасе.
- 1500 метров до шлюза, закреплённого на окне, на высоте примерно 4 метра над землёй.
- 4300 метров до шлюза, установленного на окне чердака — примерно в 10 метрах над землёй.
Конечно, расстояние, на котором можно установить LoRa-связь, сильно зависит от антенны, от препятствий, которые имеются на пути радиосигнала, и от настроек радиочасти устройства.
Итоги
Устройство, о котором я рассказал, это в конечном счёте учебный проект, предназначенный для экспериментов с LoRa и для изучения высокотехнологичных сторон Arduino. Благодаря этому проекту я углубил свои знания в следующих сферах:
- Чтение данных с QWERTY-клавиатуры.
- Создание и вывод графики.
- Проектирование пользовательских интерфейсов.
- Хранение данных во флеш-памяти.
- Отправка данных по радиоканалу или по USB.
- Работа с I2C-датчиками.
- Обработка GPS-данных.
Рис. O
Сейчас я работаю над новым вариантом Armachat — над платой Ergo. Она предусматривает использование разделённой клавиатуры, работать с которой проще и удобнее, чем с обычной. Тут в одной из новых плат используется тот же микроконтроллер и тот же LoRa-модуль, что и в исходном варианте Armachat, но другой дисплей (1,3 дюйма, 240×240 ST7759 IPS). А в другой — модуль RAK4260 производства RAKwireless Technology. В нём Microchip ATSAMR34J18 SiP объединён с возможностями LoRa (Рис. O). Это позволяет упростить плату, на которой, помимо этого чипа, нужно разместить лишь модуль заряда аккумулятора, регулятор напряжения на 3,3 В и излучатель звука.
И, наконец, я создал компактную версию Armachat без клавиатуры, но — с USB-портом для подключения внешней клавиатуры. Она называется Nano, а её размеры составляют всего 4x4 см. Я работаю над новой прошивкой, которая позволит использовать эту плату в виде миниатюрного репитера или ресивера.
Если говорить о других проектах, напоминающих Armachat, то среди них можно отметить Meshtastic и Disaster.radio.
Автор:
FirstJohn