Главная chevron_right Наши уроки chevron_right Измеритель кислотности и концентрации (TDS, EC, pH-метр) на Arduino, Piranha, ESP

Измеритель кислотности и концентрации (TDS, EC, pH-метр) на Arduino, Piranha, ESP

Собираем универсальный измеритель кислотности и концентрации на Arduino, Piranha или ESP-32: подключаем pH-метр и TDS/EC-метр по I2C, выводим данные на LCD-дисплей

Общие сведения

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

У нас также есть проекты по созданию отдельных устройств: измерителя кислотности (pH-метр), и измерителя концентрации (TDS-метр), а таrже устройств для автоматической нормализации кислотности и концентрации.

Если это ваш первый опыт программирования контроллеров, прочитайте статью о настройке Arduino IDE и об установке библиотек.

Видео

Нам понадобится

* Можно использовать любой контроллер серии Piranha, Arduino, или ESP-32.

Установка библиотек

Установите необходимые библиотеки в Arduino IDE:

При необходимости воспользуйтесь инструкцией по установке.

Установка I2C адресов датчиков

Поскольку оба модуля подключены к шине I2C, необходимо, чтобы они имели разные адреса. Достаточно изменить адрес только одного устройства (или TDS-метра, или pH-метра). Сделать это можно, используя специальный установщик адресов, или при помощи контроллера. О том, как это сделать, читайте здесь (на примере pH-метра). Установите ему адрес, отличный от 0x09, например, 0x0A.

Схема

Не забудьте перед сборкой схемы откалибровать датчики. Как откалибровать pH-метр? Как откалибровать TDS-метр?

Измеритель кислотности pH и концентрации TDS, EC

Скетч

#include <iarduino_I2C_TDS.h>        // Подключаем библиотеку для работы с TDS/EC-метром I2C-flash.
#include <iarduino_I2C_pH.h>         // Подключаем библиотеку для работы с pH-метром I2C-flash.
#include <LiquidCrystal_I2C.h>       //  Подключаем библиотеку для работы с LCD дисплеем по шине I2C

iarduino_I2C_TDS tds;                // Объявляем объект tds  для работы с функциями и методами библиотеки iarduino_I2C_TDS, адрес модуля на шине I2C не указываем - он будет обнаружен автоматически.
iarduino_I2C_pH pH;                  // Объявляем объект tds  для работы с функциями и методами библиотеки iarduino_I2C_pH, адрес модуля на шине I2C не указываем - он будет обнаружен автоматически.
LiquidCrystal_I2C lcd(0x27,20,4);    // Объявляем объект lcd для работы с дисплеем(адрес I2C = 0x27, количество столбцов = 20, количество строк = 4) (для диспления 1602 параметры будут 16 и 2)

uint8_t symbol[3][8] = {             // Объявляем массив из 3 собственных символов, каждый символ состоит из 8 байт
  {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,},  // Буква "И"
  {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,},  // Буква "Л"
  {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}}; // Буква "Ь"

void setup(){
  tds.begin();                       // Инициируем работу с TDS/EC-метром I2C-flash.
  pH.begin();                        // Инициируем работу с TDS/EC-метром I2C-flash.
  lcd.init();                        // Инициируем работу с LCD дисплеем
  lcd.backlight();                   // Включаем подсветку LCD дисплея
  lcd.createChar(1, symbol[0]);      // Загружаем 1 символ "И" в ОЗУ дисплея
  lcd.createChar(2, symbol[1]);      // Загружаем 2 символ "Л" в ОЗУ дисплея
  lcd.createChar(3, symbol[2]);      // Загружаем 3 символ "Ь" в ОЗУ дисплея
}

void loop(){
  lcd.clear();                       // Очищаем дисплей
  tds.set_t(18.0f);                  // Указываем текущую температуру жидкости.

  // Количество растворённых твёрдых веществ в ppm (мг/л воды)
  lcd.setCursor(0, 0);               // Устанавливаем курсор в 0 столбец 1 строку дисплея
  lcd.print("TDS = ");               // Выводим текст на дисплей
  lcd.print(tds.getTDS());           // Выводим общее измеренное сопротивление.
  lcd.setCursor(11, 0);              // Устанавливаем курсор
  lcd.print("mg/l");                 // Выводим текст на

  // Удельная электрическая проводимость, приведённая к опорной температуре T = 25°C (по умолчанию), мкСм/см
  lcd.setCursor(0, 1);               // Устанавливаем курсор в 0 столбец 0 строку дисплея
  lcd.print("EC  = ");               // Выводим текст на дисплей
  lcd.print((float)tds.getEC()/1000.0);  // Выводим общее измеренное сопротивление.
  lcd.setCursor(11, 1);              // Устанавливаем курсор
  lcd.print("S/sm");                 // Выводим текст на дисплей

  lcd.setCursor(0, 2);               // Устанавливаем курсор в 0 столбец 1 строку дисплея
  lcd.print("K\1C\2OTHOCT\3 ");      // Выводим текст на дисплей
  lcd.print(pH.getPH());             // Выводим показания с датчика на дисплей
  lcd.print(" pH");                  // Выводим текст на дисплей

  delay(1000);                       // Задержка
}

Особенность совместной работы устройств

Щупы датчиков pH и TDS, находясь в одной ёмкости, электрически соединяются посредством жидкости. Из-за этого может наблюдаться отклонение значений TDS-метра примерно на 20-30% в меньшую сторону. При этом, TDS-метр не оказывает влияния на показания pH-метра.

Ссылки

Комплект для повторения проекта

Что понадобится

Это быстрый ориентир по основным модулям и деталям. Полный список для повторения проекта смотрите в самой статье.

12 позиций
TDS/EC-метр для воды с щупом (Trema-модуль Flash-I2C) Солемер и кондуктометр для определения минерализации и электропроводности воды Открыть в iArduino Датчик кислотности жидкости (pH-метр), FLASH-I2C датчик pH-метр Открыть в iArduino Arduino Uno R3 (USB ATmega16U2) Платформа c микроконтроллером ATmega328P на ядре AVR с чипом USB ATmega16U2 для разработки электронных устройств на языке C++ Открыть в iArduino Piranha Uno R3 Прямой аналог Arduino Uno c микроконтроллером ATmega328P на ядре AVR для разработки электронных устройств на языке C++ Открыть в iArduino Trema Shield Плата расширения для удобного подключения периферийных устройств Открыть в iArduino Символьный дисплей LCD2004 (Синяя подсветка) Текстовый экран на 4 строки по 20 символов с белым текстом на синей подсветке Открыть в iArduino LCD конвентер в IIC/I2C PCF8574 1602 (2004) Для упрощение подключения LCD 1602 (2004) экранов, к Arduino по I2C Открыть в iArduino Символьный дисплей LCD1602 I²C (Синяя подсветка) Текстовый экран с управлением по I²C на 2 строки по 16 символов с белым текстом на синей подсветке Открыть в iArduino i2C Hub Будет полезен в проектах с большим количеством устройств с интерфейсом I2C Открыть в iArduino i2C Hub (Trema-модуль) Будет полезен в проектах с большим количеством устройств с интерфейсом I2C Открыть в iArduino Контроллер Piranha ESP32 v2 Платформа на модуле ESP32-S с толерантными к 5 В контактами G-V-S для удобного подключения Trema-модулей Открыть в iArduino Установщик адресов FLASH-I2C Позволяет быстро менять адреса модулей Flash-i2c, узнавать количество и адреса i2c модулей на шине. Открыть в iArduino
Все уроки