Как-то мне понадобилось разработать систему автоматизации для загородного хозяйства — для меня это дело привычное, там вроде бы нет ничего сложного — центральный модуль, удалённые датчики и актуаторы, какой-то алгоритм управления и т. д., всё как обычно. Поскольку речь шла о загородном хозяйстве с его значительными расстояниями между объектами, то первым кандидатом на обеспечение беспроводной связи в системе стала всеми горячо любимая и широко используемая технология LoRa.
Всё вроде бы шло по плану, но при ближайшем рассмотрении вдруг возникла проблема в самом неожиданном месте — для различных беспроводных датчиков понадобились батарейные LoRa модули — и вдруг оказалось, что нормальных батарейных долгоживущих модулей, которые могли бы обеспечить автономную работу LoRa сенсоров в течение нескольких лет, просто нет в продаже.
Можно было бы сделать свои батарейные LoRa модули (благо прототипы есть и прекрасно работают), но не хотелось тратить время на изобретение велосипеда, а просто купить что-то готовое, и я заказал с Aliexpress несколько плат-кандидатов для тестирования.
Одна из таких плат — LoRa Radio Node, отчёт о её разборе (по косточкам) и тестировании я и предлагаю вашему вниманию.
Сначала о самой плате
Сама идея разработчиков LoRa Radio Node правильная — они попытались создать универсальный батарейный (аккумуляторный) LoRa модуль, и во многом им это удалось. Подключили необходимые датчики (или актуаторы), залили прошивку, вставили аккумулятор формата 14500 — и LoRa нода для вашей системы готова.
Просто, быстро и не нужно ничего изобретать и паять — купили нужное количество плат LoRa Radio Node и раскидали их по вашему объекту. В общем, всё это так и работает, но есть нюансы, о которых мы и поговорим далее.
Достоинства и недостатки
В общем, на первый взгляд, плата LoRa Radio Node производит благоприятное впечатление, перечислю её достоинства, которые сразу бросаются в глаза:
- Правильная концепция (один из вариантов правильной концепции) — LoRa модуль + ATmega328 в варианте клона Arduino Pro Mini, правильные для батарейного сенсора параметры 8 МГц и 3,3 В, плюс прошитый Arduino-загрузчик.
- Достаточно компактный дизайн и крепёжные отверстия в плате.
- Разъём для программирования через USB-UART переходник.
- Отдельный разъём для питания 3,7-12 В.
- 3 разных варианта запитки платы — от аккумулятора, через разъём питания и через пины USB-UART переходника.
- Возможность подключения дополнительных компонентов по SPI и I2C интерфейсам и отдельные разъёмы для них.
- Отдельные разъёмы с питанием для подключения дополнительных компонентов к цифровым и аналоговым пинам микроконтроллера.
- Выносная антенна для LoRa модуля.
- Специальный разъём и возможность перекоммутации выводов LoRa модуля DIO1, DIO2, DIO3, DIO5 на пины D5, D6, D7, D8.
- Правильная коммутация на плате выводов LoRa модуля DIO0, RESET, NSS на выводы D2, D9, D10.
- Кнопка перезапуска RESET на плате.
Как вы видите, достоинств у этой платы множество, разработчикам удалось обойти все подводные камни и в кои веки всё сделать правильно. Теперь перечислю (условные) недостатки и спорные моменты:
- Светодиод на плате, подключённый к выводу D13. С одной стороны, светодиод потребляет энергию (крайне ценную в случае питания от батареи), с другой стороны, это потребление небольшое в импульсном режиме, а светодиод удобно использовать для индикации активности платы.
- В качестве преобразователя питающего напряжения использован чип SPX3819 с минимальным током потребления по даташиту 90 мкА, что очень много для батарейного сенсора (подробнее мы поговорим об этом ниже).
- Собственно запитка платы от аккумулятора 14500 (3,7 В). Это решение нельзя назвать ни плохим, ни хорошим — это просто один из возможных вариантов запитки подобных сенсоров. Просто тут нужно учитывать свойства самих аккумуляторов и, например, не выставлять подобные сенсоры на 20-градусный мороз.
Теперь давайте поподробнее поговорим об устройстве платы LoRa Radio Node.
Технические характеристики
Основные технические характеристики платы LoRa Radio Node:
- Микроконтроллер ATmega328P 8 МГц 3,3В;
- LoRa модуль: RFM96 868 МГц;
- Разъём для программирования через USB-UART переходник;
- Разъёмы SPI и I2C (2 шт.);
- Разъёмы для подключения дополнительных компонентов (4 шт.);
- Разъём для подключения питания 3,7-12 В;
- Питание: аккумулятор 14500 (3,7 В);
- Размеры: 40x60 мм.
В общем, есть всё необходимое для подобных контроллеров, это тот редкий случай, когда и пожелать больше нечего, если только какую-то экзотику типа вачдога, но это только для каких-то особых случаев.
Внешний вид
Фото платы LoRa Radio Node «в сборе», со вставленным аккумулятором 14500. Всё сделано аккуратно и логично для базы LoRa ноды — осталось только подключить сенсоры, залить прошивку и установить плату в какой-нибудь корпус.
Схемотехника
Теперь давайте разберёмся со схемотехникой LoRa Radio Node. Для начала вид платы сверху.
Вид снизу. Никаких установленных деталей, только достаточно подробные пояснения и маркировка выводов.
▍ Подсистема питания
Подсистема питания выполнена на специализированном (LDO 500 мА) регуляторе напряжения SPX3819 с выходным напряжением 3,3 В и током покоя по даташиту 90 мкА. Питаться контроллер может от встроенного аккумулятора или от источника питания 3,7-12 В, подключаемого к разъёму J2.
В принципе, это неплохое решение для питания контроллера от батареи, но заявленные 90 мкА — это очень много для устройства, которое должно питаться от аккумулятора годами (подробнее о реальном потреблении платы LoRa Radio Node и её тестировании мы поговорим ниже).
▍ Разъём для программирования
Разъём для подключения USB-UART переходника и программирования LoRa Radio Node. Через этот же разъём можно запитывать плату от USB-UART переходника. С запиткой и программированием контроллера через этот разъём никаких проблем выявлено не было.
▍ Микроконтроллер
В качестве ядра использован микроконтроллер ATmega328P в конфигурации 8 МГц и 3,3В и прошитым Arduino-загрузчиком, фактически это Arduino Pro Mini. Такое решение является правильным выбором для построения долгоживущего батарейного сенсора.
Обвязка MCU и его распиновка в целом тоже не вызывают никаких нареканий. Разве что есть несколько неиспользуемых GPIO, которые тоже можно было бы вывести в разъёмы для подключения дополнительных компонентов.
▍ LoRa модуль
Для обеспечения беспроводной LoRa связи использован модуль HOPERF RFM96 с выносной подключаемой антенной. Для нас здесь важным является то, что этот модуль является совместимым с Arduino LoRa библиотекой (см. ниже) и выводы DIO0, RESET, NSS подключены к D2, D9, D10. В этом варианте даже не требуется переопределять стандартные пины в коде скетчей.
Также стоит отметить, что разработчики LoRa Radio Node сделали специальный разъём J3 и дали возможность свободной перекоммутации выводов DIO1, DIO2, DIO3, DIO5 на пины D5, D6, D7, D8 микроконтроллера.
▍ Разъёмы
С разъёмами для подключения датчиков всё совсем хорошо — есть отдельный разъём ICSP, 2 разъёма I2C и отдельные разъёмы с питанием 3,3 В для двух цифровых и двух аналоговых пинов микроконтроллера — в таком варианте подключение дополнительных компонентов и датчиков к LoRa Radio Node не вызывает никаких проблем.
Распиновка
Ну и распиновка платы LoRa Radio Node. В целом всё правильно и логично, небольшие вопросы возникают только по поводу пинов A2, A3, A6, A7 — разработчики по какой-то причине забыли о них и не развели на плате.
Как я уже отметил выше, LoRa модуль подключён правильно и дана возможность свободной перекоммутации выводов DIO1, DIO2, DIO3, DIO5.
Программирование
Программирование LoRa Radio Node производится при помощи любого USB-UART переходника, в моём случае был использован популярный вариант FTDI (не забудьте только переключить напряжение на 3,3 В).
Если вы ранее имели дело с LoRa, то программирование LoRa Radio Node не вызывает никаких трудностей — сама плата и подключение LoRa модуля разведены правильно, поэтому и работа со стандартной LoRa библиотекой не вызывает никаких проблем.
Вот пример скетча посылки LoRa пакетов с данными (пример разрабатывался и тестировался в среде Arduino 1.8.5).
/*
LoRa Radio Node sender
*/
#include <SPI.h>
#include <LoRa.h>
long count = 0;
void setup() {
Serial.begin(115200);
Serial.println(F("Start LoRa Radio Node sender..."));
if (!LoRa.begin(868E6)) {
Serial.println(F("Starting LoRa failed!"));
while(true);
}
}
void loop() {
Serial.print(F("Sending packet: ")); Serial.println(count);
LoRa.beginPacket();
LoRa.print(F("Sending packet: ")); LoRa.print(count);
LoRa.endPacket();
count++;
delay(3000);
}
Вывод в Serial тестового скетча посылки LoRa данных платой LoRa Radio Node:
И контроль реальных посылок в эфир при помощи программы SDRSharp:
Всё работает так, как и ожидалось.
Расчёт потребления
Теперь давайте выясним, насколько LoRa Radio Node подходит для выполнения своих прямых обязанностей — работы в качестве батарейного (долгоживущего) LoRa сенсора.
Здесь нужно сказать несколько слов о том, что я понимаю под термином «батарейный долгоживущий сенсор». Очевидно, что если у вас сенсор, например, в теплице, будет через месяц пропадать из системы по причине разряда питающей батареи, то такая «автоматизация» вам быстро надоест — если у вас на объекте десяток или больше таких сенсоров, то вы вынуждены будете постоянно «бегать» и менять в них батарейки.
Поэтому «нормальным батарейным сенсором» я считаю сенсор, который может проработать в автономном режиме не менее года (чем больше — тем лучше). В крайнем случае более-менее приемлемым результатом можно считать срок автономной работы не менее полугода, но это уже экстремальный вариант на грани фола.
Дальнейшую оценку времени автономной работы LoRa Radio Node мы и будем производить, исходя из этих критериев: норма 12+ месяцев, минимально приемлемый результат 6+ месяцев.
Методика расчёта
Предупреждение. Все расчёты в этой статье примерные, их нельзя считать строго метрологически обоснованными — для этого применяется специальное оборудование и специальные методики. Мои расчёты исходя из потребления тока в различных режимах позволяют примерно и «теоретически» прикинуть время автономной работы сенсора.Потребление батарейного сенсора складывается из двух составляющих: потребление в режиме «сна» и потребления в режиме передачи (приёма) сигналов. В данном случае и исходя из специфики беспроводного LoRa сенсора, мы не будем уделять внимание режиму приёма сигнала — наш сенсор будет работать в режиме периодических (или по событиям) посылок данных на «базу».
Примечание. Если у вас передающий батарейный сенсор, то это не значит, что он не может принимать данные и команды от «базы» — просто в этом случае вам придётся усложнить программное обеспечение и организовать окна приёма данных «по расписанию» или «по запросу».В качестве питающих батарей я буду использовать Li-ion аккумуляторы формата 14500 с типичной для таких аккумуляторов ёмкостью 900 мАч.
Примечание 2. Я специально не упоминал и, надеюсь, вам понятно, что мы не можем создать online LoRa сенсор на батарейках, поскольку LoRa модуль в режиме постоянного приёма очень быстро разрядит питающую батарею.
▍ Потребление в режиме сна
Я провёл специальные эксперименты по измерению тока потребления LoRa Radio Node в режиме сна (а это основной режим любого батарейного сенсора) — переводим микроконтроллер в режим сна, используя специальную LowPower библиотеку:
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
и переводим LoRa модуль тоже в режим сна:
LoRa.sleep();
Замеряем ток потребления, который, оказывается, равен 78 мкА (0,078 мА). Делим ёмкость аккумулятора 900 мАч на ток потребления 0,078 мА и получаем (теоретические) 11538 часов работы сенсора от этого аккумулятора (480 дней или 16 месяцев).
Другими словами, если наш LoRa Radio Node сенсор ничего не будет делать и не будет ничего передавать в эфир, то на этом аккумуляторе он продержится 16 месяцев. Что уже не так много, остаётся только посчитать, насколько хватит ёмкости батареи при тех или иных режимах работы LoRa передатчика.
Примечание. Это приблизительный расчёт, который не учитывает множество факторов, например, саморазряд батареи, потерю ёмкости аккумулятором из-за колебаний температуры, переходные режимы и т. д.
▍ Потребление в режиме передачи
LoRa модуль в кооперации с микроконтроллером ATmega328 в режиме передачи может потреблять ток от 30 до 110 мА, в зависимости от режима. Среднее типовое значение для режима по умолчанию PA_OUTPUT_PA_BOOST_PIN = 17 составляет 80 мА, его мы и примем за основу для наших расчётов.
В качестве тестового блока данных возьмём 32 байта. При дефолтном Spreading факторе (7) передача этого блока в эфир занимает 74 мс.
Используя эти типовые параметры в качестве исходных, можно посчитать, что (с учётом потребления нашего контроллера в режиме сна) он сможет проработать 1 год при беспроводной активности (выходе в эфир с указанными параметрами) раз в 4 минуты (15 раз в час).
Изменяя Spreading фактор, длину пакета и мощность излучения и можно добиться как увеличения частоты сеансов связи, так и увеличения времени автономной работы (уменьшая количество сеансов связи). Здесь всё зависит от вашего IoT проекта — где-то достаточно 1-го сеанса в день, а где-то будет мало и 1-го пакета в минуту.
Выводы
В целом, LoRa Radio Node экзамен выдержал — на основе этой платы можно создать батарейный LoRa сенсор со временем автономной работы 1 год. При необходимости можно даже создать динамичную беспроводную LoRa ноду с сетевой активностью 1-4 пакета в минуту, но за это придётся расплатиться подбором параметров передачи данных и снижением времени автономной работы до 6-и месяцев (что не здорово, но может быть приемлемо в некоторых случаях).
Как выяснилось в процессе тестирования, «бутылочным горлышком» этой платы является чип преобразователя питания SPX3819, который потребляет ток 78-90 мкА, что мало приемлемо для такого контроллера. Трудно сказать, чем руководствовались китайцы, когда применяли этот чип в LoRa Radio Node, но я думаю, скорее всего, соображениями экономии.
Соответственно, здесь есть два решения — либо использовать эту плату «как есть», имея в виду, что сколько-нибудь активный LoRa сенсор со временем жизни больше года на ней построить нельзя, либо взять в руки паяльник и переделать питание этой платы на основе какого-нибудь более подходящего чипа с током потребления 5-20 мкА и меньше — это сразу добавит сенсору несколько лишних лет жизни при питании от батареи.
Комментарии (111)
hobogene
20.04.2022 12:23Потребление еще и от собственно сенсора будет некисло зависеть. И все оптимистичные подсчеты могут пойти в никуда.
оказалось, что нормальных батарейных долгоживущих модулей, которые могли бы обеспечить автономную работу LoRa сенсоров в течение нескольких лет, просто нет в продаже.
Не совсем вяжется со следующим абзацем, где Вы этот модуль и купили. Или я что-то неверно интерпретировал?
smart_alex Автор
20.04.2022 12:40Так, чтобы понять подходит он или нет, его нужно было сначала купить и протестировать. Потом выяснилось, что модуль в принципе имеет право на жизнь, но многое можно было бы сделать лучше.
hobogene
20.04.2022 13:02Да я и не спорю. Просто если Вы прикрутите к нему датчик-не-знаю-чего, жрущий до фига...
smart_alex Автор
20.04.2022 13:21Не, не, не, когда мы говорим о батарейном датчике, то там все нужно хорошо считать и рассчитывать режимы. О прожорливых датчиках в тяжелых режимах и речи не идет.
daggert
20.04.2022 12:28+1Этот модуль весьма странный. У него достаточно много обвязки и в режиме простого прослушивания он кушает 120mAh батарейку за сутки. Оказалось дело в стабилизаторе питания. По итогу сделал для себя аналогичный, но чуток другой разводки, т.к. с этими наигрался. Слишком большой разброс по параметрам в пределах одной партии, да и входов маловато.
hogstaberg
20.04.2022 15:51Вообще в принципе, имея требуемое напряжение питания в 3.3В, можно всё запитать напрямую от обычной литиевой батарейки на 3.0в и выкинуть стабилизатор. Опционально — подавать питание на радиочасть через мосфет только на время её активной работы.
ku4in
20.04.2022 12:52+2Спасибо за статью! По вашему опыту, на каком расстоянии удается установить надёжную связь? Есть ли опыт использования LoRa в городе?
smart_alex Автор
20.04.2022 12:54Я специально не тестировал, но обычно говлрят о 1-3 км, в зависимости от застройки. Могу только заметить, что дальность зависит от LoRa настроек.
klounader
21.04.2022 03:52Думаю больше, в зависимости от прямой видимости. Если препятствий кроме воздушной среды нет, то и сто километров не крюк, имхо. Например с одной горы на другую или с летательных аппаратов и других спутников.
hobogene
20.04.2022 13:13Сильно зависит от того, чем Вы собираетесь принимать. Таким же модулем? Или базовой станцией на SX130X? Ну и вообще много, от чего. Если с железом все ОК и оба устройства на улице, то в целом на километры можно рассчитывать.
Сразу совет - если Вы вдруг видите, что у Вас LoRa даже в пределах одной комнаты как-то неудачно работает, на на открытом воздухе в прямой видимости получаете сто метров, подвигайте частоту на одном из устройств килогерц на сорок с шагом килогерц в пять. На недорогих модулях с этим часто проблемы.Edited: и да, если у Вас не LoRaWAN, а свой протокол поверх LoRa, используйте лучше BW 500 KHz, если каких-то серьезных противопоказаний нет по регуляторике или еще чему.
iShrimp
20.04.2022 18:14Частота может ещё плавать в зависимости от температуры, и для борьбы с этим явлением вместо обычного кварца устанавливают термокомпенсированный (TCXO).
hobogene
20.04.2022 23:22Да, и это сразу все удорожает.
В любом случае, ставят далеко не везде, а за последние лет семь, как Lora появилась, видел достаточно сообщений на самых разных наших и не наших ресурсах на тему "фигня ваша лора, больше 100 метров у меня не вышло". Причины, конечно, разные были, но в достаточно приличном количестве случаев удалось вышеописанным методом сильно помочь.
Semtech в свое время про это отдельный документ в app notes выпускал. Тоже не со скуки. Там технари-то знают, что делают. Это маркетологи не всегда.
aborouhin
20.04.2022 13:02+5Просто тут нужно учитывать свойства самих аккумуляторов и, например, не выставлять подобные сенсоры на 20-градусный мороз.
Не очень понимаю, где тогда это вообще можно использовать в условиях климата средней полосы России.
Если в течение года девайс ни разу не окажется на морозе - значит, он стои́т в отапливаемом помещении. А раз там есть отопление - то, вероятно, и электричество там тоже есть, так что потребности в батарейном модуле не возникает.
dlinyj
20.04.2022 13:04Погреб: неотапливаемое помещение, и нет мороза.
aborouhin
20.04.2022 13:06+2Погреб - он же под домом, так? Ну или в непосредственной близости от него. А в доме электричество наверняка есть. Неужели протянуть кабель в погреб сложнее, чем заморачиваться с регулярной заменой батареек?
P.S. Да и освещение в самом погребе тоже наверняка не от лучины же...
dlinyj
20.04.2022 15:35Погреб — он же под домом, так?
Не обязательно.
Ваша правда есть. Но и есть задачи, где такое решение удобно.
OlegIva
20.04.2022 17:27+4На моей малой родине погреб, в отличие от подвала, - это именно что отдельная постройка. И порой на приличном удалении (спасибо планировке села из советских времён). Ох, сколько раз в него за картошкой было нахожено :)
aborouhin
20.04.2022 17:48+3Ну освещение-то, освещение в нём хотя бы есть? :) Не при свечах же Вы оттуда картошку вытаскивали :)
P.S. Я что к погребам-то прицепился. Просто повсеместное распространение беспроводных девайсов - это просто катастрофа какая-то. Сколько бы ни жили в них батарейки - при количестве оных хотя бы несколько десятков (берём какую-нибудь сигнализацию + датчики умного дома разных видов - и вот ужé) - замена их превращается в постоянную головную боль.
При этом реальные сложности протянуть нормальное питание возникают разве что в самых парадных частях дома, где без нарушения дорогостоящей отделки ничего не протянешь, и кабель-канал не прикрутишь из эстетических соображений. Ну или да, на другом конце поля, где вот вообще-вообще никакой потребности в электричестве больше нет (ни освещения, ни полива, ни видеонаблюдения в радиусе полкилометра...)OlegIva
20.04.2022 18:07+1Ну освещение-то, освещение в нём хотя бы есть? :) Не при свечах же Вы оттуда картошку вытаскивали :)
Сейчас - да, есть. На погребице. В самой яме нет (не было, когда я там жил, по крайней мере). А фонарики давно так-то есть. Что до свечки - яма, увы, без вытяжки (опять же на тот момент, который я помню), со всеми вытекающими.
P. S. Простите, не удержался и прочитал пассаж про освещение голосом Матроскина из Простоквашино :)
hobogene
20.04.2022 23:34Просто все завалено устройствами качества ниже среднего, мягко говоря. Головная боль не с заменой батареек, головная боль с устройствами, где их менять надо раз в месяц. Ну и да, есть случаи, когда без провода лучше не обходиться (сигнализация та же, если это сигнализация, а не фикция).
Кстати, беспроводные устройства могут быть и без батареек :-) Валялась у меня пара зигбишных выключателей... Но на клавишу там лучше кулаком нажимать было :-)
smart_alex Автор
20.04.2022 13:23+1Очень часто клиент отказывается в принципе иметь дело с проводами.
aborouhin
20.04.2022 13:34+1Я у себя наоборот по всему участку, включая ныне не обитаемые углы, где непонятно, что будет и будет ли что-то вообще, в своё время протянул питание, Ethernet и RS-485 чисто на всякий случай :)
iShrimp
20.04.2022 18:26Хорошая идея. Жаль, что не всегда можно обойтись одним кабелем Ethernet, так как устройств с поддержкой PoE мало, а инжекторы-сплиттеры денег стоят.
ionicman
20.04.2022 13:04Первое, что бросается в глаза — вместо стандартного 18650 установили гораздо менее емкий, менее распространенный 14500. При этом в размерах сэкономили не особо.
Разводка питания вызывает вопросы — сколько это чудо жрет в режиме приема то?
Ну и сама LoRa — оно реально нужно? Есть ведь куда дешевле, меньше по габаритам и менее жрущие приемники/передатчики для небольших расстояний, а дальше на хабе все это собрать и работать уже по GSM-у. В условиях городской застройки LoRa будет дальше работать, но тоже далеко не пробьет.
Если же конечных устройств 1-2 штуки с несколькими датчиками — то куда проще сразу поставить GSM в них.daggert
20.04.2022 13:16GSM это доп расходы на тарифы. Лично для себя я посчитал что поставить 25 лоравских модулей - выгодней. Ну и плюс зависимость от сети оператора и подписки внезапные - зло для IoT.
ionicman
20.04.2022 13:20GSM — это возможность в любые расстояния. Понятно, что за это придется платить.
И, естественно, если у вас есть возможность по расстоянию обойтись без него — тогда и вопросов нет. Другое дело, что я плохо понимаю, где можно так просто обойтись… Ну, наверное, если рядом с домом гараж — то да, LoRa будет проще. Но, обычно, объекты находятся в гораздо бОльшей удаленности.
P.S. 25 модулей? У вас 25 объектов мониторинга? Или один огромный?daggert
20.04.2022 13:46+2Я обслуживаю карьеры и делянки в лесах, там нету GSM. На трелевочниках, экскаваторах, самосвалах и лесовозах стоят коробки для передачи и приема их координат, с нормальной антенной, чтоб координировать свободные маршруты для транспорта, замена раций.
Дома у меня лора спокойно обслуживает расстояние в 9км через озеро, где находятся дачные кооперативы, аналог сигнализации. 9 домов. Далее уже GSM шлюз. Дешевле выходит.
В частном доме на тесте есть модули в подвале, теплице, чердаке… гараж (:
hobogene
20.04.2022 13:51А как, кстати, в Вашем случае в лесу работает? Вообще, деревья с листиками на них это немножко ночной кошмар бывает для LoRa. Особенно прикольно, когда зимой что-то поставили. А весной трындец внезапный.
daggert
20.04.2022 14:07+4Опустил на 161 мегагерц, сделал свою плату под SX1276 по даташиту, под эту частоту, расположил SMA сразу на модуле. Далее уже с антенной - но ее делали под заказ. Вроде как диполь с запиткой с края. На текущий момент берет четко до горизонта - 4.8км, даже в смешанном лесу с ольховым подлеском. Высота установки мобильной антенны - около 2м. Иногда пробивает до 20км, но т.к. все в лесах и вне маршрутов самолетов/кораблей - никому не мешаем.
Проблема по сути только с рельефом возникает - любая складка гасит волны, но тут спасают геодезисты прокладывающие маршруты по хребтам. Для связи между разъездами - хватает.
Три года тестируем, хотели в этом году запустить в продажу (:
Внутри кстати ничего сложного - атмега 328р с расширением портов по i2c для показа инфы на символьном экране и обработки координат, sx1276, at24CM02 для регистрации событий, ublox neo 6m с активной антенной для координат, часы RTC. БП - копия китайского под свой формат, и пара ионисторов.
PS атмега вместо СТМ потому что я ленивая жопа.
hobogene
20.04.2022 14:09Спасибо. На 160 МГц диапазоне я толком не пробовал. Любопытные результаты. Спасибо за наводку еще раз.
daggert
20.04.2022 14:11160 я взял т.к. там есть лицензия на частоты эти у фирмы. Это был не результат тестов, имейте ввиду.
hobogene
20.04.2022 14:22Я понимаю. Мир даже сейчас не ограничивается Россией, во многих местах 169 MHz - нормальный ISM диапазон, чипы семтековские слегка под него оптимизированы тоже, поэкспериментируем.
madcatdev
21.04.2022 23:05SX1276 без усилителя у вас? Какие антенны используете?
daggert
22.04.2022 08:15На мелких - без.
Антенна делалась под заказ у знакомого радиолюбителя, и как-то даже фотографии нет никакой честно говоря. Выглядит как обычный штырь около метра длины и сантехом 40мм в основании, в термоусадке. Вроде как это диполь с запиткой с конца. Помню что J-pole показал себя плохо, на него возлагали надежды.
eurol
21.04.2022 10:39Открою секрет. У одного оператора есть тариф, где за 2500 обещают «навсегда» каждую неделю смски, минуты и чуть интернета, который по окончании не отключается, а снижает скорость.
Сомневаюсь, что 25 лора-модулей будут сильно дешевле при таком раскладе.
Правда, с питанием придется заморачиваться все равно…daggert
21.04.2022 12:32Ну давайте подумаем: Модуль который я заказываю сейчас стоит очень дорого, в районе 4500. Сюда входит микроконтроллер, часы, gps, лора, БП, плата, обвязка и 1 аккум 18650 в качестве резервного источника питания.
Акутальную версию скинуть не могу, рабочая выглядела так
До кризиса микроэлектроники это все обходилось мне со сборкой в 12$ за набор из 3 модулей + базовой платы.
Если я поменяю лору на GSM - мне придется заменить 1 плату с SX1276 на какой-нибудь SIM800, к нему прибавить кроватку под SIM карту. Обвязка остается прежней - антенну не выкинуть (ну ок, она будет дешевле), плату-переходник тоже т.к. у меня формат модулей определенный. Цена чипа лоры и сима - +- такая-же.
А далее мне надо добавить симку с тарифом и это уже удорожание. Кроме того - GSM сети-то там так и нету. Глухой лес, 60км до ближайшего населенного пункта
eurol
21.04.2022 12:55Ну если GSM нет, то никуда не денешься. А лора-то как далеко у вас бьет? Или стоит цепочка из нескольких лор через 10 километров?
daggert
21.04.2022 13:28До горизонта. 4-6км по смешанному лесу в нормальном режиме, до 20км были отдельные пакеты если рельеф позволял, но это скорей везение т.к. лес обычно весь в складках.
Нужна связь между машинами по пути вывоза. Для обширных территорий (например карьер) есть приемопередатчик на вышке 40м с радиусом в около 7км, который принимает на одной частоте и вещает на другой + передает это все в сеть по микротиковскому мосту на 30км на другую вышку, но там уже и таймслоты и два трансивера.
smart_alex Автор
20.04.2022 13:25В режиме приема LoRa модуль кушает столько, что использовать этот режим можно только в "окнах приёма".
Hlad
20.04.2022 13:51Если сделать сеть LoRaWAN — будет вполне себе дешёвая замена GSM. Но между LoRaWAN и просто LoRa — огромная пропасть.
13werwolf13
20.04.2022 13:28вопрос автору:
в вашем случае почему именно аккумуляторные модули? подать 5 или 3.3 v по тонкому шнурочку который можно спрятать с глаз долой можно на довольно большие расстояния, и запитывать все шнурки не обязательно из одного места
а вот с акб всегда есть нюансы, например разные температурные условия зима/лето (ну или перегрев от того что корпус акб чёрный и попал в место где на него светят прямые солнечные лучи), плюс акб обычно помирают в самый неподходящий момент (когда нет возможности или тупо лень скататься и заменить батарейку).
smart_alex Автор
20.04.2022 13:47Не всегда есть возможность протянуть провода. А что касается запитки, то вместо аккумуляторов можно использовать батарейки (но здесь разработчики выбрали аккумулятор).
avf1906
20.04.2022 13:59+1Странно конечно, требования к модулю малое потребление, при этом стоит атмега древняя ни разу не малопотребляющая атмега. А потребление собственно Лоры тупо зависит от режима, т.е. софтово решается и требованиями ко времени реакции (сколько и когда работаем на приеме). В общем изначально от него сложно ожидать действительно малого потребления. Про SPX3819 уже написали, а еще диод на входе сожрет 0,5В от рабочего напряжения, т.е. ресурс аккумулятора в лучшем случае минус 20%. Да, и по хорошему там нужен не аккумулятор, а литионолхлорид. В общем так себе модуль
smart_alex Автор
20.04.2022 14:08Да, в модуле много чего можно улучшить.
Не согласен только с критикой в адрес ATmega328 - сам микроконтроллер в режиме сна кушает 4 мкА - это более чем подходит для создания батарейеых датчиков.
vvzvlad
20.04.2022 17:13+1Да, и по хорошему там нужен не аккумулятор, а литионолхлорид.
У него с пассивацией проблемы. Тут, эм, атмега стоит ради того, чтобы можно было в ардуине писать неспецам, поставить LiSOCl2 это значит обречь их на стенания «а чо у меня все перестало работать через месяц»
Gordon01
20.04.2022 14:57+2минимальным током потребления по даташиту 90 мкА
Хах, когда я делал всякие такие модемы и счетчики, потребление всего устройства было 10 - 20 мкА.
Вообще, стабилизатор после батарейки/аккумулятора — типичная ошибка новичка. Не нужен он там совсем.
Если надо год+ автономии, то лучше батарейки, у них саморазряд меньше.
ximik666
20.04.2022 15:04+4Делаем что-то аналогичное в рамках студенческого проекта
arduino 168/328
lora ra-01
датчик(и) температуры, влажности, освещенности
питание от 2-АА батареек
светодиод - индикатор работы
никаких преобразователей напряжения, все напрямую
Изображения
smart_alex Автор
20.04.2022 16:08Как это "напрямую от 2х батареек АА"? А когда напряжение будет падать из-за разряда батареек?
Gordon01
20.04.2022 16:29+1А когда напряжение будет падать из-за разряда батареек?
Будет падать. И что такого?
ximik666
20.04.2022 16:39Пусть падает, никаких проблем с этим нет. Серия picopower, стартует на 1.8 вольт, стабильно работает от 2 вольт. Atmega на 8мгц от внутреннего генератора. По тем данным, которые мы получаем батарейки просаживаются на 0.01 вольт за 7 дней. Даже если проработают 1.5 года этого будет достаточно.
smart_alex Автор
20.04.2022 16:43Это долгое обсуждение, здесь вдаваться в подробности не очень удобно. Например, не всегда подходит работа от встроенного генератра, да и датчик может быть рассчитан не на 1,5 года, а на 10 лет... и т. д....
Gordon01
20.04.2022 16:58+1Падение нелинейное. 80% своей жизни напряжение на хорошей батарейке условно стабильно.
Настоящие проблемы создает пассивация, а все остальное мелочи.
WicRus
20.04.2022 16:28+1Вот чем разработчики мотивируют выбор 14500? Легко найти держатель?
Вот к примеру, 18650. Можно бесплатно найти в батареях от старых ноутбуков, с оставшейся ёмкостью более 900мАч.
Или ещё пример, батарее от почивших телефонов/планшетов. Есть у многих, два провода, разъём и ещё и место экономит за счёт плоского форм фактора.
Но вот зачем маломощный, редки и дорогой 14500. Имею в арсенале устройство на 14500, всё в нём прекрасно, но если с этой 14500, что то случится, то заменить её быстро не получится.
vvzvlad
20.04.2022 17:09+2Почему атмега — это плюс? Почему не STM32, в которых энергосбережение лучше? Зачем литийион, почему не литиевые батарейки? Почему, действительно, не 18650, раз уж литийион?
smart_alex Автор
20.04.2022 17:23+3Разумеется, быть богатым и здоровым лучше, чем бедным и больным. STM ещё лучше, чем ATmega.
В статье я специально указал, что ATmega328 - это ОДИН ИЗ ПРАВИЛЬНЫХ ВАРИАНТОВ.
А правильный он в данном случае потому, что ATmega в спящем режиме потребляет 4 мкА и на ней с полпинка делаются любые Ардуино-датчики (а я как раз "ардуинщик").
vvzvlad
20.04.2022 19:25ATmega в спящем режиме потребляет 4 мкА
Дело не в том, сколько он кушает, дело в том, что там, например, нельзя отключить половину периферии на время опроса датчика, нельзя менять частоту тактирования, нельзя оставить работать RTC и так далее. В итоге, это все просто игрушка, не более чем «посмотреть как передает взаправдашния лора».smart_alex Автор
20.04.2022 19:36С одной стороны вы правы - там ничего этого нет, с другой стороны - у меня прекрасно работают на этой базе долгоживущие батарейные сенсоры контакта, температуры, расхода воды и т.д. и т.п. Фактически на ATmega можно сделать практически любой датчик, кроме особо специализированных.
vvzvlad
20.04.2022 19:41Ну вот например, температурный датчик, который собирает данные раз в 5 секунд, усредняет и раз в пару часов отправляет — не сделать. Потому что нет низкопотребляющего RTC, например. А без него будет непонятно, кто там что сохранил.
Нормальное шифрование тоже не сделать — ни криптоядра нет, ни производительность не потянет.
Выглядят ли эти датчики узкоспециализированными? Да нет, обычные задачи.smart_alex Автор
20.04.2022 19:49+1У меня для вас две хорошие новости:
Примерно то, что вы описали прекрасно делает, например, мой датчик расхода воды.
На ATmega328 прекрасно работает связка софтовых AES + SHA256, можно еще до кучи прикрутить ATSHA204A.
Как грамотно шифровать пакеты при помощи AES+SHA, не мне вам объяснять - вы это лучше меня знаете.
vvzvlad
20.04.2022 19:50+1Примерно то, что вы описали прекрасно делает, например, мой датчик расхода воды.
Вопрос в точности временных меток. Любой, кто делал часы на атмеге, это может подтвердить. А с учетом того, что тут еще и сон, все становится грустнее.smart_alex Автор
20.04.2022 19:55+2Я думаю, что для продолжения дискуссии по существу нам с вами потребуется несколько часов и более удобная обстановка, чем комменты на Хабре. :)
DmitryVS
21.04.2022 09:08А у меня другой не решённый вопрос с защитой канала. Хорошо, мы всё наглухо пошифровали, но, как правило, проблема не в доступе к данным как таковым, а со спуфингом. Шифрование никак не решит проблему с подменой данных, достаточно просто перехватить пакет и начать им же "гадить" в эфир, чтобы, как минимум, напакостить.
Установка закрытого доверенного канала представляется мне возможной только с двухсторонней связью и обменом "приветствиями". А это уже совсем другой расклад по энергетике. Не хочется такого размена.
Пока в голову пришло только шифрование пакета, включая его инкрементный серийный номер и начальная синхронизация номеров на центральном узле. Возможно есть более красивые методы?
smart_alex Автор
21.04.2022 09:23Вы думаете в правильном направлении. Связка AES и SHA плюс грамотная крипто-архитектура позволяет создать надёжно защищённые IoT соединения, тем более защиту от перехвата и повторной посылки пакетов.
Вообще, это интересная, но очень объёмная и интеллектуально насыщенная тема — как минимум требуется несколько статей (лекций).
Gordon01
21.04.2022 10:42В lorawan все это есть из коробки, да и руками реализуется без проблем.
DmitryVS
21.04.2022 22:51LoRaWAN не очень-то хорош для ноды с микропотреблением. Грубо говоря, основной потребитель энергии - передатчик. Поэтому каждый лишний байт это минус время жизни батарейки. У меня, скажем, пакет из 11 байт. Т.е., даже добавление 32-разрядного серийника в пакет, это уже серьёзный удар по энергобюджету. Любые "замысловатые" модели коммуникации и диалоговые режимы сразу выносят время автономности к чертям.
Прикинуть на сколько хватит заряда можно довольно легко. У Semtech'а на сайте есть специальный калькулятор. Забиваешь настройки RF, цифровой части, режим обмена и получаешь потребление.
Gordon01
22.04.2022 11:31Работал в одной известной российской компании, делающей телематику на narrow band каналах, там пакет 6 секунд передавался, было достаточно на все и на 10+ лет работы.
Лень парировать ваши аргументы, все решается, проблемы протокола — меньшие из проблем всей это затеи, любой нормальный программист их решит.
DmitryVS
22.04.2022 11:36А клавиши топтать, значит не лень было ;) Я Вам всё написал, берёте калькулятор и считаете энергетику. Ну а коль лень, то и разговаривать не о чем.
Ну и то, что Вы сравниваете толстое с тонким да ещё и сферическое в вакууме... ну такое себе...
hobogene
22.04.2022 11:56У меня, скажем, пакет из 11 байт. Т.е., даже добавление 32-разрядного серийника в пакет, это уже серьёзный удар по энергобюджету.
Вот это, кстати, не факт. Можете калькулятором и проверить. Например, для SF12/BW125/low DR optimizer on будет одинаковое Time on air и для 11 байтов, и для 15-ти.
Т.е. посыл у Вас верный, но дьявол в деталях. "Не все так просто" :-)DmitryVS
22.04.2022 12:05Согласен, этот пример неудачный. Конечно, это зависит от настроек схемы кодирования. Замените SF на другой и дискретность упаковки октетов тоже изменится.
hobogene
22.04.2022 12:24А потом по каким-то причинам 11 байт превратится 13, и сможете безболезненно добавить три байта под счетчик. А может, Вашем случае достаточно преамбулы покороче. И так далее. Все от задачи зависит.
Формат пакета LoRaWAN вообще по мотивам 802.15.4 "изобретен", хотя сейчас немного стесняются про это вспоминать. Не сказать, чтобы все это придумывали откровенно глупые люди без всякой причины. Хотя есть, конечно, случаи, когда все это не годится. В конце концов, если у Вас исключительно аплинки, то и приемник включать для получения даунликов совершенно излишне.
Dozer88
21.04.2022 08:46+1Вообще, если хорошо разобраться с атмегами, то можно сделать очень даже энергоэффективное решение. Во-первых, перейти от 8МГц кварца к встроенному 8МГц генератору + кварц 32768Гц для таймера/RTC. Это позволит провалиться в глубокий сон, и просыпаться по часовому таймеру, например 16 раз в секунду для опроса датчиков/кнопок итп. Средний ток устройства у меня был около 15мкА. Во-вторых, отказаться от стабилизаторов - меги имеют достаточный диапазон питания, а тот же трансивер можно запитывать только на время работы.Хорошие были время 8-биток....
smart_alex Автор
21.04.2022 09:01Всё верно. Несколько замечаний:
Я бы оставил внешний кварц и не переходил к встроенному генератору — иногда это важно.
«Просыпаться 16 раз в секунду» можно и без внешнего RTC.
Хороший DC-DC преобразователь лучше прямого питания от батареек.
Сейчас тоже отличные времена для 8-биток (если голова работает и руки растут из правильного места).
P.S. И снова обращение к администрации Хабра: верните старый редактор комментов! Новым пользоваться ****** как неудобно!
DmitryVS
21.04.2022 08:53Почему нельзя периферию отключить? PRR = _BV(...) | ... RTC скорее всего нафиг не нужен, хотя и так можно. А лучше сделать цикл из SLEEP_MODE_PWR_DOWN и пробуждения из него по собачьему таймеру.
Gudd-Head
21.04.2022 06:57Не очень понятен минус про светодиод на плате. Он же не по питанию стоит: экономишь энергию = не зажигай его. А для отладки очень удобно. Не?
smart_alex Автор
21.04.2022 07:19Да, я примерно так и написал в статье. С другой стороны, я бы вообще не добавлял светодиоды на батарейную плату, если только не требуется какая-то особая индикация.
DmitryVS
21.04.2022 08:34Делал примерно такую же плату под датчики T/RH. По питанию очень хорошо показал себя TPS61291 - DC/DC boost от TI. Использую 2 батарейки типа ААА. Удаётся высосать их примерно до 2.1-2.2 В суммарно. Собрал несколько таких датчиков с элементом CR2450. Преимуществ не выявлено (размер мне не важен), а с учётом цены выигрывают "пальцы". Аккумуляторы тут вообще лишние. Раз в два года технологичнее придти и заменить элементы питания, чем придти, снять аккумулятор, зарядить аккумулятор, поставить аккумулятор.
smart_alex Автор
21.04.2022 09:09+1Осталось только немного поработать над дизайном корпуса (платы), возможно расположить батарейки не сбоку, а снизу — и прототип универсального народного датчика (линейки датчиков) готов.
Ждём-с...
DmitryVS
21.04.2022 09:55Ещё несколько соображений "по теме" про мой опыт.
Корпус тут серийный покупной. Плата под него сделана. По эксплуатации выводы такие. Дизайн тут избыточный, можно сделать заметно меньше и компактнее. Но не нужно, т.к. см. п.1 :) По BOM. Кварц - первый кандидат на выкидывание: дорогой компонент, точность не требуется, датчики с мегой на встроенном RC показали отличную работу на практике, минус площадь 3-х компонентов на плате. Кнопка на сброс полезна, кнопка "Mode" - не пригодилось. Гребёнка под расширение/диагностику нужна только в прототипе, но вот в нём прям очень нужна. "Боевой" датчик обвешанный соплями - это нереальное днище, не делайте так, пожалуйста, в работе должны стоять только кастомные платы с конкретным функционалом. Это касается вообще любых проектов. Светодиоды - тоже самое, нет в них пользы в работе, но выручали при отладке.
С развитием идеи вопрос вот в чём. Этих датчиков я наклепал десятка полтора. Свою задачу они выполняют. Они - часть системы большого проекта бытовой автоматики. Я не вижу самостоятельной ценности проекта отдельного датчика даже для open source. Эта тема наглядно показывает, что подобных штук: 1) полным-полно уже наклепали, 2) кому требуется "с перламутровыми пуговицами", делают себе сами.
Я влез только чтобы обратить внимание на моменты разработки добытые через свой опыт (организация питания, режимы работы MCU). Возможно кому-то полезно будет.
smart_alex Автор
21.04.2022 10:10+1Коротко:
- Я бы кварц оставил — иногда это нужно.
- Я вижу «народную» линейку сенсоров так: там должны быть и специализированные датчики и универсальная плата для подключения любых датчиков. А также должны быть варианты для LoRa, nRF24 и т. д.
- Возможно и «наклипали полным-полно», но наклипали всякую фигню кто во что горазд, а нормальной концептуально выверенной народной универсальной линейки DIY сенсоров нет.
Gordon01
21.04.2022 10:45+1А вы КПД антенны замеряли? КСВ хотя бы?
Визуально кажется, что она просто рандомно расположена и в таком положении вряд ли нормально работает. 10-40% от силы.
DmitryVS
21.04.2022 22:34Не зря Вам так кажется :) У меня те же сомнения. К сожалению, КСВ-метра у меня нет на нужный диапазон, и в RF-дизайне и инструментарии я вообще полное дерево. Попытался приподнять повыше над платой, не делал под антенной полигон. Всё. Работает стабильно в пределах дома. Задача решена, улучшайзинг RF-части оставлен до лучших времён. Делал ещё с внешней антенной на хвосте со SMA разъёмом. Пробивает через два деревянных дома и 15 м между ними. Большего мне и не надо было.
teastan0
22.04.2022 14:08А использовать Литий-тионилхлоридные (LiSOCl2) батареи (вроде на али есть) и выпилить стаб с платы?
clawham
все эти странные размышления о батарейном питании при использовании аккумулятора - разбиваются вхлам маленькой солнечной батарейкой...зачем экономить микроамперы когданебольшой панельки хватит улучшить живучесть вплоть до 100% онлайна на прослушивание и ответе каждые 30 секунд? А если прям вот ну ваще подвал модвал тьма и надо 5 лет - ну купите 20 ач литиевую батарею и хватит лет на 10
smart_alex Автор
Дело в том, что не всегда есть возможность использования солнечной батареи...
dlinyj
Каждое решение хорошо для своих задач. Иногда надо миниатюрно и быстро.
13werwolf13
не хватит.. не проживёт ни одна батарея 10 лет даже если от неё вообще ничего не будет запитано
hobogene
Мне приходилось видеть ультразвуковые счетчики воды, жившие лет по 12 на батарее. Вообще у них 20 лет заявлено, и, говорят, живет. Но своими руками щупал только возрастом в дюжину лет. И жрут они немало. Но и стоят не пять баксов.
napa3um
Проживают и дольше. В древних материнках или в игровых картриджах раритетных с энергозависимой памятью, бывает, и 20-ти летней давности читаются данные :).
hobogene
Глобально и ртутно-цинковые из оптических прицелов можно вспомнить... Но это лучше не для дома, да и фиг добудешь.
hogstaberg
Ну здравствуйте. Литий-тионилхлорид проживёт легко например. На самом деле любые первичные литиевые элементы проживут 10 лет если их в совсем уж экстремальные условия не отправлять.
13werwolf13
возможно я так с ходу срезал потому что я родом из сибири, а там каждую зиму экстремальные условия)
hobogene
От них лучше бы время от времени что-нибудь запитывать, да и даже не абы что.
Wizard_of_light
У меня на руке прямо сейчас часы, которые от одной батареи уже то ли тринадцать, то ли четырнадцать лет тикают - не менял с момента покупки. Так что есть, есть такие батареи.
Gordon01
Да есть конечно, все счетчики электронные от них работают по 10+ лет
Altaev
Некоторые электронные счетчики газа лет через 6-7 тухнут при заявленных 12. Это в бытовых условиях, внутри квартиры, где вообще никто не жил.
Gordon01
https://ru.wikipedia.org/wiki/Анекдотическое_свидетельство
Анекдотическое свидетельство (англ. anecdotal evidence) — это утверждение или доказательство, основанное на случаях или эпизодах из личной жизни или неповторимых опытных данных
chyvack
У коллег на работе: сначала у одного сдох газовый счетчик, через полгода у другого. Оба счётчика перестали работать примерно после 6 лет. В одном я подключил внешнее питание на батарейку и он ожил. Оба заменили за свой счёт на новый.
hobogene
А Вы посмотрите в паспорте, какой там межповерочный интервал указан. Может, там не бага, а фича (о которой забыли конечных пользователей предупредить, как обычно).
chyvack
hobogene
О как. Хорошо "Бетар" наработал. А это ведь еще ничего производитель.
Edited: спасибо за информацию. Для меня она вполне практический смысл имеет.
chyvack
Про шесть лет работы, не могу уточнить, это было больше года назад. Сейчас спросил коллегу, этот счётчик не он ставил, дату назвать не может
Посмотрел сам счётчик: год выпуска 2012, коллега его принёс на работу, мне кажется в доковидные времена. Сколько он провисел нерабочий, тоже не могу сказать.
hobogene
Что посредственных устройств на рынке полно, спору нет. Но у этой проблемы нетехнические корни.
sappience