Как стать автором
Обновить

Проект «Solar Future» или передача данных с Arduino на веб-интерфейс через GSM-сеть

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.9K

Промониторив много различных вакансий на позиции Backend-разработчика на HH.ru, понял, что с учебными проектами, которые предлагаются на различных IT-курсах, мне просто не выделиться на фоне тысяч(если не десятков тысяч) выпускников подобных заведений. По этой причине, и конечно же, из чистого(бескорыстного) любопытства решил реализовать проект передачи данных с солнечной панели SDM-50 в Интернет с использованием всех технологий, которым обучился в Нетологии на курсе по NodeJS.

Итак, идея - передать данные с датчиков, соединенных к солнечной панели SDM-50, сначала на удаленный сервер с использованием GSM-модема, затем по запросу пользователей на веб-интерфейс, реализованный на NextJS.

Цель pet-проекта: Разработка веб-приложения для мониторинга параметров(напряжения) солнечной панели SDM-50 и управления реле с использованием аппаратной платформы Arduino, серверной платформы Node.js и фреймворка Next.js.

Стек:

  • Backend: NodeJS, nginx, MongoDB, Windows Server 2022(ПО для настройки модема не работает в Linux);

  • Frontend: NextJS, Bootstrap, gsap;

  • Оборудование: GSM-модем Промодем, контроллер заряда солнечной панели, панель SDM-50, свинцовый АКБ, Arduino, датчик напряжения, лампочка 12В.

Солнечная панель SDM-50 и шкаф с начинкой
Солнечная панель SDM-50 и шкаф с начинкой

Сразу решил для себя, что буду делать проект так, чтобы потом не стыдно было его показать потенциальному рекрутеру и друзьям. Для этого отказался от навесного монтажа в пользу электрического шкафа, арендовал виртуальный сервер, подкрутил домен и SSL-сертификат к нему. Кстати, приложение будет доступно по ссылке еще в течение 2 месяцев после публикации этой статьи.

Содержимое шкафа
Содержимое шкафа

Первым этапом проекта была разработка и сборка электрической схемы. Здесь было все просто:

1. Проектирование принципиальной электрической схемы;

2. Тестирование преобразователя MAX485 в связке с Arduino и виртуальным сервером;

3. Вывод датчиков от солнечной панели на Arduino Uno;

4. Подключение реле к Arduino;

5. Написание прошивки для Arduino;

6. Сборка шкафа

C приложением верхнего уровня пришлось поработать чуть подольше, потому что хотелось реализовать не просто вывод цифр на html-ку, а полноценный интерфейс с возможностью редактирования устройств, системой авторизации и т.п.

Ссылка на репозиторий на GitHub

Часть веб-интерфейса администратора
Часть веб-интерфейса администратора

I. Силовая часть электрической цепи
К контроллеру заряда подключены солнечная панель, свинцовый АКБ и нагрузка 12 В (лампа).
II. Цепь Arduino
В текущей реализации к аналоговому входу(№0) контроллера подключен датчик напряжения. К одному из цифровых пинов подключено реле, переключения которого замыкает/размыкает цепь с нагрузкой 12 В (лампой).
Алгоритм загруженный в память контроллера, организован так, что из сообщения, получаемого от GSM-модема через плату MAX485, будет принят номер пина и его тип(аналоговый, цифровой). По этим данным будет вычислен пин, которому следует выставить высокий/низкий сигнал и с какого аналогового входа считать данные и передать их обратно.
III Цепь модем - Arduino
Модем соединен с Arduino по RS-485 интерфейсу через MAX485. В системе он играет роль прозрачного канала и нужен для того, чтобы связать физическую схему и экземпляр backend, который запущен на удаленном сервере.

Первая карточка с кнопкой - управление освещением, вторая карточка - данные с датчика напряжения
Первая карточка с кнопкой - управление освещением, вторая карточка - данные с датчика напряжения

После подачи питания на контроллер Arduino и GSM-модем система начинает работать. Чтобы увидеть данные, нужно пройти процедуру авторизации в веб-приложении. После чего станет доступен функционал, отвечающий за отображение данных пользователя(роут /devices). Если администратор назначил юзеру датчики и реле, то пользователь сможет увидеть данные с сенсоров и выполнить переключения реле, нажимая на кнопку в веб-интерфейсе.

На схеме ниже приведен сценарий, который происходит после нажатия на кнопку карточки.

При нажатии на кнопку на backend отправляется POST-запрос, который затем через прозрачный канал поступает на Arduino. В случае корректности сообщения будет подан высокий/низкий уровень сигнала на заданный пин и сгенерирован ответ, который отправится обратно на фронт. В случае успешного выполнения команды Arduino отправит 200, иначе 400. На фронте в случае ответа 200 кнопки поменяет окрас на противоположный.
При нажатии на кнопку на backend отправляется POST-запрос, который затем через прозрачный канал поступает на Arduino. В случае корректности сообщения будет подан высокий/низкий уровень сигнала на заданный пин и сгенерирован ответ, который отправится обратно на фронт. В случае успешного выполнения команды Arduino отправит 200, иначе 400. На фронте в случае ответа 200 кнопки поменяет окрас на противоположный.


Вот такой проект получился. Выделит ли он меня на фоне других JS-разрабов джунов, не знаю. Но теперь с уверенностью могу сказать, что разработать веб-приложение от А до Я, с возможностью управления контроллерами Arduino, точно смогу.

Теги:
Хабы:
Всего голосов 7: ↑6 и ↓1+9
Комментарии10

Публикации

Работа

Ближайшие события