I am trying to read the pH value from a analog pH meter, SEN-01454. From the source code I found, voltage maps to pH value. This is the code:
pHArray[pHArrayIndex++]=analogRead(SensorPin);
if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
pHValue = 3.5*voltage+Offset;
samplingTime=millis();
But then the value is not correct. So how do i actually do it.
The example code from Wiki page for product.
-
What value do you expect?RSM– RSM2015年07月10日 10:59:23 +00:00Commented Jul 10, 2015 at 10:59
-
the value of the liquidDinesh Sekar– Dinesh Sekar2015年07月14日 07:16:34 +00:00Commented Jul 14, 2015 at 7:16
-
ok a bit more specific, what liquid are you testing. Do you know what that liquids' pH is, this is of use if you are calibrating it. If you are testing a liquid and don't know its pH before testing you might actually be getting the right value.RSM– RSM2015年07月14日 08:28:21 +00:00Commented Jul 14, 2015 at 8:28
-
Sodium Hydroxide which is pH value of 12.Dinesh Sekar– Dinesh Sekar2015年07月16日 07:04:34 +00:00Commented Jul 16, 2015 at 7:04
-
and the value you are getting?RSM– RSM2015年07月16日 07:14:12 +00:00Commented Jul 16, 2015 at 7:14
1 Answer 1
This is SOME of the code. We are missing the avergearray()
function.. I suspect you're taking one reading and averaging it with both old & future ones, but this code clearly is meant to sit in a loop..
From another source, I got this:
/*
# This sample codes is for testing the pH meter V1.0.
# Editor : YouYou
# Date : 2013年10月12日
# Ver : 0.1
# Product: pH meter
# SKU : SEN0161
*/
#define SensorPin 0 //pH meter Analog output to Arduino Analog Input 0
unsigned long int avgValue; //Store the average value of the sensor feedback
float b;
int buf[10],temp;
void setup()
{
pinMode(13,OUTPUT);
Serial.begin(9600);
Serial.println("Ready"); //Test the serial monitor
}
void loop()
{
for(int i=0;i<10;i++) //Get 10 sample value from the sensor for smooth the value
{
buf[i]=analogRead(SensorPin);
delay(10);
}
for(int i=0;i<9;i++) //sort the analog from small to large
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++) //take the average value of 6 center sample
avgValue+=buf[i];
float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
phValue=3.5*phValue; //convert the millivolt into pH value
Serial.print(" pH:");
Serial.print(phValue,2);
Serial.println(" ");
digitalWrite(13, HIGH);
delay(800);
digitalWrite(13, LOW);
}
which reads in the array first and then averages it. Is this what your code does? If so, what sort of errors are you seeing?
-
There is no error. But i can't get the correct value of the pHDinesh Sekar– Dinesh Sekar2015年07月10日 10:38:30 +00:00Commented Jul 10, 2015 at 10:38
-
So what values do you get instead? And, with respect, there probably is an error - or it would work!Mark Williams– Mark Williams2015年07月10日 10:40:33 +00:00Commented Jul 10, 2015 at 10:40