habrahabr

История про Arduino отработавшую 11 лет

  • среда, 7 мая 2025 г. в 00:00:16
https://habr.com/ru/articles/907182/
КДПВ
КДПВ

В начале был RDP

Шел 2014 год, в моем поселке люди сидят на водозаборе и управляют по RDP скважинами удаленно.

Система работает круглые сутки и на мониторе уже видна "тень" красных и зеленых индикаторов.

Но у этой системы был минус, необходимость поддержания хорошего соединения, а управляющий компьютер находится в лесу и интернет там так себе.

На тот момент Wi-Fi был малораспространен и вся сеть была построена на двух направленных друг на друга антеннах Wi-Fi, одну поставили на водонапорную башню, а вторую на мачту в лесу.
И это отлично работало, пока не появился завод, да, прямо между скважинами и водозабором построили завод.

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

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

А все потому, что скрипт не успевал дождаться, пока сеть появится отправлял компьютер в ребут через 30 секунд. Больше я такие скрипты не писал.

Мы пойдем другим путём

Решили поставить 3G модем и усилитель сигнала, помогло это только на время, потому что через некоторое время организации работающие вокруг начали так же пользоваться "свистками" и связь заметно ухудшилась.

RDP-соединение начало рваться, но это была не единственная проблема.

Проблемы только начинаются

Контроллер который подключался с помощью USB к компьютеру не был защищен от помех и стабильно зависал, если запустить скважину рядом с которой он находится.

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

А еще здание, в котором находился компьютер, находилось на окраине леса, что прибавляло проблем с насекомыми, которые очень любят теплые компьютеры и вентиляторы.

Компьютер решили погрузить в трансформаторное масло, да, жестко, но выбора не было.

Страшно, очень страшно, мы не знаем что это такое...
Страшно, очень страшно, мы не знаем что это такое...

Блоки питания слева на картинке выполняют роль индикаторов фазы

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

Блок питания погружать не стали, просто положили на короб, все-таки 220 вольт, а вдруг пробьет на материнскую плату.

Схема сработала, компьютер работал и даже не боялся воды, которая иногда оказывалась в здании после зимы.

Хотя руки после этого масла пахнут еще неделю.

Но мы же сможем?

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

На тот момент ESP8266 были не так распространены, а я уже знал про Arduino Mega с Ethernet-shield

Я выбрал на основе чего мы сделаем эту систему, брат съездил в Нижний Новгород за Arduino и мы всю ночь собирали новую систему.

Помните блоки питания слева от компьютера?
Я не нашел решения, как определять наличие фазы, поэтому решили воспользоваться уже готовым решением. Эти блоки питания были на 12 вольт, от каких-то бытовых устройств.

Поэтому, пока я писал прошивку для Arduino, брат распаивал стабилизаторы 5v, чтобы блок питания точно не подал больше 5 вольт на аналоговый вход Arduino.

А еще, если неправильно установить Ethernet Shield, то он замыкает свои контакты на USB порт и Arduino зависает.
Узнал я об этом через неделю после установки, подложили картонку, работает до сих пор.

Чтобы сэкономить трафик и не зависеть от скорости, я решил сделать систему в виде JSON "клиент-сервера".

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

Фото Arduino в сборе
Фото Arduino в сборе

Это все заменило два компьютера, один на водозаборе, а второй на скважине.

Еще я добавил датчик движения, датчик температуры и дисплей для вывода информации.

Дисплей не пригодился, потому что на него никто не смотрел, а вот датчик температуры помогал, иногда в здании было больше 30 градусов и я настроил включение запасного выхода реле при превышении температуры.

Это реле включало вентилятор, который продувал небольшую площадь за несколько минут.

Теперь в качестве клиента я мог использовать даже планшеты, они как-раз в то время начали появляться в продаже по хорошим ценам.

Выглядит безопасно

Как подключиться к Arduino, если она в лесу и за 3G модемом? Белый IP.

Белый IP на модеме уже был, а Hamachi был настолько медленным, что проще было опять включить Wi-Fi антенну, выбор пал на прямое соединение.

Да, белый IP это плохо, но я подошел к вопросу основательно.

  1. Нестандартный порт после 20000, что-то вроде 28572

  2. Firewall на роутере, ограничивающий доступ только с определенного IP

Конечно для Firewall пришлось использовать сервер, но сайт компании я уже сделал и с этим проблем не возникло.

В принципе для безопасности достаточно, а для доступа к сайту все-равно требовался уникальный хеш в запросе.

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

Это своего рода защита от взлома, сейчас удобно, открыл /api/swagger.json и вот тебе вся информация, ломай-круши.

Панель управления АСУС
Панель управления АСУС

А что теперь?

Эта система отработала уже 11 лет и пора бы её менять

Да, в первый год приходилось ездить и проверять, почему она опять не включает какую-то скважину.
Но обычно все решалось просто, мы с братом приезжали на объект, выливали воду из ящика с Arduino, вытаскивали всех мошек, пчел, ос и она опять работала без перебоев.

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

В последнюю поездку мы даже насверлили дырок, чтобы вода сама уходила и поставили Arduino на стойки от материнской платы.

Перебои с интернетом, электричеством и т.д. я не учитываю, за это я не могу отвечать

На данный момент планируется замена Arduino на более современный ESP32 с аналоговым мультиплексором для блока реле, но это уже другая история...

На этом исторический пост окончен, спасибо за внимание!