PIK-PIK RTU2 - это... я не знаю как кратко объяснить, что это такое. Он совмещает в себе регистратор данных (datalogger), метеостанцию, контроллер, дистанционное управление и человеко-машинный интерфейс (HMI).
Используемая плата: Arduino MKR WiFi 1010.
Философия и цели:
- По возможности максимально пользоваться свободным программным обеспечением;
- Удобный и интуитивный человеко-машинный интерфейс;
- Автономность и переносимость; (заказал самую жирную LiPo, что продавалась)
- Безопасность и шифрование;
- Установить на даче и дистанционно управлять: холодильником, два отопителя, водяной насос и бойлер.
Расскажу о каждой функции подробно:
Метеостанция. В устройстве будут использоваться следующие датчики:
- Поверх главной платы установлен MKR ENV Shield, в котором есть датчик влажности, датчик атмосферного давления и температурный датчик;
- Два внешних цифровых термометра DS18B20. Один комнатный, другой уличный.
- Стандартный китайский жидкокристаллический экран 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 с шифрованием и паролем:
- На сайте можно управлять розетками, смотреть графики изменения телеметрии по времени и скачивать журналы для дальнейшей обработки;
- Пробрасывание туннеля на случай, если невозможно открыть порты.
Корпус смоделлировал во FreeCAD 0.20.
Наслайсил в PrusaSlicer-2.4.2.
Печатал программой Printrun 2.0.0rc8 (Pronterface)
на принтере MakerGear M2E.
Операционная система: Manjaro Linux.
Я не смог загрузить файл модели на форум, так как файл слишком большой, поэтому ссылка:
https://pik-pik.ee/nextcloud/s/YS9HTbfTWWj82BM
Электрическая схема:
Чтобы не запутаться во время пайки, я нарисовал электрическую схему в редакторе схем 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 и на нём он не зависает. Расследование продолжается.
Жду от вас восторженных отзывов и полезных предложений <3
Видеодемонстрация №1 системы меню, подключение к сети WiFi и синхронизации времени:
https://pik-pik.ee/nextcloud/s/9g6QaqeeWiWgrzC (90,7 MB)
Видеодемонстрация №2 радужная анимация подсветки жидкокристаллического экрана:
https://pik-pik.ee/nextcloud/s/bxNzAdpqZRdekZf (62,5 MB)
Вложения
-
150.8 KB Просмотры: 1