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