自 Covid-19 爆發(fā)以來,紅外溫度計被用作篩查工具,對機場、火車站和其他擁擠場所的人員進行掃描。這些掃描被用于識別潛在的 Covid-19 患者。政府規(guī)定在進入辦公室、學(xué)校或任何其他擁擠的地方之前必須對每個人進行掃描。
因此,在本教程中,我們將使用帶有 Arduino 的非接觸式溫度傳感器構(gòu)建一個基于 RFID 的非接觸式溫度監(jiān)測系統(tǒng)。當(dāng)員工掃描 RFID 卡時,它將使用非接觸式紅外溫度計測量員工的體溫,并將該員工的姓名和溫度直接記錄到 Excel 表中。我們將使用 Arduino Nano、MLX90614、EM18 RFID 閱讀器和超聲波傳感器來構(gòu)建這個項目。超聲波傳感器用于計算溫度計與人之間的距離。溫度計僅在距離小于 25 厘米時測量溫度。它類似于基于RFID的考勤系統(tǒng),它還記錄每個人的體溫。
所需組件
Arduino納米
EM-18 射頻識別模塊
MLX90614 非接觸式溫度傳感器
超聲波傳感器
面包板
跳線
EM18 RFID閱讀器模塊
用于讀取 125 kHz 標(biāo)簽的廣泛使用的 RFID 閱讀器之一是 EM-18 RFID 閱讀器。這種低成本的 RFID 閱讀器模塊具有低功耗、小尺寸和易于使用的特點。EM-18閱讀器模塊可以通過RS232和WEIGAND26兩種通訊接口提供輸出。
EM18 RFID 閱讀器具有發(fā)送無線電信號的收發(fā)器。當(dāng) RFID 標(biāo)簽進入發(fā)射器信號范圍時,該信號會到達卡內(nèi)的轉(zhuǎn)發(fā)器。標(biāo)簽從閱讀器模塊產(chǎn)生的電磁場中獲取能量。然后轉(zhuǎn)發(fā)器將無線電信號轉(zhuǎn)換為可用的電力形式。接通電源后,應(yīng)答器會將所有信息(例如特定 ID)以 RF 信號的形式傳輸?shù)?RFID 模塊。然后這個數(shù)據(jù)使用UART通信發(fā)送到微控制器。
MLX90614 紅外測溫儀
在繼續(xù)本教程之前,了解 MLX90614 傳感器的工作原理非常重要。市場上有許多溫度傳感器,我們一直在將 DHT11 傳感器 和 LM35 廣泛用于許多必須測量大氣濕度或溫度的應(yīng)用。
我們之前在紅外熱槍中使用過這種傳感器,它可以感應(yīng)特定物體(不是環(huán)境)的溫度,而無需直接接觸物體。在這里,我們再次使用相同的傳感器來計算物體的溫度。MLX90614 就是這樣一種傳感器,它使用 IR 能量來檢測物體的溫度。
MLX90614 傳感器由邁來芯微電子集成系統(tǒng)制造,它內(nèi)置了兩個器件,一個是紅外熱電堆探測器(傳感單元),另一個是信號調(diào)理DSP器件(計算單元)。它基于 Stefan-Boltzmann 定律 工作,該定律指出所有物體都會發(fā)射 IR 能量,并且這種能量的強度將與該物體的溫度成正比。傳感器中的傳感單元測量目標(biāo)物體發(fā)射了多少紅外能量,計算單元使用 17 位內(nèi)置 ADC 將其轉(zhuǎn)換為溫度值,并通過I2C 通信輸出數(shù)據(jù) 協(xié)議。傳感器測量物體溫度和環(huán)境溫度以校準(zhǔn)物體溫度值。
電路原理圖
使用 Arduino 的基于 RFID 的非接觸式溫度傳感器的電路圖如下所示:
如電路圖所示,連接非常簡單,因為我們將它們用作模塊,我們可以直接在面包板上構(gòu)建它們。當(dāng)有人掃描標(biāo)簽時,連接到 EM18 閱讀器模塊的 BUZ 引腳的 LED 變?yōu)楦唠娖健FID模塊向控制器串行發(fā)送數(shù)據(jù);因此 RFID 模塊的發(fā)送器引腳連接到 Arduino 的接收器引腳。連接在下表中進一步分類:
代碼說明
我們必須編寫一個 Arduino 代碼,該代碼可以從超聲波傳感器、MLX90614、EM18 RFID 讀取器模塊讀取數(shù)據(jù),并將人的姓名和溫度發(fā)送到 Excel 表。
頁面末尾給出了這種非接觸式體溫監(jiān)測的完整代碼。這里將用小片段解釋相同的程序。
像往常一樣,通過包含所有必需的庫來啟動代碼。此處 Wire 庫用于使用 I2C 協(xié)議進行通信,Adafruit_MLX90614.h庫用于讀取 MLX90614 傳感器數(shù)據(jù)。
#include
?
#include
?
然后我們定義我們已經(jīng)建立連接的超聲波傳感器的引腳
?
常量 int trigPin = 5; 常量 int echoPin = 6;
?
之后,定義變量來存儲 RFID 模塊、超聲波傳感器和 MLX90614 傳感器數(shù)據(jù)。
?
持續(xù)時間長; 整數(shù)距離; 字符串 RfidReading; 浮動 TempReading;
?
在void setup()函數(shù)中,我們初始化用于調(diào)試的串行監(jiān)視器和 MLX90614 溫度傳感器。此外,將 Trig 和 Echo 引腳設(shè)置為輸出和輸入引腳。
?
無效設(shè)置() { 序列號.開始(9600);// 初始化與串行監(jiān)視器的串行通信 pinMode(trigPin,輸出); pinMode(echoPin,輸入); mlx.開始(); Initialize_streamer(); }
?
在void loop()函數(shù)內(nèi)部,計算人與傳感器之間的距離,如果距離小于或等于 25cm,則調(diào)用reader()函數(shù)掃描標(biāo)簽。
?
無效循環(huán)() { 數(shù)字寫入(trigPin,低); 延遲微秒(2); 數(shù)字寫入(trigPin,高); 延遲微秒(10); 數(shù)字寫入(trigPin,低); 持續(xù)時間=脈沖輸入(回聲針,高); 距離 = 持續(xù)時間 * 0.0340 / 2; 如果(距離 <= 25){ 讀者(); }
?
void reader()函數(shù)用于讀取 RFID 標(biāo)簽卡。一旦卡靠近讀卡器模塊,讀卡器模塊就會讀取串行數(shù)據(jù)并將其存儲在輸入變量中。
?
無效的讀者() { 如果(串行。可用()) { 計數(shù) = 0; 而(Serial.available() && 計數(shù) < 12) { 輸入[計數(shù)] = Serial.read(); 計數(shù)++; 延遲(5);
?
在接下來的幾行中,將掃描的卡片數(shù)據(jù)與預(yù)定義的標(biāo)簽 ID 進行比較。如果標(biāo)簽 ID 與掃描的卡匹配,則讀取人員的溫度并將人員的溫度和姓名發(fā)送到 Excel 表。
?
如果(輸入[計數(shù)]==標(biāo)簽[計數(shù)]) 標(biāo)志 = 1; 別的 標(biāo)志= 0; 計數(shù)++; RfidReading = "Ashish"; } } 如果(標(biāo)志 == 1) { temp_read(); Write_streamer(); }
?
在temp_read()函數(shù)中,以攝氏度讀取 MLX90614 傳感器數(shù)據(jù)并將其存儲在“TempReading”變量中。?
?
無效臨時讀取() { TempReading = mlx.readObjectTempC();}
?
硬件和軟件準(zhǔn)備就緒后,就可以將程序上傳到您的 Arduino Nano 板上了。一旦您的程序被上傳,超聲波傳感器就會開始計算距離。當(dāng)計算距離小于 40 厘米時,它會讀取溫度和卡片。
從 Arduino 控制器將傳感器數(shù)據(jù)存儲到 Excel 表中
現(xiàn)在要將數(shù)據(jù)發(fā)送到 Excel 表,我們將使用PLX-DAQ。它是一個 Excel 插件軟件,可幫助您將 Arduino 中的值直接寫入筆記本電腦或 PC 上的 Excel 表中。使用鏈接下載文件。下載后解壓文件并點擊.exe文件進行安裝。它將在您的桌面上創(chuàng)建一個名為PLS-DAQ的文件夾。
現(xiàn)在從桌面文件夾中打開“PLX-DAQ 電子表格”文件。如果您的 Excel 上禁用了宏,您將看到如下圖所示的安全塊:
單擊選項-》啟用內(nèi)容-》完成-》確定以啟用宏。在此之后,您將看到以下屏幕:
現(xiàn)在選擇波特率“9600”和你的Arduino連接的端口,然后點擊連接開始數(shù)據(jù)流。您的值應(yīng)該開始被記錄,如下圖所示。
#include
#include
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
字符標(biāo)簽[] =“180088FECCA2”;// 替換為您自己的標(biāo)簽 ID
字符輸入[12];// 一個變量來存儲正在呈現(xiàn)的標(biāo)簽 ID
整數(shù)計數(shù) = 0;// 在 input[] 字符數(shù)組中導(dǎo)航的計數(shù)器變量
布爾標(biāo)志 = 0; // 一個存儲標(biāo)簽匹配狀態(tài)的變量
常量 int trigPin = 5;
常量 int echoPin = 6;
持續(xù)時間長;
整數(shù)距離;
字符串 RfidReading;
浮動 TempReading;
無效設(shè)置()
{
序列號.開始(9600);// 初始化與串行監(jiān)視器的串行通信
pinMode(trigPin,輸出);
pinMode(echoPin,輸入);
mlx.開始();
Initialize_streamer();
}
無效循環(huán)()
{
數(shù)字寫入(trigPin,低);
延遲微秒(2);
數(shù)字寫入(trigPin,高);
延遲微秒(10);
數(shù)字寫入(trigPin,低);
持續(xù)時間=脈沖輸入(回聲針,高);
距離 = 持續(xù)時間 * 0.0340 / 2;
// Serial.println("距離");
//Serial.println(距離);
如果(距離 <= 40){
讀者();
}
延遲(1000);
}
無效的讀者()
{
if(Serial.available())// 檢查RFID閱讀器串行緩沖區(qū)中是否有傳入數(shù)據(jù)。
{
計數(shù) = 0; // 將計數(shù)器重置為零
而(Serial.available() && 計數(shù) < 12)
{
輸入[計數(shù)] = Serial.read(); // 讀取 1 個字節(jié)的數(shù)據(jù)并將其存儲在 input[] 變量中
計數(shù)++;// 遞增計數(shù)器
延遲(5);
}
如果(計數(shù) == 12)//
{
計數(shù)=0;// 將計數(shù)器變量重置為 0
標(biāo)志 = 1;
而(計數(shù)<12 && 標(biāo)志!=0)
{
如果(輸入[計數(shù)]==標(biāo)簽[計數(shù)])
標(biāo)志 = 1; // 每次值匹配時,我們將標(biāo)志變量設(shè)置為 1
別的
標(biāo)志= 0;
計數(shù)++;// 增加 i
RfidReading = "Ashish";
}
}
if(flag == 1) // 如果 flag 變量為 1,則表示標(biāo)簽匹配
{
//Serial.println("允許訪問!");
temp_read();
Write_streamer();
}
別的
{
// Serial.println("拒絕訪問"); // 不正確的標(biāo)簽信息
}
for(count=0;count<12;count++)
{
輸入[計數(shù)] = 'F';
}
計數(shù) = 0; // 重置計數(shù)器變量
}
}
無效臨時讀取()
{
TempReading = mlx.readObjectTempC();
// Serial.println(sensorReading1);
// Serial.print(",");
//Serial.print("環(huán)境");
//Serial.print(mlx.readAmbientTempC());
//Serial.print("C");
// Serial.print("目標(biāo)");
// Serial.print(mlx.readObjectTempC());
// Serial.print("C");
// 延遲(1000);
}
無效 Initialize_streamer()
{
Serial.println("CLEARDATA"); //清除以前項目留下的任何數(shù)據(jù)
Serial.println("標(biāo)簽、日期、時間、溫度、名稱"); //總是寫LABEL,表示它是第一行
}
無效的 Write_streamer()
{
// Serial.print("DATA"); //總是寫“DATA”來表示下面的數(shù)據(jù)
// Serial.print(","); //使用“,”移動到下一列
// Serial.print("DATE"); //在Excel中存儲日期
// Serial.print(","); //使用“,”移動到下一列
// Serial.print("TIME"); //在Excel中存儲日期
// Serial.print(","); //使用“,”移動到下一列
Serial.print(RfidReading); //在Excel中存儲日期
序列號.print(","); //使用“,”移動到下一列
Serial.print(TempReading); //在Excel中存儲日期
序列號.print(","); //使用“,”移動到下一列
序列號.println(); //行尾移動到下一行
}
?
評論