作為一名教師,傳統(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)境太熱或太冷,很難聽課。為了實(shí)現(xiàn)有效的學(xué)習(xí),應(yīng)保持教室內(nèi)正確的物理環(huán)境。該項(xiàng)目將使用相對(duì)濕度和溫度傳感器(DHT11)來監(jiān)控溫度和濕度,并在值超出范圍時(shí)發(fā)出通知。
庫(kù)和定義
在開始代碼之前,需要將庫(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()開始采集。
調(diào)用一些ArduinoIoTCloud函數(shù)來初始化屬性、開始連接、設(shè)置調(diào)試消息級(jí)別并打印任何調(diào)試信息。
主要功能-循??環(huán)
Arduino中的loop()函數(shù)包括SPI通信的開始和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)換為大寫,以便與存儲(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ā)送消息。這可以通過執(zhí)行器(打開或關(guān)閉空調(diào))或真實(shí)教室中的警報(bào)來實(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í)別通過USB連接到計(jì)算機(jī)的板。
進(jìn)入網(wǎng)頁(yè)編輯器頁(yè)面后,我們可以看到板已連接/斷開,編輯我們的代碼并在完成后上傳。
但是,還有其他兩個(gè)選項(xiàng)可用:
經(jīng)典離線ArduinoIDE1.8.13(集成開發(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)限可以是:
讀寫——變量既可以作為輸入也可以作為輸出,數(shù)據(jù)可以從設(shè)備發(fā)送到云端,反之亦然
只讀——變量只能作為輸出,數(shù)據(jù)只能從設(shè)備發(fā)送到云端
變量更新策略可以是:
OnChange:只要值的變化大于或等于設(shè)置的閾值,變量就會(huì)更新到云端
定期:每次經(jīng)過設(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í)間段。
您可以查看通過電子郵件接收并下載為CSV文件的考勤數(shù)據(jù)示例。
readme.txt文件包含變量名稱、請(qǐng)求的時(shí)間段和希望我們“玩得開心!”的消息:
-
RFID
+關(guān)注
關(guān)注
392文章
6506瀏覽量
243360 -
考勤系統(tǒng)
+關(guān)注
關(guān)注
0文章
41瀏覽量
11432
發(fā)布評(píng)論請(qǐng)先 登錄
RFID系統(tǒng):原理、應(yīng)用與行業(yè)深度解析

智慧校園考勤 SI24R2E方案資料
一招解決多地區(qū)無感考勤的問題
人臉識(shí)別門禁考勤設(shè)備有哪些種類?
東集RFID讀寫器有什么用
RFID在圖書館自動(dòng)化中的應(yīng)用

有源RFID SI24R2-------校園學(xué)生考勤
如何利用RFID技術(shù)提升固定資產(chǎn)管理效率?

無感人臉識(shí)別考勤解決方案:如何用科技實(shí)現(xiàn)考勤的無感化、智能化

利用RFID技術(shù)打造智能耗材管理系統(tǒng)新方案
一文看懂RFID電子標(biāo)簽的特點(diǎn)及應(yīng)用

利用PCM5142的minidsp制作一個(gè)均衡器,遇到的兩個(gè)疑問求解答
賦能智能制造工業(yè)RFID技術(shù)不可或缺
物聯(lián)網(wǎng)系統(tǒng)中非接觸近場(chǎng)通信方案RFID技術(shù)詳解(二)_RFID標(biāo)簽篇

一文簡(jiǎn)單介紹射頻識(shí)別RFID

評(píng)論