Промониторив много различных вакансий на позиции Backend-разработчика на HH.ru, понял, что с учебными проектами, которые предлагаются на различных IT-курсах, мне просто не выделиться на фоне тысяч(если не десятков тысяч) выпускников подобных заведений. По этой причине, и конечно же, из чистого(бескорыстного) любопытства решил реализовать проект передачи данных с солнечной панели SDM-50 в Интернет с использованием всех технологий, которым обучился в Нетологии на курсе по NodeJS.
Итак, идея - передать данные с датчиков, соединенных к солнечной панели SDM-50, сначала на удаленный сервер с использованием GSM-модема, затем по запросу пользователей на веб-интерфейс, реализованный на NextJS.
Стек:
Backend: NodeJS, nginx, MongoDB, Windows Server 2022(ПО для настройки модема не работает в Linux);
Frontend: NextJS, Bootstrap, gsap;
Оборудование: GSM-модем Промодем, контроллер заряда солнечной панели, панель SDM-50, свинцовый АКБ, Arduino, датчик напряжения, лампочка 12В.
Сразу решил для себя, что буду делать проект так, чтобы потом не стыдно было его показать потенциальному рекрутеру и друзьям. Для этого отказался от навесного монтажа в пользу электрического шкафа, арендовал виртуальный сервер, подкрутил домен и SSL-сертификат к нему. Кстати, приложение будет доступно по ссылке еще в течение 2 месяцев после публикации этой статьи.
Первым этапом проекта была разработка и сборка электрической схемы. Здесь было все просто:
1. Проектирование принципиальной электрической схемы;
2. Тестирование преобразователя MAX485 в связке с Arduino и виртуальным сервером;
3. Вывод датчиков от солнечной панели на Arduino Uno;
4. Подключение реле к Arduino;
5. Написание прошивки для Arduino;
6. Сборка шкафа
C приложением верхнего уровня пришлось поработать чуть подольше, потому что хотелось реализовать не просто вывод цифр на html-ку, а полноценный интерфейс с возможностью редактирования устройств, системой авторизации и т.п.
Ссылка на репозиторий на GitHub
Вот такой проект получился. Выделит ли он меня на фоне других JS-разрабов джунов, не знаю. Но теперь с уверенностью могу сказать, что разработать веб-приложение от А до Я, с возможностью управления контроллерами Arduino, точно смогу.
Комментарии (7)
voldemar_d
14.07.2024 07:06+1передать данные с датчиков, соединенных к солнечной панели SDM-50
Может, подключенных?
Мелкое замечание: перед открывающей скобкой ставится пробел.
Вывод датчиков от солнечной панели на Arduino Uno
По статье непонятно: а что вся система в целом делает? Получает значения с каких-то датчиков на солнечной панели, а дальше? Что значит "вывод на Arduino Uno"? На входной пин, который оцифровывает значение с датчика? А дальше что, и зачем?
Заглянул в README в репозитории, как-то понятнее все равно не стало. Написаны какие-то руководства к действию, а цель не написана. Если я невнимательно читал, поправьте меня.
Мне кажется, всегда описание нужно начинать с постановки задачи, и так, чтобы она была понятна не только тому, кто ее реализовывал.
denis__1999 Автор
14.07.2024 07:06Спасибо за комментарий! Учту в будущем.
вся система в целом делает? - предоставляет пользователю возможность проводить мониторинг солнечной панели и управлять нагрузкой подключенной к Arduino через реле
получает значения с каких-то датчиков на солнечной панели, а дальше? - на этом пока всё. Если значение равно 0 или оно ниже чем обычно, то можно пользователь может догадаться о том, что либо произошел разрыв цепи, либо панель затемнена посторонним предметом.
Что значит "вывод на Arduino Uno"? - цифровой пин
Зачем это нужно?...если просто, то мониторить параметры солнечной панели и управлять электрической нагрузкой с АКБ, которую заряжает солнечная панель, через Интернет. Мотивацией было желание реализовать проект, отличающийся от учебного, который предлагался на курсах, с использованием всех имеющихся под рукой ресурсов.
Цель pet-проекта: Разработка веб-приложения для мониторинга параметров(напряжения) солнечной панели SDM-50 и управления реле с использованием аппаратной платформы Arduino, серверной платформы Node.js и фреймворка Next.js.Задачи:
1. Разработка схемы электрической цепи;
2. Тестирование электрический цепи:
- Проверка корректной работы платы MAX485 в цепи с модемом и Arduino;
- Проверка корректности управления Arduino скриптами JS через сеть GSM;
3. Разработка backend на NodeJS:
- Разработка мидлвар, роутов, контроллеров;
- Описание схем БД, настройка работы с MongoDB;
- Настройка аутентификации и JWT;
4. Разработка frontend на NextJS:
- Разработка компонентов React;
- Настройка стора Redux;
5. Сборка шкафа диспетчеризации;
6. Настройка виртуальной машины и публикация в сети:
- Получение доменных имен;
- Выпуск SSL-сертификата;
- Настройка GSM-модема
Дальнейшие планы:
- Переход на использование веб-сокетов;
- Замена GSM-модема в пользу SIM800L
voldemar_d
14.07.2024 07:06А где схема-то? Без неё непонятно, что куда подключено, куда передаются данные и т.д.
Принцип работы всё равно непонятен. Допустим, включаем мы эту панель. Что после этого начинает происходить? Что и где может видеть пользователь?
После того, как он что-то увидел, он вручную нажимает какую-то кнопку, чтобы Arduino переключила реле? Или это делается автоматически по какому-то порогу значения с датчика?
Jury_78
В принципе есть же модемы с UART настройка через AT команды и Win/Linux ненужны.
denis__1999 Автор
Спасибо за комментарий!
Честно говоря, использовал модем, который бесцельно лежал в офисе. Думаю, стоит попробовать и модем с UART. Если есть примеры или опыт работы с ними, то был бы рад ознакомиться с материалом
Jury_78
Такие модему очень распространены, найти информацию не составит труда. Система AT команд в основе стандартизована, конечно с дополнениями у каждого производителя :).