История про Arduino отработавшую 11 лет
- среда, 7 мая 2025 г. в 00:00:16
Шел 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 данными,
сделал простенькую веб-панель для отправки запросов и на этом всё, больше ничего не требуется.
Это все заменило два компьютера, один на водозаборе, а второй на скважине.
Еще я добавил датчик движения, датчик температуры и дисплей для вывода информации.
Дисплей не пригодился, потому что на него никто не смотрел, а вот датчик температуры помогал, иногда в здании было больше 30 градусов и я настроил включение запасного выхода реле при превышении температуры.
Это реле включало вентилятор, который продувал небольшую площадь за несколько минут.
Теперь в качестве клиента я мог использовать даже планшеты, они как-раз в то время начали появляться в продаже по хорошим ценам.
Как подключиться к Arduino, если она в лесу и за 3G модемом? Белый IP.
Белый IP на модеме уже был, а Hamachi был настолько медленным, что проще было опять включить Wi-Fi антенну, выбор пал на прямое соединение.
Да, белый IP это плохо, но я подошел к вопросу основательно.
Нестандартный порт после 20000, что-то вроде 28572
Firewall на роутере, ограничивающий доступ только с определенного IP
Конечно для Firewall пришлось использовать сервер, но сайт компании я уже сделал и с этим проблем не возникло.
В принципе для безопасности достаточно, а для доступа к сайту все-равно требовался уникальный хеш в запросе.
Но даже если кто-то подберет хеш к серверу, он все-равно не узнает, какие команды нужно отправлять, чтобы получить хотя бы байт информации, ведь я не не писал документацию.
Никогда.
Это своего рода защита от взлома, сейчас удобно, открыл /api/swagger.json
и вот тебе вся информация, ломай-круши.
Эта система отработала уже 11 лет и пора бы её менять
Да, в первый год приходилось ездить и проверять, почему она опять не включает какую-то скважину.
Но обычно все решалось просто, мы с братом приезжали на объект, выливали воду из ящика с Arduino, вытаскивали всех мошек, пчел, ос и она опять работала без перебоев.
Да, вода ей не мешала, только контакты немного замыкала и сотрудники на водозаборе переживали, что кнопка иногда моргает, хотя скважина отключена.
В последнюю поездку мы даже насверлили дырок, чтобы вода сама уходила и поставили Arduino на стойки от материнской платы.
Перебои с интернетом, электричеством и т.д. я не учитываю, за это я не могу отвечать
На данный момент планируется замена Arduino на более современный ESP32 с аналоговым мультиплексором для блока реле, но это уже другая история...
На этом исторический пост окончен, спасибо за внимание!