ARDUINO PIK-PIK RTU2

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
20220818_181801.jpg

PIK-PIK RTU2 - это... я не знаю как кратко объяснить, что это такое. Он совмещает в себе регистратор данных (datalogger), метеостанцию, контроллер, дистанционное управление и человеко-машинный интерфейс (HMI).

Используемая плата: Arduino MKR WiFi 1010.

Философия и цели:
  • По возможности максимально пользоваться свободным программным обеспечением;
  • Удобный и интуитивный человеко-машинный интерфейс;
  • Автономность и переносимость; (заказал самую жирную LiPo, что продавалась)
  • Безопасность и шифрование;
  • Установить на даче и дистанционно управлять: холодильником, два отопителя, водяной насос и бойлер.

Расскажу о каждой функции подробно:

Метеостанция. В устройстве будут использоваться следующие датчики:
  • Поверх главной платы установлен MKR ENV Shield, в котором есть датчик влажности, датчик атмосферного давления и температурный датчик;
  • Два внешних цифровых термометра DS18B20. Один комнатный, другой уличный.
Человеко-машинный интерфейс (HMI):
  • Стандартный китайский жидкокристаллический экран 20x4 с цветной RGB подсветкой (радужная анимация, уии!);
  • 6 кнопок управления: ESC, OK, Лево, Право, Вверх, Вниз. С таким управлением можно даже текст вводить;
  • Пьезо зуммер для звукового оповещения;
  • 6 различных цветов светодиодов:
    • Заряд аккумулятора LiPo 2,7 Ah 3.7 V;
    • Синхронизация времени;
    • WiFi;
    • Операции ввода-ввывода на SD карту;
    • 2 резервных.
  • Переключатель питания аккумуляторов.
Контроллер:
  • Предусмотрено 2 × 3 цифровых вывода. Собираюсь релюшками включать/выключать питание в розетках.
Регистратор данных:
  • На плате MKR ENV Shield имеется слот для SD карты. Я установил щепку на 16 ГБ;
  • С заданным интервалом на SD карту записывается вся телеметрия;
  • Синхронизация времени через интернет.
Дистанционное управление:
  • Подключение к интернету через встроенный модуль WiFi;
  • WebServer с шифрованием и паролем:
    • На сайте можно управлять розетками, смотреть графики изменения телеметрии по времени и скачивать журналы для дальнейшей обработки;
  • Пробрасывание туннеля на случай, если невозможно открыть порты.
Корпус:

Снимок экрана_2022-08-16_18-47-28.png

Корпус смоделлировал во FreeCAD 0.20.
Наслайсил в PrusaSlicer-2.4.2.
Печатал программой Printrun 2.0.0rc8 (Pronterface)
на принтере MakerGear M2E.
Операционная система: Manjaro Linux.

Я не смог загрузить файл модели на форум, так как файл слишком большой, поэтому ссылка:
https://pik-pik.ee/nextcloud/s/YS9HTbfTWWj82BM

Электрическая схема:

Снимок экрана_2022-08-30_18-12-29_pik-pik_rtu2_wiring1.png

Снимок экрана_2022-08-30_18-12-56_pik-pik_rtu2_wiring2.png

Снимок экрана_2022-08-30_18-13-12_pik-pik_rtu2_wiring3.png

Чтобы не запутаться во время пайки, я нарисовал электрическую схему в редакторе схем KiCad 6.0.7.

Код:

Код прошивки пишу в обычном Arduino IDE 1.8.19.
На данный момент в коде 4 тыс. строк.
Старался писать код так, чтобы он был легко читаемым, местами комментарии писал.
Старался избегать динамического выделения памяти.
Постоянно приходится балансировать между производительностью и расходом памяти. Где-то удачно, где-то не очень.

Скетч использует 137340 байт (52%) памяти устройства. Всего доступно 262144 байт.
Глобальные переменные используют 26736 байт (81%) динамической памяти, оставляя 6032 байт для локальных переменных. Максимум: 32768 байт.

Используются библиотеки: RTCZero, WDTZero, SPI, WiFiNINA, ArduinoBearSSL, Arduino_MKRENV, PCF8575, LiquidCrystal, SD, Arduino_PMIC.

Что сделано:
  • Напечатан корпус;
  • Компоненты установлен;
  • Компоненты соединены между собой проводами; (кроме внешних разъёмов)
  • Человеко-машинный интерфейс более-менее как-то работает. Можно изменять булевы переменные, вводить целые числа, вводить числа с плавающей запятой, вводить текст;
  • Синхронизация времени;
  • Сторожевой таймер (WatchDog);
  • WiFi: сканирование сетей, сохранение сетей в память, ввод пароля, подключение к сетям, автоподключение;
  • Внутренний датчик температуры и датчик атмосферного давления; (датчик влажности глючит пока)
  • Интерфейс ввода/вывода общего назначения (GPIO) на базе микросхемы PCF8575;
  • Жидкокристаллический экран + RGB подсветка;
  • Система определения нажатий клавиш и автоповтор нажатий; (какой-либо антидребезг пока отсутствует)
  • Светодиоды;
  • Запись на SD карту данных с датчиков с интервалами;
  • Зарядка аккумулятора и питание от него;
  • Пьезо зуммер;
  • Система меню, главный экран, многоуровневая навигация, команды, сообщения и изменяемые переменные;
  • Сохранение настроек на SD карту и автозагрузка настроек при включении.

Трудности и что ещё нужно сделать:
  • В модельке корпуса есть некоторые недочёты. Например, выключатель аккумулятора легко задеть и вырубить/включить устройство, тогда когда это не нужно;
  • Синхронизацию времени надо чуть доработать. Если время не синхронизировано, то не запускать внутренние часы. Дать возможность задать время вручную в меню;
  • WiFi. Какие-то непонятные глюки. Автоподключение вешает всю систему часто. Причём, если после запуска зайти в меню, то зависания нет.
  • Датчик влажности неверно измеряет влажность (читает 0,00%, был ещё момент показывал больше 100%). Его чтение иногда вешает всю систему. Пока отключен.
  • Я всё изгуглил, но похоже без спец. модификаций никак не узнать откуда идёт питание: из USB или из аккумулятора. Эта информация нужна для нормальной работы внутренней логики. Нужно питание USB заводить через делитель напряжения в аналоговый вход.
  • Шифрование на веб-сервере. Вот здесь самая большая засада. Библиотека и буфер чтения/записи довольно много захавало памяти. Также не удалось найти реализации веб-сервера с шифрованием на Arduino. Клиентов с шифрованием полно, а вот сервера нема. Начал писать свою реализацию. Оно почти работает. Загружает страницу один раз и зависает намертво, через какое-то время срабатывает сторожевой таймер. Я вытащил свой SSL код в простейший пример WiFiWebServer и на нём он не зависает. Расследование продолжается.
Я очень обрадовался, когда прошла первая зашифрованная страница. Но остаются ещё проблемы с зависанием.

Снимок экрана_2022-08-29_22-26-14_first_encrypted_data2.png


Жду от вас восторженных отзывов и полезных предложений <3

20220818_171815.jpg

20220818_223805.jpg

20220818_223827.jpg

20220818_223845.jpg

Видеодемонстрация №1 системы меню, подключение к сети WiFi и синхронизации времени:
https://pik-pik.ee/nextcloud/s/9g6QaqeeWiWgrzC (90,7 MB)

Видеодемонстрация №2 радужная анимация подсветки жидкокристаллического экрана:
https://pik-pik.ee/nextcloud/s/bxNzAdpqZRdekZf (62,5 MB)
 

Вложения

  • Лойс +1
Реакции: bort707

bort707

★★★★★★✩
21 Сен 2020
2,859
850
классно, а то совсем нет поделок на современных ардуинах, одно старье.
Кстати. сколько она сейчас стоит, MKR 1010 ?
 

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
накодил график и прицепил внешние цифровые температурные датчики Maxim Integrated - DS18B20 - 1-Wire Digital Thermometer

20220928_190849.jpg

20220926_183033.jpg

20220929_205727.jpg

Снимок экрана_2022-09-29_21-02-51_external_sensors.png
 

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
смоделировал и напечатал вспомогательную коробочку PIK-PIK RTU2XS1.
два китайских реле по 10 А и две розетки с неоновыми лампочками.

пришлось поставить по транзистору на каждый канал, чтобы инвертировать сигнал. так как выяснилось, что модуль ввода/вывода PCF8575 имеет открытый коллектор на выводе, а это значит он не может подать положительный сигнал на включение реле. открытый коллектор соединяет вывод с землёй.

видеодемонстрация ( кто досмотрит до конца - получит приз :3 )
https://pik-pik.ee/nextcloud/s/6bBGq4tjCJ4cxcr (21,6 MB)

Снимок экрана_2022-10-10_09-15-49.png

20221013_203726.jpg

20221013_194731.jpg

20221013_194929.jpg

20221013_000720.jpg

20221013_213630.jpg

20221013_213650.jpg
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137

@Valentin the Degu,
Я в связке с подобной pcf использую pnp транзистор подтянутый к плюсу питания.
 

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
@DAK,

да, именно так я и сделал

трудно было определиться какие сопротивления ставить - мало опыта в этом.
подобрал так чтобы на базе было 0,5 мА
вроде хватает

p.s.: реле в схеме условное, на самом деле это китайский модуль и сигнал идёт на оптрон. диод не нужен - предположительно он уже встроен

1666950884134.png
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Сейчас уточнил свою схему включения, в связи с особенностями микросхемы и конструкции её выходного каскада я использовал просто подключение между базой и выходом транзистора поставил сопротивление 2кОм. Транзистор mmbt5401, правда в нагрузку поставил светодиод и оптопару, ток через транзистор не превышает 15 мА. Ушёл от реле, небольшие реле на 5 Вольт потребляют 80мА, вроде на 16 Ампер, но по факту они не способны долго и счастливо коммутировать светодиодные люстры с хорошими драйверами, залипают. Сам был в шоке, начал изучать тему в Инете и понял что это не такая лёгкая задача - включать нагрузку у которой на входе стоят конденсаторы без варисторов.
 

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
@DAK,

у меня тоже пару раз залипало, когда этой релюшкой включал галогеновые лампы на 800 Вт.
я так полагая, когда они холодные, то у них низкое сопротивление, от чего вероятно искрит контакт сильно
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
800 Вт - 3,5 А (это если речь о 220-240В). для симистора это не много, если использовать BTA-24, то это 4-6 Вт тепла, нужен радиатор около 50 см2. Залипание никуда не денется, ну либо включать через пускатель.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
Я не согласен с тем, что залипания неизбежны и надёжность схемы на реле не может быть высокой. Достаточно правильно рассчитать демпфер. В качестве примера могу привести стеклокерамические плиты с сенсорным управлением, у которых мощность нагревательного элемента может достигать 1800Вт и там реле работают годы.
Конденсаторы на входе мощных DC/DC преобразователей в бытовой технике если не под запретом окончательно, то не приветствуются точно. Если есть такой потребитель, то нужно применять либо компенсаторы (резисторы NTC например), либо ступенчатое включение.
 

Valentin the Degu

✩✩✩✩✩✩✩
19 Авг 2022
8
1
pik-pik.ee
я думаю дело в том, что реле китайское и там китайские 10 А.
для реле подобной мощности они подозрительно дешёвые.
чисто одно японское реле Omron 250 V / 10 A стоит в два раза дороже, чем весь китайский модуль с двумя реле 250 V / 10 A
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
@poty, я тоже был не согласен, только вот схему нормальную я не нашёл для того, чтобы избавится от залипаний. Токи хоть и кратковременные, но дикие, в принципе мне нравится то, как делают ребята, которые сперва стартуют симисторами, а потом замыкают симистор реле. В варианте с галогенками, это хорошо, а вот светодиоды дают вспышку при первой подаче питания (видать некая ёмкость симистора заряжается), в принципе эффект разовый, просто неприятно...
Скажу так, я бы с радостью посмотрел на схему включения демпфера для коммутации светодиодных люстр, но я паяльником перебрал почти все варианты включения, реле мне не удалось сберечь от залипаний.
@Valentin the Degu, К сожалению в таких вариантах, когда пусковой ток очень большой я бы не надеялся на обычные реле, только на бистабильные. Дело тут просто в пусковом токе, у нас на работе смеялись надо мной, когда я им говорил, что их датчики света долго не протянут на включения светодиодных прожекторов. 2 месяца и залипают. У отца на работе через неделю залипают, он просто развязал пускателем и теперь у него всё работает.... а у нас ничего не смогли придумать, как просто сказать, что во всём виноват мой язык. У меня было слишком много этих нагрузок, я пока решил что гораздо приятнее всё включать симисторами или полевиками через драйвера. по крайней мере прошло 10 месяцев и я не знаю проблем с залипанием.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
я бы с радостью посмотрел на схему включения демпфера для коммутации светодиодных люстр
Да в целом - любая схема компенсации реактивной мощности, для начала. Их масса есть разной степени сложности. Самый простой вариант - фильтр из небольшой индуктивности последовательно + резистора параллельно нагрузке. В идеале - добавить синфазный дроссель и поглощающий элемент (см. далее).
Чтобы убрать пусковые токи - последовательно ставить термистор NTC, но выход на полное напряжение будет не таким быстрым. Если предполагается экономить (постоянное наличие NTC в цепи - это рассеиваемая на нём мощность) или необходимо быстрое поднятие отдаваемой в нагрузку мощности, то предпочтительнее становится коммутация относительно большого последовательного сопротивления первым этапом (для этого даже реле можно взять с контактами послабее), а затем - его замыкания с помощью второго, силового реле.
Ну, и демпферная цепь параллельно контактам реле - само собой разумеется.
Симисторы хороши, так как, фактически, их можно включать при переходе через 0 напряжения, вот только при наличии реактивной нагрузки 0 напряжения и тока не совпадают, а ключевой характер включения (с порогом как включения, так и выключения) будет давать по всей сети артефакты в виде импульсов помех с удвоенной частотой сети. В этом смысле MOSFET-ы можно заставить включаться на контролируемом токе или напряжении и у них отсутствует порог (конечно, есть обратно включенные диоды, но можно подобрать с малым прямым пороговым напряжением). Но любая активная цепь - это нагрев/радиаторы... А при таких небольших токах (для 800Вт) - эффективнее будут реле, как мне кажется.
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
@poty, в целом согласен. Просто мне нравится подход автора к разработке своего устройства, всё делается капитально, красиво, с толком, с чувством, с расстановкой! Я на этой теме съел собаку, провёл кучу времени с паяльником в руках для того, чтобы научится правильно всё включать и выключать.
Я думаю что тут речь не об этом. Тут по факту нет реактивной нагрузки, только активные, что светодиоды, что лампа со спиралью (хотя на сколько понимаю галогенная лампа должна ставится через дроссель, который в момент подачи напряжения в отличие от конденсатора, имеет большое сопротивление и сам по себе является защитной цепью, и розжиг у неё плавный, ну по крайней мере у нас в гараже именно так включаем). Особенность в том, что при включении данных нагрузок через реле протекают дикие токи (сопротивление холодной нити накала как и сопротивление разряженного конденсатора, стоящего после диодного моста почти равно 0). Для борьбы с такими токами не поможет демпферная цепь из индуктивности и резистора, включенного параллельно нагрузки, тут надо идти по стопам компьютерных БП, вариант с синфазным дросселем и термистором гораздо лучше, но для этого надо лишнее место и лишнее тепло от термистора. В идеале надо найти отличное реле, не эти малявки, а что нить по лучше, где пружина по мощнее и контакты с правильным напылением. но и жрут эти реле току не мало (да и денег тоже не мало жрут). Самое адекватное, как мне кажется, это симистор и реле параллельно, и цепь задержки включения/выключения реле относительно симистора. Я видел где то-тут на форуме кто то продавал готовые модули, видел целую статью и схему в Инете, но сегодня не смог найти ни одного, не другого... Хороший симистор, который держит бешеные пиковые токи (по опыту bt139 не всё выдерживает, а вот BTA24 гораздо лучше) + самое китайское реле. Такой тип включение будет самым идеальным, минимум выделения тепла, отсутствие помех в сеть (может совсем малость в момент включения и выключения), долговечность, минимум пространства на плате, наверное один из самых оптимальных вариантов, НО, ЕСТЬ БОЛЬШОЕ НО: Если симистор пробивает, то он зачастую становится просто проводником! Можно сказать, что это не безопасно, однако как выяснилось, и реле при залипании ведёт себя так же как пробитый симистор.
Вообще я планирую сделать модуль из реле, 2х полевиков и фотовольтаической оптопарой + сопротивление. То есть полевики врубают нагрузку через сопротивление в несколько ом (чтобы уберечь полевики, не такие уж у них бешеные пиковые токи), далее реле подключается и шунтируют цепь напрямую. Выключение в обратном порядке, сперва вырубаем реле, потом отрубаем полевки. однако МИНУС ТОТ ЖЕ, при умирании полевика, он тоже становится проводником. Я пробовал полевками включить конденсатор ёмкостью 200 мкф через диодный мост (без фильтров и прочего), один полевик обязательно умирает, в таком варианте при выключении схемы нагрузка не отключается, через паразитный диод второго (живого) полевика половина питания идёт на нагрузку.
Выше я писал про бистабильное механическое реле, тот вариант мне тоже нравится, но его я не пробовал на столе. Чем нравится, тем что ток прикладывается к реле 2 раза, 1 раз при включении, второй раз при выключении. Залипания маловероятны. Из минусов - схема управления, цена, размер. Сам не пробовал.
Все варианты, которые я вижу, и свой маленький опят я тут написал, пожалуй по этой теме мне больше нечего сказать.