Building Love-O-Meter by using a temperature sensor
This "Love-O-Meter" is based on the tutorial by Arduino and it comes with the starter kit. It uses a temperature sensor to measure the warmth of your skin and then starts to turn on (or off) the LEDs indicated by the temperature.
The components
- Arduino UNO
- Breadboard
- Jumper wires
- LEDs
- 220 ohm resistors
- TMP36 temperature sensor
Building the Circuit
At first I ran the "Hello World" for Arduino to make sure the environment would work as expected. Now I could start to connect the jumper wires between Arduino UNO and the breadboard.
As usually I connected the breadboard to power (5V) and to the ground (GND). I inserted the TMP36 on the breadboard so the rounded part of the sensor would face away from Arduino.
I attached 3 LED lights and the resistors and connected them with Arduino. The lights should react to the heat of the finger and if the temperature would get hot enough all the lights would be on and would also tell you if you are a hot lover or not...
As usually I connected the breadboard to power (5V) and to the ground (GND). I inserted the TMP36 on the breadboard so the rounded part of the sensor would face away from Arduino.
I attached 3 LED lights and the resistors and connected them with Arduino. The lights should react to the heat of the finger and if the temperature would get hot enough all the lights would be on and would also tell you if you are a hot lover or not...
The circuit |
The result and the code
Everything worked like a charm and my love-o-meter was ready for action. The components worked fine together and I was happy with the result. When I held my finger on the sensor the blue LED turned on and after a while the yellow started to shine too.
Everything worked like a charm and my love-o-meter was ready for action. The components worked fine together and I was happy with the result. When I held my finger on the sensor the blue LED turned on and after a while the yellow started to shine too.
/* Arduino Starter Kit example Project 3 - Love-O-Meter This sketch is written to accompany Project 3 in the Arduino Starter Kit Parts required: 1 TMP36 temperature sensor 3 red LEDs 3 220 ohm resistors Created 13 September 2012 by Scott Fitzgerald http://arduino.cc/starterKit This example code is part of the public domain */ // named constant for the pin the sensor is connected to const int sensorPin = A0; // room temperature in Celcius const float baselineTemp = 20.0; void setup(){ // open a serial connection to display values Serial.begin(9600); // set the LED pins as outputs // the for() loop saves some extra coding for(int pinNumber = 2; pinNumber<5; pinNumber++){ pinMode(pinNumber,OUTPUT); digitalWrite(pinNumber, LOW); } } void loop(){ // read the value on AnalogIn pin 0 // and store it in a variable int sensorVal = analogRead(sensorPin); // send the 10-bit sensor value out the serial port Serial.print("sensor Value: "); Serial.print(sensorVal); // convert the ADC reading to voltage float voltage = (sensorVal/1024.0) * 5.0; // Send the voltage level out the Serial port Serial.print(", Volts: "); Serial.print(voltage); // convert the voltage to temperature in degrees C // the sensor changes 10 mV per degree // the datasheet says there's a 500 mV offset // ((volatge - 500mV) times 100) Serial.print(", degrees C: "); float temperature = (voltage - .5) * 100; Serial.println(temperature); // if the current temperature is lower than the baseline // turn off all LEDs if(temperature < baselineTemp){ digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); } // if the temperature rises 2-4 degrees, turn an LED on else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){ digitalWrite(2, HIGH); digitalWrite(3, LOW); digitalWrite(4, LOW); } // if the temperature rises 4-6 degrees, turn a second LED on else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, LOW); } // if the temperature rises more than 6 degrees, turn all LEDs on else if(temperature >= baselineTemp+6){ digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } delay(1); }
Sources - http://arduino.cc/en/ , Arduino Projects Book
Based on the prototype course by Tero Karvinen (http://terokarvinen.com/) and the book - Karvinen 2011: Make Arduino Bots and Gadgets
Just playing around with this.
ReplyDeleteIs there a way to take a sample of the current ambient temperature and set that as the baseLine - instead of manually setting?
If you read the temperature for a few cycles during the setup loop you could assign this value to a variable and use that as your baseline temperature instead of the hardcoded 20.0 degrees.
DeleteChris, what would this look like in code? Do I need to return this baselineTemp so it can be used as input in the loop, or ...?
Deletefor what it's worth, I defined a float baselineTemp (not a constant). Each cycle in the loop he checks if the measured temperature is lower than the baselineTemp.
Deleteif (temperature < baselineTemp){baselineTemp = temperature;}
Normally this should (after a few cycles) result in the baselineTemp being the same as the room temperature .
How do I add more LEDs?
ReplyDeleteu just look at the codes of the leds then add for example
Deleteif(temperature < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} // if the temperature rises 2-4 degrees, turn an LED on
else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} // if the temperature rises 4-6 degrees, turn a second LED on
else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
} // if the temperature rises more than 6 degrees, turn all LEDs on
else if(temperature >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
\
the n just add
I'm new to arduino, what size battery do I need to power this circuit?
ReplyDeleteThanks for your comment! I would use a 9V Battery and a suitable snap connector.
DeleteCan I hook up some other microvolt supply to the Love-O-Meter circuit? I want an analog style LED meter that can demonstrate the tiny volt levels.
ReplyDeletebonjour j ai copier à l identique et j ai: expected "or" ;before "const" status 1 expectes',' or ';' before'const' pouvez vous m aider... :)
ReplyDeleteHi,
ReplyDeleteI have completed the first part but does anyone know how to do the interface with 2 people?
I guess you might have to duplicate all inputs and then if both people's temperatures satisfy the certain temperature condition then red LEDs would light up if both peoples temperatures are within the same range.
Here is my code i've guessed would look something like
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Opens the serial port
for(int pinNumber = 2; pinNumber < 5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber,LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
const int sensorPin1 = A0;
const int sensorPin2 = A1;
const float baselineTemp = 20.3;
int sensorVal1 = analogRead(sensorPin1);
Serial.print("Sensor Value: ");
Serial.print(sensorVal1);
int sensorVal2 = analogRead(sensorPin2);
Serial.print("Sensor Value: ");
Serial.print(sensorVal2);
float voltage1 = (sensorVal1/1024.0) * 5.0; // Get the voltage value from ADC reading
Serial.print(" Volts: ");
Serial.print(voltage1);
float voltage2 = (sensorVal2/1024.0) * 5.0; // Get the voltage value from ADC reading
Serial.print(" Volts: ");
Serial.print(voltage2);
Serial.print(" degrees C: ");
float temperature1 = (voltage1 - .5) * 100;
Serial.println(temperature1);
Serial.print(" degrees C: ");
float temperature2 = (voltage2 - .5) * 100;
Serial.println(temperature2);
// If temperature is less than baseline then LEDs are all off
if(temperature1 < baselineTemp || temperature2 < baselineTemp){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
} else if(temperature1 >= baselineTemp+2 && temperature1 <= baselineTemp+4 && temperature2 >= baselineTemp+2 && temperature2 <= baselineTemp+4){
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
} else if(temperature1 >= baselineTemp+4 && temperature1 <= baselineTemp+6 && temperature2 >= baselineTemp+4 && temperature2 <= baselineTemp+6){
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
} else if(temperature1 >= baselineTemp+6 && temperature1 >= baselineTemp+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
delay(1);
}