Forum Software Ferduino code How to calibrate ph et orp probe

How to calibrate ph et orp probe  [SOLVED]


Post Number:#21 Post Mon Oct 20, 2014 5:31 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Try this:

Open_channel(ph1);
  delay(50);
  Serial3.print("R");
  Serial3.print('\r');
  delay(1000);
  Serial3.flush();
  Serial.println("Debug pH 1:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 2:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 3:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 4:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#22 Post Mon Oct 20, 2014 5:45 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
i receives that :

Debug pH 1:
*ER7.010

Debug pH 2:

Debug pH 3:

Debug pH 4:


Post Number:#23 Post Mon Oct 20, 2014 5:54 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

It seems right now.

The first *ER is normal and you can see the result for "R" command after.
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#24 Post Mon Oct 20, 2014 6:22 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
i have add debug :
 int i;
  do{
    Open_channel(ph1);
    Serial.println("Debug pH 5:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
    Serial.println();
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 6:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
     Serial.println();
   
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 7:");
    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
       
        Serial.print(sensorstring[i]);
      }
      Serial.println();
     
      if(holding ==5)
      {
        PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHA = PHT/100;
      }
      else
      {
        PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHA = PHT/100;
      } 
      PHT=0;
      Serial3.flush();
      break;
    }
  }
  while (done==1);
  done=0;


with i recieves that:

Debug pH 1:
*ER
7.018

Debug pH 2:

Debug pH 3:

Debug pH 4:

Debug pH 5:
*ER
*ER

Debug pH 6:
*ER
7.019

Debug pH 7:
7.020



Post Number:#25 Post Mon Oct 20, 2014 6:28 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

What you can learn with this results?

You have commented the fucntions for pH2, ORP and EC in "void iniciar_stamps()"?
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#26 Post Mon Oct 20, 2014 6:41 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
What you can learn with this results?


i don't know, it make an error when it's connected, maybe

You have commented the fucntions for pH2, ORP and EC in "void iniciar_stamps()"?


no i don't , why ? there is error of other circuits on my debug ?

i comment now the other circuits.

With other circuits commented:

Debug pH 1:
*ER
7.013

Debug pH 2:

Debug pH 3:

Debug pH 4:

Debug pH 5:

Debug pH 6:
*ER
7.013

Debug pH 7:
7.009





thank you for your patience.

Post Number:#27 Post Wed Oct 22, 2014 1:46 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Hi!

Remove this part:

    Serial.println("Debug pH 5:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
    Serial.println();


Best regards.
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#28 Post Wed Oct 22, 2014 2:49 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
Hi!

i receives that:
Debug pH 1:
7.194

Debug pH 2:

Debug pH 3:

Debug pH 4:


Debug pH 6:
7.193

Debug pH 7:
7.189



With this code :

//------------------------------------- Leitura dos stamps
void parametros()
{
   int i;
  do{
    Open_channel(ph1);
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 6:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
     Serial.println();
   
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 7:");
    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
       
        Serial.print(sensorstring[i]);
      }
      Serial.println();
     
      if(holding ==5)
      {
        PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHA = PHT/100;
      }
      else
      {
        PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHA = PHT/100;
      } 
      PHT=0;
      Serial3.flush();
      break;
    }
  }
  while (done==1);
  done=0;
 
 /* do{
    Open_channel(ph2);
    Serial3.print(tempC); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
    Serial3.print('\r');
    delay(500);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }
      if(holding ==5)
      {
        PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHR = PHT/100;
      }
      else
      {
        PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHR = PHT/100;
      } 
      PHT=0;
      Serial3.flush();
      break;
    }

  }
  while (done==1);
  done=0;

  do{
    Open_channel(orp);
    Serial3.print("r"),
    Serial3.print('\r');
    delay(500);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }

      ORPT = ((sensorstring[1]-48)*100 + (sensorstring[2]-48)*10 + (sensorstring[3]-48));
      ORP = ORPT;
      ORPT=0;
      Serial3.flush();     
      break;
    }
  }
  while (done==1);
  done=0;
/*
  do{
    Open_channel(ec);
    Serial3.print(tempC); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
    Serial3.print('\r');
    delay(500);
    if(Serial3.available() > 3)
    {
      Serial.print("Densidade:");
      holding = Serial3.available();
      for(i=1; i <= 15; i++)
      {
        sensorstring[i]= Serial3.read();
        Serial.print(sensorstring[i]);
      }
      Serial.println();
      Serial3.flush();
      break;
    } 
  }
  while (done==1);
  done=0;
*/
}

void iniciar_stamps()
{
  Open_channel(ph1);
  delay(50);
  Serial3.print("R");
  Serial3.print('\r');
  delay(1000);
  Serial3.flush();
  Serial.println("Debug pH 1:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 2:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 3:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(1000);
  Serial.println("Debug pH 4:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
/* Open_channel(ph2);
  delay(500);
  Serial3.print("R");
  Serial3.print('\r');
  delay(500);
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(500);
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(500);
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(500);
  Serial.println("Debug pH2 setup:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
     Serial.println();
  Open_channel(orp);
  delay(500);
  Serial3.print("R");
  Serial3.print('\r');
  delay(500);
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(500);
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(500);
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(500);
  Serial.println("Debug orp setup:");
    while(Serial3.available())
    {
      Serial.print(char(Serial3.read()));
     }
   */  Serial.println();
  parametros(); // Verifica os "stamps".
}

void Open_channel(short channel)
{
  switch (channel)
  {
  case 0:
    //open channel Y0
    //S0=0
    //S1=0
    digitalWrite(multiplexadorS0Pin, LOW);
    digitalWrite(multiplexadorS1Pin, LOW);
    break;

  case 1:
    //open channel Y1
    //S0=1
    //S1=0
    digitalWrite(multiplexadorS0Pin, HIGH);
    digitalWrite(multiplexadorS1Pin, LOW);
    break;

  case 2:
    //open channel Y2
    //S0=0
    //S1=1
    digitalWrite(multiplexadorS0Pin, LOW);
    digitalWrite(multiplexadorS1Pin, HIGH);
    break;

/*  case 3:
    //open channel Y3
    //S0=1
    //S1=1
    digitalWrite(multiplexadorS0Pin, HIGH);
    digitalWrite(multiplexadorS1Pin, HIGH);
    break; */
  }
  //Serial3.print('\r');
  return;
}



But on my screen ph tank : 66.96 pb convert to float ?

Post Number:#29 Post Wed Oct 22, 2014 2:59 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Replace:

    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 6:");


With:

    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 6:");


You can't send it 2 times:

    Serial3.print("R");
    Serial3.print('\r');
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#30 Post Wed Oct 22, 2014 3:06 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
ok no error, but always ph tank on screen 66.92

Debug pH 1:
7.188

Debug pH 2:

Debug pH 3:

Debug pH 4:


Debug pH 6:

Debug pH 7:
7.192


Post Number:#31 Post Wed Oct 22, 2014 3:12 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Before:

      if(holding ==5)


Add:

      Serial.print("Holding: ");
      Serial.println(holding);

      Serial.print("sensorstring[0] :");
      Serial.println(sensorstring[0]);     

      Serial.print("sensorstring[1] :");
      Serial.println(sensorstring[1]);
     
      Serial.print("sensorstring[2] :");
      Serial.println(sensorstring[2]);
     
      Serial.print("sensorstring[3] :");
      Serial.println(sensorstring[3]);
     
      Serial.print("sensorstring[4] :");
      Serial.println(sensorstring[4]);
     
      Serial.print("sensorstring[5] :");
      Serial.println(sensorstring[5]);
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#32 Post Wed Oct 22, 2014 3:22 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
ok now i understand "sensorstring".



Holding: 6
sensorstring[0] :
sensorstring[1] :7
sensorstring[2] :.
sensorstring[3] :1
sensorstring[4] :6
sensorstring[5] :9

Post Number:#33 Post Wed Oct 22, 2014 3:30 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Replace:

      if(holding ==5)


With:

      if(holding ==6)


The conclusion for all this is simple.

The stamps V4.x send 2 decimal places and EZO send 3.

So the quantity of characters is 6 instead 5.

1º = 7
2º = .
3º = 1
4º = 6
5º = 9
6º = '\r'

I hope that you can learn something with all this.
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.

Post Number:#34 Post Wed Oct 22, 2014 3:39 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
yes I learn so much and before you ask I always tried several times but I lack connaissnce in coding.

:ymapplause:
great it works well now, I'm going to like ph2 and orp.

Thank you ^:)^

Post Number:#35 Post Fri Oct 24, 2014 5:44 pm
Posts: 92
Topics: 10
Solve rating: 0
Joined: Sat May 17, 2014 9:03 am
Topics: 10
Age: 43
Gender: None specified
National Flag:
France
Hi Fernando

I cleaned up the code and found the right adjustment for delays, delays after the "open channel" must be 50 to not make any mistakes.

Now the probes of PH and ORP is working perfectly with new stamps "EZO".

Thank you Fernando. :-bd


//------------------------------------- Leitura dos stamps
void parametros()
{
   int i;
  do{
    Open_channel(ph1);
    delay(50);
    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(500);
    Serial.println("Debug pH 6:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
     Serial.println();
   
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 7:");
    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
        Serial.print(sensorstring[i]);
      }
      Serial.println();
      if(holding ==6)
      {
        PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHA = PHT/100;
      }
      else
      {
        PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHA = PHT/100;
      } 
      PHT=0;
      Serial3.flush();
      break;
    }
  }
  while (done==1);
  done=0;
 
  do{
    Open_channel(ph2);
    delay(50);
    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(500);
    Serial.println("Debug pH 6:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
     Serial.println();
   
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug pH 7:");
    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
       
        Serial.print(sensorstring[i]);
      }
      Serial.println();
      if(holding ==6)
      {
        PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHR = PHT/100;
      }
      else
      {
        PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHR = PHT/100;
      } 
      PHT=0;
      Serial3.flush();
      break;
    }

  }
  while (done==1);
  done=0;

  do{
    Open_channel(orp);
     delay(50);
     Serial.println("Debug orp 6:");
     while(Serial3.available())
     {
       Serial.print(char(Serial3.read()));
      }
    Serial.println();
    Serial3.print("R");
    Serial3.print('\r');
    delay(1000);
    Serial.println("Debug orp 7:");
    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
        Serial.print(sensorstring[i]);
      }
      ORPT = ((sensorstring[1]-48)*100 + (sensorstring[2]-48)*10 + (sensorstring[3]-48));
      ORP = ORPT;
      ORPT=0;
      Serial3.flush();     
      break;
    }
  }
  while (done==1);
  done=0;
/*
  do{
    Open_channel(ec);
    Serial3.print(tempC); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
    Serial3.print('\r');
    delay(500);
    if(Serial3.available() > 3)
    {
      Serial.print("Densidade:");
      holding = Serial3.available();
      for(i=1; i <= 15; i++)
      {
        sensorstring[i]= Serial3.read();
        Serial.print(sensorstring[i]);
      }
      Serial.println();
      Serial3.flush();
      break;
    } 
  }
  while (done==1);
  done=0;
*/
}

void iniciar_stamps()
{
  Open_channel(ph1);
  delay(50);
  Serial3.flush();
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(500);
  Serial3.flush();
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(500);
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(500);
  Open_channel(ph2);
  delay(50);
  Serial3.flush();
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(500);
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(500);
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(500);
  Open_channel(orp);
  delay(50);
  Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
  Serial3.print('\r');
  delay(500);
  Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
  Serial3.print('\r');
  delay(500);
  Serial3.print("RESPONSE,0"); //  Disable "RESPONSE" code
  Serial3.print('\r');
  delay(500); 
  parametros(); // Verifica os "stamps".
}

void Open_channel(short channel)
{
  switch (channel)
  {
  case 0:
    //open channel Y0
    //S0=0
    //S1=0
    digitalWrite(multiplexadorS0Pin, LOW);
    digitalWrite(multiplexadorS1Pin, LOW);
    break;

  case 1:
    //open channel Y1
    //S0=1
    //S1=0
    digitalWrite(multiplexadorS0Pin, HIGH);
    digitalWrite(multiplexadorS1Pin, LOW);
    break;

  case 2:
    //open channel Y2
    //S0=0
    //S1=1
    digitalWrite(multiplexadorS0Pin, LOW);
    digitalWrite(multiplexadorS1Pin, HIGH);
    break;

/*  case 3:
    //open channel Y3
    //S0=1
    //S1=1
    digitalWrite(multiplexadorS0Pin, HIGH);
    digitalWrite(multiplexadorS1Pin, HIGH);
    break; */
  }
  Serial3.print('\r');
  return;
}

Previous



Return to Ferduino code





Who is online

Users viewing this topic: No registered users and 1 guest

cron