This circuit is designed to measure pH levels using a pH meter and display the results through an Arduino UNO microcontroller. The Arduino UNO also controls a servomotor and communicates with a Bluetooth HC-06 module for potential wireless data transmission. Two pushbuttons are included in the design, possibly for user input to control the system or to trigger certain actions. The servomotor is likely used for some form of physical response or indication based on the pH readings or other inputs. The pH readings are processed by the Arduino, which also toggles an LED based on a timed interval.
#define SensorPin A0 // pH meter Analog output to Arduino Analog Input 0
#define Offset 0.00 // deviation compensate
#define LED 13
#define samplingInterval 20
#define printInterval 800
#define ArrayLenth 40 // times of collection
int pHArray[ArrayLenth]; // Store the average value of the sensor feedback
int pHArrayIndex=0;
void setup(void)
{
pinMode(LED,OUTPUT);
Serial.begin(9600);
Serial.println("pH meter experiment!"); // Test the serial monitor
}
void loop(void)
{
static unsigned long samplingTime = millis();
static unsigned long printTime = millis();
static float pHValue,voltage;
if(millis()-samplingTime > samplingInterval)
{
pHArray[pHArrayIndex++]=analogRead(SensorPin);
if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
pHValue = 3.5*voltage+Offset;
samplingTime=millis();
}
if(millis() - printTime > printInterval) // Every 800 milliseconds, print a numerical, convert the state of the LED indicator
{
Serial.print("Voltage:");
Serial.print(voltage,2);
Serial.print(" pH value: ");
Serial.println(pHValue,2);
digitalWrite(LED,digitalRead(LED)^1);
printTime=millis();
}
}
double avergearray(int* arr, int number){
int i;
int max,min;
double avg;
long amount=0;
if(number<=0){
Serial.println("Error number for the array to averaging!/n");
return 0;
}
if(number<5){ // less than 5, calculated directly statistics
for(i=0;i<number;i++){
amount+=arr[i];
}
avg = amount/number;
return avg;
}else{
if(arr[0]<arr[1]){
min = arr[0];max=arr[1];
}
else{
min=arr[1];max=arr[0];
}
for(i=2;i<number;i++){
if(arr[i]<min){
amount+=min; // arr<min
min=arr[i];
}else {
if(arr[i]>max){
amount+=max; // arr>max
max=arr[i];
}else{
amount+=arr[i]; // min<=arr<=max
}
}//if
}//for
avg = (double)amount/(number-2);
}//if
return avg;
}
This code is designed to read the analog signal from the pH meter connected to pin A0 on the Arduino UNO. It samples the signal at a regular interval, averages the readings to reduce noise, and then calculates the pH value from the averaged voltage. The calculated pH value and the corresponding voltage are printed to the serial monitor every 800 milliseconds. Additionally, an LED connected to pin 13 on the Arduino is toggled with each print interval, serving as a visual indicator of the system's operation.