Умный дом и система безопасности на базе 1Sheeld
Компоненты и материалы
- Arduino UNO – 1 шт.
- 1Sheeld – 1 шт.
- Реле (4-канальное, например YW Robot) – 1 шт.
- Зуммер – 2 шт.
- Датчик температуры LM35DZ – 1 шт.
- Провода-перемычки – 1 набор
- PIR-датчик движения – 1 шт.
- Магнитные контакты двери (SparkFun) – 2 шт.
- LCD-дисплей 16x2 (Adafruit, белый на синем) – 1 шт.
Необходимые инструменты
- Лазерный резак (для корпуса)
О проекте
Этот проект объединяет автоматизацию умного дома и систему безопасности с управлением через смартфон с помощью платы 1Sheeld. 1Sheeld превращает ваш смартфон в более чем 40 различных щитов для Arduino (GPS, голосовое распознавание, SMS, email, часы и др.), избавляя от покупки отдельных модулей.
Как это работает
- Управление освещением: голосовые команды или SMS для включения/выключения ламп в разных комнатах (прихожая, спальня, ванная, кухня).
- Система безопасности: активация командой «security on». При открытии двери (магнитный контакт) или движении (PIR) срабатывает зуммер и отправляется email-уведомление.
- Мониторинг температуры: датчик LM35DZ следит за температурой; при превышении 35°C включается зуммер и уходит email.
- Обратная связь: после выполнения команды система озвучивает подтверждение через Text-to-Speech и отображает статус на LCD.
- Ключевое слово: все голосовые команды должны начинаться со слова «Jarvis» (или «Alexa» в коде), чтобы система их приняла.
Сборка и настройка
- Вырежьте детали корпуса на лазерном резаке (файл чертежа во вложениях).
- Установите магнитные контакты на двери, откалибруйте их (определите показания при открытой/закрытой двери).
- Подключите лампы параллельно через реле.
- Подключите датчик температуры LM35DZ: VCC -> 5V, GND -> GND, OUT -> A0.
- Установите 1Sheeld на Arduino, загрузите скетч (перед загрузкой переключите UART-переключатель на 1Sheeld в режим «Uploading», после — обратно в «Operating»).
- Установите приложение 1Sheeld на смартфон, соедините по Bluetooth (PIN 1234), выберите щиты: SMS, Voice Recognition, Text To Speech, Clock, Email.
Код (скетч для Arduino)
Полный код приведён ниже. Он использует библиотеку OneSheeld и LiquidCrystal. Обратите внимание: в коде закомментирован блок мониторинга температуры (можно раскомментировать при необходимости).
/* Smart Home Automation And Security System
* Team 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
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";
const char lightsOn[] = "on";
const char lightsOff[] = "off";
const char securityModeOn[] = "security on";
const char securityModeOff[] = "security off";
const char mainCommand[] = "jarvis";
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);
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);
lcd.clear();
lcd.print("Welcome To The"); delay(4000);
lcd.clear(); lcd.print("Smart Home"); delay(4000);
lcd.clear(); lcd.print("Automation And"); delay(4000);
lcd.clear(); lcd.print("Security System"); delay(4000);
lcd.clear(); lcd.print("CALIBRATING...."); delay(10000);
if (!VoiceRecognition.isNewCommandReceived()) {
lcd.clear(); 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();
String noon = (hours > 12) ? (hours -= 12, "PM") : "AM";
strh = String(hours); strm = String(minutes);
strh.toCharArray(h, 4); strm.toCharArray(m, 4);
VoiceRecognition.start();
OneSheeld.delay(8000);
if (VoiceRecognition.isNewCommandReceived()) {
if (!strcmp(mainCommand, VoiceRecognition.getLastCommand())) {
TextToSpeech.say("yes sir");
lcd.clear(); lcd.setCursor(8,0); lcd.write(byte(0));
state = 1;
}
// Обработка команд включения/выключения ламп
else if (!strcmp(receptionCommandOn, VoiceRecognition.getLastCommand()) && state == 1) {
TextToSpeech.say("ok sir lamp in the reception is on");
OneSheeld.delay(2500); digitalWrite(receptionLamp, LOW);
lcd.clear(); lcd.print("The Hall Lamp Is"); lcd.setCursor(8,1); lcd.print("ON"); state = 0;
}
else if (!strcmp(receptionCommandOff, VoiceRecognition.getLastCommand()) && state == 1) {
TextToSpeech.say("ok sir lamp in the reception is off");
OneSheeld.delay(2500); digitalWrite(receptionLamp, HIGH);
lcd.clear(); lcd.print("The Hall Lamp Is"); lcd.setCursor(7,1); lcd.print("OFF"); state = 0;
}
// ... аналогично для bedroom, bathroom, kitchen ...
else if (!strcmp(whatsUp, VoiceRecognition.getLastCommand()) && state == 1) {
lcd.clear(); 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()) && state == 1) {
lcd.clear(); 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;
}
// Безопасность
else if (!strcmp(securityModeOn, VoiceRecognition.getLastCommand()) && state == 1) {
lcd.clear(); 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()) && state == 1) {
lcd.clear(); lcd.print("Ok,Sir Security"); lcd.setCursor(0,1); lcd.print("is OFF");
TextToSpeech.say("security system was turned off"); security = false; state = 0;
}
}
// Проверка магнитных контактов
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); }
// Температура (закомментировано)
/*
int voltage = analogRead(A0) * 1100 / 1024;
int degree = voltage / 10;
if (degree >= 35) {
tone(buzzer2, 1500);
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "Temperature Higher Than 35");
OneSheeld.delay(5000);
} else { noTone(buzzer2); }
*/
}
void MyFunction(char* phoneNumber, char* messageBody) {
if (!strcmp(lightsOn, messageBody)) {
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.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)) {
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.print("All Lights Is OFF");
Email.send("ahmedebrahemua@yahoo.com", "Home Security System", "All Lights Were Turned OFF");
OneSheeld.delay(3500);
}
}
Файлы для лазерной резки
drawing_lasser_cutting_lvvsN9X9Xg.dwg
Схемы подключения
Производственный процесс
- Как технологии умного дома трансформируют повседневную жизнь
- Silicon Labs представляет передовые решения Wireless Gecko для умных домов и автоматизации зданий на Embedded World 2019
- Создание умного домашнего контроллера 433 МГц с Sensorflare и Raspberry Pi
- Система домашней безопасности на Raspberry Pi: обнаружение движения PIR + камера с email-уведомлениями
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- Умная робо-рука на Arduino: простое DIY-руководство
- Умный очиститель воздуха на Arduino Yun + Sharp Plasmacluster + AWS IoT