pH-метр на Arduino с PH-4502C: схема, калибровка и код
Reading time: 5 minutes
Last modified:
pH показывает кислотность или щёлочность раствора по шкале 0–14, где 7 — нейтральный. Для Arduino-проектов — мониторинг аквариума, гидропоника, анализ почвы, контроль сточных вод — PH-4502C является самым доступным аналоговым интерфейсным модулем pH, стоимостью $10–20, который подключается напрямую к любому аналоговому входу Arduino.
В этом руководстве: характеристики модуля, калибровка, схема подключения и три скетча с нарастающей сложностью.
Характеристики модуля 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, мультиметр, маленькая отвёртка.
- Отключите BNC-зонд и закоротите BNC-разъём (замкните центральный контакт с экраном проводником).
- Подайте питание (5В Arduino → VCC, оба GND подключены).
- Измерьте напряжение на пине PO мультиметром.
- Вращайте POT 1 (ближний к BNC) до показания ровно 2,500В.
- Подключите зонд. Промойте дистиллятом, погрузите в буферный раствор pH 7,0.
- 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В даст неверные показания.