(Updated More Advanced) Simple Arduino Home Security
This project uses Arduino, Raspberry Pi, and Telegram app, to create a home security system.
Components and supplies
1
5 mm LED: Red
1
5 mm LED: Yellow
1
Arduino Nano R3
3
Resistor 1k ohm
1
5 mm LED: Green
1
Raspberry Pi 3 Model B
1
Reed Switch
1
PIR Motion Sensor (generic)
Tools and machines
1
project enclosure
1
Soldering iron (generic)
Project description
Code
ArduinoSecurity
arduino
1#define redled 6 2#define greled 7 3#define yelled 8 4 5#define PIR 5 6#define reed 4 7 8 9// timer for alerts to print every minute(60s) 10long minSecsBetweenAlerts = 600000L; //1 min = 60s so 1 sec equals 1000millis 11long intervalN = 60000L; 12long start = 0; 13 14void setup() { 15 pinMode(redled, OUTPUT); 16 pinMode(greled, OUTPUT); 17 pinMode(yelled, OUTPUT); 18 pinMode(reed, INPUT_PULLUP); 19 pinMode(PIR, INPUT_PULLUP); 20 Serial.begin(9600); 21} 22 23void loop() { 24 //sensor readings could be high or low depending on the sensors used 25 unsigned long now = millis(); 26 int trig = digitalRead(reed); 27 if(trig == LOW){ 28 Serial.print("closed"); 29 digitalWrite(greled, HIGH); 30 } 31 if(trig == HIGH){ 32 if(now - start >= minSecsBetweenAlerts) { 33 start = now; 34 Serial.print("open"); 35 digitalWrite(redled, HIGH); 36 delay(50); 37 digitalWrite(redled, LOW); 38 delay(100); 39 digitalWrite(yelled, HIGH); 40 delay(50); 41 digitalWrite(yelled, LOW); 42 delay(100); 43 digitalWrite(greled, LOW); 44 delay(50); 45 digitalWrite(greled, HIGH); 46 } else { 47 Serial.println("still open"); 48 } 49 50 long now = millis(); 51 int motion = (digitalRead(PIR)); 52 if(motion == HIGH) { 53 if(now - start >= intervalN){ 54 Serial.println("Motion Detected"); 55 digitalWrite(redled, HIGH); 56 start = now; 57 } 58 else{ 59 Serial.print("nothing yet"); 60 digitalWrite(redled, LOW); 61 } 62 delay(250); 63 } 64 } 65}
workinBot
python
Read the comments in the code.
1import requests 2import serial 3import subprocess 4import time 5import smtplib 6import os 7from datetime import datetime 8 9now = datetime.now() 10url = "https://api.telegram.org/bot{yourBOTIDhere}/" 11#regardless of the code if you have internet dropouts errors will throw 12#this has worked well for me 13 14def get_url(url): 15 response = resquests.get(url) 16 content = response.content.decode("utf8") 17 return content 18def get_json_from_url(url): 19 content = get_url(url) 20 js = json.loads(content) 21 return js 22def get_updates_json(request): 23 params = {'timeout': 100, 'offset':None} 24 response = requests.get(request + 'getUpdates', data = params) 25 return response.json() 26def last_update(data): 27 results = data['result'] 28 total_updates = len(results) - 1 29 return results[total_updates] 30def get_chat_id(update): 31 chat_id = update['message']['chat']['id'] 32 return chat_id 33def send_mess(chat, text): 34 params = {'chat_id': chat, 'text': text} 35 response = requests.post(url + 'sendMessage', data=params) 36 return response 37 38def send_pic(chat, files): 39 files = {'photo': open('/home/pi/webcam/t.jpg', 'rb')} 40 data = {'chat_id': chat} 41 response = requests.post(url + 'sendPhoto' , files = files, data=data) 42 #print(response.url) 43 print(response.status_code) 44 print(response.text) 45 return response 46 47def take_pic(): 48 #i will link code for webcam.sh small code for saving files 49 subprocess.call("./webcam.sh", shell=True) 50 f = open('/home/pi/webcam/t.jpg', 'rb') 51 52 53 54 55 56chat_id = get_chat_id(last_update(get_updates_json(url))) 57send_mess(chat_id, 'hello master') 58take_pic() 59files = open('/home/pi/webcam/t.jpg', 'rb') 60chat_id = get_chat_id(last_update(get_updates_json(url))) 61 62 63send_pic(chat_id, files) 64 65while True: 66 67 ser=serial.Serial('/dev/ttyUSB0',9600) 68 message = ser.readline() 69 print(message) 70 if message[0:1] == 'M': 71 ser.close() 72 take_pic() 73 send_mess(chat_id, 'master someone is in your house') 74 send_pic(chat_id, files) 75 time.sleep(600)#use 600 76 ser.open() 77 78 79 elif message[0:1] == 'o': 80 ser.close() 81 send_mess(chat_id, "Master someone opened your door") 82 time.sleep(600) 83 ser.open() 84 #exit() 85 86 87
webcam
batchfile
Bash script for saving photo to raspi and sending one in code.
1#!/bin/bash 2DATE=$(date +"%Y-%m-%d-%a_%H%M") 3 4 5fswebcam -d /dev/video0 -r 1600x1200 -S15 --jpeg 100 /home/pi/webcam/$DATE.jpg 6fswebcam -d /dev/video0 -r 1600x1200 -S15 --jpeg 100 /home/pi/webcam/t.jpg 7
ArduinoSecurity
arduino
1#define redled 6 2#define greled 7 3#define yelled 8 4 5#define PIR 5 6#define reed 4 7 8 9// timer for alerts to print every minute(60s) 10long minSecsBetweenAlerts = 600000L; //1 min = 60s so 1 sec equals 1000millis 11long intervalN = 60000L; 12long start = 0; 13 14void setup() { 15 pinMode(redled, OUTPUT); 16 pinMode(greled, OUTPUT); 17 pinMode(yelled, OUTPUT); 18 pinMode(reed, INPUT_PULLUP); 19 pinMode(PIR, INPUT_PULLUP); 20 Serial.begin(9600); 21} 22 23void loop() { 24 //sensor readings could be high or low depending on the sensors used 25 unsigned long now = millis(); 26 int trig = digitalRead(reed); 27 if(trig == LOW){ 28 Serial.print("closed"); 29 digitalWrite(greled, HIGH); 30 } 31 if(trig == HIGH){ 32 if(now - start >= minSecsBetweenAlerts) { 33 start = now; 34 Serial.print("open"); 35 digitalWrite(redled, HIGH); 36 delay(50); 37 digitalWrite(redled, LOW); 38 delay(100); 39 digitalWrite(yelled, HIGH); 40 delay(50); 41 digitalWrite(yelled, LOW); 42 delay(100); 43 digitalWrite(greled, LOW); 44 delay(50); 45 digitalWrite(greled, HIGH); 46 } else { 47 Serial.println("still open"); 48 } 49 50 long now = millis(); 51 int motion = (digitalRead(PIR)); 52 if(motion == HIGH) { 53 if(now - start >= intervalN){ 54 Serial.println("Motion Detected"); 55 digitalWrite(redled, HIGH); 56 start = now; 57 } 58 else{ 59 Serial.print("nothing yet"); 60 digitalWrite(redled, LOW); 61 } 62 delay(250); 63 } 64 } 65}
webcam
batchfile
Bash script for saving photo to raspi and sending one in code.
1#!/bin/bash 2DATE=$(date +"%Y-%m-%d-%a_%H%M") 3 4 5fswebcam -d /dev/video0 -r 1600x1200 -S15 --jpeg 100 /home/pi/webcam/$DATE.jpg 6fswebcam -d /dev/video0 -r 1600x1200 -S15 --jpeg 100 /home/pi/webcam/t.jpg 7
workinBot
python
Read the comments in the code.
1import requests 2import serial 3import subprocess 4import time 5import smtplib 6import os 7from datetime import datetime 8 9now = datetime.now() 10url = "https://api.telegram.org/bot{yourBOTIDhere}/" 11#regardless of the code if you have internet dropouts errors will throw 12#this has worked well for me 13 14def get_url(url): 15 response = resquests.get(url) 16 content = response.content.decode("utf8") 17 return content 18def get_json_from_url(url): 19 content = get_url(url) 20 js = json.loads(content) 21 return js 22def get_updates_json(request): 23 params = {'timeout': 100, 'offset':None} 24 response = requests.get(request + 'getUpdates', data = params) 25 return response.json() 26def last_update(data): 27 results = data['result'] 28 total_updates = len(results) - 1 29 return results[total_updates] 30def get_chat_id(update): 31 chat_id = update['message']['chat']['id'] 32 return chat_id 33def send_mess(chat, text): 34 params = {'chat_id': chat, 'text': text} 35 response = requests.post(url + 'sendMessage', data=params) 36 return response 37 38def send_pic(chat, files): 39 files = {'photo': open('/home/pi/webcam/t.jpg', 'rb')} 40 data = {'chat_id': chat} 41 response = requests.post(url + 'sendPhoto' , files = files, data=data) 42 #print(response.url) 43 print(response.status_code) 44 print(response.text) 45 return response 46 47def take_pic(): 48 #i will link code for webcam.sh small code for saving files 49 subprocess.call("./webcam.sh", shell=True) 50 f = open('/home/pi/webcam/t.jpg', 'rb') 51 52 53 54 55 56chat_id = get_chat_id(last_update(get_updates_json(url))) 57send_mess(chat_id, 'hello master') 58take_pic() 59files = open('/home/pi/webcam/t.jpg', 'rb') 60chat_id = get_chat_id(last_update(get_updates_json(url))) 61 62 63send_pic(chat_id, files) 64 65while True: 66 67 ser=serial.Serial('/dev/ttyUSB0',9600) 68 message = ser.readline() 69 print(message) 70 if message[0:1] == 'M': 71 ser.close() 72 take_pic() 73 send_mess(chat_id, 'master someone is in your house') 74 send_pic(chat_id, files) 75 time.sleep(600)#use 600 76 ser.open() 77 78 79 elif message[0:1] == 'o': 80 ser.close() 81 send_mess(chat_id, "Master someone opened your door") 82 time.sleep(600) 83 ser.open() 84 #exit() 85 86 87
ArduinoSecurity
arduino
1#define redled 6 2#define greled 7 3#define yelled 8 4 5#define 6 PIR 5 7#define reed 4 8 9 10// timer for alerts to print every minute(60s) 11long 12 minSecsBetweenAlerts = 600000L; //1 min = 60s so 1 sec equals 1000millis 13long 14 intervalN = 60000L; 15long start = 0; 16 17void setup() { 18 pinMode(redled, 19 OUTPUT); 20 pinMode(greled, OUTPUT); 21 pinMode(yelled, OUTPUT); 22 pinMode(reed, 23 INPUT_PULLUP); 24 pinMode(PIR, INPUT_PULLUP); 25 Serial.begin(9600); 26} 27 28void 29 loop() { 30 //sensor readings could be high or low depending on the sensors used 31 32 unsigned long now = millis(); 33 int trig = digitalRead(reed); 34 if(trig 35 == LOW){ 36 Serial.print("closed"); 37 digitalWrite(greled, HIGH); 38 39 } 40 if(trig == HIGH){ 41 if(now - start >= minSecsBetweenAlerts) { 42 43 start = now; 44 Serial.print("open"); 45 digitalWrite(redled, HIGH); 46 47 delay(50); 48 digitalWrite(redled, LOW); 49 delay(100); 50 digitalWrite(yelled, 51 HIGH); 52 delay(50); 53 digitalWrite(yelled, LOW); 54 delay(100); 55 56 digitalWrite(greled, LOW); 57 delay(50); 58 digitalWrite(greled, HIGH); 59 60 } else { 61 Serial.println("still open"); 62 } 63 64 long now = millis(); 65 66 int motion = (digitalRead(PIR)); 67 if(motion == HIGH) { 68 if(now - start 69 >= intervalN){ 70 Serial.println("Motion Detected"); 71 digitalWrite(redled, 72 HIGH); 73 start = now; 74 } 75 else{ 76 Serial.print("nothing 77 yet"); 78 digitalWrite(redled, LOW); 79 } 80 delay(250); 81 } 82 83 } 84}
Downloadable files
ArduinoSecurity
ArduinoSecurity
Alarm Circuit
Alarm Circuit

Comments
Only logged in users can leave comments