發燒友10周年慶典,全網超值優惠來襲!千元現金券,下單抽獎趕緊參與》》

采用ROHM傳感器套件的DIY Arduino家庭安防系統 第2部分- Cayenne設置

2019-09-19 10:20 ? 次閱讀

這篇文章來源于DevicePlus.com英語網站的翻譯稿。

點擊這里閱讀本文的第1部分 >

在DIY智能家居安防系統第1部分中,我們將各種組件(例如PIR傳感器溫度傳感器壓力傳感器)組合在一起,以創建家庭安防系統/探測器。在第2部分中,將對前面所創建系統的離線程序進行測試,并連接到Internet,以便使用Cayenne API進行無線控制。使用myDevices Cayenne,只要您通過網站和/或智能手機中的Cayenne App連接到WiFi,您就能夠無線控制安防系統。

硬件

筆記本電腦/PC或智能手機

參考第1部分:

Arduino Mega 2560

Arduino WiFi Shield(Arduino WiFi擴展板)

用于Arduino的Grove Base Shield(Grove基礎擴展板)

3 只 LED?(紅色、綠色和藍色)

Grove PIR 移動偵測傳感器

蜂鳴器

Arduino ROHM 傳感器擴展板

ROHM 溫度傳感器 (BD1020HFV)

ROHM 氣壓傳感器 (BM1383GLV)

Grove 通用4芯電線

亞克力: 195 x 195 x 3mm

電阻 (10 Kω and 100 KΩ)

面包板

無線遙控器,帶2個發射器和1個接收器

電源:12 VDC

軟件

Arduino IDE

Seeed Studio (https://github.com/Seeed-Studio/PIR_Motion_Sensor,http://www.seeed.cc/project_detail.html?id=284)

Cayenne API (https://mydevices.com/cayenne/docs/#using-cayenne-library)

使用離線程序測試硬件

完成硬件安裝后,現在可以運行離線程序進行測試。這是“離線”模式,系統尚未連接到Internet。我們馬上就進行測試。離線程序將執行下列功能:

遙控發射器(在示例中使用通道D)打開/關閉警報。如果遙控發射器打開,綠色 LED將亮起,蜂鳴器將發出一次嗶嗶聲。

PIR傳感器將檢測移動情況。如果檢測到移動,藍色 LED將亮起。

當警報聲響起并檢測到移動時,紅色 LED將亮起,蜂鳴器將熄滅。

同樣,當警報聲響起(即綠色 LED亮起)且熱量高于設定目標時,紅色 LED將亮起,蜂鳴器將熄滅。

注:

若想關閉警報聲,用戶只需再次按遙控發射器上的通道D。綠色 LED將熄滅,蜂鳴器將發出兩次嗶嗶聲。

若需查看溫度和氣壓的值,請將USB電線從Arduino連接到PC。然后,進入Arduino IDE并單擊工具 → 串行監視器。

現在可以上傳程序。進行編譯以前,請確保已安裝所有必需的庫。

Arduino

?//**************** Home security Program - offline ****************************** #define PIR_MOTION_SENSOR 2? ?// Use pin 2 to receive the signal from the module #define LED1 4? ? ? ? ? ? ? ? // Blue Led for motion detected #define LED2 6? ? ? ? ? ? ? ? // Green Led for triggered alarm #define LED3 8? ? ? ? ? ? ? ? // Red Led if motion and trigger switch are on #define buzzer 5? ? ? ? ? ? ? // Buzzer?? #define remote 41? ? ? ? ? ? ?// Remote Control #include #include #include int alarm = 0; int trigger = 0; int remote_sw = 0; int online_sw = 0; int previousState = -1; int currentState = -1; int prev_remote_stat = 0; int curr_remote_stat = 0; int currentValue = 0; int prev_online_stat = 0; int curr_online_stat = 0; int tempout_pin = A2; BM1383GLV bm1383; BD1020 bd1020; unsigned long previousMillis = 0; void setup() { ?Serial.begin(9600); ?while (!Serial); ?bd1020.init(tempout_pin); ?byte rc; ?while (!Serial); ?Wire.begin(); ?rc = bm1383.init(); ?pinMode(LED1,OUTPUT); ?pinMode(LED2,OUTPUT); ?pinMode(LED3,OUTPUT); ?pinMode(buzzer, OUTPUT); ?pinMode(remote, INPUT); ?pinMode(PIR_MOTION_SENSOR, INPUT); } // ********************* Start Loop ***************************************** void loop() { ? ?checkSensor(); ? ?remote_sw = digitalRead(remote); ? ?Serial.print("Remote Status : "); ? ?Serial.println(remote_sw); ? ?Serial.println(); ? ?//*********************** read barometric pressure ************************ ? ?byte rc; ? ?float press; ? ?rc = bm1383.get_val(&press); ? ?if (rc == 0) ? ?{ ? ? ?Serial.write("BM1383GLV (PRESS) = "); ? ? ?Serial.print(press); ? ? ?Serial.println(" [hPa]"); ? ? ?Serial.println(); ? ?}? ?? ? ?//********************** read Temperature ******************************** ? ?float temp; ? ?bd1020.get_val(&temp); ? ?temp = temp - 5;? ? ? ? ? ? ?// Temperature adjustment due to heat from circuit board ? ?Serial.print("BD1020HFV Temp="); ? ?Serial.print(temp); ? ?Serial.print("? [degrees Celsius], ADC="); ? ?Serial.println(bd1020.temp_adc); ? ?Serial.println(); ? ?// ********** Check if Remote switch or online/App switch is on ********** ? ?if(remote_sw == 1 | currentValue == 1) ? ?{ ? ? digitalWrite(LED2,HIGH);? ? ? ? alarm = 1; ? ? curr_remote_stat = 1; ? ? if(curr_remote_stat != prev_remote_stat) ? ? { ? ? ?triggerBuzzer(2,70,30);?? ? ? ?prev_remote_stat = curr_remote_stat; ? ? } ? ?} ? ?else ? ?{ ? ? curr_remote_stat = 0; ? ? if(curr_remote_stat != prev_remote_stat) ? ? ?{ ? ? ? triggerBuzzer(3,70,30); ? ? ? prev_remote_stat = curr_remote_stat;? ? ?? ? ? ?} ? ? digitalWrite(LED2,LOW);? ? ? ? ? ?alarm = 0;? ? ? } ? ?// ********************** If motion detected *********************** ? ?if(isPeopleDetected())? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//if it detects the moving people? ? ? ? { ? ? ? ?digitalWrite(LED1, HIGH);? ? ? ? ? ? ? ? ? ? ? ? // Turn on Blue Led ? ? ? ?trigger = 1; ? ? ? ?delay(10); ? ? ? } ? ?else ? ? ? { digitalWrite(LED1, LOW); ? ? ? ? trigger = 0; ? ? ? ?delay(2000); ? ? ? } ? ? // ***************If Alarm is triggerred ************************** ? ?if (alarm == 1 && trigger == 1 ) ? ? ?{ ? ? ? digitalWrite(LED3,HIGH); ? ? ? delay(500); ? ? ? triggerBuzzer(6,100,100); ? ? ? Serial.println("Alarm triggered"); ? ? ?} ? else ? ? { ? ? ?alarm = 0; ? ? ?trigger = 0; ? ? ?digitalWrite(LED3,LOW); ? ? } ? ? // *********************** If temperature is triggerred ********** ? ? ?if (temp > 45.00) ? ? ?{ ? ? ? digitalWrite(LED3,HIGH); ? ? ? delay(500); ? ? ? triggerBuzzer(10,100,10); ? ? ? Serial.println("Alarm triggered"); ? ? ?} ? ? ? delay(10); } // **************************? End Loop ***************************** // Function: Write to PIR sensor indicator in Web/App *************** void checkSensor() { ?unsigned long currentMillis = millis(); ?if (currentMillis - previousMillis >= 250) ? ?{?? ? ? currentState = digitalRead(PIR_MOTION_SENSOR); ? ? if (currentState != previousState) ? ? ? { ? ? ? ?previousState = currentState; ? ? ? } ? ? previousMillis = currentMillis; ? ?} } //*************************************************************** // Function: Detect whether anyone moves in it''s detecting range boolean isPeopleDetected() { ? ?int sensorValue = digitalRead(PIR_MOTION_SENSOR); ? ?if(sensorValue == HIGH)? ? ? ? ? ? ? ? ? ? ? ? ? ?//if the sensor value is HIGH? ? ? ? { ? ? ? ?Serial.println("PIR detect motion"); ? ? ? ?return true;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //yes,return true ? ? ? } ? ?else ? ? ? { ? ? ? ?Serial.println("no motion");? ? ? ? ? ? ?return false;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//no,return false ? ? ? } } //*************************************************************** // Function : activate buzzer based on parameters received void triggerBuzzer(int iteration,int delay1,int delay2) { ? ? ?for (int i = 1; i < iteration; i++) ? ? ?{ ? ? ? digitalWrite(buzzer, HIGH); ? ? ? delay(delay1); ? ? ? digitalWrite(buzzer, LOW); ? ? ? delay(delay2); ? ? ?} } //*****************************************************************

準備在線連接

創建一個myDevices帳戶!您可以通過以下鏈接注冊并創建一個新帳戶:https://mydevices.com/cayenne/signup/

如果您已經擁有帳戶,請隨意使用自己的帳戶。

圖1. 注冊頁面 –?https://mydevices.com/cayenne/signup/

然后選擇Arduino作為本項目的設備。

圖2. 選擇本項目所需的Arduino設備

閱讀文檔并通過以下網站安裝Cayenne庫:

https://mydevices.com/cayenne/docs/#using-cayenne-library

然后繼續下一步,在新網頁中連接到Arduino。選擇Arduino Mega和WiFi Shield。選定這兩項后,您將收到設備的“身份驗證口令”。務必復制此口令并將其保存于某處。在下一個程序中需要用到此口令。

char token[] = “zzzzzzz”;????????// Cayenne authentication token

圖3. 選擇Arduino Mega和WiFi Shield

圖4. 創建傳感器微件

創建微件

我們可以為PIR傳感器、觸發狀態和警報開/關狀態創建微件。

為此,必須單擊 “添加新…” ,然后單擊 “設備/微件”。然后轉到 “傳感器” 類別并單擊 “通用”。在“通用”下,有2個輸入選項:模擬輸入和數字輸入。選擇 “數字輸入”。進入“數字輸入”設置頁面后,將連接設置為“虛擬”和“V1”(在下方)。請勿忘記單擊步驟1?和?步驟2。

V2和V4微件也按相同步驟操作。請使用下表作為參考:

虛擬通道號 微件名稱 選擇微件 選擇圖標/顯示 連接至
V1 PIR 傳感器 0/1 2 狀態 顯示值 PIR 傳感器 – 藍色 Led
V2 觸發狀態 0/1 2 狀態 顯示值 觸發開關 – 紅色 Led
V4 警報狀態開/關 0/1 2 狀態 圖標指示燈 遠程開關

?

代碼中使用的虛擬引腳分配如下:

#define VIRTUAL_PIN1 V1????????// PIR傳感器的虛擬引腳 – 藍色 Led

#define VIRTUAL_PIN2 V2????????// 觸發開關的虛擬引腳 – 紅色 Led

#define VIRTUAL_PIN4 V4????????// 遠程開關的狀態

當PIR傳感器檢測到發生移動時,V1將開啟(顏色變為綠色);藍色LED也將亮起。

當觸發狀態開啟時,V2將開啟(顏色變為綠色);當警報開啟且PIR傳感器檢測到發生移動時,紅色LED也將亮起。

通過遙控發射器或在線/應用程序開啟警報狀態時,V4將開啟(顏色變為綠色)

接下來為在線/應用程序切換功能創建一個微件。

轉至 “添加新…” ,然后單擊 “設備/微件”。這次選擇 “執行器” ,然后選擇 “通用”。選擇 “數字輸出” ,然后在“連接”下選擇“虛擬”。在“Pin”下,選擇“V3”。

圖5. 創建在線/應用程序切換功能的微件

使用下表作為參考:

虛擬通道號 微件名稱 選擇微件 選擇圖標/顯示 連接到
V3 在線/應用程序切換 按鈕 圖標 在線/應用程序
切換 — 綠色LED

?

單擊微件(在網站/應用程序上)時,V3將開啟(顏色變為紫色)。當V3開啟時,綠色LED也會亮起。因此,該虛擬開關與遙控發射器功能相同。但是,通過此虛擬交換機激活時會有一段延時。在下一程序中以下代碼將會引用引腳V3。

#define VIRTUAL_PIN3 V3????????// 在線切換 – 綠色 led

然后需要創建溫度和壓力傳感器的微件。和前面一樣,點擊 “添加新…” 和 “設備/微件”。然后選擇 “傳感器” 和 “通用” ,然后選擇 “模擬輸入”。連接后,選擇“虛擬”和“V5”進行引腳選擇。

圖6. 創建溫度和壓力傳感器的微件

對V6執行相同操作并使用下表作為參考:

虛擬通道號 微件名稱 選擇微件 選擇單位 連接到
V5 溫度(℃) 測量精度 有效位數 — 小數點后2位 溫度傳感器
V6 氣壓(hPa) 測量精度 有效位數 — 小數點后2位 大氣壓力傳感器

?

在下一程序中以下代碼將會引用引腳V5和V6。

#define VIRTUAL_PIN5 V5????????// 溫度傳感器

#define VIRTUAL_PIN6 V6????????// 氣壓傳感器

如果上述所有步驟都正確完成,您將看到如圖7所示的頁面。

圖7. 微件的顯示

最后一步是啟用電子郵件通知功能(觸發警報時)。為此,請單擊“觸發器狀態”微件上的設置符號,然后選擇“觸發器”。

圖8. 創建電子郵件觸發器

然后,您將進入以下頁面(圖9)。在“添加自定義收件人”中鍵入您的電子郵件地址,然后單擊“發送電子郵件”。

圖9. 設置電子郵件通知

myDevices設置到此結束!

測試在線程序

以上已經完成了與家庭安防系統的在線連接設置。運行最終程序前可以先測試在線程序。

上傳以下程序。確保已安裝適用于Arduino的Cayenne庫。該程序用于執行簡單的功能(即顯示溫度和氣壓值)。正確運行時,溫度和氣壓微件將改變顏色(綠色和橙色),相應數值顯示于微件的底部。

?//**************** Home security Program - online test*********************** * #define CAYENNE_DEBUG? ? ? ? ?// Uncomment to show debug messages #define CAYENNE_PRINT Serial? // Comment this out to disable prints and save space #define VIRTUAL_PIN5 V5? ? ? ?// Temperature sensor #define VIRTUAL_PIN6 V6? ? ? ?// Barometric Pressure Sensor #include ? ? ? // Cayenne wifi library #include #include #include char token[] = "zzzzzzz";? ? ? ? ? // Cayenne authentication token. char ssid[] = "xxxxxxxxx";? ? ? ?// Your Wifi network name char password[] = "yyyy";? ? ? ? ? // Your Wifi password int tempout_pin = A2; BM1383GLV bm1383; BD1020 bd1020; unsigned long previousMillis = 0; void setup() { ?Serial.begin(9600); ?while (!Serial); ?bd1020.init(tempout_pin); ?byte rc; ?while (!Serial); ?Wire.begin(); ?rc = bm1383.init(); ?Cayenne.begin(token, ssid, password); } // ********************* Start Loop ***************************************** void loop() { ? ?Cayenne.run();?? ? ?//*********************** read barometric pressure ************************ ? ?byte rc; ? ?float press; ? ?rc = bm1383.get_val(&press); ? ?if (rc == 0) ? ?{ ? ? ?Cayenne.virtualWrite(VIRTUAL_PIN6, press); // Write Barometric Pressure to Cayenne ? ? ?Serial.write("BM1383GLV (PRESS) = "); ? ? ?Serial.print(press); ? ? ?Serial.println(" [hPa]"); ? ? ?Serial.println(); ? ?} ? ? ? ?//********************** read Temperature ******************************** ? ?float temp; ? ?bd1020.get_val(&temp); ? ?temp = temp - 5;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Temperature adjustment due to heat from circuit board ? ?Cayenne.virtualWrite(VIRTUAL_PIN5, temp);? ? ? ?// Write Temperature to Cayenne ? ?Serial.print("BD1020HFV Temp="); ? ?Serial.print(temp); ? ?Serial.print("? [degrees Celsius], ADC="); ? ?Serial.println(bd1020.temp_adc); ? ?Serial.println(); ? ?// ********** Check if Remote switch or online/App switch is on ********** ? ? ? delay(5000); } // **************************? End Loop *****************************

至此差不多完成了所有步驟!

最終方案

如果以上所有程序都能流暢運行,則可上傳最終程序,該程序中嵌入了離線程序以及與Cayenne API的連接功能。

?//**************** Home security Program - Final ****************************** #define CAYENNE_DEBUG? ? ? ? ?// Uncomment to show debug messages #define CAYENNE_PRINT Serial? // Comment this out to disable prints and save space #define VIRTUAL_PIN1 V1? ? ? ?// Virtual Pin for PIR sensor? - Blue Led #define VIRTUAL_PIN2 V2? ? ? ?// Virtual Pin for Trigger Switch - Red Led #define VIRTUAL_PIN3 V3? ? ? ?// Online Switch? - Green led #define VIRTUAL_PIN4 V4? ? ? ?// Status of Remote Switch #define VIRTUAL_PIN5 V5? ? ? ?// Temperature sensor #define VIRTUAL_PIN6 V6? ? ? ?// Barometric Pressure Sensor #define PIR_MOTION_SENSOR 2? ?// Use pin 2 to receive the signal from the module #define LED1 4? ? ? ? ? ? ? ? // Blue Led for motion detected #define LED2 6? ? ? ? ? ? ? ? // Green Led for triggered alarm #define LED3 8? ? ? ? ? ? ? ? // Red Led if motion and triger switch are on #define buzzer 5? ? ? ? ? ? ? // Buzzer?? #define remote 41? ? ? ? ? ? ?// Remote Control #include ? ? ? // Cayenne wifi library #include #include #include char token[] = "zzzzzzz";? ? ? ? ? // Cayenne authentication token. char ssid[] = "xxxxxxxxx";? ? ? ?// Your Wifi network name char password[] = "yyyy";? ? ? ? ? // Your Wifi password int alarm = 0; int trigger = 0; int remote_sw = 0; int online_sw = 0; int previousState = -1; int currentState = -1; int prev_remote_stat = 0; int curr_remote_stat = 0; int currentValue = 0; int prev_online_stat = 0; int curr_online_stat = 0; int tempout_pin = A2; BM1383GLV bm1383; BD1020 bd1020; unsigned long previousMillis = 0; void setup() { ?Serial.begin(9600); ?while (!Serial); ?bd1020.init(tempout_pin); ?byte rc; ?while (!Serial); ?Wire.begin(); ?rc = bm1383.init(); ? ?Cayenne.begin(token, ssid, password); ?pinMode(LED1,OUTPUT); ?pinMode(LED2,OUTPUT); ?pinMode(LED3,OUTPUT); ?pinMode(buzzer, OUTPUT); ?pinMode(remote, INPUT); ?pinMode(PIR_MOTION_SENSOR, INPUT); } // ************ Check if Online/App Switch is on ***************************** CAYENNE_IN(VIRTUAL_PIN3) ?{currentValue = getValue.asInt();} // ********************* Start Loop ***************************************** void loop() { ? ?Cayenne.run();?? ? ?Serial.print("currentValue: "); ? ?Serial.println(currentValue); ? ? ? ?checkSensor(); ? ?remote_sw = digitalRead(remote); ? ?Serial.print("Remote Status : "); ? ?Serial.println(remote_sw); ? ?Serial.println(); ? ?//*********************** read barometric pressure ************************ ? ?byte rc; ? ?float press; ? ?rc = bm1383.get_val(&press); ? ?if (rc == 0) ? ?{ ? ? ?Cayenne.virtualWrite(VIRTUAL_PIN6, press); ? ? ?Serial.write("BM1383GLV (PRESS) = "); ? ? ?Serial.print(press); ? ? ?Serial.println(" [hPa]"); ? ? ?Serial.println(); ? ?} ? ? ? ?//********************** read Temperature ******************************** ? ?float temp; ? ?bd1020.get_val(&temp); ? ?temp = temp - 5;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Temperature adjustment due to heat from circuit board ? ?Cayenne.virtualWrite(VIRTUAL_PIN5, temp); ? ?Serial.print("BD1020HFV Temp="); ? ?Serial.print(temp); ? ?Serial.print("? [degrees Celsius], ADC="); ? ?Serial.println(bd1020.temp_adc); ? ?Serial.println(); ? ?// ********** Check if Remote switch or online/App switch is on ********** ? ?if(remote_sw == 1 | currentValue == 1) ? ?{ ? ? digitalWrite(LED2,HIGH); ? ? Cayenne.virtualWrite(VIRTUAL_PIN4, HIGH);? ?? ? ? alarm = 1; ? ? curr_remote_stat = 1; ? ? if(curr_remote_stat != prev_remote_stat) ? ? { ? ? ?triggerBuzzer(2,70,30);?? ? ? ?prev_remote_stat = curr_remote_stat; ? ? } ? ?} ? ?else ? ?{ ? ? curr_remote_stat = 0; ? ? if(curr_remote_stat != prev_remote_stat) ? ? ?{ ? ? ? triggerBuzzer(3,70,30); ? ? ? prev_remote_stat = curr_remote_stat;? ? ?? ? ? ?} ? ? digitalWrite(LED2,LOW); ? ? Cayenne.virtualWrite(VIRTUAL_PIN4, LOW);? ? ? ? ? ? ?alarm = 0;? ? ? } ? ?// ********************** If motion detected *********************** ? ?if(isPeopleDetected())? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//if it detects the moving people? ? ? ? { ? ? ? ?digitalWrite(LED1, HIGH);? ? ? ? ? ? ? ? ? ? ? ? // Turn on Blue Led ? ? ? ?trigger = 1; ? ? ? ?delay(10); ? ? ? } ? ?else ? ? ? { digitalWrite(LED1, LOW); ? ? ? ? trigger = 0; ? ? ? ?delay(2000); ? ? ? } ? ? // ***************If Alarm is triggerred ************************** ? ?if (alarm == 1 && trigger == 1 ) ? ? ?{ ? ? ? digitalWrite(LED3,HIGH); ? ? ? Cayenne.virtualWrite(VIRTUAL_PIN2, HIGH); ? ? ? delay(500); ? ? ? triggerBuzzer(6,100,100); ? ? ? Serial.println("Alarm triggered"); ? ? ?} ? else ? ? { ? ? ?alarm = 0; ? ? ?trigger = 0; ? ? ?digitalWrite(LED3,LOW); ? ? ?Cayenne.virtualWrite(VIRTUAL_PIN2, LOW); ? ? } ? ? // *********************** If temperature is triggerred ********** ? ? ?if (temp > 45.00) ? ? ?{ ? ? ? digitalWrite(LED3,HIGH); ? ? ? Cayenne.virtualWrite(VIRTUAL_PIN2, HIGH); ? ? ? delay(500); ? ? ? triggerBuzzer(10,100,10); ? ? ? Serial.println("Alarm triggered"); ? ? ?} ? ? ? delay(10); } // **************************? End Loop ***************************** // Function: Write to PIR sensor indicator in Web/App *************** void checkSensor() { ?unsigned long currentMillis = millis(); ?if (currentMillis - previousMillis >= 250) ? ?{?? ? ? currentState = digitalRead(PIR_MOTION_SENSOR); ? ? if (currentState != previousState) ? ? ? { ? ? ? ?Cayenne.virtualWrite(VIRTUAL_PIN1, currentState); ? ? ? ?previousState = currentState; ? ? ? } ? ? previousMillis = currentMillis; ? ?} } //*************************************************************** // Function: Detect whether anyone moves in it''s detecting range boolean isPeopleDetected() { ? ?int sensorValue = digitalRead(PIR_MOTION_SENSOR); ? ?if(sensorValue == HIGH)? ? ? ? ? ? ? ? ? ? ? ? ? ?//if the sensor value is HIGH? ? ? ? { ? ? ? ?Serial.println("PIR detect motion"); ? ? ? ?return true;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //yes,return true ? ? ? } ? ?else ? ? ? { ? ? ? ?Serial.println("no motion");? ? ? ? ? ? ?return false;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//no,return false ? ? ? } } //*************************************************************** // Function : activate buzzer based on parameters received void triggerBuzzer(int iteration,int delay1,int delay2) { ? ? ?for (int i = 1; i < iteration; i++) ? ? ?{ ? ? ? digitalWrite(buzzer, HIGH); ? ? ? delay(delay1); ? ? ? digitalWrite(buzzer, LOW); ? ? ? delay(delay2); ? ? ?} } // *****************************************************************

以下幾種方法可以測試程序是否正常運行。

檢查觸發警報時是否發送電子郵件。您應收到如圖10所示的電子郵件。

圖10. 觸發警報時收到的電子郵件通知

檢查您是否可以看到溫度和氣壓圖。如需顯示圖形,請單擊窗口微件右上角的圖形符號。

圖11. 傳感器的圖形符號的顯示

然后還會顯示圖表:

圖12. 溫度曲線圖示例

下載智能手機應用程序

如前所述,無論何時何地只要您能連接WiFi,您就可以24/7全天候對安防系統進行監控。您可以在網站上或通過Cayenne手機應用程序進行監控。您可以在智能手機上直接下載Cayenne應用程序。進入App Store(應用商店,適用于iPhone)或Google Play商店(適用于Android)并搜索Cayenne然后就能下載。

圖13. Cayenne App

成功安裝應用程序后,應用程序圖標會顯示在主屏幕上。

單擊應用程序圖標并登錄myDevices帳戶(電子郵件ID和密碼應與上一次設置帳戶時相同)。登錄后,您將看到您創建的微件。現在單擊在線/應用程序切換微件就可以打開/關閉警報;警報開/關狀態顏色變為綠色,如下圖所示:

圖14. Cayenne App微件

恭喜您!完整的系統已經建立!每當觸發警報時,您將收到電子郵件通知。

這是一個包含多個模塊的有趣項目。將來還可以添加更多傳感器并增加其他功能和多個蜂鳴器,以使嗶嗶聲更大。我們還可以考慮通過更換一些組件來縮小系統規模。在此之前,盡情享受吧!

收藏 人收藏
分享:

評論

相關推薦

基于Arduino的LED矩陣時鐘的制作教程

這是我的第一個重要項目,在學習過程中,我從在其4-LED滾動文本示例中使用的Makepeace Ma....
的頭像 39度創意研究所 發表于 10-05 17:56 ? 42次 閱讀
基于Arduino的LED矩陣時鐘的制作教程

Arduino如何控制PC電源開關

現在顯然,當PC關閉時,我們無法從USB端口獲得電源!
的頭像 39度創意研究所 發表于 10-05 17:53 ? 35次 閱讀
Arduino如何控制PC電源開關

怎樣在Arduino上使用游戲桿

從圖片中可以看到,這是一個簡單的電路。在我的操縱桿上標記了X,Y,VCC和GND。 X和Y轉到模擬端....
的頭像 39度創意研究所 發表于 10-05 17:32 ? 4次 閱讀
怎樣在Arduino上使用游戲桿

光纖雕塑的制作圖解

 目前,我已經使用電工膠帶將LED固定在光纜上,直到創建了一個更永久的解決方案為止。將它們全部包好后....
的頭像 39度創意研究所 發表于 09-30 17:24 ? 797次 閱讀
光纖雕塑的制作圖解

怎樣用Arduino驅動模擬器

我將底座焊接到了存放方向盤座和其他物品的位置上
的頭像 39度創意研究所 發表于 09-30 17:00 ? 248次 閱讀
怎樣用Arduino驅動模擬器

4x4矩陣膜鍵盤的制作教程

 例如,鍵盤上的“ 1”按鈕按下后,監視器序列將顯示“ 1按下”。然后,當釋放鍵盤上的“ 1”按鈕時....
的頭像 39度創意研究所 發表于 09-30 11:42 ? 115次 閱讀
4x4矩陣膜鍵盤的制作教程

帶LED的Arduino聲音傳感器的制作

LED短腳到Arduino板上的GND的電線連接的另一側。長腿到Arduino板上的數字引腳13
的頭像 39度創意研究所 發表于 09-30 11:24 ? 171次 閱讀
帶LED的Arduino聲音傳感器的制作

Arduino LCD時鐘溫濕度計的制作

第一步是將插頭引腳焊接到LCD顯示屏。斷開16個引腳并焊接到顯示器的底部
的頭像 39度創意研究所 發表于 09-30 11:04 ? 121次 閱讀
Arduino LCD時鐘溫濕度計的制作

何將ArduinoUNO連接到任何NMEA-0183設備

 如果設備中有一條傳輸線(很可能標記為TX或NMEA OUT或類似的東西),則您的設備使用RS-23....
的頭像 39度創意研究所 發表于 09-30 10:53 ? 113次 閱讀
何將ArduinoUNO連接到任何NMEA-0183設備

如何在Ubuntu中安裝最新版本的Arduino

 如果沒有錯誤消息出現,則說明您已正確安裝
的頭像 39度創意研究所 發表于 09-30 10:30 ? 118次 閱讀
如何在Ubuntu中安裝最新版本的Arduino

如何構建N64TASBot

這是最后一步。在Arduino程序中,點擊upload(頂部的箭頭按鈕)。上傳時,點擊頂部的“工具”....
的頭像 39度創意研究所 發表于 09-30 10:27 ? 118次 閱讀
如何構建N64TASBot

如何在Arduino上使用Thermistor

  上傳代碼后,打開串行監視器,就可以在我獲得串行監視器時獲取熱敏電阻的溫度,參考提供的圖像即可會好....
的頭像 39度創意研究所 發表于 09-30 09:48 ? 104次 閱讀
如何在Arduino上使用Thermistor

如何在Arduino LED項目中使用電阻器

 LED可以使用的典型最大電流約為25mA,這意味著我們需要添加的電阻的總電阻,LED應為R = 5....
的頭像 39度創意研究所 發表于 09-30 09:29 ? 270次 閱讀
如何在Arduino LED項目中使用電阻器

Arduino紅外線中繼器的制作

在此步驟中,您將學習如何將組件連接到arduino。
的頭像 39度創意研究所 發表于 09-30 09:03 ? 139次 閱讀
Arduino紅外線中繼器的制作

怎樣使用Arduino控制無刷電機

首先將無刷電機的三個端子連接到在ESC的三個端子上,用類似的方法將電機擰到一塊厚木板上,以使其在高R....
的頭像 39度創意研究所 發表于 09-29 17:47 ? 217次 閱讀
怎樣使用Arduino控制無刷電機

怎樣在樹莓派3上安裝和使用ArduinoIDE

使用適當的電纜將Arduino板連接到Raspberry Pi后,拉下Raspbian主菜單,然后在....
的頭像 39度創意研究所 發表于 09-29 11:43 ? 239次 閱讀
怎樣在樹莓派3上安裝和使用ArduinoIDE

如何使用Arduino將程序閃存到PSoC5-LP

嗨,我在一個項目,我需要一個程序閃存到PSoC5 LP沒有開發板(我創建了一個PCB通過鷹與控制器)。我知道有可能通過MIX...
發表于 09-29 09:00 ? 42次 閱讀
如何使用Arduino將程序閃存到PSoC5-LP

怎樣在Linux中將LinkItOne與Arduino結合使用

我為Linux的LinkIt One工具創建了自定義軟件包。您只需將其安裝到arduino中即可。
的頭像 39度創意研究所 發表于 09-29 08:33 ? 198次 閱讀
怎樣在Linux中將LinkItOne與Arduino結合使用

請問Arduino randomSeed(seed) 和random的具體區別是什么?

不都是生成隨機數字嗎 具體有啥區別呢
發表于 09-29 06:54 ? 21次 閱讀
請問Arduino randomSeed(seed) 和random的具體區別是什么?

怎樣用Arduino控制RGBLED

這是怎么回事。基本上,我們已經將arduino設置為響應特定的消息。此消息包含一個標頭(字母“ C”....
的頭像 39度創意研究所 發表于 09-28 16:44 ? 279次 閱讀
怎樣用Arduino控制RGBLED

如何使用Arduino和Darlington ULN2803控制大功率電路

  要控制此顯示,我連接了共陽極到36V,然后選擇性地將要點亮的顯示器各部分接地。
的頭像 39度創意研究所 發表于 09-28 13:13 ? 217次 閱讀
如何使用Arduino和Darlington ULN2803控制大功率電路

如何使用Arduino制作簡易數據記錄器

如果一切正確,則dist超聲波傳感器和其范圍內的對象之間的距離出現在富文本框中
的頭像 39度創意研究所 發表于 09-28 12:56 ? 194次 閱讀
如何使用Arduino制作簡易數據記錄器

【項目分享】教你用Arduino、Micro SD制作一個簡單的音樂播放器

在本項目中,我們來看一下如何用Arduino,Micro SD卡讀卡器來制作一個簡單的音樂播放器。完成后,你可以用它來播放儲存在SD...
發表于 09-27 17:20 ? 639次 閱讀
【項目分享】教你用Arduino、Micro SD制作一個簡單的音樂播放器

怎樣用Arduino控制直流電機

 現在,您已將Arduino連接好,將代碼復制并粘貼到Arduino IDE。將讀取此代碼的作用,以....
的頭像 39度創意研究所 發表于 09-27 14:25 ? 297次 閱讀
怎樣用Arduino控制直流電機

如何使用atmeg328IC構建Arduino

  完成上述所有步驟后,您就可以使用arduino。現在該上傳您的第一個代碼了。要上傳代碼,您只需從....
的頭像 39度創意研究所 發表于 09-27 14:17 ? 152次 閱讀
如何使用atmeg328IC構建Arduino

Arduino閃爍LED的教程

要使LED閃爍,首先需要使用軟件對芯片進行編程。請訪問arduino.cc以獲取完整程序和其他示例。....
的頭像 39度創意研究所 發表于 09-27 11:43 ? 167次 閱讀
Arduino閃爍LED的教程

如何從arduino連接到I/O

一個按鈕,每次按下該按鈕,“ Hello world”都會打印到該按鈕上方的文本字段中。一旦文本字段....
的頭像 39度創意研究所 發表于 09-27 11:40 ? 97次 閱讀
如何從arduino連接到I/O

如何通過Arduino安全使用中繼

 要測試新的繼電器電路,只需將此代碼復制并粘貼到您的ARDUINO IDE中,請確保將arduino....
的頭像 39度創意研究所 發表于 09-27 11:15 ? 114次 閱讀
如何通過Arduino安全使用中繼

如何編寫代碼以捕獲十六進制和十進制值的遠程控制代碼

 現在我們知道如何獲取任何遠程控制按鈕的代碼,我將在另一本可指導的示例中向您展示如何使用這些代碼進行....
的頭像 39度創意研究所 發表于 09-27 11:10 ? 144次 閱讀
如何編寫代碼以捕獲十六進制和十進制值的遠程控制代碼

如何使用Arduino和NRF24L01制作PS2控制器

 在代碼中,您可能還會發現與BatteryCheck有關的內容,目前尚未使用。最初,我打算使用它來檢....
的頭像 39度創意研究所 發表于 09-27 11:04 ? 1284次 閱讀
如何使用Arduino和NRF24L01制作PS2控制器

Arduino啟動板DIY圖解

 這不是Midi樂器,而是配置為網格控制器的鍵盤,可能在作弊,但肯定值得嘗試,并且我很快就會添加與該....
的頭像 39度創意研究所 發表于 09-27 11:00 ? 214次 閱讀
Arduino啟動板DIY圖解

怎樣在ArduinoMega上使用2.4英寸TFTLCD屏蔽

 在Arduino IDE上,選擇COM端口,然后選擇將您的開發板命名為Arduino Mega,然....
的頭像 39度創意研究所 發表于 09-27 10:29 ? 146次 閱讀
怎樣在ArduinoMega上使用2.4英寸TFTLCD屏蔽

Arduino雙軸伺服太陽能跟蹤器制作圖解

我使用了3個光傳感器和1個傾斜傳感器。您可以用LED或光電晶體管代替CDS電池,和/或用汞開關代替滾....
的頭像 39度創意研究所 發表于 09-27 10:05 ? 199次 閱讀
Arduino雙軸伺服太陽能跟蹤器制作圖解

怎樣為Arduino制造電流傳感器電子元件和自制分流器

此構建所需的主要零件是分流器以及運算放大器IC。對于我的應用,我使用的是IC LM358,它是一個雙....
的頭像 39度創意研究所 發表于 09-27 09:18 ? 147次 閱讀
怎樣為Arduino制造電流傳感器電子元件和自制分流器

基于Arduino的自動感應門的制作

要控制直流電動機的運動,我們必須構建一個電動機控制器。為此,我們使用上圖中的H橋配置。我已經使用5v....
的頭像 39度創意研究所 發表于 09-27 08:48 ? 175次 閱讀
基于Arduino的自動感應門的制作

如何制作可錄制視頻的電話控制的遙控汽車

 在您的Android/iOS設備上下載Blynk應用程序,并構建圖片上的儀表板。此項目需要兩個操縱....
的頭像 39度創意研究所 發表于 09-27 08:38 ? 228次 閱讀
如何制作可錄制視頻的電話控制的遙控汽車

Arduino電壓出現問題該怎么辦?

我的項目是超聲波測距,現在有以下幾個用電芯片   HC-SRO4(超聲波測距模塊),ADXL203EB(雙軸加速度計...
發表于 09-27 02:44 ? 36次 閱讀
Arduino電壓出現問題該怎么辦?

如何僅使用2節AAA電池來運行arduinounor3

確保藍色PWR LED點亮并且紅色LOW BATT燈熄滅。
的頭像 39度創意研究所 發表于 09-26 15:49 ? 635次 閱讀
如何僅使用2節AAA電池來運行arduinounor3

如何采用Arduino系統板進行單片機編程

Arduino最小系統板電路見下圖,適用于對ATmega8、ATmega168、ATmega328等....
發表于 09-26 15:44 ? 102次 閱讀
如何采用Arduino系統板進行單片機編程

怎樣用ArduinoProMicro進行PC遠程控制

您可以使用遙控器的按鈕來按想要用適當的代碼在鍵盤中按下的任何鍵。
的頭像 39度創意研究所 發表于 09-26 15:39 ? 211次 閱讀
怎樣用ArduinoProMicro進行PC遠程控制

如何對基于Arduino的金屬探測器進行編程

金屬探測器的基本原理是,線圈中的電感/信號會隨著目標靠近線圈而改變。識別這些變化的常用方法是測量頻移....
的頭像 39度創意研究所 發表于 09-26 14:57 ? 190次 閱讀
如何對基于Arduino的金屬探測器進行編程

Arduino激光投影儀和控制應用程序的制作

 將整個電路放入塑料接線盒中,并用螺釘擰緊。整個投影機非常便攜,只需插入電源,切換開關,即可看到激光....
的頭像 39度創意研究所 發表于 09-26 14:19 ? 328次 閱讀
Arduino激光投影儀和控制應用程序的制作

如何將ArduinoBootLoader刻錄到AtMega328p芯片上

假設您已經擁有一個Arduino Uno或類似產品,并且您對IDE熟悉并且上傳草圖。
的頭像 39度創意研究所 發表于 09-26 11:27 ? 156次 閱讀
如何將ArduinoBootLoader刻錄到AtMega328p芯片上

【項目分享】教你如何運用Arduino通過網頁實時控制伺服電機

本項目將教你如何通過Arduino結合Websocket在網頁瀏覽器上控制伺服電機。所需元件Arduino UNO x 1PHPoC Wifi擴展板 x...
發表于 09-26 11:16 ? 511次 閱讀
【項目分享】教你如何運用Arduino通過網頁實時控制伺服電機

兩輪平衡機器人DIY圖解

所有3種芯片上都裝有數字運動處理器(DMP)。使用此處理器有很大的優勢。它在計算垂直角度(傳感器融合....
的頭像 39度創意研究所 發表于 09-26 11:00 ? 248次 閱讀
兩輪平衡機器人DIY圖解

如何使用LM35溫度傳感器和Arduino來測量溫度

在Void循環中,我將從傳感器讀取溫度,將其更改為攝氏溫度并將其顯示在第一行,然后再次更改到華氏度并....
的頭像 39度創意研究所 發表于 09-26 10:53 ? 208次 閱讀
如何使用LM35溫度傳感器和Arduino來測量溫度

Arduino USB的制作

此適配器還附帶四件式電纜。如果您沒有使用自動重置和/或有其他功能,則可以使用這些功能代替像我一樣制作....
的頭像 39度創意研究所 發表于 09-26 10:49 ? 187次 閱讀
Arduino USB的制作

如何在Arduino上使用鍵盤和LCD來制作Arduino計算器

因此,首先要使用鍵盤,您必須了解鍵盤的工作原理。
的頭像 39度創意研究所 發表于 09-26 10:40 ? 171次 閱讀
如何在Arduino上使用鍵盤和LCD來制作Arduino計算器

遙控Arduino坦克的制作

將兩者混合在一起,我可以將RC接收器的讀數直接輸入到我的arduino中,將值轉換為電機通過電機護罩....
的頭像 39度創意研究所 發表于 09-26 10:24 ? 151次 閱讀
遙控Arduino坦克的制作

ArduinoICSP編程電纜的制作

 這是完成的電纜。使用標簽制造商標記電纜的哪一端用于編程器,哪一端用于目標。并標記標題的哪一端應指向....
的頭像 39度創意研究所 發表于 09-26 10:20 ? 177次 閱讀
ArduinoICSP編程電纜的制作

怎樣用Arduino和兩個瞬時開關控制RC伺服電機

這是我使用的代碼。我稍后再解釋,我有點懶。多數民眾贊成在這里和這是什么。
的頭像 39度創意研究所 發表于 09-26 10:19 ? 257次 閱讀
怎樣用Arduino和兩個瞬時開關控制RC伺服電機

怎樣將模擬傳感器連接到Arduino

完成后,您應該看到Lilypad上的LED閃爍。按下按鈕,LED應該以較低的頻率閃爍。
的頭像 39度創意研究所 發表于 09-26 10:09 ? 873次 閱讀
怎樣將模擬傳感器連接到Arduino

如何創建一個DualShock4控制的Arduino

這就是將PS4 DualShock 4控制器連接到Arduino的方式!如果有讀者還在學習如何使用A....
的頭像 39度創意研究所 發表于 09-26 09:54 ? 460次 閱讀
如何創建一個DualShock4控制的Arduino

如何制作帶LCD的Arduino溫度傳感器

的。因此,在您上傳代碼之后,LCD顯示器應該會亮起,并顯示類似“ Temp:72.5”的字樣。如果可....
的頭像 39度創意研究所 發表于 09-26 09:30 ? 229次 閱讀
如何制作帶LCD的Arduino溫度傳感器

怎樣設置ArduinoIDE對ESP8266進行編程

恭喜!您的Arduino IDE已準備好支持ESP8266模塊。  
的頭像 39度創意研究所 發表于 09-26 09:24 ? 247次 閱讀
怎樣設置ArduinoIDE對ESP8266進行編程

【項目分享】教你如何基于Arduino UNO設計聲控智能家居系統

智能家居的話題仍在不斷炒熱,它能幫助人們減少人力需求與錯誤,同時還能提升效率。在家庭自動化系統的幫助下,我們可以控制不同...
發表于 09-25 18:12 ? 551次 閱讀
【項目分享】教你如何基于Arduino UNO設計聲控智能家居系統

為什么例程編譯會出現報錯?

剛剛接觸arduino,安裝了arduino ide,想跑一下IDE自帶例程   如果不把開發板插進電腦,Sketch uses 76,327 byt...
發表于 09-24 05:55 ? 39次 閱讀
為什么例程編譯會出現報錯?

大佬們問下nodemcu esp8266 arduino這些板子 如果要用電池的話 買多少V的呢?

另外還想問下前輩們,在哪兒可以看到他們需要的工作電壓的資料呢?...
發表于 09-23 19:21 ? 104次 閱讀
大佬們問下nodemcu esp8266 arduino這些板子  如果要用電池的話 買多少V的呢?

是否可以將CNC防護罩連接到先鋒開發套件?

我找到了Arduino,會對先鋒開發套件的工作嗎? 我們正在尋求建立一個小型的DIY數控安裝在商店,我們更熟悉的PSoC比Ardu...
發表于 09-23 14:14 ? 85次 閱讀
是否可以將CNC防護罩連接到先鋒開發套件?

微信控制風扇顯字制作分享!

斷斷續續弄了一周才把微信控制搞定,做了個微信控制小風扇。有微信連不上的可以找我交流,自己一步一步走來,看官方教材,雖不明...
發表于 09-23 04:35 ? 73次 閱讀
微信控制風扇顯字制作分享!
成人影片-成人片