#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
Servo puerta, puerta2;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT sensor(13, DHT22);
char dato = ' ';
byte FAlarma1 = 2, FAlarma2 = 3;
byte dormitorio = 4, cocina = 5, sala = 6, principal = 7;
byte patio1 = 8, patio2 = 9, patio3 = 10, patio4 = 11;
byte pir = 12, trig = 14, echo = 15, buz_activo = 16, buz_pasivo = 17;
byte ventilador = 18, ventilador2 = 19, sensorflama = 27;
float t = 0, h = 0, ic = 0;
long distancia = 0, duracion = 0;
byte lectura = 0, lecturaFlama = 0, luminosidad = 0,
sw = 0, porcentajeGas = 0;
int lecturaLuz = 0, lecturaGas = 0; //0-1023
byte gas = A0, sensorluz = A1;
void setup() {
puerta.attach(23, 650, 2550); //fisico
puerta2.attach(25); //mg90
//puerta.attach(23); //wokwi, mg90,s3003,mg995 996
pinMode(trig, OUTPUT);
pinMode(FAlarma1, OUTPUT);
pinMode(FAlarma2, OUTPUT);
pinMode(dormitorio, OUTPUT);
pinMode(sala, OUTPUT);
pinMode(cocina, OUTPUT);
pinMode(principal, OUTPUT);
pinMode(buz_activo, OUTPUT);
pinMode(buz_pasivo, OUTPUT);
pinMode(ventilador2, OUTPUT);
pinMode(patio1, OUTPUT);
pinMode(patio2, OUTPUT);
pinMode(patio3, OUTPUT);
pinMode(patio4, OUTPUT);
pinMode(echo, INPUT);
pinMode(pir, INPUT);
pinMode(sensorflama, INPUT);
Serial.begin(9600);
puerta.write(90);
sensor.begin();
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(3, 0); //c,f
lcd.print("SISTEMA DE");
lcd.setCursor(3, 1); //c,f
lcd.print("CALEFACCION");
delay(3000);
lcd.clear();
pinMode(ventilador, OUTPUT);
}
void loop() {
SistemaDeAlarma();
SistemaAutomatico();
SistemaDeCalefaccion();
SistemaDeIncendios();
SistemaIluminacion();
SistemaDeGas();
leerdato();
}
void SistemaDeCalefaccion() {
t = sensor.readTemperature();
h = sensor.readHumidity();
ic = sensor.computeHeatIndex(false);
lcd.setCursor(0, 0); //c,f
lcd.print("T: " + String(t) + "*C");
lcd.setCursor(0, 1); //c,f
lcd.print("H: " + String(h) + "% HR");
if (ic > 25) {
digitalWrite(ventilador, 1);
}
else {
digitalWrite(ventilador, 0);
}
delay(1000);
lcd.clear();
}
void SistemaDeAlarma() {
lectura = digitalRead(pir);
if (lectura == 1) {
digitalWrite(FAlarma1, 1);
digitalWrite(FAlarma2, 1);
digitalWrite(buz_activo, 1);
sw = 1;
}
else {
digitalWrite(FAlarma1, 0);
digitalWrite(FAlarma2, 0);
digitalWrite(buz_activo, 0);
}
if (sw == 1) {
Serial.println("Alarma! - Intrusos en la casa");
sw = 0;
delay(5000); //wowki
}
}
void SistemaAutomatico() {
digitalWrite(trig, 0);
delayMicroseconds(2);
digitalWrite(trig, 1);
delayMicroseconds(10);
digitalWrite(trig, 0);
duracion = pulseIn(echo, 1); //83333
distancia = duracion / 58;
if (distancia < 15) {
puerta.write(180);
}
else {
puerta.write(90);
}
}
void SistemaDeIncendios() {
lecturaFlama = digitalRead(sensorflama);
if (lecturaFlama == 0) {
Serial.println("Fuego!");
}
else {
}
}
void SistemaIluminacion() {
lecturaLuz = analogRead(sensorluz); //0-1023
luminosidad = map(lecturaLuz, 0, 1023, 0, 100); // ldr suelto
//luminosidad = map(lecturaLuz,0,1023,100,0); // ldr en modulo
if (luminosidad <= 40) {
digitalWrite(patio1, 1);
digitalWrite(patio2, 1);
digitalWrite(patio3, 1);
digitalWrite(patio4, 1);
}
else {
digitalWrite(patio1, 0);
digitalWrite(patio2, 0);
digitalWrite(patio3, 0);
digitalWrite(patio4, 0);
}
}
void leerdato() {
if (Serial.available() > 0) {
dato = Serial.read(); //lee de la serie la informacion que llega
}
if (dato == 'D') {
digitalWrite(dormitorio, 1);
}
else if (dato == 'd') {
digitalWrite(dormitorio, 0);
}
else if (dato == 'S') {
digitalWrite(sala, 1);
}
else if (dato == 's') {
digitalWrite(sala, 0);
}
else if (dato == 'C') {
digitalWrite(cocina, 1);
}
else if (dato == 'c') {
digitalWrite(cocina, 0);
}
else if (dato == 'P') {
digitalWrite(principal, 1);
}
else if (dato == 'p') {
digitalWrite(principal, 0);
}
else if (dato == 'Q') {
puerta2.write(180);
}
else if (dato == 'q') {
puerta2.write(90);
}
}
void SistemaDeGas(){
lecturaGas = analogRead(gas);
porcentajeGas = map(lecturaGas,0,1023,0,100);
if(porcentajeGas < 35){
digitalWrite(ventilador2,0);
noTone(buz_pasivo);
}
else if(porcentajeGas >= 35 and porcentajeGas < 70){
tone(buz_pasivo,262); //Do4
digitalWrite(ventilador2,0);
delay(250);
tone(buz_pasivo,330); //Fa4
delay(250);
}
else{
tone(buz_pasivo,440); //Si4
digitalWrite(ventilador2,1);
}
}