Точный pH-метр на Arduino с датчиком Atlas Scientific — подробное руководство
Компоненты и материалы
| Arduino UNO | × | 1 |
| Atlas Scientific Gravity™ Analog pH Sensor | × | 1 |
| Atlas Scientific Consumer Grade pH Probe (зонд) | × | 1 |
| LCD-модуль 20×4 (с I2C-адаптером удобнее) | × | 1 |
| Корпус 158×90×60 мм | × | 1 |
| Мини-breadboard | × | 1 |
| Резистор 220 Ом | × | 1 |
| Резистор 1 кОм | × | 1 |
| Стойки 11 мм и винты (в комплекте с pH-сенсором) | × | 4 |
| Перемычки | × | 1 |
| Акриловый лист (плексиглас) для базовой платы | × | 1 |
Инструменты
- Дрель, сверла, фрезы для гипсокартона, напильники, отвёртки, станки, клеевой пистолет, паяльник, штангенциркуль, линейка
Программное обеспечение
- Arduino IDE
О проекте
Создадим настольный pH-метр на базе аналогового pH-цифрового преобразователя Gravity и зонда Atlas Scientific с Arduino Uno. Показания выводятся на LCD-дисплей.
Примечания:
- Разрабатывалось на Windows. На Mac не тестировалось.
- Корпус не является водонепроницаемым.
Шаг 1: Подготовка корпуса
Безопасность: используйте очки, перчатки, респиратор.
Корпус — ABS-пластик, требует модификации.
Вырез под LCD (в крышке)
- Разметьте прямоугольник 98×40 мм по центру крышки.
- Закрепите в тисках, просверлите отверстие 3.2 мм внутри контура.
- Фрезой для гипсокартона на дрели вырежьте отверстие, работая изнутри контура.
- Напильником доводите до точного размера.
Вырезы под BNC-разъём и порты Arduino (в боковой стенке основания)
- Разметьте по размерам: круг для BNC, два прямоугольника для USB и питания Arduino.
- Вырежьте аналогичным способом: круг — сверлами, прямоугольники — фрезой + напильник.
Базовая плата для компонентов
- Вырежьте из акрила 3.2 мм плату 135×62.5 мм (ленточной пилой).
- Разметьте и просверлите 4 отверстия ⌀2.38 мм (3/32"). Зенкуйте с одной стороны до глубины 3 мм, ⌀4.4 мм — для за versenкивания головок винтов.
- Прикрутите 11-мм стойки (2 от pH-сенсора на Arduino, 2 — на сенсор).
Шаг 2: Установка электроники в корпус
- Установите базовую плату в основание корпуса (винты или термоклей).
- Закрепите pH-сенсор на стойках.
- Закрепите Arduino Uno на стойках.
- Приклейте мини-breadboard на базовую плату.
- Припаяйте пины к LCD, вставьте в вырез крышки, зафиксируйте термоклеем.
Шаг 3: Монтаж и пайка
Схема подключения прилагается. Используйте мини-breadboard для резисторов 1 кОм и 220 Ом (контраст LCD) и распределения 5V/GND Arduino.
Даташиты: Gravity pH sensor, pH probe.
Шаг 4: Финальная сборка
- Скрутите крышку и основание корпусом.
- Подключите pH-зонд к BNC-разъёму.
Шаг 5: Загрузка кода в Arduino
Код использует кастомные библиотеки. Порядок действий:
- Подключите Arduino, откройте IDE. Tools → Board → Arduino/Genuino Uno. Tools → Port → выберите порт.
- Библиотека LiquidCrystal: Sketch → Include Library → Manage Libraries → поиск «liquidcrystal» → установить «LiquidCrystal Built-in by Arduino, Adafruit».
- Библиотека Atlas Gravity: скачайте ZIP (ссылка), Sketch → Include Library → Add .ZIP Library → выберите Atlas_gravity.zip.
- Скопируйте код скетча (см. ниже) в IDE.
- Компилируйте и загрузите.
- Откройте Serial Monitor (Ctrl+Shift+M), baud 9600, «Carriage return» — для калибровки и отладки.
Шаг 6: Калибровка pH-сенсора
Важно: если планируете внешний блок питания — подключите его ПЕРЕД калибровкой для корректных опорных уровней.
Поддерживается 1-, 2- или 3-точечная калибровка. Нужны стандартные буферные растворы pH 4, 7, 10.
Калибровка через Serial Monitor: наблюдайте стабилизацию показаний, отправляйте команды.
Данные калибровки сохраняются в EEPROM Arduino.
Команды калибровки:
- Низкая точка (pH 4):
cal,4 - Средняя точка (pH 7):
cal,7 - Высокая точка (pH 10):
cal,10 - Сброс калибровки:
cal,clear
Процедура:
- Снимите защитный флакон, промойте зонд дистиллированной водой.
- Налейте раствор pH 4 в стакан (чтобы закрыть сенсорную часть).
- Опустите зонд, перемешайте (уберите пузырьки). Наблюдайте за показаниями до стабилизации (малые колебания норм).
- В Serial Monitor введите
cal,4— калибровка низкой точки готова. - Повторите для pH 7 и pH 10, каждый раз промывая зонд.
Температурная компенсация
Датчик точен ±0.2% в диапазоне 7–46°C. Вне этого диапазона нужна модификация для термокомпенсации. Зонд выдерживает 1–60°C.
Код (arduino pH meter code)
/* После загрузки откройте Serial Monitor, baud 9600, append "Carriage return"
Реальные показания pH + калибровка (1-3 точки).
Команды: "cal,4" "cal,7" "cal,10" "cal,clear" */
#include "ph_grav.h" // Atlas Scientific Gravity pH
#include "LiquidCrystal.h" // LCD
String inputstring = "";
boolean input_string_complete = false;
char inputstring_array[10];
Gravity_pH pH = A0; // Выход pH-сенсора → A0
LiquidCrystal pH_lcd(2, 3, 4, 5, 6, 7); // LCD пины: RS=2, E=3, D4-D7=4-7
void setup() {
Serial.begin(9600);
pH_lcd.begin(20, 4);
pH_lcd.setCursor(0,0); pH_lcd.print("--------------------");
pH_lcd.setCursor(0,3); pH_lcd.print("--------------------");
pH_lcd.setCursor(5, 1); pH_lcd.print("pH Reading");
if (pH.begin()) Serial.println("Loaded EEPROM");
Serial.println(F("Use commands \"CAL,4\", \"CAL,7\", \"CAL,10\" to calibrate"));
Serial.println(F("Use command \"CAL,CLEAR\" to clear calibration"));
}
void serialEvent() {
inputstring = Serial.readStringUntil(13);
input_string_complete = true;
}
void loop() {
if (input_string_complete) {
inputstring.toCharArray(inputstring_array, 30);
parse_cmd(inputstring_array);
input_string_complete = false;
inputstring = "";
}
Serial.println(pH.read_ph());
pH_lcd.setCursor(8, 2);
pH_lcd.print(pH.read_ph());
delay(1000);
}
void parse_cmd(char* string) {
strupr(string);
if (strcmp(string, "CAL,4") == 0) {
pH.cal_low(); Serial.println("LOW CALIBRATED");
} else if (strcmp(string, "CAL,7") == 0) {
pH.cal_mid(); Serial.println("MID CALIBRATED");
} else if (strcmp(string, "CAL,10") == 0) {
pH.cal_high(); Serial.println("HIGH CALIBRATED");
} else if (strcmp(string, "CAL,CLEAR") == 0) {
pH.cal_clear(); Serial.println("CALIBRATION CLEARED");
}
}
Схемы
Схема подключения прилагается.
Производственный процесс
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino
- Своё рулевое управление (джойстик) для игр на Arduino
- Построение полнофункционального станка с ЧПУ на базе Arduino Nano R3