作為一名教師,傳統(tǒng)上的出勤(點(diǎn)名)是一項耗時的任務(wù),如果自動化,教師可以專注于其他教學(xué)活動。在本項目中,RFID閱讀器模塊和RFID卡將用于實現(xiàn)自動考勤系統(tǒng)。
課程在密閉空間內(nèi)進(jìn)行,如果環(huán)境太熱或太冷,很難聽課。為了實現(xiàn)有效的學(xué)習(xí),應(yīng)保持教室內(nèi)正確的物理環(huán)境。該項目將使用相對濕度和溫度傳感器(DHT11)來監(jiān)控溫度和濕度,并在值超出范圍時發(fā)出通知。
庫和定義
在開始代碼之前,需要將庫包含在程序中。定義了物理連接到Arduino板的引腳號。創(chuàng)建將用于數(shù)據(jù)采集的RFID接收器(mfrc522)和DHT傳感器(dht)的實例。創(chuàng)建了一個名為student的變量,它是一個二維字符串?dāng)?shù)組,用于存儲學(xué)生姓名和相關(guān)的RFID標(biāo)簽ID。
設(shè)置
setup()函數(shù)僅在板子上電或按下復(fù)位按鈕時執(zhí)行一次。串行連接以9600的波特率初始化。DHT傳感器采集調(diào)用函數(shù)begin()開始采集。
調(diào)用一些ArduinoIoTCloud函數(shù)來初始化屬性、開始連接、設(shè)置調(diào)試消息級別并打印任何調(diào)試信息。
主要功能-循??環(huán)
Arduino中的loop()函數(shù)包括SPI通信的開始和mfrc522的初始化。起初,這兩個初始化是在設(shè)置階段完成的,但由于ArduinoCloud更新時的錯誤而被移到循環(huán)中。它將引腳10更改為輸入,中斷SPI通信。解決方案是在每個循環(huán)上初始化SPI通信,以將引腳10重置為輸出模式。
void loop() {
SPI.begin();
mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
String content = "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
//Serial.println(content.substring(1));
content.toUpperCase();
for (int i = 0; i < 6; i++) {
if (content.substring(1) == student[i][0])
{
msg_Attendance = "Attendance Recorded for Student: " + student[i][1] ;
}
}
Serial.println(msg_Attendance);
}
}
dht_sensor_getdata();
delay(500);
ArduinoCloud.update();
}
mfrc522初始化后,調(diào)用PICC_IsNewCardPresent()函數(shù)。如果檢測到新卡,PICC_ReadCardSerial()函數(shù)會從 RFID 卡中讀取 ID 信息。ID 是一個字符串類型的變量,稱為內(nèi)容。它被轉(zhuǎn)換為大寫,以便與存儲在程序定義部分中的學(xué)生ID 數(shù)組進(jìn)行比較。當(dāng)從卡中讀取的 ID 與記錄中的學(xué)生匹配時,會記錄出勤情況并將其存儲在變量msg_Attendance 中。
dht_sensor_getdata ()函數(shù)被調(diào)用,更多詳細(xì)信息在下一節(jié)中。在調(diào)用ArduinoCloud.update()函數(shù)之前引入了 500 毫秒的短暫延遲。此函數(shù)將所有四個變量發(fā)送到云端:溫度、濕度、msg_Attendance和msgTempHum 。
DHT傳感器功能
創(chuàng)建函數(shù)dht_sensor_getdata()是為了從 DHT11 傳感器讀取濕度和溫度數(shù)據(jù)。dht.h 庫導(dǎo)入函數(shù) readHumidity() 和 readTemperature()。
if-else 條件檢查低溫 (20oC) 和高溫 (27oC) 的閾值,然后向儀表板發(fā)送消息。這可以通過執(zhí)行器(打開或關(guān)閉空調(diào))或真實教室中的警報來實現(xiàn)。
void dht_sensor_getdata()
{
float hm = dht.readHumidity();
Serial.print(F("Humidity "));
Serial.println(hm);
float temp = dht.readTemperature();
Serial.print(F("Temperature "));
Serial.println(temp);
humidity = hm;
temperature = temp;
if (temp > 27) {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> High ";
}
else if (temp < 20) {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> Low ";
}
else {
msgTempHum = "Temperature = " + String (temperature) + " Humidity = " + String(humidity) + " -> All ok ";
}
}
準(zhǔn)備工作-設(shè)置云
要連接到ArduinoIoTCloud,首先我們需要創(chuàng)建一個帳戶或登錄。
要使用已經(jīng)安裝了所有核心和庫的基于Web的編輯器,我們需要安裝CreateAgentPlugin。該代理將識別通過USB連接到計算機(jī)的板。
進(jìn)入網(wǎng)頁編輯器頁面后,我們可以看到板已連接/斷開,編輯我們的代碼并在完成后上傳。
但是,還有其他兩個選項可用:
經(jīng)典離線ArduinoIDE1.8.13(集成開發(fā)環(huán)境)作為–用于本地傳感器故障排除。
新的ArduinoIDE2.0-具有調(diào)試、代碼突出顯示和自動完成等新功能,目前處于beta階段(準(zhǔn)備此項目時)。
要選擇IoTCloud菜單或Web編輯器,我們可以單擊個人資料圖片附近的右上角按鈕。
一旦我們選擇了物聯(lián)網(wǎng)云菜單,就會有一些選項可用,但在這個項目中,我們將專注于創(chuàng)建事物、關(guān)聯(lián)設(shè)備和準(zhǔn)備儀表板。
單擊上圖所示的“創(chuàng)建事物”后。我們遵循了這個項目中的步驟:
第1步-設(shè)備-將設(shè)備與我們的事物相關(guān)聯(lián)
第2步-添加變量
第3步-更改網(wǎng)絡(luò)設(shè)置
第4步-編輯草圖,連接到串行監(jiān)視器
第5步-準(zhǔn)備儀表板
第6步-從發(fā)送到云端的板上獲取數(shù)據(jù)并導(dǎo)出
第1步-設(shè)備
第一步是單擊并選擇設(shè)備。
可以關(guān)聯(lián)以前在IoT云中使用的任何設(shè)備,也可以設(shè)置新設(shè)備。
對于這個項目,我們將設(shè)備ArduinoMKRGSM1400與Thing相關(guān)聯(lián),但可以使用任何其他板,例如ArduinoMKRWiFI1010或NodeMCU。
第2步-變量
第二步是添加變量:
單擊添加變量后,您需要選擇變量名稱、類型、權(quán)限、更新策略和閾值。在這個項目中,創(chuàng)建了5個變量:
濕度——在儀表板上存儲和顯示相對濕度值
溫度-在儀表板上存儲和顯示室溫
msg_Attendance–顯示學(xué)生出勤、姓名和時間
msgTempHum–顯示溫度和濕度以及任何警告
led-此LED用于快速故障排除以檢查板/云連接
變量權(quán)限可以是:
讀寫——變量既可以作為輸入也可以作為輸出,數(shù)據(jù)可以從設(shè)備發(fā)送到云端,反之亦然
只讀——變量只能作為輸出,數(shù)據(jù)只能從設(shè)備發(fā)送到云端
變量更新策略可以是:
OnChange:只要值的變化大于或等于設(shè)置的閾值,變量就會更新到云端
定期:每次經(jīng)過設(shè)置的秒數(shù)時,變量將更新到云端
該項目中使用的基本變量類型是:
布爾值-真或假(LED)
浮點(diǎn)數(shù)-帶小數(shù)的數(shù)字(溫度和濕度)
字符串-單詞和句子(msg_Attendance和msgTempHum)
第3步-網(wǎng)絡(luò)
設(shè)置好所有變量后,第三步是在configureNetwork中添加網(wǎng)絡(luò)憑據(jù)
在這個項目中,我們使用了具有如下憑據(jù)的ArduinoSIM卡:
如果您使用的是Wi-Fi設(shè)備,網(wǎng)絡(luò)配置會有所不同。本地Wi-Fi名稱不得包含空格。
第4步-草圖
一小部分代碼由ArduinoIoTCloud根據(jù)前三個步驟中添加的信息自動更新。您可以編輯草圖,完整代碼顯示在本頁底部。
檢查串行監(jiān)視器選項卡以排除連接故障。如果未連接到云端,我建議使用計算機(jī)中的本地ArduinoIDE并查看串行監(jiān)視器上的消息。
第5步-儀表板
儀表板是物聯(lián)網(wǎng)云設(shè)置的最后一部分,我們可以單擊在儀表板選項卡中構(gòu)建儀表板:
要填充我們的儀表板,我們需要添加小部件。
然后我們將一個變量鏈接到設(shè)置中的小部件。在這個項目中,我們添加了七個小部件,LED按鈕、濕度和溫度計、濕度和溫度圖表、溫度和濕度消息以及考勤消息。
執(zhí)行上述步驟的另一種方法是添加一個東西(這個項目的東西叫做SIM):
然后從Thing中選擇變量:
有兩種類型的儀表板視圖:移動視圖
和桌面視圖:
第6步-下載歷史數(shù)據(jù)
可以使用儀表板(i)上的“下載歷史數(shù)據(jù)”選項從云中導(dǎo)出數(shù)據(jù)。
下載歷史數(shù)據(jù)可以選擇我們要下載的變量和時間段。
您可以查看通過電子郵件接收并下載為CSV文件的考勤數(shù)據(jù)示例。
readme.txt文件包含變量名稱、請求的時間段和希望我們“玩得開心!”的消息:
-
RFID
+關(guān)注
關(guān)注
388文章
6155瀏覽量
237960 -
考勤系統(tǒng)
+關(guān)注
關(guān)注
0文章
40瀏覽量
11215
發(fā)布評論請先 登錄
相關(guān)推薦
評論