Construye un sistema de automatización y seguridad del hogar inteligente con 1Sheeld
Componentes y materiales
| Arduino UNO | × | 1 |
| 1Sheeld | × | 1 |
| Relé (genérico) - YW Robot 4 canales | × | 1 |
| Zumbador | × | 2 |
| Sensor de temperatura LM35DZ | × | 1 |
| Cables de conexión (genéricos) | × | 1 |
| Sensor PIR de movimiento (genérico) | × | 1 |
| Interruptor magnético de puerta SparkFun | × | 2 |
| Pantalla LCD 16x2 Blanca sobre Azul (Adafruit) | × | 1 |
Herramientas y máquinas necesarias
- Cortadora láser (genérica)
Sobre este proyecto
Visión general
La historia comienza aquí. Decidimos crear este proyecto porque fue una gran iniciativa para integrar todos estos elementos juntos. Este proyecto te ayudará a comprender muchos conceptos y ganarás una valiosa experiencia. ¡Comencemos a aprender cómo construir este genial sistema!
Cómo funciona nuestro proyecto
Este proyecto te permite controlar todas las luces de tu casa mediante comandos de voz o SMS. Además, funciona como sistema de seguridad: cuando un intruso entra en tu hogar mientras duermes o estás fuera, te envía un correo electrónico alertando de la intrusión y activa una alarma (zumbador) en la casa. Cuando envías un SMS para encender o apagar las luces, el sistema te responde por correo confirmando la ejecución. También, si el sensor de temperatura detecta más de 35°C, activa una alarma y envía un correo advirtiendo que la temperatura superó el umbral.
NOTA: No olvides decir "Jarvis" antes de cualquier comando para que el sistema te escuche.
NOTA: Después de cada comando, Jarvis te responderá como un asistente real.
NOTA: Para activar el sistema de seguridad di "security on", para desactivarlo di "security off".
Más sobre 1Sheeld
1Sheeld convierte tu smartphone en 40 shields diferentes para Arduino. No necesitas comprar shields adicionales porque ya los tienes en tu smartphone.
Esta es la razón por la que usamos la placa 1Sheeld: no necesitas comprar sensores porque ya los tienes en tu smartphone.
Montaje físico
- Primero, toma el archivo CAD proporcionado y córtalo con la cortadora láser.
- Coloca los interruptores magnéticos en las puertas como se muestra en las imágenes.
- Son sensores digitales que devuelven 0 o 1. Calibra tus sensores para conocer las lecturas en estado abierto y cerrado.
- Para las lámparas AC: realiza las aberturas en las paredes y coloca las lámparas en sus posiciones. Conecta todos los cables de las lámparas en paralelo.
- Sensor de temperatura LM35DZ (3 patas): V+ a 5V del Arduino, GND a tierra, OUT al pin A0.
Cómo usar 1Sheeld
- Coloca 1Sheeld sobre tu placa Arduino y escribe el código usando la librería 1Sheeld.
- Sube el código al Arduino usando Arduino IDE.
- IMPORTANTE: Asegúrate de que el interruptor UART esté en modo "Uploading" (subida).
- Después de subir el código, vuelve a poner el interruptor en modo "Operating" (funcionamiento).
- ¡No olvides! Si no cambias el interruptor UART al modo operativo, el proyecto no funcionará correctamente porque no habrá comunicación entre 1Sheeld y Arduino.
La aplicación 1Sheeld
- Abre la aplicación 1Sheeld (descárgala desde la tienda correspondiente).
- Conecta con tu placa: se te pedirá el código de emparejamiento (por defecto 1234) y conectar vía Bluetooth.
- Selecciona los shields que usaremos: SMS, Reconocimiento de Voz, Texto a Voz, Reloj, Email.
- ¡Ahora prueba tu sistema!
NOTA: Hicimos nuestra propia Jarvis femenina :D Crea tu propio Jarvis.
Código
/*
* Sistema de Automatización y Seguridad del Hogar Inteligente - Equipo SADEE
* EMAIL: ahmedebrahemua@yahoo.com
*/
#define CUSTOM_SETTINGS
#define INCLUDE_VOICE_RECOGNIZER_SHIELD
#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_CLOCK_SHIELD
#define INCLUDE_SMS_SHIELD
#define INCLUDE_EMAIL_SHIELD
#include
#include
int minutes, hours;
String strh, strm;
char h[4], m[4];
LiquidCrystal lcd(2,3,4,5,6,7);
#define receptionLamp A1
#define bedRoomLamp A2
#define pathRoomLamp A3
#define balaconyLamp A4
// Comandos de voz
const char timeCommand[] = "what time is it";
const char receptionCommandOn[] = "reception on";
const char receptionCommandOff[] = "reception off";
const char whatsUp[] = "good morning";
const char pathRoomCommandOn[] = "bathroom on";
const char pathRoomCommandOff[] = "bathroom off";
const char balaconyCommandOn[] = "kitchen on";
const char balaconyCommandOff[] = "kitchen off";
const char bedRoomCommandOn[] = "bedroom on";
const char bedRoomCommandOff[] = "bedroom off";
// Comandos SMS
const char lightsOn[] = "on";
const char lightsOff[] = "off";
// Sistema de seguridad
const char securityModeOn[] = "security on";
const char securityModeOff[] = "security off";
const char mainCommand[] = "jarvis";
String noon;
byte smile[] = {
B00000, B01001, B01001, B00000,
B00000, B10001, B01110, B00000
};
#define magneticReception 8
#define magneticBalacony 9
int buzzer2 = 10;
int buzzer1 = A5;
int magneticReceptionState, magneticBalaconyState;
int state = 0;
bool security = false;
void setup() {
noTone(buzzer1); noTone(buzzer2);
// Inicializar relés (activos en LOW)
digitalWrite(receptionLamp, HIGH);
digitalWrite(bedRoomLamp, HIGH);
digitalWrite(pathRoomLamp, HIGH);
digitalWrite(balaconyLamp, HIGH);
lcd.begin(16,2);
OneSheeld.begin();
pinMode(receptionLamp, OUTPUT);
pinMode(bedRoomLamp, OUTPUT);
pinMode(balaconyLamp, OUTPUT);
pinMode(pathRoomLamp, OUTPUT);
pinMode(buzzer1, OUTPUT);
pinMode(magneticReception, INPUT_PULLUP);
pinMode(magneticBalacony, INPUT_PULLUP);
pinMode(buzzer2, OUTPUT);
lcd.createChar(0, smile);
// Secuencia de bienvenida
lcd.clear(); lcd.setCursor(0,0); lcd.print("Welcome To The "); delay(4000);
lcd.clear(); lcd.setCursor(0,0); lcd.print("Smart Home"); lcd.setCursor(0,1); lcd.print("Automation And "); delay(4000);
lcd.clear(); lcd.setCursor(0,0); lcd.print("Security System"); delay(4000);
lcd.clear(); lcd.setCursor(0,0); lcd.print("CALIBRATING...."); delay(10000);
if(!VoiceRecognition.isNewCommandReceived()) {
lcd.clear(); lcd.setCursor(1,0); lcd.print("We Are Here To");
lcd.setCursor(4,1); lcd.print("HELP You");
}
security = false;
}
void loop() {
Clock.queryDateAndTime();
SMS.setOnSmsReceive(&MyFunction);
minutes = Clock.getMinutes();
hours = Clock.getHours();
// Convertir a formato 12h
if(hours > 12) { hours -= 12; noon = "PM"; }
else { noon = "AM"; }
strh = String(hours); strm = String(minutes);
strh.toCharArray(h,4); strm.toCharArray(m,4);
VoiceRecognition.start();
OneSheeld.delay(8000);
if(VoiceRecognition.isNewCommandReceived()) {
// Comando principal "jarvis"
if(!strcmp(mainCommand, VoiceRecognition.getLastCommand())) {
TextToSpeech.say("yes sir");
lcd.clear(); lcd.setCursor(8,0); lcd.write(byte(0));
state = 1;
}
// Control de luces por voz
if(state == 1) {
if(!strcmp(receptionCommandOn, VoiceRecognition.getLastCommand())) {
TextToSpeech.say("ok sir lamp in the reception is on");
OneSheeld.delay(2500);
digitalWrite(receptionLamp, LOW);
lcd.clear(); lcd.setCursor(0,0); lcd.print("The Hall Lamp Is"); lcd.setCursor(8,1); lcd.print("ON");
state = 0;
}
else if(!strcmp(receptionCommandOff, VoiceRecognition.getLastCommand())) {
TextToSpeech.say("ok sir lamp in the reception is off");
OneSheeld.delay(2500);
digitalWrite(receptionLamp, HIGH);
lcd.clear(); lcd.setCursor(0,0); lcd.print("The Hall Lamp Is"); lcd.setCursor(7,1); lcd.print("OFF");
state = 0;
}
// ... (resto de habitaciones similar)
else if(!strcmp(whatsUp, VoiceRecognition.getLastCommand())) {
lcd.clear(); lcd.setCursor(0,0); lcd.print("Good Morning :)");
lcd.setCursor(0,1); lcd.print("Its A Good Day");
TextToSpeech.say("good morning sir"); OneSheeld.delay(1500);
TextToSpeech.say("time in cairo is"); OneSheeld.delay(1500);
TextToSpeech.say(h); OneSheeld.delay(1000);
TextToSpeech.say(m); OneSheeld.delay(1000);
TextToSpeech.say(noon); state = 0;
}
else if(!strcmp(timeCommand, VoiceRecognition.getLastCommand())) {
lcd.clear(); lcd.setCursor(0,0); lcd.print("Time In Cairo Is");
lcd.setCursor(0,1); lcd.print(h); lcd.print(":"); lcd.print(m); lcd.print(" "); lcd.print(noon);
TextToSpeech.say("time in cairo is"); OneSheeld.delay(1500);
TextToSpeech.say(h); OneSheeld.delay(1000);
TextToSpeech.say(m); OneSheeld.delay(1000);
TextToSpeech.say(noon); state = 0;
}
// Sistema de seguridad
else if(!strcmp(securityModeOn, VoiceRecognition.getLastCommand())) {
lcd.clear(); lcd.setCursor(0,0); lcd.print("Ok,Sir Feel Safe");
lcd.setCursor(0,1); lcd.print("Security Mode");
TextToSpeech.say("security system was triggered");
security = true; state = 0;
}
else if(!strcmp(securityModeOff, VoiceRecognition.getLastCommand())) {
lcd.clear(); lcd.setCursor(0,0); lcd.print("Ok,Sir Security");
lcd.setCursor(0,1); lcd.print("is OFF");
TextToSpeech.say("security system was turned off");
security = false; state = 0;
}
}
}
// Sistema de seguridad - sensores magnéticos
magneticReceptionState = digitalRead(magneticReception);
magneticBalaconyState = digitalRead(magneticBalacony);
if(security) {
if(magneticReceptionState == HIGH || magneticBalaconyState == HIGH) {
tone(buzzer1, 1500);
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "Someone Entered Your Home, Be Careful");
OneSheeld.delay(3500);
} else {
noTone(buzzer1);
}
} else {
noTone(buzzer1);
}
// Sensor de temperatura (comentado en original)
/*
voltage = analogRead(A0);
voltage = voltage * 1100 / 1024;
degree = voltage / 10;
if(degree >= 35) {
tone(buzzer2, 1500);
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "Temperature Higher Than 35, Be Careful");
OneSheeld.delay(5000);
} else if(degree < 25) {
noTone(buzzer2);
}
*/
}
// Función de recepción SMS
void MyFunction(char* phoneNumber, char* messageBody) {
if(!strcmp(lightsOn, messageBody)) {
// Encender todas las luces
digitalWrite(receptionLamp, LOW); delay(500);
digitalWrite(pathRoomLamp, LOW); delay(500);
digitalWrite(bedRoomLamp, LOW); delay(500);
digitalWrite(balaconyLamp, LOW); delay(500);
TextToSpeech.say("all lights was turned on");
lcd.clear(); lcd.setCursor(0,0); lcd.print("All Lights is ON");
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "All Lights Were Turned ON");
OneSheeld.delay(3500);
}
else if(!strcmp(lightsOff, messageBody)) {
// Apagar todas las luces
digitalWrite(receptionLamp, HIGH); delay(500);
digitalWrite(pathRoomLamp, HIGH); delay(500);
digitalWrite(bedRoomLamp, HIGH); delay(500);
digitalWrite(balaconyLamp, HIGH); delay(500);
TextToSpeech.say("all lights was turned off");
lcd.clear(); lcd.setCursor(0,0); lcd.print("All Lights Is OFF");
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "All Lights Were Turned OFF");
OneSheeld.delay(3500);
}
}
Partes personalizadas y cajas
Archivo de corte láser: drawing_lasser_cutting_lvvsN9X9Xg.dwg
Esquemáticos
Consulte las imágenes de los esquemáticos en el proyecto original.
Proceso de manufactura
- Construya un Controlador Domótico 433 MHz con Sensorflare y Raspberry Pi
- Sistema de Seguridad Doméstico con Raspberry Pi: Detección de Movimiento PIR y Alertas por Email con Cámara
- Sistema de Asistencia RFID Fiable con Arduino y Python
- Mando universal Android con Arduino, 1Sheeld y control IR
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing
- Brazo Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
- Purificador de aire inteligente con Arduino Yun y Sharp Plasmacluster (IoT AWS)
- Control Inalámbrico de Iluminación Doméstica desde Smartphone con 1Sheeld
- Silicon Labs Present Soluciones Wireless Gecko Avanzadas para Hogares Inteligentes y Automatización de Edificios en Embedded World 2019
- Cómo la tecnología de hogar inteligente transforma la vida cotidiana