My Projects: Arduino LM35 Sensor

My Projects: Arduino LM35 Sensor:

Arduino LM35 Sensor

My son Paul and I recently finished a project using the Arduino Diecimila microcontroller in conjunction with the Processingopen source programming environment to monitor temperature.

The project contains 3 parts:
1. The Arduino board with sensor circuit.
2. The Arduino program.
3. The Processing program.
The Arduino Board with Sensor Circuit
The Arduino circuit board is connected to the LM35 Celsius Temperature sensor. Here is a picture of the project circuit with illustrated wires connected to the temperature sensor.


We used the on board power source (5v and Gnd) to power the LM35 and analog pin 0 (zero) to read the analog output from the sensor. Here's a picture of the circuit wired on a breadboard.



The LM35 temperature sensor's pin-out and package information is as follows:

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.

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:

//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
}
The Processing Program
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);
 }
}

댓글

이 블로그의 인기 게시물

remove bluebirds.exe , virtual drive

4,5,6 띠 저항의 색띠를 읽는 법(띠저항 값)

수지에서 인천공항 리무진 버스 (인천공항버스정보)(2022년3월업데이트)