Báo động bảo mật cửa dựa trên IoT được điều khiển bởi Google Assistant

Báo động bảo mật cửa dựa trên IoT được điều khiển bởi Google Assistant

Trong dự án này, chúng tôi sẽ xây dựng hệ thống bảo mật của riêng mình, có thể phát hiện nếu cửa / cửa sổ được mở. Báo động có thể được kích hoạt hoặc khử kích hoạt thông qua các lệnh thoại thông qua trợ lý Google và khi phát hiện ra sự xâm nhập, nó cũng sẽ gửi thư cho bạn và người thân của bạn cảnh báo họ về điều đó. Điều thú vị là toàn bộ mọi thứ chạy trên đám mây để nó có thể được kiểm soát từ bất cứ đâu trên thế giới.

Vật liệu thiết yếu

  • Board phát triển Bolt
  • Breadboard
  • Cảm biến hiệu ứng Hall (A3144)
  • LED
  • Tụ điện (50V, 10uF)
  • Điện trở 10K
  • Nam châm
  • Dây dẫn

Nguyên lý hoạt động

Board phát triển Bolt dựa trên mô-đun Wi-Fi ESP8266. Nhưng ở đây, nó có phần  Bolt riêng chạy bên trong nó, điều này giúp chúng ta truy cập vào các chân GPIO (Đọc / ghi kỹ thuật số, đọc tương tự, ghi PWM), vv thông qua một API được cung cấp bởi bu-lông. Vì thực tế này, Bolt có thể được lập trình bằng JavaScript, HTML hoặc thậm chí là Python. Vì chúng tôi đã có nhiều dự án IoT với Raspberry Pi và Python, tôi quyết định sử dụng python. Dự án này có thể được mở rộng hơn nữa để ghi lại hình ảnh của Intruder bằng cách sử dụng một số vi điều khiển hỗ trợ giao tiếp với camera.

Bolt có 5 chân GPIO và 1 chân Analog tất cả đều được kết nối với đám mây. Vì vậy, về cơ bản để viết hoặc đọc từ các chân này, chúng ta phải sử dụng các lệnh gọi API. Trong phần cứng của chúng tôi, chúng tôi sẽ có một cảm biến Hiệu ứng Hall và nam châm gắn vào cửa. Khi cửa được mở, nam châm di chuyển ra khỏi cảm biến Hall và cảm biến sẽ phát hiện ra nó và điều này có thể được đọc bởi các lệnh gọi API và chúng ta có thể kích hoạt Buzzer. Chúng tôi sẽ thảo luận thêm về điều này trong phần cứng.

Sơ đồ mạch

Sơ đồ mạch hoàn chỉnh cho Báo động cửa dựa trên IoT này được đưa ra trong hình dưới đây. Các sơ đồ đã được tạo ra bằng cách sử dụng Fritzing

Các kết nối khá đơn giản nếu bạn cảm thấy khó hình dung, bạn có thể tham khảo bảng dưới đây. Toàn bộ thiết lập được cung cấp bởi cáp Micro-USB được kết nối trực tiếp với board phát triển bolt.

Chân Bolt

Kết nối với

Loại chân

Chân 0

Cảm biến hall 

Đầu vào

Chân 1

Loa

Đầu ra

Chân 2

LED

Đầu ra

Chân 3

Tụ 1

Đầu ra/ đầu vào

Chân 4

Tụ 2

Đầu ra/ đầu vào

Các cảm biến Hall hoạt động như chân đầu vào đó sẽ thông báo cho board nếu cửa bị đóng hoặc mở. Các LED kết nối với chân 2 được sử dụng để hiển thị trạng thái của hệ thống. Nếu nó đang hoạt động, LED sẽ phát sáng và nếu tắt, LED sẽ bị tắt. Bộ rung được kích hoạt khi phát hiện sự xâm nhập. Vậy mục đích của Tụ 1 và 2 là gì và nó được sử dụng như Đầu vào và Đầu ra như thế nào ??? Vâng, bây giờ bạn có thể nghĩ các tụ điện này như là một yếu tố lưu trữ bộ nhớ. Nhưng!! Tại sao chúng ta cần một cái ở đây ?? Tôi muốn nói với bạn điều đó ngay bây giờ, nhưng nó sẽ có ý nghĩa hơn nhiều nếu tôi giải thích điều này cho bạn sau trong bài viết này, vì vậy hãy đọc tiếp.

Thiết lập mô-đun Bolt IoT

Trước khi chúng tôi tiến hành từ đây, chúng tôi phải thiết lập phần cứng Bolt. Việc này rất dễ thực hiện, chỉ cần cài đặt ứng dụng bolt trên điện thoại của bạn và nhập thông tin đăng nhập Wi-Fi để bolt của bạn có thể kết nối với Wi-Fi của bạn và internet. Sau đó, bạn có thể truy cập trang đám mây để lấy ID thiết bị và khóa API từ đó. Bạn có thể truy cập tài liệu BoltIOT docs để biết thêm về nó. Đôi khi tôi cũng khuyên bạn nên sử dụng nó vì có một số tính năng khác như vẽ đồ thị tạo các ứng dụng của riêng bạn, v.v. chúng tôi sẽ không đề cập đến trong bài viết này.

Sử dụng các chân GPIO của phần cứng Bolt IoT

Như tôi đã nói trước đó, tất cả các chân GPIO của phần cứng Bolt được kết nối với đám mây và chúng chỉ có thể được điều khiển (đọc / ghi) thông qua API. Nhưng hãy xem xét một ví dụ. API để đọc trạng thái của chân được giải thích trong các tài liệu như được hiển thị bên dưới

Ở đây, điều chúng tôi quan tâm là URL API

https://cloud.boltiot.com/remote/44b2de6b-7e68-40e7-a27f-814b58afe008/digitalRead?pin=0&deviceName=BOLT13819450

Ở đây, khóa API là 44b2de6b-7e68-40e7-a27f-814b58afe008 và ID thiết bị là BOLT13819450. Nhưng đây là khóa ví dụ và ID và sẽ không giống với thiết bị của bạn. Bạn phải truy cập cloud.boltiot.com để lấy khóa ID thiết bị và API của thiết bị. Ảnh chụp dưới đây có thể giúp bạn.

Khi bạn nhận được khóa API và ID thiết bị, bạn chỉ cần thay thế các giá trị mặc định bằng giá trị của mình và tải URL trong trình duyệt của bạn. Trình duyệt của bạn sẽ phản hồi lại với trạng thái của chân với

{“success”: “1”, “value”: “1”} or {“success”: “1”, “value”: “0”}

Nếu giá trị là 1 thì nó ở mức cao và nếu 0 thì nó ở mức thấp. Tương tự, bạn có thể thử các liên kết API cho tất cả các lệnh như Đọc digital, Viết, Viết analog, PWM và thậm chí giao tiếp nối tiếp. Một khi bạn đã thử nghiệm xong với nó, hãy tiếp tục với chương trình thực tế cho dự án này.

Chuẩn bị môi trường Python

Như tôi đã nói, bolt trước đó có thể được lập trình bằng JavaScript, HTML hoặc Python. Ở đây chúng tôi sẽ chỉ tập trung vào cách làm điều đó với python. Chúng ta phải viết code python trên máy tính mà python đã được cài đặt. Ngoài ra, chúng tôi cũng cần cài đặt hai gói thư viện để chương trình của chúng tôi hoạt động. Bạn có thể thêm gói vào python bằng tùy chọn cài đặt pip, chạy các lệnh bên dưới trên terminal của bạn trong thư mục python để cài đặt các gói. Mở terminal windows và điều hướng đến thư mục python chủ yếu trong C: // Python 27

Bước 1: – Cài đặt pip nếu bạn chưa cài đặt trước đó. Cài đặt nó với lệnh dưới đây

sudo easy_install pip

Bước 2: – Bên trong thư mục C: // Python / Scripts cài đặt gói yêu cầu

pip install requests

Bước 3: – Cài đặt gói boltiot bằng lệnh dưới đây

pip install boltiot

Khi quá trình cài đặt kết thúc thành công, màn hình của bạn sẽ trông giống như bên dưới

Bây giờ chúng ta đã mở Python IDLE và bắt đầu viết chương trình thực tế cho hệ thống bảo mật của chúng ta. Nhưng trước đó để kích hoạt hoặc hủy kích hoạt báo động thông qua trợ lý Google và để gửi E-mail, chúng tôi sử dụng dịch vụ Google Assistant và dịch vụ móc Web do IFTT cung cấp. Vì vậy, hãy tiếp tục và thiết lập chúng ngay bây giờ.

Kích hoạt và hủy kích hoạt báo động bằng Google Assistant

Chúng ta phải tạo ra hai applet cho cái này, một là để kích hoạt báo động và hai là để hủy kích hoạt báo động. Khi báo động được kích hoạt, tụ điện được kết nối với chân 3 nên được nạp và khi báo động được hủy kích hoạt, tụ điện được kết nối với chân 4 sẽ được nạp.

Applet sử dụng trợ lý Google cho dịch vụ này và web hook nhận yêu cầu cho dịch vụ đó. Ảnh chụp màn hình bên dưới cho thấy cách applet được đặt để làm cho chân 3 ở mức cao khi Kích hoạt báo động và làm cho Chân 4 ở mức Cao khi tắt báo động thông qua trợ lý Google.

Sử dụng tụ điện để làm gì?

Tụ 1 và 2 được sử dụng làm phần tử bộ nhớ. Khi board nhận lệnh từ IFTTT, chân 3 và 4 sẽ đóng vai trò là chân đầu ra. Dựa trên lệnh, board sẽ nạp cả Tụ 1 hoặc Tụ 2.

Bây giờ khi hoàn thành thao tác IFTTT, code Python tạo chân 3 và 4 làm chân đầu vào, bằng cách đọc trạng thái của các chân này, code python sẽ hiểu khi nào nó nên kích hoạt hoặc hủy kích hoạt báo động dựa trên tụ điện nào có sạc. Đơn giản chỉ cần đặt nó là một hack nhỏ để giao tiếp IFTTT với Python.

Gửi E-mail khi phát hiện kẻ xâm nhập

Applet thứ ba sẽ gửi E-mail khi phát hiện kẻ xâm nhập. Điều này có thể được thực hiện bằng cách sử dụng web hook và dịch vụ Gmail trên IFTTT. Dịch vụ Webhooks sẽ cung cấp cho chúng ta một URL mà khi được tải sẽ kích hoạt Email được xác định trước đó. Ảnh chụp nhanh của applet được hiển thị bên dưới. Bạn có thể tùy chỉnh ID người nhận và văn bản theo ý muốn. URL này sau đó sẽ được kích hoạt trong tập lệnh python bằng thư viện yêu cầu nếu phát hiện ra kẻ xâm nhập.

Giải thích chương trình Python

Code python hoàn chỉnh cho điều này có thể được tìm thấy ở phần cuối của dự án này. Trong phần này, tôi chia code thành các đoạn nhỏ và cố gắng giải thích chi tiết chúng. Mục đích tổng thể của tập lệnh python là kiểm tra xem chuông báo đã được kích hoạt hay không kích hoạt và nếu được kích hoạt, chúng tôi phải kiểm tra xem cửa có mở không và nếu mở chúng tôi phải kích hoạt E-mail và bật còi.

Chúng ta đã biết rằng tụ điện ở chân 3 sẽ ở mức cao nếu chúng ta phải kích hoạt hệ thống bảo mật và tụ điện ở chân 4 sẽ ở mức cao nếu chúng ta phải hủy kích hoạt hệ thống bảo mật . Vì vậy, chúng ta chỉ cần đọc chúng trong tập lệnh python để kích hoạt hoặc hủy kích hoạt báo động.

Chúng tôi bắt đầu chương trình bằng cách nhập thời gian, yêu cầu và thư viện boliot . Theo mặc định, thư viện thời gian được thêm vào python, nhưng bạn phải cài đặt thủ công các gói yêu cầu và bolt như chúng tôi đã thảo luận trước đó, bạn sẽ dễ gặp lỗi trên các dòng này.

import time #Import time to peform delay operations

import requests #use requests to send mail via webhooks IFTTT

from boltiot import Bolt #Import boliot to control GPIO pins through API

Tiếp theo, chúng tôi nhập thông tin đăng nhập của thiết bị, chẳng hạn như khóa API và ID thiết bị . Chỉ với hai giá trị này, bạn có thể truy cập bất kỳ chân GPIO nào trên thiết bị. Không chia sẻ chúng với mọi người vì bất kỳ ai cũng có thể sử dụng chúng để kiểm soát các chân GPIO của bạn.

api_key = "4749fe75-6c61-45f1-bee5-f9a6a1bd9103" #Get your API key from Blot Cloud Website

device_id  = "BOLT11691968" #Get your Bolt device ID form Bolt Cloud Website

mybolt = Bolt(api_key, device_id)

Như đã thảo luận về phần API, chúng tôi sẽ nhận được phản hồi khi chúng tôi thực hiện Đọc digital dưới dạng chuỗi, vì vậy tôi đã gán các giá trị chuỗi đó cho hai biến để chúng tôi có thể sử dụng chúng trong chương trình một cách dễ dàng.

HIGH = '{"value": "1", "success": "1"}' #This will be returned by bolt API if digital read is high

LOW = '{"value": "0", "success": "1"}'#This will be returned by bolt API if digital read is low

Trong hàm wile loop, chúng ta có hai vòng khác. Một cái sẽ được thực thi nếu báo động được kích hoạt từ trợ lý Google và cái còn lại sẽ được thực thi nếu báo động được hủy kích hoạt. Theo mặc định, vòng lặp hủy kích hoạt sẽ được thực thi nếu không nhận được lệnh nào.

Ở đây, phải kiểm tra xem chuông báo có được kích hoạt hay không bằng cách đọc chân 3 không có gì ngoài tụ điện . Nếu chân ở mức cao, chúng tôi xuất LED phát sáng và sau đó thoát khỏi vòng lặp này và vào kích hoạt trong vòng lặp. Chúng tôi kiểm tra điều này cứ sau 5 giây chỉ để đảm bảo rằng chúng tôi không vượt quá giới hạn tốc độ API được cung cấp bởi bolt, tức là 30 cuộc gọi mỗi phút.

    while alarm == 0: #If alarm is off

        response = mybolt.digitalRead('3') #check if it is being activated

        if (response == HIGH):

            print("Security System is activated")

            mybolt.digitalWrite('2', 'HIGH') #Turn on LED to indicate Alarm is activated

            alarm = 1

        elif (response == LOW):

           print ("Waiting for Security System to be activated....")

        else:

           print ("Problem in getting value form pin 3")

       time.sleep(5) #check once in every 5 seconds to avoid exceeding API rate limit

Tương tự, bên trong vòng lặp while được kích hoạt , chúng ta phải kiểm tra chân 4 để biết báo động có được khử kích hoạt hay không . Nếu kích hoạt chúng tôi tắt vòng lặp cam và quay lại cho kích hoạt vòng lặp while. Chúng ta phải kiểm tra nam châm nếu nó đặt gần với cảm biến hall bằng cách đọc chân 0. Nếu chân ở mức cao thì có nghĩa là nam châm đó cách xa cảm biến cho thấy cửa đã được mở. Vì vậy, chúng tôi đã kích hoạt bộ rung và cũng kích hoạt thư bằng gói yêu cầu. Chúng tôi tiếp tục theo dõi cảm biến trong mỗi 5 giây. Code để làm tương tự được hiển thị dưới đây

while alarm == 1: #If alarm is on

        response = mybolt.digitalRead('4') #check is it is being de-activated

        if (response == HIGH):

            print("Security System is De-activated")

            mybolt.digitalWrite('2', 'LOW')#Turn off LED to indicate Alarm is De-activated

            alarm = 0

            time.sleep(5)

        elif (response == LOW):

            print ("Security System is currently active can be deactivated from google assistant")

        else:

            print ("Problem in getting value form pin 4")




        response = mybolt.digitalRead('0') #check if hall sensor is triggered

        if (response == HIGH): #if magnet is not present    

            print ("Alert! Security breach Buzzer ON")

            mybolt.digitalWrite('1', 'HIGH')

            requests.get('https://maker.ifttt.com/trigger/Breach/with/key/i6nPcZ5ZlzaVdbYITw6VGcpMkrVO5GqAX049cHEBDt') #webhook link to trigger mail through IFTTT

            time.sleep(5)

            mybolt.digitalWrite('1', 'LOW')

            print ("Buzzer OFF")

        elif (response == LOW):

            print ("No problem, all good!")

        else:

            print ("Problem in reading the value of button")

        time.sleep(5)

Thời gian để kiểm tra thiết bị

Khi bạn đã sẵn sàng với code, chúng ta có thể bắt đầu thử nghiệm dự án. Gắn board lên khung cửa và nam châm trên chính cửa. Hãy chắc chắn rằng nam châm ở gần cảm biến hall. Ý tưởng là cảm biến sẽ phát hiện nam châm khi cửa đóng và không thể phát hiện nam châm khi cửa được mở. Tôi đã sử dụng băng dính hai mặt để gắn nam châm của mình và nó trông giống như bên dưới.

Bây giờ hãy chạy tập lệnh python trên máy tính của bạn và bạn sẽ có thể thấy trạng thái của thiết bị từ các câu lệnh in trong code python. Để kích hoạt báo động, chỉ cần xuất lệnh ( Enable Office Security System ) với trợ lý Google của bạn đã được đặt trong IFTTT, kiểm tra các ảnh chụp nhanh cài đặt applet ở trên. Sau khi kích hoạt, đèn màu cam sẽ bắt đầu phát sáng cho biết trạng thái . Bây giờ, bất cứ khi nào cửa được mở, báo động sẽ kêu với âm thanh chuông và thư cũng sẽ được gửi đến hộp thư đến Gmail của bạn với ngày và giờ cụ thể. Bạn có thể thử nghiệm xung quanh với các applet IFTT và code để làm nhiều thứ thú vị hơn từ đây.

CODE

import time #Import time to peform delay operations
import requests #use requests to send mail via webhooks IFTTT
from boltiot import Bolt #Import boliot to control GPIO pins through API

api_key = "4749fe75-6c61-45f1-bee5-f9a6a1bd9103" #Get your API key from Blot Cloud Website  
device_id  = "BOLT11691968" #Get your Bolt device ID form Bolt Cloud Website
mybolt = Bolt(api_key, device_id)

HIGH = '{"value": "1", "success": "1"}' #This will be returned by bolt API if digital read is high 
LOW = '{"value": "0", "success": "1"}'#This will be returned by bolt API if digital read is low

alarm = 0 #Alarm is turned off by default 

while True: #Infinite loop

    while alarm == 0: #If alarm is off
        response = mybolt.digitalRead('3') #check if it is being activated 
        if (response == HIGH):
            print("Security System is activated")
            mybolt.digitalWrite('2', 'HIGH') #Turn on LED to indicate Aalarm is activated 
            alarm = 1
        elif (response == LOW):
            print ("Waiting for Security System to be activated....")
        else:
            print ("Probelm in getting value form pin 3")
        time.sleep(5) #check once in every 5 seconds to avoid exceeding API rate lmit  
    

    while alarm == 1: #If alarm is on 
        response = mybolt.digitalRead('4') #check is it is being de-activated 
        if (response == HIGH):
            print("Security System is De-activated")
            mybolt.digitalWrite('2', 'LOW')#Turn off LED to indicate Aalarm is De-activated 
            alarm = 0 
            time.sleep(5)
        elif (response == LOW):
            print ("Security System is currently active can be deactivated from google assistant")
        else:
            print ("Probelm in getting value form pin 4")

        response = mybolt.digitalRead('0') #check if hall sensor is triggered 
        if (response == HIGH): #if magnet is not present      
            print ("Alert! Security breach Buzzer ON")
            mybolt.digitalWrite('1', 'HIGH')
            requests.get('https://maker.ifttt.com/trigger/Breach/with/key/i6nPcZ5ZlzaVdbYITw6VGcpM...') #webhook link to trigger mail through IFTTT
            time.sleep(5)
            mybolt.digitalWrite('1', 'LOW')
            print ("Buzzer OFF")
        elif (response == LOW):
            print ("No probelm, all good!")
        else:  
            print ("Problem in reading the value of button")
        time.sleep(5)

VIDEO

 

 

 

 

 

 

 

 

 

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *