0

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.

0xF2
5422 gold badges8 silver badges19 bronze badges
asked Jul 10, 2015 at 7:49
5
  • What value do you expect? Commented Jul 10, 2015 at 10:59
  • the value of the liquid Commented 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. Commented Jul 14, 2015 at 8:28
  • Sodium Hydroxide which is pH value of 12. Commented Jul 16, 2015 at 7:04
  • and the value you are getting? Commented Jul 16, 2015 at 7:14

1 Answer 1

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?

answered Jul 10, 2015 at 10:36
2
  • There is no error. But i can't get the correct value of the pH Commented 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! Commented Jul 10, 2015 at 10:40

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.