Система мониторинга качества воды в реальном времени на Arduino с GPRS/GPS
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino UNO (Genuino 101) | 1 |
| Модуль A7 GPRS/GPS | 1 |
| Датчики качества воды (температура, pH, растворённый кислород, мутность) | 1 комплект |
Инструменты
- Паяльная станция
Программное обеспечение и сервисы
- Microsoft Azure (хостинг веб-сайта и БД)
- Arduino IDE
О проекте
Введение
В сентябре 2016 года водоочистная станция была остановлена из-за попадания загрязнённой воды. Компания не смогла быстро локализовать источник загрязнения. Университетское задание: создать автоматизированную систему мониторинга качества воды для оперативного выявления источников загрязнения.
Общая схема системы
4 датчика подключены к Arduino Genuino 101. Все — с токовым выходом, требуют интерфейсных схем. Arduino периодически опрашивает датчики, получает GPS-координаты через модуль A7 и отправляет пакет данных (показания + координаты) по GPRS в облачную базу данных. Пользователи видят результаты на веб-карте.
Датчики
Три датчика с токовым выходом (Global Water): температура, pH, растворённый кислород (последний оказался неисправен). Четвёртый — датчик мутности с напряжённым выходом, пропорциональным концентрации взвешенных частиц.
Интерфейсинг датчиков и Arduino
Токовые выходы преобразуются в измеряемое напряжение через шунтирующие резисторы.
Модуль A7 GPRS/GPS
Выбран за низкую цену и совмещение GPRS+GPS в одном корпусе. Но есть нюансы:
- Комплектная GPS-антенна нерабочая — нужна отдельная.
- По умолчанию только 115200 бод UART. SoftwareSerial на этой скорости ненадёжен. Пришлось реализовать программную смену бодрейта при старте.
- Библиотеку для A7 писал сам, собирая из примеров для SIM900 и Adafruit GPS — работает, но код «сырой».
У модуля два управляющих пина: RESET и PWR_KEY. Для включения на PWR_KEY подаётся высокий уровень минимум 2 сек. RESET держится высоким (pull-up), для сброса — притягивается к земле. При старте делаю сброс, затем включение.
Источник питания
Токовые датчики требуют минимум 10В. Для автономности выбраны 2 Li-Ion элемента последовательно (7.4–8.4В). Buck-конвертер → 5В для Arduino и A7. Boost-конвертер → 11В для датчиков воды. Время автономной работы ограничено, но для прототипа приемлемо.
Плата и корпус
Сборка на макетной плате. Arduino и плата помещаются в использованный корпус с готовыми отверстиями под разъёмы датчиков. Разъёмы типа GX16 (авиационные) — надёжные и универсальные.
Веб-интерфейс
Самая трудоёмкая часть (недели работы с нуля). Пришлось выучить PHP, SQL, JavaScript, CSS, HTML. Хостинг на Azure (бесплатно для студентов), БД — ClearDB. Код в репозитории, нужно подставить свои учётные данные в username_password.php.
log.php принимает данные от Arduino и пишет в БД. Веб-страница показывает Google Maps с маркерами в точках замеров. Остальные PHP-скрипты — утилиты для выборки данных. Производительность низкая, код требует рефакторинга.
Код
Репозиторий: Water-Quality-Monitoring-System. В папке /Website — веб-часть, в /Arduino — скетчи и библиотека для A7.
Схемы
Полная схема системы в репозитории.
Производственный процесс
- Raspberry Pi управляемая аквапоника: гайд по сборке и код
- Измерение качества воздуха с OpenSensors: руководство по Arduino и Python
- Умная система мониторинга качества воздуха и заполненности мусорных баков
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Умный водяной пистолет с датчиком движения на Arduino Nano
- Бесконтактный термометрический шлюз для быстрого и точного скрининга
- Система мониторинга лесных пожаров в реальном времени с SMS-уведомлениями
- Умная вентиляция подвала на Arduino: контроль влажности
- IoT-мониторинг качества воздуха: безопасность, продуктивность и устойчивое развитие