Общие сведения
Универсальное устройство для измерения кислотности и концентрации можно использовать для анализа жидкостей, используемых в гидропонике, аквариумах, колодцах для полива растений и т.д.
У нас также есть проекты по созданию отдельных устройств: измерителя кислотности (pH-метр), и измерителя концентрации (TDS-метр), а таrже устройств для автоматической нормализации кислотности и концентрации.
Если это ваш первый опыт программирования контроллеров, прочитайте статью о настройке Arduino IDE и об установке библиотек.
Видео
Нам понадобится
- 1х датчик TDS/EC-метр;
- 1х датчик pH-метр;
- 1х контроллер Arduino или Piranha UNO*;
- 1x Trema Shield;
- 1х I2C LCD дисплей 2004 (с конвертером I2C) или 1602;
- 1х I2C Hub (или в формате Trema);
- в качестве корпуса можно использовать ПВХ-конструктор.
* Можно использовать любой контроллер серии Piranha, Arduino, или ESP-32.
Установка библиотек
Установите необходимые библиотеки в Arduino IDE:
- iarduino_I2C_TDS для работы с TDS-метром;
- iarduino_I2C_pH для работы с pH-метром;
- LiquidCrystal_I2C для работы с дисплеем.
При необходимости воспользуйтесь инструкцией по установке.
Установка I2C адресов датчиков
Поскольку оба модуля подключены к шине I2C, необходимо, чтобы они имели разные адреса. Достаточно изменить адрес только одного устройства (или TDS-метра, или pH-метра). Сделать это можно, используя специальный установщик адресов, или при помощи контроллера. О том, как это сделать, читайте здесь (на примере pH-метра). Установите ему адрес, отличный от 0x09, например, 0x0A.
Схема
Не забудьте перед сборкой схемы откалибровать датчики. Как откалибровать pH-метр? Как откалибровать TDS-метр?
Скетч
Копировать123456789101112131415161718192021222324252627282930313233343536373839404142434445464748`#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-метра.
Ссылки
- Полностью автоматизированная гидропоника с управлением через WiFi;
- Инструкция по установке и настройке Arduino IDE;
- Библиотека для работы с TDS-метром;
- Библиотека для работы с дисплеем.
- Инструкция по установке библиотек;
Комплект для повторения проекта
Что понадобится
Это быстрый ориентир по основным модулям и деталям. Полный список для повторения проекта смотрите в самой статье.
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
