Рубрики
Проекты на ESP32

Измеритель качества воды на ESP32 и TDS датчике

В данной статье мы рассмотрим подключение датчика TDS к модулю ESP32 для измерения качества воды. Датчик/измеритель TDS показывает общее количество растворенных в воде (или растворе) твердых веществ, таких как соли, минералы и металлы. Таким образом, с его помощью можно производить измерение качества воды и сравнивать ее качество из различных источников. Одним из наиболее частых применений датчика TDS является его использование в аквариуме для контроля качества воды.

Ранее на нашем сайте мы рассматривали другие проекты измерителей качества воды:

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. TDS датчик (купить на AliExpress).

TDS датчик

Измеритель TDS измеряет общее количество растворенных твердых веществ, таких как соли, минералы и металлы в воде. По мере увеличения количества растворенных твердых веществ в воде увеличивается проводимость воды, и это позволяет нам рассчитать общее количество растворенных твердых веществ в частях на миллион (ppm (mg/L, мг / л)).

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

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

В данном проекте мы будем использовать измеритель TDS от компании keystudio, который поставляется с интерфейсным модулем и электродным зондом (см. рисунок выше).

Для получения дополнительной информации о датчике TDS мы рекомендуем ознакомиться с его официальной документацией.

Технические характеристики

Приведены для TDS датчика версии 0 от keystudio.

Измеритель TDS:

  • Входное напряжение: 3,3 ~ 5,5 В постоянного тока;
  • Выходное напряжение: 0 ~ 2,3 В;
  • Рабочий ток: 3 ~ 6 мА;
  • Диапазон измерения TDS: 0 ~ 1000 ppm;
  • Точность измерения TDS: ± 10% F.S. (25 ℃);
  • Интерфейс модуля: XH2.54-3P;
  • Интерфейс электрода: XH2.54-2P.

Пробник датчика:

  • Количество игл: 2;
  • Общая длина: 60 см;
  • Интерфейс подключения: XH2.54-2P;
  • Цвет: белый;
  • Водонепроницаемый зонд.

Подключение TDS датчика к модулю ESP32

Выход TDS датчика необходимо подключать к одному из контактов модуля ESP32, способных выполнять АЦП (аналого-цифровое преобразование). Один из вариантов подключения датчика к модулю приведен в следующей таблице.

TDS датчик Модуль ESP32
GND GND
VCC 3.3V
Data GPIO 27

Вместо GPIO 27 можно использовать любой другой контакт модуля ESP32, поддерживающий функции АЦП.

Исходный код программы (скетча)

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

Чтобы получить более точные результаты измерений может потребоваться калибровка вашего датчика в соответствии с известным значением TDS. Кроме того, в данном случае необходимо учитывать нелинейность АЦП ESP32, когда дело доходит до низких и высоких значений.

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

Объяснение работы программы

Дадим осмысленное название контакту модуля ESP32, к которому подключен датчик.

Затем зададим значение опорного напряжения для АЦП модуля. В нашем случае для модуля ESP32 это напряжение будет равно 3.3V, а для платы Arduino, к примеру, оно будет составлять уже 5V.

Для получения более стабильных результатов измерений мы будем использовать алгоритм фильтрации медианных значений. Переменная SCOUNT в данном случае будет задавать количество отсчетов, по которым мы будем усреднять результат.

Затем объявим необходимые нам переменные и массивы.

Объявим и запишем в переменные averageVoltage и tsdValue значение 0.

В переменной temperature мы будем хранить текущее значение температуры. Абсолютное значение температуры будет влиять на показания, поэтому существует алгоритм, компенсирующий колебания температуры. В нашем случае эталонная температура для датчика составляет 25ºC, но вы можете изменить ее в зависимости от вашей среды. Для получения более точных результатов вы можете добавить в проект датчик температуры и получать фактическую температуру на момент считывания показаний TDS датчика.

В следующей функции мы будем получать стабильное TDS значение на основе усреднения ряда измерений.

В функции setup() инициализируем последовательную связь со скоростью 115200 бод.

Установим режим работы контакта, к которому подключен TDS датчик, на ввод данных.

В функции loop() мы будем считывать новые TDS значения каждые 40 мс и затем сохранять их в буфер.

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

Затем мы будем рассчитывать коэффициент температурной компенсации и с его помощью рассчитывать TDS значение.

И, наконец, будем печатать на экране компьютера TDS значение в единицах ppm.

Демонстрация работы проекта

После сборки аппаратной части проекта загрузите с помощью Arduino IDE код программы в свой модуль ESP32. Не забудьте выбрать правильный тип платы (модуля) в Tools Board и правильный COM порт в Tools Port. После этого откройте окно монитора последовательной связи на скорости 115200 бод и нажмите на модуле ESP32 кнопку RST чтобы код программы начал работать.

Датчик покажет значение 0 если его зонд не погружен в воду. Поместите зонд в раствор, чтобы проверить его TDS и работу проекта. Вы можете попробовать использовать водопроводную воду и добавить немного соли, чтобы посмотреть, увеличатся ли значения.

Автор проекта измерил значение TDS для водопроводной воды в своем доме и получил значение около 100 ppm, что является хорошим показателем для питьевой воды. Также он протестировал работу датчика, погрузив его в чай, и в этом случае значение TDS увеличилось примерно до 230 ppm, что кажется разумным значением.

Наконец, он также измерил значение TDS бутилированной воды и получил значение 0 ppm. Он не уверен, что это значение правильное, потому что вода рекламируется как минеральная, поэтому минералы, растворенные в воде, должны учитывать значение TDS. Он считает что это значение можно объяснить нелинейностью входов АЦП модуля ESP32 при малых значениях напряжения.

Источник статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *