Tuesday, November 8, 2011
Smart thermometer (Stage 1):
Input: room temperature
Input: user preference
Arduino: compare room temperature and user preference
if user preference > room temperature
Output: turn on heater
if user preference < room temperature
Output: turn off heater
Arduino code:
//POTENTIOMETER
int sensorPin = 0;
int sensorValue = 0;
//TEMPERATURE
#include <Sensirion.h>
#define sensirionDataPin 2
#define sensirionClockPin 3
float temperature;
float humidity;
float dewpoint;
Sensirion tempSensor = Sensirion(sensirionDataPin, sensirionClockPin);
//PIR+RELAY
int pirPin = 13;
int slpPin = 12;
int ledPin = 9;
int rlyPin = 11;
void setup()
{
Serial.begin(9600);
//PIR+RELAY
pinMode(ledPin, OUTPUT);
pinMode(rlyPin, OUTPUT);
pinMode(slpPin, OUTPUT);
pinMode(pirPin, INPUT);
digitalWrite(slpPin, HIGH);
}
void loop()
{
//CHECKING MOTION
int pirVal = digitalRead(pirPin);
if(pirVal == LOW){ //IF MOTION IS DETECTED
digitalWrite(ledPin, HIGH);
//CHECK TEMPERATURE
tempSensor.measure(&temperature, &humidity, &dewpoint);
Serial.print("Temperature: ");
serialPrintFloat(temperature);
Serial.print(" C, Humidity: ");
serialPrintFloat(humidity);
Serial.print(" %, Dewpoint: ");
serialPrintFloat(dewpoint);
Serial.println(" C");
delay(3000);
//CHECK POTENTIOMETER
sensorValue = analogRead(sensorPin);
sensorValue = map(sensorValue, 0, 1024, 20, 40);
sensorValue = constrain(sensorValue, 20, 40);
Serial.println(sensorValue);
//COMPARE USER INPUT TEMPERATURE + ROOM TEMPERATURE
if(sensorValue > temperature){
digitalWrite(rlyPin, HIGH); //TURN ON RELAY
delay(5000);
}
else {
digitalWrite(rlyPin, LOW); //TURN OFF RELAY
}
}
else { //IF THERE IS NO MOTION
digitalWrite(ledPin, LOW);
digitalWrite(rlyPin, LOW);
}
}
void serialPrintFloat(float f){
Serial.print((int)f);
Serial.print(".");
int decplace = (f - (int)f) * 100;
Serial.print(abs(decplace));
}
Subscribe to:
Posts (Atom)