自電暈爆發(fā)以來(lái),很難確定哪些人受到了病毒的影響。為了解決這個(gè)問(wèn)題,通常使用溫度設(shè)備來(lái)測(cè)量體溫。這些設(shè)備具有非接觸式紅外溫度傳感器,無(wú)需任何物理接觸即可測(cè)量體溫。
市場(chǎng)上有許多測(cè)溫槍?zhuān)珱](méi)有一個(gè)會(huì)在溫度超過(guò)特定限制時(shí)向上級(jí)部門(mén)發(fā)出任何警報(bào)或電子郵件通知以采取適當(dāng)?shù)男袆?dòng)。在這個(gè)項(xiàng)目中,如果任何特定人的溫度超過(guò)設(shè)定值,我們將連接一個(gè)IR溫度傳感器并發(fā)送帶有該人圖像的電子郵件警報(bào)。
在這個(gè)項(xiàng)目中,我們將利用物聯(lián)網(wǎng)的力量,我們將使用RaspberryPi、MLX90614和PiCamera構(gòu)建一個(gè)帶有電子郵件警報(bào)的溫度監(jiān)控設(shè)備。
所需組件
這里我們使用的是Raspberry Pi 3 Raspbian OS。所有基本的硬件和軟件要求都在前面討論過(guò),您可以在Raspberry Pi Introduction和Raspberry PI LED Blinking中查找入門(mén),除了我們需要:
Raspberry Pi 3(任何版本都可以)。
派相機(jī)。
MLX90614 - 紅外溫度傳感器。
連接電線。
面包板。
電源 (5V,2A/3A)
如果我們將項(xiàng)目分成幾部分,這個(gè)項(xiàng)目很簡(jiǎn)單。
理解和連接 MLX90614 與 Raspberry pi。
開(kāi)始使用 Pi 相機(jī)。
使用 Raspberry pi 設(shè)置 SMTP 電子郵件。
最終代碼開(kāi)發(fā)和理解。
Raspberry Pi: Raspberry Pi 是一種信用卡大小的計(jì)算機(jī),專(zhuān)為教育目的而設(shè)計(jì)。由于其價(jià)格和驚人的規(guī)格(如板載 wifi、藍(lán)牙和可編程 GPIO 接頭)以及創(chuàng)建應(yīng)用程序的可能選項(xiàng)數(shù)量,它被開(kāi)發(fā)人員和電子愛(ài)好者采用。您可以在Raspberry Pi Introduction和Raspberry PI LED Blinking中查找它以開(kāi)始啟動(dòng)過(guò)程。
MLX90614 IR 溫度傳感器:市場(chǎng)上有許多傳感器可以為我們提供溫度和濕度。該傳感器與所有其他傳感器的不同之處在于它可以為我們提供物體溫度,而其他傳感器則提供環(huán)境溫度。我們已將 DHT11 傳感器和LM35廣泛用于許多必須測(cè)量大氣濕度或溫度的應(yīng)用。
但是這里為了制作不需要物理接觸并且可以測(cè)量物體溫度而不是環(huán)境溫度的溫度槍?zhuān)覀兪褂没?IR 的MLX90614。要了解有關(guān)紅外線和紅外線傳感器電路的更多信息,請(qǐng)點(diǎn)擊鏈接。
MLX90614 傳感器由邁來(lái)芯微電子集成系統(tǒng)制造,它利用紅外熱電堆傳感器的原理進(jìn)行溫度測(cè)量。這些傳感器由兩個(gè)內(nèi)部嵌入的單元組成,以提供溫度輸出。第一個(gè)單元是具有紅外探測(cè)器的傳感單元,其后是第二個(gè)單元,它使用數(shù)字信號(hào)處理 (DSP) 執(zhí)行數(shù)據(jù)計(jì)算。該傳感器根據(jù)Stefan-Boltzmann 定律工作,該定律根據(jù)溫度解釋黑體輻射的功率。簡(jiǎn)單來(lái)說(shuō),任何物體都會(huì)發(fā)射紅外能量,其強(qiáng)度將與該物體的溫度成正比。MLX90614 傳感器將計(jì)算值轉(zhuǎn)換為17 位 ADC并且可以使用I2C 通信協(xié)議進(jìn)行訪問(wèn)。這些傳感器測(cè)量環(huán)境溫度以及物體溫度,分辨率校準(zhǔn)為 0.02°C。要了解有關(guān) MLX90614 傳感器特性的更多信息,請(qǐng)參閱MLX90614 數(shù)據(jù)表。
MLX90614的特點(diǎn):
工作電壓:3.6V 至 5V
環(huán)境溫度范圍:-40°C 至 125°C
物體溫度范圍:-70°C 至 -382.2°C
分辨率/校準(zhǔn):0.02°C
17 位 ADC。
I2C 通信。
首先,我們將下載成功連接 MLX90614 所需的庫(kù)和包。
第1 步:從 Raspberry Pi 設(shè)置啟用 I2C。
鍵入sudo raspi-config然后轉(zhuǎn)到接口選項(xiàng)。
轉(zhuǎn)到 I2C 選項(xiàng)并啟用它。
Step2:到https://pypi.org/project/PyMLX90614/#files下載MLX90614的包/庫(kù),然后右鍵復(fù)制鏈接地址。
轉(zhuǎn)到 RPI 終端并鍵入 wget 并粘貼復(fù)制的鏈接,如下所示。
wget https://files.pythonhosted.org/packages/67/8a/443af31ff99cca1e30304dba28a60d3f07d247c8d410822411054e170c9c/PyMLX90614-0.0.3.tar.gz
它將以 zip 文件名‘PyMLX90614-0.0.3.tar.gz’下載庫(kù)。然后提取擴(kuò)展名為tar -xf文件名的文件夾或使用以下命令執(zhí)行相同操作。
tar -xf PyMLX90614-0.0.3.tar.gz
然后我們需要使用以下命令安裝一些必需的軟件包。
sudo apt-get install python-setuptools
sudo apt-get install -y i2c-tools
然后使用cd PyMLX90614-0.0.3/轉(zhuǎn)到提取的文件夾 并運(yùn)行命令。
須藤 python setup.py 安裝
完成這些步驟后,只需使用下面給出的電路將 MLX90614 傳感器與 Raspberry pi連接起來(lái)。下面的Raspberry Pi MLX90614 電路是使用 Fritzing 設(shè)計(jì)的。
如果連接和安裝正確完成,我們可以使用命令 i2cdetect -y 1檢查是否在 I2C 總線上獲取傳感器地址值。
如果一切正常,我們可以在終端上看到以下輸出。
0x5A代表數(shù)據(jù)表中提到的傳感器地址。下面給出了相同的數(shù)據(jù)表片段。
現(xiàn)在,我們將運(yùn)行一個(gè)新的文件名mlxread.py并編寫(xiě)一個(gè)示例程序來(lái)檢查來(lái)自傳感器的數(shù)據(jù)。下面給出了相同的代碼。
從 smbus2 導(dǎo)入 SMBus
?
從 mlx90614 導(dǎo)入 MLX90614 總線 = SMBus(1) 傳感器 = MLX90614(總線,地址 = 0x5A) 打印“環(huán)境溫度:”,sensor.get_ambient() 打印“物體溫度:”,sensor.get_object_1() 總線.close()
?
創(chuàng)建文件后,我們將使用 python 擴(kuò)展名python mlxread.py 運(yùn)行它。 我收到的輸出如下所示。我多次運(yùn)行該程序以檢查當(dāng)我將手移到它上面時(shí)值是否發(fā)生變化。
哇,我們已經(jīng)成功地將 MLX90614 與我們的 Raspberry Pi 連接起來(lái),您可以從上圖中確認(rèn)。
Pi 相機(jī)與 Raspberry Pi 的接口
第1 步:從 Raspberry Pi 設(shè)置啟用相機(jī)。
鍵入sudo raspi-config然后轉(zhuǎn)到接口選項(xiàng)。
轉(zhuǎn)到相機(jī)并啟用相機(jī)。
現(xiàn)在,如下圖所示連接攝像頭模塊。
Step2:為了檢查相機(jī)是否連接正確,我們拍攝一張測(cè)試圖像并將其保存在我們的桌面(我們使用的是全 GUI Raspbian OS 版本)
raspistill -o 桌面/image.jpg
這將使您的相機(jī)能夠單擊名稱(chēng)為 image 的圖片并將其存儲(chǔ)在桌面上。
使用 Raspberry Pi 設(shè)置 SMTP 電子郵件
在本節(jié)中,我們將了解如何設(shè)置 GMAIL 帳戶以在溫度超過(guò)預(yù)定義的設(shè)置值時(shí)發(fā)送警報(bào)郵件。
SMTP 是一種簡(jiǎn)單郵件傳輸協(xié)議,它是一種應(yīng)用層協(xié)議,負(fù)責(zé)使用 TCP/IP 進(jìn)行電子郵件服務(wù)。它提供發(fā)送和接收電子郵件消息的能力,由Internet 工程任務(wù)組(IETF) 管理。
本教程僅適用于GMAIL 帳戶,為避免任何可能的錯(cuò)誤,建議您使用新的 Gmail 帳戶。
默認(rèn)情況下,Google 不允許用戶使用 python 腳本發(fā)送電子郵件。為了使這項(xiàng)工作,我們必須通過(guò)進(jìn)入帳戶設(shè)置來(lái)啟用一些不太安全的應(yīng)用程序。
步驟1:轉(zhuǎn)到右上角并點(diǎn)擊我的管理您的谷歌帳戶。
步驟2:點(diǎn)擊安全并向下滾動(dòng)到“不太安全的應(yīng)用程序訪問(wèn)”。
步驟 3:?jiǎn)⒂貌惶踩膽?yīng)用程序。
第4 步:重復(fù)使用其他電子郵件 ID 以從 python 腳本發(fā)送/接收電子郵件。
Step5:下載所需的包。
sudo apt-get install ssmtp
sudo apt-get install mailutils
如果您在通過(guò)復(fù)制粘貼運(yùn)行命令時(shí)遇到錯(cuò)誤,請(qǐng)手動(dòng)鍵入它。
Step6:所有庫(kù)安裝完成后,我們需要在ssmtp.conf 文件中進(jìn)行更改,我們必須在其中輸入發(fā)件人的電子郵件詳細(xì)信息
轉(zhuǎn)到sudo nano /etc/ssmtp/ssmtp.conf
向下滾動(dòng)到最后并粘貼這個(gè),
mailhub=smtp.gmail.com:587
AuthUser=你的電子郵件地址
AuthPass=YourEmailPassword
使用STARTTLS=YES
使用TLS=YES
我還分享了我的終端截圖供您參考。
我只是使用面包板進(jìn)行連接,當(dāng) MLX90614 和相機(jī)連接時(shí),我的硬件設(shè)置看起來(lái)像他的。
用于 Pi 的 Python 代碼從 MLX90614 讀取溫度并發(fā)送帶圖片的電子郵件
python 程序執(zhí)行所有必要的操作來(lái)讀取傳感器數(shù)據(jù),將其與閾值進(jìn)行比較,授權(quán)電子郵件,然后發(fā)送附有圖像的電子郵件。首先,我們需要庫(kù)、發(fā)件人和收件人電子郵件聲明。電子郵件可以通過(guò) smtplib 發(fā)送,但我們只想用主題、正文和其他附件來(lái)組織電子郵件,這是在多用途 Internet 郵件擴(kuò)展 (MIME) 的幫助下完成的。完整的代碼可以在本頁(yè)底部找到。
?
將 RPi.GPIO 導(dǎo)入為 gpio 導(dǎo)入相機(jī) 進(jìn)口時(shí)間 導(dǎo)入 smtplib 從 email.MIMEMultipart 導(dǎo)入 MIMEMultipart 從 email.MIMEText 導(dǎo)入 MIMEText 從 email.MIMEBase 導(dǎo)入 MIMEBase 從電子郵件導(dǎo)入編碼器 從 email.mime.image 導(dǎo)入 MIMEImage 從 smbus2 導(dǎo)入 SMBus 從 mlx90614 導(dǎo)入 MLX90614
?
之后,我們定義發(fā)件人電子郵件地址、收件人電子郵件地址、電子郵件主題、正文和附件消息。
?
fromaddr = "test2718test@gmail.com" # 相應(yīng)地更改電子郵件地址 toaddr = "electrofunedu@gmail.com" 郵件 = MIMEMultipart() 郵件['發(fā)件人'] = fromaddr 郵件['收件人'] = toaddr mail['Subject'] = "溫度值超出警報(bào)" body = "請(qǐng)查找附件圖片"
?
然后,我們創(chuàng)建一個(gè)函數(shù),我們可以使用它發(fā)送電子郵件。
?
定義發(fā)送郵件(數(shù)據(jù)): mail.attach(MIMEText(body, 'plain')) 打印數(shù)據(jù) dat='%s.jpg'%data 打印數(shù)據(jù) 附件=打開(kāi)(dat,'rb') 圖像=MIMEImage(附件。讀取()) 附件.close() 郵件附件(圖片) 服務(wù)器 = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, "test12345@") 文本 = mail.as_string() server.sendmail(fromaddr, toaddr, text) server.quit()
?
然后,我們創(chuàng)建一個(gè)函數(shù)來(lái)捕獲通過(guò)電子郵件發(fā)送的圖像,并將圖像與數(shù)據(jù)和時(shí)間一起存儲(chǔ)。
?
定義捕獲圖像(): 數(shù)據(jù)= time.strftime("%d_%b_%Y|%H:%M:%S") camera.start_preview() 時(shí)間.sleep(5) 打印數(shù)據(jù) camera.capture('%s.jpg'%data) camera.stop_preview() 時(shí)間.sleep(1) 發(fā)送郵件(數(shù)據(jù))
?
然后,我們使用 PiCamera 進(jìn)行一些設(shè)置。
?
相機(jī) = picamera.PiCamera() camera.rotation=0 camera.awb_mode = '自動(dòng)' 相機(jī).亮度=55
?
最后,我們有一個(gè) while(1) 循環(huán),它將無(wú)限運(yùn)行。它將從 MLX90614 溫度傳感器讀取數(shù)據(jù),如果溫度超過(guò)設(shè)定值,則調(diào)用capture_image()函數(shù),然后調(diào)用sendMail(data)函數(shù)通過(guò)電子郵件發(fā)送圖像捕獲。
使用 PI 測(cè)量溫度和發(fā)送郵件警報(bào)
硬件和軟件準(zhǔn)備好后,只需在您的 pi 上運(yùn)行 python 代碼(如下所示)。它將打印從傳感器讀取的溫度值,如下所示。
如果物體溫度超過(guò)閾值溫度,那么我們的 python 程序?qū)南鄼C(jī)中獲取圖像,將其保存在樹(shù)莓派上,并通過(guò)電子郵件共享。從樹(shù)莓派發(fā)送的電子郵件示例如下所示。
將 RPi.GPIO 導(dǎo)入為 gpio
導(dǎo)入相機(jī)
進(jìn)口時(shí)間
導(dǎo)入 smtplib
從 email.MIMEMultipart 導(dǎo)入 MIMEMultipart
從 email.MIMEText 導(dǎo)入 MIMEText
從 email.MIMEBase 導(dǎo)入 MIMEBase
從電子郵件導(dǎo)入編碼器
從 email.mime.image 導(dǎo)入 MIMEImage
從 smbus2 導(dǎo)入 SMBus
從 mlx90614 導(dǎo)入 MLX90614
fromaddr = "test2718test@gmail.com" # 相應(yīng)地更改電子郵件地址
toaddr = "electrofunedu@gmail.com"
郵件 = MIMEMultipart()
郵件['發(fā)件人'] = fromaddr
郵件['收件人'] = toaddr
mail['Subject'] = "溫度值超出警報(bào)"
body = "請(qǐng)查找附件圖片"
數(shù)據(jù)=""
定義發(fā)送郵件(數(shù)據(jù)):
mail.attach(MIMEText(body, 'plain'))
打印數(shù)據(jù)
dat='%s.jpg'%data
打印數(shù)據(jù)
附件=打開(kāi)(dat,'rb')
圖像=MIMEImage(附件。讀取())
附件.close()
郵件附件(圖片)
服務(wù)器 = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "test12345@")
文本 = mail.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
定義捕獲圖像():
數(shù)據(jù)= time.strftime("%d_%b_%Y|%H:%M:%S")
camera.start_preview()
時(shí)間.sleep(5)
打印數(shù)據(jù)
camera.capture('%s.jpg'%data)
camera.stop_preview()
時(shí)間.sleep(1)
發(fā)送郵件(數(shù)據(jù))
相機(jī) = picamera.PiCamera()
camera.rotation=0
camera.awb_mode = '自動(dòng)'
相機(jī).亮度=55
而1:
總線 = SMBus(1)
傳感器 = MLX90614(總線,地址 = 0x5A)
打印“環(huán)境溫度:”,sensor.get_ambient()
打印“物體溫度:”,sensor.get_object_1()
溫度 = sensor.get_object_1()
總線.close()
如果溫度> 34:
捕獲圖像()
時(shí)間.睡眠(0.1)
別的:
time.sleep(0.01)
評(píng)論