pH Meter using Arduino Uno

Programming, Tutorial, Coding, New Design, and/or any project for your Arduino and Raspberry Pi can post your topic /suggestion here.
User avatar
dondon pramis
Location: Philippines
Posts: 65
Joined: Sun Feb 12, 2017 8:28 am

pH Meter using Arduino Uno

Tue Jul 14, 2020 12:51 am

In this project, we are going to make an Arduino pH Meter and learn how to measure the pH of a liquid solution using a gravity pH sensor and Arduino. A 16x2 LCD is used to show the pH value on the screen. We will also learn how to calibrate the pH sensor to determine the accuracy of the sensor. So let’s get started!

Required Components
-Arduino Uno
-16*2 Alphanumeric LCD
-I2C Module for LCD
-Gravity Analog pH sensor
-Connecting wires

What is pH Value?
The unit that we use to measure the acidity of a substance is called pH. The term “H” is defined as the negative log of the hydrogen ion concentration. The range of pH can have values from 0 to 14. A pH value of 7 is neutral, as pure water has a pH value of exactly 7. Values lower than 7 are acidic and values greater than 7 are basic or alkaline.
pH-Scale.png (32.93 KiB) Viewed 697 times
How Does Gravity Analog pH Sensor Work?
Analog pH sensor is designed to measure the pH value of a solution and show the acidity or alkalinity of the substance. It is commonly used in various applications such as agriculture, wastewater treatment, industries, environmental monitoring, etc. The module has an on-board voltage regulator chip which supports the wide voltage supply of 3.3-5.5V DC, which is compatible with 5V and 3.3V of any control board like Arduino. The output signal is being filtered by hardware low jitter.

Technical Features:

Signal Conversion Module:
-Supply Voltage: 3.3~5.5V
-BNC Probe Connector
-High Accuracy: ±0.1@25°C
-Detection Range: 0~14

PH electrode:
Operating Temperature Range: 5~60°C
Zero (Neutral) Point: 7±0.5
Easy calibration
Internal Resistance: <250MΩ

pH Signal Conversion Board:
V+: 5V DC input
G: Ground pin
Po: pH analog output
Do: 3.3V DC output
To: Temperature output

The Nernst equation gives a relation between the cell potential of an electrochemical cell, temperature, reaction quotient and the standard cell potential. In non-standard conditions, the Nernst equation is used to calculate cell potentials in an electrochemical cell. The Nernst equation can also be used to calculate the total electromotive force (EMF) for a full electrochemical cell. This equation is used to calculate the PH value of a solution as well. The glass electrode response is governed by the Nernst Equation can be given as:
E = E0 - 2.3 (RT/nF) ln Q

Q= Reaction coefficient
E = mV output from the electrode
E0 = Zero offset for the electrode
R = Ideal gas constant= 8.314 J/mol-K
T = Temperature in ºK
F = Faraday constant = 95,484.56 C/mol
N = Ionic Charge
Arduino pH Meter Circuit Diagram
Arduino-pH-Meter-Circuit-Diagram.png (68.59 KiB) Viewed 697 times
The connection between Arduino and PH signal conversion board is shown in the table below.
5V = V+
A0 = Po

Calibration of pH Electrode
Calibration of the PH electrode is very important in this project. For this, we need to have a solution whose value is known to us. This can be taken as the reference solution for the calibration of the sensor.

Suppose, we have a solution whose PH value is 7 (distilled water). Now when the electrode is dipped in the reference solution and the PH value displayed on LCD is 6.5. Then to calibrate it, just add 7-6.5=0.5 in the calibration variable “calibration_value” in the code. i.e. make the value 21.34 + 0.5=21.84. After making these changes, again upload the code to Arduino and recheck the pH by dipping electrode in the reference solution. Now LCD should show the correct pH value i.e. 7 (Little variations are considerable). Similarly, adjust this variable to calibrate the sensor. Then check for all other solutions to get the exact output.

Complete code

Code: Select all

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
float calibration_value = 21.34;
int phval = 0; 
unsigned long int avgval; 
int buffer_arr[10],temp;
void setup() 
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("   pH Meter      ");
  lcd.setCursor(0, 1);
  lcd.print(" Tester ");
void loop() {
 for(int i=0;i<10;i++) 
 for(int i=0;i<9;i++)
 for(int j=i+1;j<10;j++)
 for(int i=2;i<8;i++)
 float volt=(float)avgval*5.0/1024/6;
 float ph_act = -5.70 * volt + calibration_value;
 lcd.setCursor(0, 0);
 lcd.print("pH Val:");
 lcd.setCursor(8, 0);