КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Устройство для автоматической нормализации pH на Arduino (Нормализатор pH)

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

Сегодня мы сделаем устройство, которое будет автоматически регулировать кислотность раствора, тем самым поддерживая её на одном уровне. Такую систему можно применять, например, при выращивании растений: когда необходимо готовить раствор удобрений заданной кислотности. В частности, в гидропонике — для поддержания постоянного уровня кислотности, который может меняться со временем. Давайте сегодня реализуем такую систему.

Кстати, мы у нас также есть проект по созданию нормализатора концентрации (TDS). О нём можно почитать в этой статье.

Видео

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

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

** Необходим для программирования контроллера Piranha Trema. Однако, можно обойтись без него: контроллер можно запрограммировать при помощи другого контроллера. 

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

Схема

(картинка кликабельна)

Схема автоматического нормализатора pH

Обратите внимание на установку джамперов на силовых ключах и 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);
}

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями