Monitor temperature using Arduino LM35 Sensor (Source Code)


Click Here for Circuit Diagram


The Arduino Program

The open-source Arduino environment allows us to write code and load it onto the Arduino board's memory. The development environment is written in Java and based on Processing, avr-gcc, and other open source software. www.s2ptech.blogspot.com

The Arduino code loops every second to read output from the LM35, converting the analog output into Celsius and sending the data to the computer via a serial communication connection (USB).

Here's the code used to run the Arduino board:

Click Here For Source Code

The Processing Program  www.s2ptech.blogspot.com
The software client portion of this project runs on a PC and is written in Processing. Processing is a language and development environment similar to Arduino and designed for creating visual effects programs. We used Processing to create a small client that can read the serial data from the Arduino board and display the temperature on a slider and in both Celsius and Fahrenheit. We also added a rolling 100 data point graph to display historical temperature data. Here's a screen shot of the Processing application:




Here is the code used for the visual portion of the project: 

//import Serial communication library
import processing.serial.*;


//init variables
Serial commPort;
float tempC;
float tempF;
int yDist;
PFont font12;
PFont font24;
float[] tempHistory = new float[100];


void setup()
{
//setup fonts for use throughout the application
font12 = loadFont("Verdana-12.vlw");
font24 = loadFont("Verdana-24.vlw");


//set the size of the window
size(210, 200);


//init serial communication port
commPort = new Serial(this, "COM10", 9600);


//fill tempHistory with default temps
for(int index = 0; index<100; index++)
tempHistory[index] = 0;
}


void draw()
{
//get the temp from the serial port
while (commPort.available() > 0)
{
tempC = commPort.read();


//refresh the background to clear old data
background(123);


//draw the temp rectangle
colorMode(RGB, 160); //use color mode sized for fading
stroke (0);
rect (49,19,22,162);
//fade red and blue within the rectangle
for (int colorIndex = 0; colorIndex <= 160; colorIndex++)
{
stroke(160 - colorIndex, 0, colorIndex);
line(50, colorIndex + 20, 70, colorIndex + 20);
}


//draw graph
stroke(0);
fill(255,255,255);
rect(90,80,100,100);
for (int index = 0; index<100; index++)
{
if(index == 99)
tempHistory[index] = tempC;
else
tempHistory[index] = tempHistory[index + 1];
point(90 + index, 180 - tempHistory[index]);
}


//write reference values
fill(0,0,0);
textFont(font12);
textAlign(RIGHT);
text("212 F", 45, 25);
text("32 F", 45, 187);


//draw triangle pointer
yDist = int(160 - (160 * (tempC * 0.01)));
stroke(0);
triangle(75, yDist + 20, 85, yDist + 15, 85, yDist + 25);


//write the temp in C and F
fill(0,0,0);
textFont(font24);
textAlign(LEFT);
text(str(int(tempC)) + " C", 115, 37);
tempF = ((tempC*9)/5) + 32;
text(str(int(tempF)) + " F", 115, 65);
}
}



End.
1 Comments
Disqus
Fb Comments
Comments :

1 comment:

  1. there is a port conflict between arduino and processing. only one can run at a time. how do i manage to view temperature readings in processing at the same time arduino is sending via serial. cwgitahi@yahoo.com

    ReplyDelete