[Программирование микроконтроллеров, Умный дом, Интернет вещей, DIY или Сделай сам, Электроника для начинающих] Рожденные в карантине: беспроводной датчик и все-все-все. Битва роботов в конце

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
26-Апр-2021 16:30

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

а также

SPL
  • управлением открывание/закрывая форточки в парнике или механический кнопконажиматель;
  • модуль охранной сигнализации или контактный датчик;
  • управление светодиодной лентой или небольшим вентилятором;
  • «умный» уличный фонарь на солнечных батареях;
  • наручными/настенными часами или кухонным таймером;
  • автоматический лазер для игр с котом;
  • и даже электрическая мышеловка или кормилка для животных.


Устройство представляет собой микроконтроллер с приемопередатчиком nrf24l01 и выходами до 3А стоимостью всего от 2€*. Заинтересовались и хотите попробовать сами? Последние 10 плат вышлю по Германии абсолютно бесплатно.
* по ценам на 07.2020
Требования к устройству
Необходимость разработки, как ни странно, пришла от желания установить банальный беспроводной датчик температуры. Я знаю, на Хабре и в Интернете представлено огромное количество температурных датчиков на любой вкус. Но у большинства готовых работ есть серьезный недостаток – цена. Платить по 10-15€ за штуку, на фоне текущего дефицита и подорожания микросхем, это не серьезно, особенно когда тебе надо больше 10 штук.

Почему так много?

SPL
Когда температура в доме опускается ниже 19°C, возникает дискомфорт и желание включать отопление. Двери в комнатах закрываются и там образуется свой микроклимат. Слишком высокая температура плохо скажется на счетах и выбросах СО2, а низкая температура будет способствовать избыточной влажности и появлению плесени.
Для помещений рекомендуется соблюдать следующие температуры: гостиная +22°C, спальня +20°C, ванная +25°C, детская +23°C, коридор +18°C, подвал > +1°C, гараж > 0°C.

Вторым недостатком увиденных мною датчиков является радиус действия. WiFi с трудом пробивает междуэтажные перекрытия, а что уже говорить о подвале. Можно протянуть WiFi в подвал, для любимой мышки, но она перегрызет провода, испугавшись излучения. Поэтому, датчик должен уметь ретранслировать сообщения от других датчиков.
Третье требование – автономность. Для 10 датчиков нужно более 10 батареек и, конечно, хотелось бы заряжать батарейки не чаще 2-3 раз в год. А лучше вообще забыть про зарядку. Например, датчик расположенный на улице может заряжаться от солнечной батареи, а датчик в кладовке может работать от “таблетки”, просыпаясь 1 раз в час.
Четвертое требование — универсальность. Хочется иметь класс устройств, которые будут долго спать, отправлять 5-8 байт в сеть, а при наступлении события включать что-нибудь маломощное, до 2-3А.
Выбор компонентов
В качестве приемопередатчика был выбран NRF24L01, известный не только благодаря своей низкой цене, но и богатым выбором готовых SMD модулей со встроенным усилителем и разъемом внешней антенны.
Датчик температуры/влажности должен иметь цифровой интерфейс и точность выше 1 градуса и опять же приемлемую цену. Выбор пал на SHTC3.
Дисплей должен быть дешевым и информативным. В качестве дисплея было выбрано семейство больших и малых SSD1306 дисплеев. Кончено, я задумывался и над E-paper и для него зарезервировано место, но он плохо ведет себя на морозе и все еще дорого стоит.
Основной дисплей является не энергоэкономичным, поэтому надо определять необходимость его включения. Датчик движения SR602 понравился из-за его размеров. Также можно включить сенсорную кнопку или ИК-приемопередатчик.
Аккумуляторы были выбраны 2 типов: NiMH, как безопасное и дешевое решение для домашних и уличных нужд, если постоянная отрицательная температура длится меньше 1-2 недель и LiFePo4 для уличных нужд при сильных отрицательных температурах.
Контроллер заряда аккумуляторов был выбран CN3085 для NiMh и CN3058e для LiFePo4. Они имеют схожую цоколевку, за исключением вывода ¬DONE, без которого можно обойтись. NiMH также можно заряжать через токоограничительный резистор.
Так и сложились требования к микроконтроллеру: SPI, I2C, RTC с alarm, PWM, ADC, 5 свободных gpio, малое потребление, рабочую температуру -40°C..+85°C, диапазон напряжений аналогичный NRF24L01, также, имеет значение цена, комфортный для пайки корпус и большой lifetime.
Взвесив все “за” и “против” выбор пал на STM8L051. Некоторые могут обвинить меня в предвзятости к STMicroelectronics и будут правы, но на самом деле

были рассмотрены и отброшены следующие варианты:

SPL
ESP32-S2FH4 — дешево, но WiFi энергозатратен и придется возиться с отладкой высокочастотных схем;
STM32L0XX + NRF24L01 – очень хорош, но хотелось бы дешевле;
PIC16Fxx + NRF24L01 — также понравился, но нет RTC;
nRF52810 – хорош в своем классе, но будет дороже, чем NRF24L01 + дешевый микроконтроллер;
и некоторые китайские производители были отброшены по причине плохой поддержки.

Таким образом определился следующий список компонентов:
Наименование компонента
Цена*, €
Минимум
Обычный
Обычный с экраном
Метеостанция
Внешняя метеостанция
STM8L051
0.4
x
x
x
х
х
NRF24L01+
0.6
x
x
x
х
х
PCB
0.2
x
x
x
х
х
Кварц. резонатор 1TJF090DP1AI075
0.2
x
x
х
х
Датчик температуры SHTC3
0.8
x
x
х
х
Датчик движения SR602
0.4
x
х
х
Аккумулятор NiMh
1
x
x
х
х
Зарядка аккумулятора CN3085 и стабилизатор напряжения AP2210K-3.3
0.3
x
х
х
Дисплей SSD1306 0.91
1.1
x
Дисплей большой SSD1306 2.4
10
х
х
Солнечная панель
2
х
Итого, €
1.2
3.2
5
13.9
15.9
* по состоянию на 07.2020, текущая цена может отличаться в 2-10 раз. Будем надеяться, что это скоро пройдет.
Схема принципиальная.
Я не настоящий электротехник, поэтому в схеме могут быть допущены ошибки, влияющие на работу устройства в долгосрочной перспективе.
Разработка принципиальной схемы и платы выполнялась в KiCAD.
Основные узлы

Питание

Ключик для датчиков и внешних устройств, 2 шт

SPL


и многочисленные разъемы

SPL


Схема разрабатывалась универсальная и необходимость пайки элементов зависит от конфигурации устройства. Пайка всех элементов сделает устройство нерабочим.
Например, в схеме предусмотрены 3 варианта зарядки батарей – через зарядные контроллеры, с подключением внешнего блока питания и через токоограничительный резистор для подключения солнечной панельки.
Также невозможно одновременно использовать датчик движения и диод D2, как индикатор MCU.
Цоколевки для SMD модулей NRF24L01 и NRF24L01 Long Range — разные и можно подключить только один из них.
С целью снижения энергопотребления, был установлен отдельный ключ Q1-VT1, который прерывает питание дисплея, приемопередатчика и датчика температуры. В режиме сна основными потребителями являются микроконтроллер, 100К подтяжки на VT1,VT2 и датчик движения, при его установке. I2C шина также была подтянута на отключаемое питание датчиков, дабы избежать утечки драгоценного заряда в режиме сна.
Для подключения внешних устройств, таких как водная помпа, сервопривод, аналоговые датчики или кнопки управления, предусмотрен разъем J4 с управляемым питанием Q2-VT2. Этот выход может иметь раздельное питание с основной платой J3. Максимальное напряжение зависит от подобранных транзисторов и здравого смысла.
Печатная плата.
Я не настоящий проектировщик печатных плат, поэтому с благодарностью приму все Ваши замечания. Плата проектировалась двухслойная из соображений экономии.
Верхний слой

Нижний слой

SMD компоненты выбраны размером 0805, для комфортного разглядывания номиналов резисторов и ручной пайки. Знаю, что многие из вас способны запаять 0201 с закрытыми глазами 60Вт паяльником, так вот это схема и для тех кто этого не может. Для самого мелкого компонента — температурного датчика SHTC3 нанесена разметка для его точного позиционирования. Посадочное место для ключей управления устройством, к которому можно подработать транзистор с переключением до 6А при 8V, что больше возможностей дорожек.
Датчик температуры\влажности разместился рядом с контроллером в надежде, что большую часть времени контроллер будет спать и не будет нагревать датчик. По этой причине, силовые элементы унесены на противоположные концы платы, но это не помогает и в режиме зарядки температура увеличивается на 4-5 градусов. NRF24L01 припаивается отдельным модулем, для экономии времени и возможности выбора типа приемопередатчика. Проект данной платы вы найдете на GitHub.
Если схема зарядки аккумулятора не требуется, то можно ее отломать бокорезами, сделав «кусь» по линии отверстий(берегите глаза).
Плата распаивалась с помощью паяльной пасты и утюжных технологий. Запекать 2 мин. при температуре “Лён”:

Смотрится вполне сносно:

Корпус
Размер платы удачно совпадает с размерами 2 батареек ААА, что делает доступными все корпуса с батарейками 2xААА или 2xАА. Также подойдут некоторые корпуса для 1x18650 при диагональном размещении платы. Вид у этих «коробочек» соответствует цене, но мы их спрячем и замаскируем.
Для устройств находящихся на видном месте спешу поделится технологией быстрого и дешевого изготовления красивых корпусов.
Покупаем или печатаем пластиковый корпус и фанеру толщиной 1-2мм из благородных пород дерева. С помощью цианокрилата(берегите глаза и нос) клеем фанеру на пластик и отрезаем все лишнее. Если у вас такие же кривые руки, то необходимо запастись шпатлевкой по дереву и замазать сделанные щели и сколы. Затем, надо дать просохнуть клею и шпатлевке, затереть всё наждачной бумагой и покрыть маслом или лаком.
Таким образом, из

серой пластиковой коробочки

SPL


получается теплый деревянный корпус.

Тестирование
Платы были успешно протестированы при температурах от +40°С до -14°С в конфигурации с дисплеем и датчиком движения. Для плат, которые будут использоваться на улицы в качестве защитного покрытия был использован специальный лак.

Измеренный ток в спящем режиме ~1.5мкА при 2.6В. При включенном режиме потребление зависит от количества подключенных устройств, яркости дисплея, количестве включенных пикселей и режимах приемопередатчика, в среднем получилось 40мА.
Ниже приведено расчетное время работы в зависимости от используемой батареи.
АКБ
Заряд, mAh
Номинальное напряжение, V
Период передачи данных, c
Расчетное время работы на 70% заряде, дней
AAx2
2500
2.4
300
217
AAAx2
900
2.4
300
77
AAx3
2500
3.6
120
174
AAAx3
900
3.6
120
62
CR2025
150
3
3600
189
AAx6
5000
3.6
120
350
На сегодняшний день я не могу подтвердить достоверность расчетных данных, испытания продолжаются.
Программное обеспечение.
STM8L051 является 8 битным MCU, имеет 1Кб RAM и 8 Кб ПЗУ. Это значит, что в 8 Кб необходимо уместить максимальную комплектацию:
  • поддержка интерфейсов i2c, spi;
  • поддержка устройств: датчик, NRF, дисплей, часы;
  • протокол передачи данных SMESH;
  • шрифт (цифры, знаки, буквы);
  • график вывоза мусора.

И здесь придется бороться за каждый байт. Программный код был написан на языке С для компилятора sdcc. Из допущенных ограничений стоит отметить, что шрифт уместился только от пробела до заглавной Z, а годовой график вывоза мусора пришлось упаковать в 1 байт на событие. Для дисплея размером 128*32 пикселя требуется RAM буфер 512 байт, что приемлемо для микроконтроллера, а вот для экрана 128*64 требуется уже 1Кб, что в RAM уже не помещается. Поэтому, для большого экрана, его буфер пришлось делить на 2 части – верхние 3 строки текста и нижние 3 строки текста.
Возможно, описание программного кода со всеми ухищрениями следует оформить отдельной статьей, но сначала исходный код должен быть приведен в приличный вид. Выкладываться на github он будет постепенно, пропорционально полученному отклику.
SMESH (Simular MESH)
Да, уместить полноценный MESH в 8Кб не получилось, но по крайней мере он умеет ретранслировать сообщения. Для управления необходим контроллер, который будет синхронизировать устройства, принимать показания датчиков, передавать время и другие данные. Каждое устройство имеет уникальный ID(4 байта) и динамический однобайтовый адрес. Одна сеть поддерживает до 126 узлов, с максимальным диаметром 22 узла. Кроме этого, каждый узел может ретранслировать данные с устройств не участвующих в сети.
Подразумевается, что контроллер сети постоянно включен и передает данные устройствам. Устройства же спят большую часть времени, просыпаясь согласно расписанию. Расписание имеет установленный период и всегда кратно одному часу. Таким образом, зная точное время и период цикла можно вычислить следующий сеанс связи. С началом периода устройства должны проснуться, передать свои данные и уснуть до следующего сеанса.
Если устройство не будет просыпаться каждый сеанс связи, то оно должно быть исключено из цепочки ретрансляторов данных.
Основа функционирования сети – точное время. Поэтому сообщения с точным временем от контроллера сети передаются регулярно. Это помогает скорректировать время на устройствах и быстро подключить новое устройство.
Как мы знаем в аббревиатуре IoT буква S означает seсurity. Нарушать эти традиции у меня не хватило памяти. Но можно быть уверенным, в случае атаки злоумышленник будет находится в радиусе 100 метров от крайнего узла, и при обнаружении невероятных значений температуры вам следует выпустить ваших собак.
На данный момент полноценного тестирования сети проведено не было, но в первом приближении это работает.
Контроллер сети
Изначально контроллер сети планировалось сделать также на базе микроконтроллера, в виде шлюза «NRF24L01 — WiFi». Но, посчитав соотношение цена\функциональность\время разработки, выбор пал на полноценный PC — Raspberry PI Zero(20€) c 6'' HDMI дисплеем+touchscreen(30€). Несмотря на свою одноядерность и 1Гб RAM RPi Zero справился со своей задачей отображения сенсоров и почасового прогноза погоды на остаток дня.
В качестве ОС был развернут минимальный образ OC *Linux* и установлен Kivy, который поддерживает egl, умеет работать с framebuffer и не нуждается в Xwindows. Следуя заветам Unix, было написано несколько программ, каждая из которых вносит небольшой вклад в отображение информации. Основной является программа управления сетью, которая также принимает данные с устройств, распределяет динамические адреса и передает точное время, погоду и другую информацию. Программа написана на языке С и может быть портирована на любой микроконтроллер. Также работают несколько небольших Python-скриптов: однин из них прекрасно генерирует картинку первого этажа дома, второй для второго этажа, еще один для генерации погоды от OpenWeatherMap на следующие 12 часов, отправки данных на сервер и телеграмм, и наконец, программа, которая показывает сгенерированные картинки по кругу, с возможностью swipe и обеспечивает интерфейс с пользователем.

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

Автоматический полив цветов на солнечной батареи
Скоро лето, время когда люди уезжают в отпуска, оставляя свои комнатные растения без воды под жаркими лучами палящего солнца. Я знаю, на Хабре и в Интернете представлено огромное количество систем полива для цветов. Большая их часть требует питания 220В или емких LiPo АКБ.
Для модификации нашей платы в автоматическую поливку цветов нам потребуется маломощная водяная помпа до 3А и напряжением 3-4В. Помпу необходимо поместить в емкую канистру от 5л. Желательно, чтобы канистра находилась на одном уровне с цветком, иначе мощности помпы может быть недостаточно для подъема воды более, чем на 30см. Если канистра с водой будет выше цветка, то необходимо поставить обратный клапан, который будет предотвращать самотек воды, запуская в трубопровод воздух. Помпа подключается к разъему J4.
В простейшем случае, длительность включения насоса можно настроить экспериментально. Например, установить включение на 3 минуты 2 раза в день. Для ручной регулировки цикла подачи воды можно подключить дисплей и 2-3 кнопки к разъему J7. В качестве обратной связи можно использовать ADC канал или поместить датчик влажности ближе к поверхности земли. А источник питания лучше использовать 3-6 аккумуляторов АА и солнечную батарею(блок батарей) площадью от 0.4 кв.м., которую необходимо подключить к разъему J8 и приклеить(прислонить) к окну.
Данная схема уже была реализована и, возможно, работает и по сей день, но на другом микроконтроллере.
Безопасный пускатель фейерверков
Не сомневаюсь, что читатели Хабра соблюдают технику безопасности при запуске фейерверков, но несчастные случаи также возможны при некачественной продукции. Поэтому для безопасности и комфорта инициировать запуск фейерверков лучше на безопасном расстоянии.
Для этого понадобится 2 таких устройства: одно для запуска, с нитью накаливания, а второе для управления. В качестве нити накала можно использовать никелевую нить малого сечения, намотанную на разъем и подключенную к J4. Для нагрева нити достаточно 3-4 аккумулятора АА и соответствующий току и напряжению транзистор в ключе VT2. Длину нити следует подобрать так, чтобы она светилась ярко-желтым светом, но при этом не перегорала мгновенно.

Перед надеванием нити накаливания на фитиль фейерверка, фитиль следует загнуть. Для пульта управления следует использовать второе устройство, подключить кнопку запуска к разъему J12. Соблюдайте осторожность при включении устройства!
Демонстрацию устройства, к сожалению, провести не удалось из-за отмены фейерверков в этом году из-за COVID.
Бонус. Битва роботов

«Их схватка будет легендарна»
В качестве побочного продукта(своего рода вложенная прокрастинация) сопряжения STM8L0xx+NRF24L01 были изготовлены роботы для игры всей семьей. Схему печатной платы, ПО и модели деталек для 3D печати можно найти на GitHub.
Идея была в создании дешевой игрушки на радиоуправлении с возможностью расширения. В качестве основы корпуса была взята печатная плата, на которую крепятся моторы N20 с редуктором на 150об/мин и батарейный отсек с поворотным колесом.
Для добавления зрелищности борьбе был предусмотрен крюк с сервоприводом, но в схватке реальной пользы от него почти нет. С помощью крюка робот может самостоятельно переворачиваться и впиваться в ногу. На плате есть возможность подключения излучателя для стрельбы фотонами и фотодиода с операционным усилителем, а также внешней платы управления на базе esp32 c внешней камерой. К сожалению, все это так и не было протестировано.
В проекте также используются NiMH аккумуляторы, терпимые к замыканию и ударам, особенно, в руках детей. Cледует обратить внимание на максимальный ток NiMH аккумуляторов, дешевые аккумуляторы не способны выдать ток, необходимый для работы сервопривода под нагрузкой и просаживают напряжение, сбрасывая микроконтроллер.
Было придумано множество вариантов игр, роботы могут устраивать гонки, драться, играть в футбол. Один из вариантов игры можно увидеть в этом коротком видео:
Извините, данный ресурс не поддреживается. :(
За все время эксплуатации сломалось 6 больших колес, 2 кнопки пульта управления, 2 сервопривода и 1 мотор. Запасайтесь колесами!
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_umnyj_dom (Умный дом), #_internet_veschej (Интернет вещей), #_diy_ili_sdelaj_sam (DIY или Сделай сам), #_elektronika_dlja_nachinajuschih (Электроника для начинающих), #_stm8l051, #_nrf24l01+, #_datchik_temperatury (датчик температуры), #_besprovodnye_seti (беспроводные сети), #_poliv_tsvetov (полив цветов), #_meteostantsija (метеостанция), #_umnyj_dom (умный дом), #_glupyj_dom (глупый дом), #_robototehnika (робототехника), #_zapusk_fejerverkov (запуск фейерверков), #_bitva_robotov (битва роботов), #_zelenaja_tabletka (зеленая таблетка), #_for_adults, #_vechnoe_ustrojstvo (вечное устройство), #_solnechnaja_energija (солнечная энергия), #_wireless_sensor, #_temperature_sensor, #_solar_energy, #_smart_home, #_diy, #_skuchno (скучно), #_dlja_razvitija (для развития), #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
, #_umnyj_dom (
Умный дом
)
, #_internet_veschej (
Интернет вещей
)
, #_diy_ili_sdelaj_sam (
DIY или Сделай сам
)
, #_elektronika_dlja_nachinajuschih (
Электроника для начинающих
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 26-Ноя 00:12
Часовой пояс: UTC + 5