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.

5
  • What value do you expect? – RSM Jul 10 '15 at 10:59
  • the value of the liquid – Dinesh Sekar Jul 14 '15 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 Jul 14 '15 at 8:28
  • Sodium Hydroxide which is pH value of 12. – Dinesh Sekar Jul 16 '15 at 7:04
  • and the value you are getting? – RSM Jul 16 '15 at 7:14
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?

2
  • There is no error. But i can't get the correct value of the pH – Dinesh Sekar Jul 10 '15 at 10:38
  • So what values do you get instead? And, with respect, there probably is an error - or it would work! – Mark Williams Jul 10 '15 at 10:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.