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));
}