Alarme inteligente com controle de cômodo

Alarme programável que além de controlar janelas e alarmar, mantém o controle de ar condicionado automático a partir da temperatura.

ExpertFull instructions provided10
Alarme inteligente com controle de cômodo

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Standard LCD - 16x2 White on Blue
Adafruit Standard LCD - 16x2 White on Blue
×1
5 mm LED: Red
5 mm LED: Red
×1
Resistor 221 ohm
Resistor 221 ohm
×1
Resistor 1k ohm
Resistor 1k ohm
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Grove - Infrared Reflective Sensor v1.2
Seeed Studio Grove - Infrared Reflective Sensor v1.2
×1
Temperature Sensor
Temperature Sensor
×1
DC motor (generic)
×1
NeoPixel Ring: WS2812 5050 RGB LED
Adafruit NeoPixel Ring: WS2812 5050 RGB LED
×1
Rotary potentiometer (generic)
Rotary potentiometer (generic)
×1
Incandescent Lamp, Stacklights
Incandescent Lamp, Stacklights
×1

Story

Read more

Schematics

Schematic

Code

Alarm Clock inteligente

Arduino
//Bibliotecas
#include <Adafruit_NeoPixel.h>

#include <IRremote.h>

#include <LiquidCrystal.h>
#include "Servo.h"

#define LED_PIN 13
#define LED_COUNT 24

//Definições
Servo janelas;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int RECV = 11;
IRrecv irrecv(RECV);
decode_results results;

int arcondicionado = 0;

int starttime;
int activetime;
int prevoustime = 0;

int hours = 0;
int mins = 0;

int alarm_hours = 0;
int alarm_mins = 0;

int stop = 0;

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

//Setup
void setup()
{

  	Serial.begin(9600);
  	
  	//Lcd
    lcd.begin(16, 2);
    lcd.clear();
	
  	//Neo Pixel
    strip.begin();
    strip.show();
	
    irrecv.enableIRIn();//Controle IR
	
    pinMode(11, INPUT);//Sensor IR
    digitalWrite(11, HIGH);

    janelas.attach(A0);//Janelas
    janelas.write(0);

    pinMode(8, INPUT);//Botão
    digitalWrite(8, HIGH);
	
  	pinMode(9, OUTPUT);
    pinMode(12, OUTPUT);
  	pinMode(10, OUTPUT);//Lâmpada
    starttime = millis() / 1000;
      
}

void loop()
{	
  //Potencia lampada
  int intensidade= analogRead(A2);	
  analogWrite(10,map(intensidade,0,1023,0,255));
 
  //ArCondicionado
  int temp = map(analogRead(A1), 20,358,-40,125);
  if (temp >= 27 && arcondicionado == 0)
  {
  	digitalWrite(9, HIGH);
  }
  else
  {
    digitalWrite(9, LOW);
  }
 
    while (digitalRead(8) == LOW)
    {
        
        if (irrecv.decode(&results))
        {
           Serial.println(results.value, HEX);
           unsigned int codigoRecebido = results.value;
           irrecv.resume();
          
          	if(codigoRecebido != 0xFFFF){
              if (results.value == 0xFD50AF)
              {
                  alarm_mins++;
              }
            }
          
            if (results.value == 0xFD10EF)
            {
                alarm_mins--;
            }

            if (results.value == 0xFD609F)
            {
                alarm_hours++;
            }

            if (results.value == 0xFD20DF)
            {
                alarm_hours--;
            }
        }
      	
      	//Inicialização do alarme
        janelas.write(0);
        stop = 0;
        lcd.setCursor(6, 1);
        lcd.print("Alarme");
        lcd.setCursor(6, 0);
        
        lcd.setCursor(6, 0);

        if (alarm_hours < 10)
        {
            lcd.print("0");
            lcd.print(alarm_hours);
        }
        else
        {
            lcd.print(alarm_hours);
        }

        lcd.print(":");

        if (alarm_mins < 10)
        {
            lcd.print("0");
            lcd.print(alarm_mins);
        }
        else
        {
            lcd.print(alarm_mins);
        }
        if (alarm_mins > 59)
        {
            alarm_hours++;
            alarm_mins = 0;
        }
        if (alarm_hours > 23)
        {
            alarm_hours = 0;
        }
      	if (alarm_hours <= 0)
        {
            alarm_hours = 0;
        }
        if (alarm_mins <= 0)
        {
            alarm_mins = 0;
        }
        delay(500);
        lcd.clear();
    }
  
  	//Relogio em funcionamento
    activetime = (millis() / 1000) - starttime;
    if (prevoustime < (activetime - 59))
    {
        mins++;
        prevoustime = activetime;
    }

    if (mins > 59)
    {
        hours++;
        mins = 0;
    }

    if (hours > 23)
    {
        hours = 0;
    }
  	
    lcd.setCursor(6, 0);

    if (hours < 10)
    {
        lcd.print("0");
        lcd.print(hours);
    }
    else
    {
        lcd.print(hours);
    }

    lcd.print(":");

    if (mins < 10)
    {
        lcd.print("0");
        lcd.print(mins);
    }
    else
    {
        lcd.print(mins);
    }
    lcd.setCursor(5, 1);
    lcd.print("Relogio       ");
	
  	
  	//Alarme tocando
    if (alarm_hours == hours && alarm_mins == mins && alarm_mins != 0 && stop != 1)
    {
        //delay(200);
        janelas.write(90);
        digitalWrite(12, HIGH);
        for (int i = 1; i <= 24; i++)
        {
            strip.setPixelColor(i - 1, 0, 255, 0);
            strip.setPixelColor(i, 255, 0, 0);
            strip.show();
        }
        delay(200);
    }
    else
    {
        delay(300);
    }
	
  	//Algumas funções do controle
  	if (irrecv.decode(&results))
    {
      unsigned int codigoRecebido = results.value;
      Serial.println(results.value, HEX);  
      irrecv.resume();

  
      if(codigoRecebido != 0xFFFF)
      {	
        //Parar alarme
        if (results.value == 0xFDA05F)
        {
          stop = 1;
          digitalWrite(12, LOW);
          for (int i = 24; i >= 1; i--)
          {
              strip.setPixelColor(i - 1, 127, 127, 127);
              strip.show();
          }
         }
        //Abrir janelas
        else if (results.value == 0xFD807F)
        {
          janelas.write(90);
        }
        //Fechar janelas
        else if (results.value == 0xFD906F)
        {
          janelas.write(0);
        }
      }
    }
    lcd.clear();
}

Credits

Pedro Henrique do Nascimento Gomes
2 projects • 0 followers
MATHEUS ROBERT DA SILVA SANTOS
2 projects • 1 follower
Fernando F de Carvalho
21 projects • 8 followers

Comments