Общие сведения
Сегодня мы сделаем устройство, которое будет автоматически регулировать кислотность раствора, тем самым поддерживая её на одном уровне. Такую систему можно применять, например, при выращивании растений: когда необходимо готовить раствор удобрений заданной кислотности. В частности, в гидропонике — для поддержания постоянного уровня кислотности, который может меняться со временем. Давайте сегодня реализуем такую систему.
Кстати, мы у нас также есть проект по созданию нормализатора концентрации (TDS). О нём можно почитать в этой статье.
Видео
Нам понадобится
- 1х датчик pH;
- 1х четырёхразрядный индикатор;
- 2х перистальтический насос;
- 2х силовой ключ: p-канал или n-канал. Можно использовать и обычные реле.
- 1х контроллер Piranha Trema;*
- 1х USB – UART преобразователь;**
- 1х понижающий DC-DC преобразователь на 5В;
- 1х блок питания на 12В;
- 1x Гнездо питания на корпус 5.5x2.1 мм;
- ёмкости с концентратами и шланги для соединения;
- в качестве корпуса можно использовать ПВХ-конструктор.
* Можно использовать любой контроллер серии Piranha, Arduino, или ESP-32.
** Необходим для программирования контроллера Piranha Trema. Однако, можно обойтись без него: контроллер можно запрограммировать при помощи другого контроллера.
Некоторые модули можно не использовать, например, если вам не нужно отображение значения кислотности, можно убрать индикатор.
Схема
(картинка кликабельна)
Обратите внимание на установку джамперов на силовых ключах и DC-DC преобразователе.
Если насосы не перекачивают жидкость, поменяйте полярность их подключения: от неё зависит направление подачи раствора.
Скетч проекта
Установите библиотеку для работы с pH-метром и индикатором. Если необходима помощь в её установке, читайте статью. Если вы впервые работаете с контроллерами, вам поможет статья.
Загрузите код к контроллер при помощи USB-UART преобразователя. В пункте выбора контроллера Arduino IDE необходимо указать контроллер Arduino Mini.
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <iarduino_I2C_pH.h> // Подключаем библиотеку для работы с pH-метром I2C-flash.
#include <iarduino_4LED.h> // Подключаем библиотеку для работы с индикатором
iarduino_4LED dispLED(4,5); // Объявляем объект для работы с функциями библиотеки iarduino_4LED, с указанием выводов дисплея ( CLK , DIO )
iarduino_I2C_pH pHsens; // Создаём объект pH-метра (адрес на шине I2C не указываем поскольку устройство на шине одно)
#define pinPomp1 2 // Первый насос подключен к выводу 2
#define pinPomp2 3 // Второй насос подключен к выводу 3
/////////НАСТРОЙКИ//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const float dpH = 0.1; // Значение отклонения pH, при котором показания будут считаться не изменившимися (искусственная погрешность для устранения мерцания сотых значений на дисплее)
const uint32_t portion = 400; // Время подачи порции концентрата, мс
const uint32_t timeWait = 10000; // Время ожидания между подачами порции (время на размешивание раствора)
const float phUp = 6.5; // Верхний уровень pH, после которого начнётся долив концентрата
const float phDown = 5.5; // Нижний уровень pH, после которого начнётся долив концентрата
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
float midPh = 0.0; // Установившееся показание кислотности
uint32_t timeLastPortion = 0; // Время последнего долива порции
void setup() {
pinMode (pinPomp1, OUTPUT); // Пин насоса - выход
pinMode (pinPomp2, OUTPUT); // Пин насоса - выход
Serial.begin(9600); // Открываем последовательный порт передачи данных
if (!pHsens.begin()) Serial.println("pH-метр не инициализирован. Проверьте подключение и I2C-адрес модуля"); // Иниируем работу с pH-метром, и, в случае, если не удалось выполнить подключение, выводим сообщение об ошибке
dispLED.begin(); // Инициируем работу с дисплеем
dispLED.point(2, true); // Включаем точку
}
void loop() {
float pH = pHsens.getPH(); // Измерение pH
Serial.println("pH: "+ (String)pH); // Вывод значения pH в монитор порта
if ((midPh < pH-dpH) || (midPh > pH+dpH)){ // Устранение малых колебаний значений
midPh = pH;
dispLED.print(midPh, 2); // Выводим показания pH на дисплей
}
if ((midPh > phUp) && (timeLastPortion + timeWait <= millis())) correctPh("down"); // pH завышен, нужно снизить
else if ((midPh < phDown) && (timeLastPortion + timeWait <= millis())) correctPh("up"); // pH занижен, нужно повысить
if (timeLastPortion + portion <= millis()) { // Если прошло время подачи порции, выключаем все насосы
digitalWrite(pinPomp1,LOW);
digitalWrite(pinPomp2,LOW);
}
}
void correctPh (String target){ // Функция включения насосов
timeLastPortion = millis(); // Фиксируем время начала работы насоса
if (target == "down") digitalWrite(pinPomp1,HIGH); // Включаем нужный насос в зависимости от переданной в функцию строки
if (target == "up") digitalWrite(pinPomp2,HIGH);
}
Ссылки
- Автоматический нормализатор концентрации (TDS/EC)
- Библиотека для работы с pH-метром;
- Библиотека для работы с четырёхразрядным индикатором;
- Инструкция по установке библиотек;
- Инструкция по установке и настройке Arduino IDE;
- Полностью автоматизированная гидропоника с управлением через WiFi.
Комплект для повторения проекта
Что понадобится
Это быстрый ориентир по основным модулям и деталям. Полный список для повторения проекта смотрите в самой статье.
11 позиций
Датчик кислотности жидкости (pH-метр), FLASH-I2C
датчик pH
Открыть в iArduino
Четырехразрядный индикатор LED, зеленый (Trema-модуль)
Яркий индикатор, отлично подойдет для проектов где нужно выводить цифровые значения. Имеет программную регулировку яркости
Открыть в iArduino
Силовой ключ P-канал (Trema-модуль)
Позволит управлять нагрузкой ШИМ сигналом. Например яркостью светодиодной ленты или скоростью мотора
Открыть в iArduino
Силовой ключ N-канал (Trema-модуль)
Позволит управлять нагрузкой ШИМ сигналом. Например яркостью светодиодной ленты или скоростью мотора
Открыть в iArduino
Реле (Trema-модуль v2.0)
Позволяет коммутировать цепи как переменного, так и постоянного тока до 10 А.
Открыть в iArduino
Piranha Trema (C колодками)
Аналог Arduino Pro Mini c микроконтроллером ATmega328P в форм-факторе Trema с колодками G-V-S для удобного подключения Trema-модулей
Открыть в iArduino
Преобразователь интерфейсов Piranha USB-UART (FT230 / USB Micro)
Конвертер сигналов на чипе FT230 для прошивки и отладки контроллеров без собственного USB
Открыть в iArduino
Понижающий DC-DC 3.3/5В. (Trema-модуль)
понижающий DC-DC преобразователь на 5В;
Открыть в iArduino
Источник питания на 12В. 3А.
Источник питания 12 вольт, 2 ампера, центр положительный, DC jack 5,5*2,1 мм
Открыть в iArduino
Гнездо питания на корпус 5.5x2.5 мм (DC-022B)
Гнездо питания на корпус 5.5x2.1 мм
Открыть в iArduino
Контроллер Piranha ESP32 v2
Платформа на модуле ESP32-S с толерантными к 5 В контактами G-V-S для удобного подключения Trema-модулей
Открыть в iArduino
