Pages: [1]   Go Down
Author Topic: PH sensor question  (Read 645 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Trying to make a PH sensor temperature compensated,
Cant be that simple, sketch likes it, but I'm sure its wrong lol


code
Code:
#include <NewSoftSerial.h>
NewSoftSerial mySerial =  NewSoftSerial(2, 3);
char stamp_data[15];
byte holding;
byte i;
byte startup=0;
//declare variables
float tempC;
int tempPin = 0;

void setup(){
  mySerial.begin(38400);
  Serial.begin(38400);
          }
void loop() {
tempC = analogRead(tempPin);           //read the value from the sensor
tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature
Serial.print((byte)tempC);             //send the data to the computer
delay(1000);                           //wait one second before sending new data

if(startup==0){
  for(i=1; i <= 2;i++){
      delay(1000);
      mySerial.print("l0");
      mySerial.print(13,BYTE);
      delay(1000);
      mySerial.print("l1");
      mySerial.print(13,BYTE);
 }
  startup=1;
  delay(1000);
   mySerial.print(tempC);    //I'm not sure this is right I changed it from “c” to tempC
   mySerial.print(13,BYTE);
}
 if(mySerial.available() > 3) {
    holding=mySerial.available();
    for(i=1; i <= holding;i++){
        stamp_data[i]= mySerial.read();
   }
    for(i=1; i <= holding;i++){
        Serial.print(stamp_data[i]);
       }
       Serial.println("");
  }
}
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 212
Posts: 13531
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Why are you sure its wrong?  Please explain it to us.

- Is the output as expected?
- if not what did you expect?

- What temp sensor is used?
- what PH sensor is used?
- Datasheet links?
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok never mind that,, I just need to try it 1st.
But I'm trying to add a little more code at the end and need help there.

 what is the code for PH I know its not tempC
 

Code:
#include <NewSoftSerial.h>
NewSoftSerial mySerial =  NewSoftSerial(2, 3);
char stamp_data[15];
byte holding;
byte i;
byte startup=0;
//declare variables
float tempC;
int tempPin = 0;

void setup(){
  mySerial.begin(38400);
  Serial.begin(38400);
          }
void loop() {
tempC = analogRead(tempPin);           //read the value from the sensor
tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature
Serial.print((byte)tempC);             //send the data to the computer
delay(1000);                           //wait one second before sending new data

if(startup==0){
  for(i=1; i <= 2;i++){
      delay(1000);
      mySerial.print("l0");
      mySerial.print(13,BYTE);
      delay(1000);
      mySerial.print("l1");
      mySerial.print(13,BYTE);
 }
  startup=1;
  delay(1000);
   mySerial.print(tempC);
   mySerial.print(13,BYTE);
}
 if(mySerial.available() > 3) {
    holding=mySerial.available();
    for(i=1; i <= holding;i++){
        stamp_data[i]= mySerial.read();
   }
    for(i=1; i <= holding;i++){
        Serial.print(stamp_data[i]);
       }
       Serial.println("");

 if (tempC > 7) {                //  I need help, what is the code for PH I know its not tempC
   digitalWrite(9, HIGH);
delay (1000);
   digitalWrite(9, LOW);
delay (2*60UL*60UL*1000UL);
 }
  else {
 
  } 
  }
}
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

At least some of the same questions that robtillaart asked still apply. You need to answer them before we can help you.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok I can tell you, I'm going to use an LM35 temp sensor and a atlas scientific PH stamp.
I don't have it hooked up yet just writing the code for it, so I cant test it as of yet.
http://atlas-scientific.com/arduino-hydroponics.html?gclid=CM3w6L6Y8KgCFUa8KgodPwduIA
They have a sample wiring diagram and a sample code

Code:
/*

This software was made to demonstrate how to quickly get your pH/ORP/DO/ stamp running on the Arduino platform.

An Arduino Duemilanove board was used to test this code.

Modify the code to fit your system. Code efficacy was NOT considered, this is a demo only.

To use this code you must add the "newsoftserial" library to your Arduino library folder.

The soft serial port TX line goes to the stamps RX pin.

The soft serial port RX line goes to the stamps TX pin.

Make sure you also connect to power and GND pins on the stamp to power and a common ground.

Data from the stamp is received and re-sent through the Arduinos hardware UART TX line.

Open TOOLS > serial monitor, set the serial monitor to the correct serial port and set the baud rate to 38400.

The data from the stamp will come out on the serial monitor

*/

Download this code

#include <NewSoftSerial.h>               //this will let the software take advantage of the "newsoftserial" library.                   

 

NewSoftSerial mySerial =  NewSoftSerial(2, 3);  //setup and rename soft uart.

    //RX|TX

 

char stamp_data[15];          //this is where the data from the stamp is stored. The array is 15 char long because

                                                //if no pH probe is connected, the message "check probe" is transmitted.

                         //Having an array that is too small will cause data corruption and could cause the Arduino to crash.

 

byte holding;                       //used to tell us the number of bytes that have been received by the Arduino and are

              //holding in the buffer holding

byte i;                                  //counter

byte startup=0;                //used to control the start-up sequence

 

void setup(){

  mySerial.begin(38400);                     //set up the soft serial to run at 38400             

  Serial.begin(38400);                          //set up the hardware serial port to run at 38400

          }

           

           

         

void loop() {                                       //main loop

 

if(startup==0){                                  //if the start-up sequence has not been run

  for(i=1; i <= 2;i++){                        //we go through this for-loop twice, turning on/ off the stamp leds

      delay(1000);                               //wait 1 second

      mySerial.print("l0");                 //turn off the led

      mySerial.print(13,BYTE);         //ALWAYS end a command with <CR> (which is simply the number 13) or

           // (print("/r")

      delay(1000);                              //wait 1 second

      mySerial.print("l1");                //turn on the led

      mySerial.print(13,BYTE);        //ALWAYS end a command with <CR> (which is simply the number 13) or

          //(print("/r")

  }

  startup=1;                                    //stop the star-up loop from happening by setting the start-up var to 1

 

  delay(1000);                                  //after the stamp leds flashed twice, lets wait 1 second before we give the

         // stamp a new command

           

  mySerial.print("c");                   //the command "c" will tell the stamp to take continues readings

  mySerial.print(13,BYTE);          //ALWAYS end a command with <CR> (which is simply the number 13) or

        //(print("/r")

 

   //to take a single reading

   //you would simple send the command

   //mySerial.print("r");   

   //mySerial.print(13,BYTE);

 

   //to take a temperature dependent reading

   //send the temperature in celsius, let's say

   //the temperature in celsius is 18.5

 

   //mySerial.print("18.5");   

   //mySerial.print(13,BYTE);

}

 

 

 

 

 if(mySerial.available() > 3) {                  //if we see the more than three bytes have been received by the Arduino

    holding=mySerial.available();            //lets read how many bytes have been received

   

    for(i=1; i <= holding;i++){                     //we make a loop that will read each byte we received

        stamp_data[i]= mySerial.read();     //and load that byte into the stamp_data array

    }

   

    for(i=1; i <= holding;i++){                      //we now loop through the array       

        Serial.print(stamp_data[i]);             //printing each byte we received  through the hardware UART

       }

       Serial.println("");                               //once we finished, we print a null char with the <CR><LF> command.

      }

}

The sample code used for the LM35 is at http://pscmpf.blogspot.com/2008/12/arduino-lm35-sensor.html or here is one more http://www.ladyada.net/learn/sensors/tmp36.html
I'm using 5 volts
Code:
//declare variables
float tempC;
int tempPin = 0;

void setup()
{
Serial.begin(9600); //opens serial port, sets data rate to 9600 bps
}

void loop()
{
tempC = analogRead(tempPin);           //read the value from the sensor
tempC = (5.0 * tempC * 100.0)/1024.0;  //convert the analog data to temperature
Serial.print((byte)tempC);             //send the data to the computer
delay(1000);                           //wait one second before sending new data
}
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
They have a sample wiring diagram and a sample code
Then, why haven't you hooked it up yet? With sample code provided, why do you need to write more code to test it?
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Well here's the thing I don't have all the parts yet, this is just part of a real long and complicated program.
Its an automated hydroponic garden. Fighting with those UPS guys in a big way, never ever ship anything UPS they suck USPS all the way.
Anyway all I want to know is the code for the PH part so I can Finnish.
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Anyway all I want to know is the code for the PH part so I can Finnish.
Quote
I don't have it hooked up yet just writing the code for it, so I cant test it as of yet...They have a sample wiring diagram and a sample code
So, I'll ask again. What's wrong with the sample code?
Logged

Pages: [1]   Go Up
Jump to: