pH-метр на Arduino с PH-4502C: схема, калибровка и код

Reading time: 5 minutes

Last modified:

pH показывает кислотность или щёлочность раствора по шкале 0–14, где 7 — нейтральный. Для Arduino-проектов — мониторинг аквариума, гидропоника, анализ почвы, контроль сточных вод — PH-4502C является самым доступным аналоговым интерфейсным модулем pH, стоимостью $10–20, который подключается напрямую к любому аналоговому входу Arduino.

В этом руководстве: характеристики модуля, калибровка, схема подключения и три скетча с нарастающей сложностью.

Arduino pH-метр с модулем PH-4502C

Характеристики модуля PH-4502C

Модуль принимает стеклянный электрод с BNC-разъёмом и выдаёт аналоговое напряжение 0–5В, пропорциональное измеренному pH.

Параметр Значение
Напряжение питания 5В постоянного тока
Потребляемая мощность ≈0,5Вт
Диапазон измерений pH 0–14
Рабочая температура 0–60°C
Точность ±0,1 pH
Время отклика ≤60 секунд
Разъём зонда BNC
Аналоговый выход (PO) 0–5В
Температурный выход (TO) Аналоговый
Размеры платы 43мм × 32мм

Распиновка модуля PH-4502C

  • TO — температурный выход (аналоговый, для программной компенсации)
  • DO — цифровой выход: переходит в HIGH при пересечении порога pH, заданного POT2
  • PO — аналоговый выход pH → подключить к Arduino A0
  • Gnd — земля зонда
  • Gnd — земля платы (подключить оба GND)
  • VCC — питание 5В
  • POT 1 — подстроечный резистор смещения (ближний к BNC) — устанавливает среднюю точку 2,5В для pH 7
  • POT 2 — подстроечный резистор порога — устанавливает значение pH для цифрового выхода DO

Как работает измерение pH

BNC стеклянный электрод содержит тонкую стеклянную мембрану, разделяющую внутренний эталонный раствор и исследуемую пробу. Ионы водорода (H⁺) в пробе создают разность потенциалов через мембрану, пропорциональную концентрации ионов — это уравнение Нернста на практике.

При pH 7 (нейтральный) потенциал электрода равен нулю. При pH 4 (кислый) — положительный, при pH 10 (щелочной) — отрицательный. Модуль PH-4502C смещает и масштабирует этот сигнал так, что pH 7 соответствует 2,5В на аналоговом входе Arduino:

pH = 7 + ((2,5 − V) / 0,18)

Константа 0,18 — ожидаемое изменение напряжения на единицу pH (наклон электрода). Хорошо обслуживаемые стеклянные электроды дают 0,177–0,185 В/pH при 25°C.

Калибровка

Калибровка устанавливает смещение так, чтобы pH 7 давал ровно 2,5В на выходе PO. Это разовая настройка — усиление модуля фиксировано.

Что нужно: буферный раствор pH 7,0, мультиметр, маленькая отвёртка.

  1. Отключите BNC-зонд и закоротите BNC-разъём (замкните центральный контакт с экраном проводником).
  2. Подайте питание (5В Arduino → VCC, оба GND подключены).
  3. Измерьте напряжение на пине PO мультиметром.
  4. Вращайте POT 1 (ближний к BNC) до показания ровно 2,500В.
  5. Подключите зонд. Промойте дистиллятом, погрузите в буферный раствор pH 7,0.
  6. Serial Monitor должен показывать значения 6,8–7,2. При необходимости скорректируйте POT 1.

Совет: всегда промывайте зонд дистиллятом между измерениями и буферными растворами. Не протирайте стеклянный шарик — тонкая мембрана легко царапается.

Схема подключения

PH-4502C PO  → Arduino A0
PH-4502C GND → Arduino GND  (подключить оба пина GND)
PH-4502C VCC → Arduino 5V

Скетч 1: базовое считывание pH

#include <Arduino.h>

int pHSense = A0;
int samples = 10;
float adc_resolution = 1024.0;

void setup() {
    Serial.begin(9600);
    delay(100);
    Serial.println("CimpleO pH Sense");
}

float ph(float voltage) {
    return 7 + ((2.5 - voltage) / 0.18);
}

void loop() {
    int measurings = 0;
    for (int i = 0; i < samples; i++) {
        measurings += analogRead(pHSense);
        delay(10);
    }
    float voltage = 5.0 / adc_resolution * measurings / samples;
    Serial.print("pH= ");
    Serial.println(ph(voltage));
    delay(3000);
}

Скетч 2: скользящее среднее

Выход стеклянного электрода содержит электрические помехи. Накопление 30 отсчётов за 3 секунды с отбрасыванием верхних и нижних 5 значений перед усреднением значительно улучшает стабильность:

#include <Arduino.h>

#define SAMPLES 30
#define TRIM    5

int pHSense = A0;

float ph(float voltage) {
    return 7.0 + ((2.5 - voltage) / 0.18);
}

float readPH() {
    int buf[SAMPLES];
    for (int i = 0; i < SAMPLES; i++) {
        buf[i] = analogRead(pHSense);
        delay(30);
    }
    // сортировка по возрастанию
    for (int i = 0; i < SAMPLES - 1; i++)
        for (int j = i + 1; j < SAMPLES; j++)
            if (buf[i] > buf[j]) { int t = buf[i]; buf[i] = buf[j]; buf[j] = t; }
    // среднее по средним значениям
    long sum = 0;
    for (int i = TRIM; i < SAMPLES - TRIM; i++) sum += buf[i];
    float voltage = 5.0 / 1024.0 * sum / (SAMPLES - 2 * TRIM);
    return ph(voltage);
}

void setup() { Serial.begin(9600); }

void loop() {
    Serial.print("pH= ");
    Serial.println(readPH(), 2);
    delay(1000);
}

Скетч 3: компенсация температуры

Показания pH смещаются примерно на 0,003 единицы на °C при отклонении от нейтрального. При pH 4 и температуре 35°C некомпенсированная погрешность достигает ±0,03 pH. Подключите пин TO к Arduino A1 для температурно-скорректированных показаний:

#include <Arduino.h>

int pHSense   = A0;
int tempSense = A1;

float ph(float voltage) {
    return 7.0 + ((2.5 - voltage) / 0.18);
}

float readTemperature() {
    int raw = analogRead(tempSense);
    return raw * 5.0 / 1024.0 * 100.0; // линейный датчик 10мВ/°C
}

void loop() {
    int raw = 0;
    for (int i = 0; i < 10; i++) { raw += analogRead(pHSense); delay(10); }
    float voltage = 5.0 / 1024.0 * raw / 10.0;
    float rawPH   = ph(voltage);
    float temp    = readTemperature();
    float compPH  = rawPH + (temp - 25.0) * 0.03;

    Serial.print("Темп: "); Serial.print(temp, 1);
    Serial.print("°C  pH= "); Serial.println(compPH, 2);
    delay(3000);
}

PH-4502C против альтернативных модулей

Модуль Цена Интерфейс Комп. температуры Точность Лучше для
PH-4502C $10–20 Аналог 0–5В Ручная (пин TO) ±0,1 pH Прототипы, хобби, мониторинг
DFRobot Gravity pH $30–50 Аналог Ручная ±0,1 pH Тот же принцип, удобнее форм-фактор
Atlas Scientific EZO-pH $140–160 I2C / UART Встроенная ±0,001 pH Продакшн-устройства, лабораторная точность
SEN0161 $25–40 Аналог Ручная ±0,1 pH Альтернатива PH-4502C

Для Arduino-прототипов PH-4502C обеспечивает достаточную точность при минимальной стоимости. При переходе к продакшн-устройству — особенно если показания управляют автоматической дозировкой или сигналами безопасности — точность и I2C-интерфейс Atlas Scientific EZO-pH оправдывают более высокую цену.

Если вы работаете с IoT-железом, вам также может быть полезно наше руководство по UHF RFID-модулю JRD-100, или узнайте, как передавать данные с датчиков в реальном времени через Kafka. Для сотовой связи в полевых датчиках — см. руководство по GSM/GPS-модулю A9G.

Разрабатываете подключённое устройство и нужно выйти за рамки прототипа? IoT-команда CimpleO закрывает весь стек — от прошивки и разработки PCB до облачного бэкенда и мобильного дашборда. Напишите нам — обсудим ваш проект.

Часто задаваемые вопросы

Можно ли использовать PH-4502C в солёной воде или гидропонике?

Да. Стеклянный электрод BNC измеряет концентрацию ионов водорода независимо от других растворённых веществ. Для солёной воды промывайте зонд дистиллятом после каждого использования — это замедляет деградацию электрода.

Как часто нужно калибровать PH-4502C?

При обычном мониторинге — раз в 2–4 недели. В агрессивной среде или при высокой температуре — раз в неделю. Храните зонд в растворе KCl или буфере pH 4,0, чтобы замедлить дрейф электрода.

В чём разница между PH-4502C и Atlas Scientific EZO-pH?

PH-4502C стоит $10–20 и выдаёт аналоговое напряжение — калибровка вручную. Atlas Scientific EZO-pH стоит около $150, работает по I2C/UART со встроенной компенсацией температуры. Для прототипов PH-4502C достаточно. Для продакшн-устройств или лабораторной точности — Atlas Scientific.

Почему показания pH нестабильны или скачут?

Частые причины: стеклянный шарик зонда не полностью погружён в раствор; электрические помехи на аналоговой линии (добавьте конденсатор 10 мкФ между A0 и GND); неверная калибровка смещения (повторите с закороченным BNC); сухой электрод (храните зонд в растворе для хранения, не давайте ему высыхать).

Поддерживает ли PH-4502C компенсацию температуры?

Модуль имеет температурный выход (пин TO), но не применяет компенсацию самостоятельно. Показания pH смещаются примерно на 0,003 единицы на °C при отклонении от нейтрального. Для точных измерений считывайте пин TO вторым аналоговым входом и применяйте программную компенсацию — см. скетч 3 ниже.

Работает ли PH-4502C с Arduino 3,3В или ESP32?

Модуль требует питания 5В, а аналоговый выход даёт 0–5В, что превышает 3,3В АЦП ESP32 и Arduino Due. Для систем 3,3В добавьте делитель напряжения 2:1 (два резистора 10 кОм) на линию PO. Питание модуля от 3,3В даст неверные показания.

pH-метр на Arduino с PH-4502C: схема, калибровка и код
Table of Contents