Промониторив много различных вакансий на позиции 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В.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии (7)


  1. Jury_78
    14.07.2024 07:06
    +1

    |ПО для настройки модема не работает в Linux

    В принципе есть же модемы с UART настройка через AT команды и Win/Linux ненужны.


    1. denis__1999 Автор
      14.07.2024 07:06

      Спасибо за комментарий!
      Честно говоря, использовал модем, который бесцельно лежал в офисе. Думаю, стоит попробовать и модем с UART. Если есть примеры или опыт работы с ними, то был бы рад ознакомиться с материалом


      1. Jury_78
        14.07.2024 07:06
        +1

        Такие модему очень распространены, найти информацию не составит труда. Система AT команд в основе стандартизована, конечно с дополнениями у каждого производителя :).


  1. denis__1999 Автор
    14.07.2024 07:06

    Записал короткое видео, в котором продемонстрировал переключения


  1. voldemar_d
    14.07.2024 07:06
    +1

    передать данные с датчиков, соединенных к солнечной панели SDM-50

    Может, подключенных?

    Мелкое замечание: перед открывающей скобкой ставится пробел.

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

    По статье непонятно: а что вся система в целом делает? Получает значения с каких-то датчиков на солнечной панели, а дальше? Что значит "вывод на Arduino Uno"? На входной пин, который оцифровывает значение с датчика? А дальше что, и зачем?

    Заглянул в README в репозитории, как-то понятнее все равно не стало. Написаны какие-то руководства к действию, а цель не написана. Если я невнимательно читал, поправьте меня.

    Мне кажется, всегда описание нужно начинать с постановки задачи, и так, чтобы она была понятна не только тому, кто ее реализовывал.


    1. 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


      1. voldemar_d
        14.07.2024 07:06

        А где схема-то? Без неё непонятно, что куда подключено, куда передаются данные и т.д.

        Принцип работы всё равно непонятен. Допустим, включаем мы эту панель. Что после этого начинает происходить? Что и где может видеть пользователь?

        После того, как он что-то увидел, он вручную нажимает какую-то кнопку, чтобы Arduino переключила реле? Или это делается автоматически по какому-то порогу значения с датчика?