// LÍBRERIAS
#include <SoftwareSerial.h> //Libreria Software Serial para Bluetooth (Se descarga), en esta caso usamos el HC-05 que sirve para usarse de Esclavo ó Maestro
#include <LiquidCrystal_I2C.h> //Librería de la pantalla LCD
#include <Wire.h> //Librería para permitir comunicarse con el I2C
#include <Servo.h> // librería para poder controlar el servo
#include <DHT.h> //Librería paa usar sensores DHT (Se descarga)
#include <DHT_U.h> //Complemento de la librería DHT
#include <LiquidCrystal.h>
//PINES ESPECIALES
#define DHTPIN 6 //Se define el pin del DHT
#define trig 7 // Emisor de pulso o señal
#define echo 8 // Receptor "del eco" del pulso o señal
#define DHTTYPE DHT11 //Se define el tipo de sensor que se usara para medir la temperatura y humedad, en este caso sera el DHT-11
//OBJETOS DE LAS LIBRERÍAS
DHT dht(DHTPIN, DHTTYPE); // Crea un objeto de la librería DHT, indicando así el sensor
Servo garage; // Crea un objeto servo llamado servoMotor
Servo ventana; //Crea un objeto servo llamado ventana
Servo puerta; //Crea un objeto Servo llamado puerta
LiquidCrystal lcd(11, 10, 14, 15, 16, 17);
//OBJETOS
char Mensaje; //Variable que mandara los mensajes a los Switches y por voz
// Bocina
const int buzzer = 13; //Bocina conectada al Pin 13
//Sistema de IR
const int sensorPin = 12; //Sensor de IR conectado al Pin 12
const int LEDIV = 31; //Led Interior Verde
const int LEDIR = 30; //Led Interior Rojo
int luz = 0; //Valor para leer el dato de la luz
int valor_sensor = 0; //Este sera el valor que andara leyendo la fotoresistencia
int valor_limite = 475; //Este valor hara que el LED cambie de estado a una determinada luminosidad.
int valor_luz;
int val=0;
//Sistema de luces exteriores
const int LEDE1 = 32; //Led Exterior 1
const int LEDE2 = 33; //Led Exterior 2
const int LEDE3 = 34; //Led Exterior 3
const int LEDE4 = 35; //Led Exterior 4
const int LDR = A0; //El LDR esta conectado en el pin A0
//Sistema de luces interiores
const int LEDR1 = 36; //Led Room 1
const int LEDR2 = 37; //Led Room 2
const int LEDR3 = 38; //Led Room 3
const int LEDP1 = 39; //Led Pasillo 1
const int LEDP2 = 40; //Led Pasillo 2
const int LEDP3 = 41; //Led Baño 2
const int LEDBO = 42; //Led Baño
const int LEDSA = 43; //Led Sala
const int LEDCO = 44; //Led Oficina
const int LEDCA = 45; //Led Cocina
const int LEDGA = 46; //Led Garage
//Luces para el Garaje
const int LEDVG = 47; //Led Verde Garage
const int LEDRG = 48; //Led Rojo Garage
//Variables para almacenar las lecturas del sensor DHT11
float celsius;
float fahrenheit;
float humedad;
void setup() {
Serial.begin(9600);
dht.begin(); //Comunicacion con el DHT11
Serial.println("Iniciando todos los sistemas... Listo"); //Mensaje para indicar que esta el sistema listo
lcd.begin(20, 4);
lcd.setCursor(3,1);
lcd.print("BIENVENIDO(A)"); //Mensaje de Bienvenida
lcd.setCursor(1,2);
lcd.print("A LA CASA DOMOTICA"); //Mensaje de Bienvenida
delay(5000);
garage.attach(2); //Se conecta la variable del Servo Garage al pin 2
puerta.attach(3); //Se conecta la variable del Servo Puerta al pin 3
ventana.attach(4); //Se conecta la variable del Servo Ventana al pin 4
//Se establecen los pines como entradas o salidas
//Todos los LED's se establecen como Salida
pinMode(sensorPin, INPUT); //Se establece como Entrada
pinMode(buzzer, OUTPUT);
pinMode(LEDIV,OUTPUT);
pinMode(LEDIR,OUTPUT);
pinMode(LEDE1,OUTPUT);
pinMode(LEDE2,OUTPUT);
pinMode(LEDE3,OUTPUT);
pinMode(LEDE4,OUTPUT);
pinMode(LDR,INPUT); //Se establece el LDR como Entrada
pinMode(LEDR1, OUTPUT);
pinMode(LEDR2, OUTPUT);
pinMode(LEDR3, OUTPUT);
pinMode(LEDP1, OUTPUT);
pinMode(LEDP2,OUTPUT);
pinMode(LEDP3,OUTPUT);
pinMode(LEDBO,OUTPUT);
pinMode(LEDSA,OUTPUT);
pinMode(LEDCO,OUTPUT);
pinMode(LEDCA,OUTPUT);
pinMode(LEDGA,OUTPUT);
pinMode(LEDVG,OUTPUT);
pinMode(LEDRG,OUTPUT);
pinMode(trig, OUTPUT); //Se configura el Emisor como Salida
pinMode(echo, INPUT); //Se configura el Receptor como Entrada
}
void loop()
{
long duration, distance; //Establecemos duration y distance como variables numéricas extensas
digitalWrite(trig, LOW); //Para tener un pulso limpio empezamos con 2 microsegundos en apagado
delayMicroseconds(2);
digitalWrite(trig, HIGH); //Mandamos un pulso de 5 microsegundos
delayMicroseconds(5);
digitalWrite(trig, LOW); //Apagamos
duration = pulseIn(echo, HIGH); //Medimos el tiempo que la señal tarda en volver al sensor en microsegundos
distance = (duration/2)*0.0343; //La distancia es el tiempo por la velocidad del sonido (343 m/s = 0.0343 cm/microseg)
digitalWrite(LEDVG,LOW); //Led verde indica que la puerta esta abierta
digitalWrite(LEDRG,HIGH); //Led Rojo indicara que la puerta esta cerrada
if (distance < 10)
{ //Si la distancia es menor a un metro y medio, se abrira la puerta del garage
Serial.println("Puerta de Garage abierta");
digitalWrite(LEDVG,HIGH);
digitalWrite(LEDRG,LOW);
lcd.clear();
lcd.setCursor(1,1);
lcd.print("AUTOMOVIL LLEGANDO");
lcd.setCursor(2,2);
lcd.print("ABRIENDO GARAJE");
delay(1000);
tone(buzzer,600);
delay(1000);
noTone(buzzer);
garage.write(150);
delay(8000);
tone(buzzer,500);
delay(2000);
noTone(buzzer);
garage.write(0);
delay(1000);
}
else
{
Serial.println("Puerta de Garage cerrada");
digitalWrite(LEDVG,LOW);
digitalWrite(LEDRG,HIGH);
lcd.clear();
lcd.setCursor(7,1);
lcd.print("GARAJE");
lcd.setCursor(7,2);
lcd.print("CERRADO");
delay(1000);
garage.write(0);
}
//SISTEMA DE TEMPERATURA Y HUMEDAD
celsius = dht.readTemperature(); //Lee y almacena la temperatura del sensor DHT11
fahrenheit = dht.readTemperature(true); //Lee y almacena la temperatura del sensor DHT11
humedad = dht.readHumidity(); //Lee y almacena la humedad del sensor DHT11
valor_sensor = analogRead(A0); //Lee el valor del sensor LDR
valor_luz = map(valor_sensor, 1024, 0, 0, 255); //Mapeo de los valores de la fotocelda en un rango de 0 a 255 %
//Se envían los datos del DHT11 a la pantalla LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CENTIGRADOS: ");
lcd.print(celsius);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("FAHRENHEIT: ");
lcd.print(fahrenheit);
lcd.print(" F");
lcd.setCursor(0,2);
lcd.print("HUMEDAD: ");
lcd.print(humedad);
lcd.print(" %");
lcd.setCursor(0,3);
lcd.print("ILUMINACION: ");
lcd.print(valor_luz);
lcd.print(" %");
delay(1000);
//Se envían los datos del DHT11 al Monitor Serie
Serial.print(celsius);
Serial.print(" °C");
Serial.print("|");
Serial.print(fahrenheit);
Serial.print(" °F");
Serial.print("|");
Serial.print(humedad);
Serial.print(" %");
Serial.print("|");
Serial.print(valor_luz);
Serial.print(" %");
delay(1000);
//NOTA: El DHT11 manda datos cada segundo. Si se usa un DHT22, cambiarlo por delay(2000)
//SISTEMA DE ALARMA AL ENTRAR EN LA PUERTA
int value = 0; //Declaramos una variable llamada value donde guardara el valor de la luz leida por el sensor
value = digitalRead(sensorPin); //el valor va a ser leido por el sensor
digitalWrite(LEDIV,HIGH); //Led verde indica que no hay movimiento y todo esta seguro
digitalWrite(LEDIR,LOW); //Led Rojo indicara que hay movimiento inesperado
if (value == HIGH) //Aquí indicamos que si el valor esta encendido, en el Serial mostrara que no hay obstaculo y por lo tanto en el noTOne(buzzer) no emitirá un sonido
{
Serial.println("Seguro: No hay movimiento");
noTone(buzzer);
lcd.clear();
lcd.setCursor(3,1);
lcd.print("SEGURO: SIN");
lcd.setCursor(5,2);
lcd.print("MOVIMIENTO");
delay(2000);
}
//En caso contrario
else
{
digitalWrite(LEDIR,HIGH); //El Led Rojo se enciende, indicando que hay movimiento
digitalWrite(LEDIV,LOW); //El Led Verde se apaga
lcd.clear();
lcd.setCursor(1,1);
lcd.print("!! ADVERTENCIA !!");
lcd.setCursor(3,2);
lcd.print("HAY MOVIMIENTO");
delay(1000);
tone(buzzer,2500); //Suena un tono
delay(1000); //Durante 150 ms
tone(buzzer,1500); //Suena otro tono
delay(1000); //Durante 150 ms
noTone(buzzer);
Serial.println("Advertencia: Detectó movimiento"); //Manda un mensaje al Serial donde indica que hay movimiento
}
delay(100); //Se actualizara cada 100 ms
//SISTEMA AUTOMÁTICO DE LUCES EXTERIORES
valor_sensor = analogRead(A0); //El valor del sensor va a ser leido analogamente por el LDR
luz = (5.0 * valor_sensor * 100.0)/1024.0; //Para entender esta formula visitar: http://programarfacil.com/podcast/48-sensor-de-temperatura-en-arduino/
Serial.print(luz); //Manda el valor de la luz al Serial
Serial.println(" de valor luz"); // junto con un mensaje que indica el valor de la luz
Serial.println(valor_sensor);
delay(1000); //Cada segundo se actualizará
if (luz <= valor_limite) //Si el valor de luz es menor o igual que el valor limite
{
//Todos los LED's exteriores se apagan
digitalWrite (LEDE1, LOW);
digitalWrite (LEDE2, LOW);
digitalWrite (LEDE3, LOW);
digitalWrite (LEDE4, LOW);
//Se manda una pantalla al LCD
lcd.clear();
lcd.setCursor(2,1);
lcd.print("LED's EXTERIORES");
lcd.setCursor(7,2);
lcd.print("APAGADOS");
Serial.println("Se abrió la Ventana");
lcd.clear();
lcd.setCursor(5,1);
lcd.print("VENTANA");
lcd.setCursor(6,2);
lcd.print("ABIERTA");
delay(1000);
ventana.write(0);
delay(1000);
}
else if (luz > valor_limite) //En caso contrario, si el valor de luz es mayor que el valor limite
{
//Todos los LED's exteriores se encienden automaticamente
digitalWrite (LEDE1, HIGH);
digitalWrite (LEDE2, HIGH);
digitalWrite (LEDE3, HIGH);
digitalWrite (LEDE4, HIGH);
//Se manda una pantalla al LCD
lcd.clear();
lcd.setCursor(2,1);
lcd.print("LED's EXTERIORES");
lcd.setCursor(5,2);
lcd.print("ENCENDIDOS");
Serial.println("Se cerró la Ventana");
lcd.clear();
lcd.setCursor(5,1);
lcd.print("VENTANA");
lcd.setCursor(6,2);
lcd.print("CERRADA");
delay(1000);
ventana.write(90);
delay(1000);
}
val = analogRead(3);
if (val < 10) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 10 && val < 100) {
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 100 && val < 200) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 200 && val < 300) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, HIGH);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 300 && val < 400) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, HIGH);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 400 && val < 500) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, HIGH);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 500 && val < 600) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, HIGH);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 600 && val < 700) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, HIGH);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 700 && val < 800) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, HIGH);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 800 && val <900) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, HIGH);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, LOW);
}
if (val >= 900 && val <1000) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, HIGH);
digitalWrite(LEDGA, LOW);
}
if (val >= 1000) {
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR3, LOW);
digitalWrite(LEDP1, LOW);
digitalWrite(LEDP2, LOW);
digitalWrite(LEDP3, LOW);
digitalWrite(LEDBO, LOW);
digitalWrite(LEDSA, LOW);
digitalWrite(LEDCO, LOW);
digitalWrite(LEDCA, LOW);
digitalWrite(LEDGA, HIGH);
}
}