基于物聯(lián)網(wǎng)的食品監(jiān)控系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
保持食物的安全和衛(wèi)生,以保持食物新鮮和可食用,這有助于減少食物浪費(fèi)。解決這個(gè)問題的一個(gè)辦法是為儲存的食物保持合適的環(huán)境條件,以控制分解的速度。食物分解取決于不同的參數(shù),濕度、細(xì)菌和溫度等參數(shù)是影響食物分解速度的主要因素。如果儲存的溫度在40華氏度到140華氏度之間,這是一個(gè)危險(xiǎn)區(qū)域,因?yàn)樵谶@個(gè)溫度下細(xì)菌生長迅速,20分鐘內(nèi)細(xì)菌數(shù)量翻倍。同樣,食品儲藏室的濕度應(yīng)該在50-55%左右,以盡可能長時(shí)間保持食品的高質(zhì)量。
所以在這個(gè)IoT項(xiàng)目中,我們將使用NodeMCU和Arduino IDE構(gòu)建一個(gè)Food Monitoring device,來監(jiān)測和控制存儲環(huán)境的溫度和濕度。為了控制溫度,我們將使用直流電機(jī)作為冷卻裝置。使用DHT11傳感器模塊來查找溫度和濕度,使用MQ4氣體傳感器模塊來確定食品的狀態(tài)。在未來,如果需要,我們還可以使用基于物聯(lián)網(wǎng)的重量傳感器來監(jiān)控存儲區(qū)域的食物數(shù)量。
溫度、濕度和甲烷氣體的實(shí)時(shí)值將被測量并通過網(wǎng)絡(luò)發(fā)送到屏幕上顯示。如果溫度達(dá)到臨界值,我們會收到郵件警告,風(fēng)扇也會自動控制。您還可以查看這篇關(guān)于物聯(lián)網(wǎng)如何在食品行業(yè)中使用的文章,以了解食品行業(yè)可以實(shí)現(xiàn)現(xiàn)代化的其他方式。
硬件要求
?NodeMCU ESP8266
?MQ3傳感器模塊
?DHT11傳感器模塊
?BC547-BJT
?電池
?連接電線
?RPS
線路圖
這個(gè)食品監(jiān)測項(xiàng)目的完整電路圖如下圖所示。
電動機(jī)的動力由穩(wěn)壓電源提供。RPS的正極與電機(jī)的正極相連;所述電機(jī)的負(fù)極連接到BJT的集電極端。BJT的發(fā)射極端接地,BJT的基極端用限流電阻1K連接到MCU的D0引腳上。BJT的基極端與地連接有一個(gè)阻值大于限流電阻的電阻。這個(gè)電阻作為BJT的下推電阻。MCU的VCC和GND連接在電源軌的一側(cè),如下圖所示。兩個(gè)傳感器的正極和GND端子分別連接到VCC和GND電源軌上,如圖所示。氣體傳感器的A0引腳連接到MCU的A0引腳,DHT11傳感器的數(shù)據(jù)連接到MCU的D4引腳。
這里的兩個(gè)主要重要傳感器是MQ-4氣體傳感器和DHT11溫濕度傳感器。讓我們研究一下它們的細(xì)節(jié)。如果你不想要解釋,你可以直接向下滾動到這個(gè)頁面的底部來獲得這個(gè)項(xiàng)目的完整代碼。
MQ4氣體傳感器模塊
MQ4是一個(gè)氣體傳感模塊,用于測量大氣中的甲烷氣體。它含有由SnO2組成的氣敏層。SnO2對LPG、CH4、H2、CO、酒精和煙霧等氣體敏感。由于腐爛的食物會釋放出甲烷氣體(CH4), MQ4傳感器可以用來測量這種氣體,以監(jiān)測食品質(zhì)量。您還可以查看這個(gè)MQ135傳感器接口項(xiàng)目,在這個(gè)項(xiàng)目中,我們使用了一個(gè)類似的氣體傳感器,通過測量PPM來監(jiān)測空氣質(zhì)量。
與SnO2一起,傳感器由Al2O3陶瓷管,測量電極和加熱元件組成。加熱元件為傳感器的工作提供必要的工作條件。MQ4傳感器在市場上有兩種格式,模塊格式或僅傳感器格式。傳感器模塊有4個(gè)引腳,我們在項(xiàng)目中只使用3個(gè)引腳。分別是VCC、GND和A0。我們留下D0引腳,因?yàn)樗趐pm的計(jì)算中沒有用。MQ4傳感器的工作原理類似于LDR(光相關(guān)電阻)。當(dāng)甲烷氣體濃度較高時(shí),模塊的電阻減小,當(dāng)甲烷氣體濃度較低時(shí),模塊的電阻增大。
MQ4氣體傳感器內(nèi)部電路
兩個(gè)A端子都短路,兩個(gè)B端子都短路,電路中只剩下4個(gè)連接。H端子用于將電源電壓連接到加熱元件,加熱元件由鎳鉻合金制成。用于為敏感元件提供必要的工作條件。電源電壓與A或B端子一起給予H端子中的任何一個(gè)。RL是負(fù)載電阻,我們必須將其添加到傳感器中,如圖所示。如果您有傳感器模塊,請檢查PCB軌道并找到RL值并使用萬用表測量其值。
MQ4傳感器與NodeMCU ESP8266接口
在我們進(jìn)入主要項(xiàng)目之前,我們必須校準(zhǔn)MQ4傳感器,以便我們可以測量來自氣體傳感器的ppm值。將氣體傳感器與NodeMCU連接,如下圖所示。
傳感器模塊的VCC和GND引腳與NodeMCU的Vin相連。傳感器模塊的A0引腳與微控制器的A0引腳連接。
MQ4氣體傳感器的校準(zhǔn):
為了確定空氣中存在的甲烷含量,我們需要找到比值(RS/R0)。R0和RS是新鮮空氣的內(nèi)阻值。
我們將從VRL(電阻間電壓RL)中找到RS的值。通過使用微控制器,我們可以找到Rl(負(fù)載電阻)上的電壓(VRL)值。為了從VRL中找到RS,我們需要推導(dǎo)公式。圖1的等效電路如下圖所示,利用該等效電路推導(dǎo)出從VRL求RS值的公式。
RL負(fù)載上的電壓為VL = I *RL,將I代入,得到VL = (V*RL) / (RS+RL)。簡單的方程得到Rs。
從等效電路中,我們得到了這個(gè)方程
其中V為電源電壓。
計(jì)算新風(fēng)R0值:
現(xiàn)在,我們將使用RS的值和數(shù)據(jù)表中的圖表找到R0的值,如下所示。
通過查看圖表,我們可以發(fā)現(xiàn)x軸是ppm, y軸是RS/R0。求出新鮮空氣的R0/RS值。在我們的例子中,它大約是4.6。您有RS值(以前使用VRL找到),現(xiàn)在您可以使用關(guān)系R0/RS = 4.6找到R0。在我的例子中,我得到R0的值是1.9。
下面給出了計(jì)算氣體傳感器R0的Arduino程序。按照上面的電路并上傳下面的代碼。然后打開串行監(jiān)視器,獲取R0值。
我們現(xiàn)在找到的R0值是傳感器在新鮮空氣中提供的電阻。
計(jì)算甲烷(CH4)的PPM值:
當(dāng)我們發(fā)現(xiàn)R0的值時(shí),我們需要推導(dǎo)一個(gè)方程,從中我們可以使用已知的R0和RS值(由MCU讀取的值)找到ppm。要推導(dǎo)公式,首先檢查數(shù)據(jù)表中的敏感特性圖。選擇所需氣體的曲線,測量其斜率。
用公式m = (y2 - y1)/ (x2 - x1)計(jì)算斜率值。在我們的例子中
現(xiàn)在用方程y = mx+c求常數(shù)c。
取一個(gè)已知的值點(diǎn),以便于計(jì)算。X = log(1000), y = (log 1);
注:Y為(RS/R0)的比值。R0是傳感器提供的電阻,RS取決于大氣中的甲烷含量。X為被測氣體的含量,單位為ppm。
Arduino程序測量甲烷(CH4):
下面的代碼以模擬值讀取大氣中存在的甲烷含量并將模擬值轉(zhuǎn)換為數(shù)字值。利用這個(gè)數(shù)字值,我們將得到RS的值,我們之前求出的R0的值,進(jìn)一步用于求比值(RS/R0)。
DHT11傳感器模塊
DHT11傳感器模塊由電阻式濕度測量和NTC溫度測量組件以及8位微控制器組成。它保證了質(zhì)量、快速響應(yīng)、抗干擾能力和成本效益。傳感器模塊在實(shí)驗(yàn)室中進(jìn)行了預(yù)校準(zhǔn),使最終用戶可以直接在他們的項(xiàng)目中使用該傳感器。校準(zhǔn)后的數(shù)據(jù)存儲在OTP存儲器中,供傳感器內(nèi)部信號檢測過程使用。它由單線串行接口組成,用于將數(shù)據(jù)從傳感器發(fā)送到微控制器。
DHT11傳感器可作為傳感器或模塊使用。唯一的區(qū)別是,我們需要手動添加一個(gè)濾波電容和一個(gè)上拉電阻到傳感器。如果您有傳感器模塊,則不需要添加額外的組件,因?yàn)閭鞲衅髂K將內(nèi)置它們。傳感器測量范圍為0℃~ 50℃,濕度范圍為20% ~ 90%,精度為±1℃和±1%。當(dāng)涉及到傳感器與單片機(jī)之間的通信時(shí),完整的數(shù)據(jù)傳輸是40位。傳感器先發(fā)送更高的數(shù)據(jù)。數(shù)據(jù)發(fā)送的數(shù)據(jù)格式為8bit整型RH數(shù)據(jù)+8bit RH數(shù)據(jù)+ *bit T數(shù)據(jù)+8bit十進(jìn)制T數(shù)據(jù)+8bit校驗(yàn)和數(shù)據(jù)。如果數(shù)據(jù)傳輸正常,校驗(yàn)和應(yīng)為最后8bit。下圖顯示了DHT11傳感器的引腳。該傳感器非常受歡迎,我們以前在其他地方使用過DHT11,其中很少像Arduino無線氣象站,基于物聯(lián)網(wǎng)的溫濕度監(jiān)測等。
為了簡化編程,使用了庫。您可以從Arduino IDE安裝DHT11 Arduino Library。打開Arduino>草圖>包括庫>管理庫,并在搜索按鈕類型DHT11。安裝Adafruit提供的庫。
DHT11與NodeMCU ESP8266接口
由于DHT11傳感器是在實(shí)驗(yàn)室預(yù)校準(zhǔn)的,所以我們不需要對這個(gè)傳感器做任何校準(zhǔn)。將DHT11傳感器與NodeMCU連接,如下所示。
VCC、GND和Data引腳連接到微控制器的Vin、GND和D4引腳。通過在DHT11中使用Adafruit庫,我們調(diào)用了一個(gè)特殊的函數(shù),它將獲取溫度和濕度值。使用這些函數(shù)的格式是dht.readHumidity()和dht.readTemperature。這些函數(shù)返回濕度和溫度的值。我們將變量h和t聲明為浮點(diǎn)數(shù),并使用它們存儲溫度和濕度值。
如果溫度高于所需的水平,微控制器打開風(fēng)扇。如果溫度低于所需值,它將關(guān)閉風(fēng)扇
使用ThingSpeak監(jiān)控食品質(zhì)量
為了將數(shù)據(jù)發(fā)送到云端并顯示在網(wǎng)絡(luò)上,我們將使用ThingSpeak。我們已經(jīng)建立了許多ThingSpeak項(xiàng)目以前使用它與Arduino和其他板,如樹莓派,ESP8266等。如果你是新來的,你也可以檢查這個(gè)物聯(lián)網(wǎng)電池監(jiān)測,物聯(lián)網(wǎng)心跳監(jiān)測,物聯(lián)網(wǎng)庫存管理等,我們使用ThingSpeak。
從下面的步驟開始,ThingSpeak
步驟1:注冊ThingSpeak
要在ThingSpeak上創(chuàng)建你的頻道,你首先需要注冊ThingSpeak。如果你已經(jīng)有了ThingSpeak的賬戶,只需使用你的id和密碼登錄即可。
驗(yàn)證您的電子郵件ID并繼續(xù)
步驟2:創(chuàng)建新頻道
來創(chuàng)建您的新頻道。選擇“我的通道>新建通道”。
輸入詳細(xì)信息并選擇save the channel。
步驟3:-獲取API密鑰
創(chuàng)建之后,打開通道并選擇API密鑰選項(xiàng)。
記下寫API鍵。這個(gè)唯一的密鑰用于將數(shù)據(jù)從微控制器發(fā)送到網(wǎng)絡(luò)。
程序發(fā)送傳感器值到ThingSpeak
首先,您需要下載所有必需的庫。
您可以從Arduino IDE安裝這些庫。打開Arduino>草圖>包括庫>管理庫,并在搜索按鈕類型Thingspeak。安裝Mathworks提供的庫。
在這個(gè)地方,“YOUR_WRITE_API_KEY”寫下你在步驟3中記下的API密鑰,并用你的通道ID改變myChannelNumber。用您的網(wǎng)絡(luò)詳細(xì)信息替換SSID和密碼。
將數(shù)據(jù)發(fā)送到Thingspeak的格式是
通過使用這些命令,我們可以向Thingspeak發(fā)送實(shí)時(shí)值。
使用IFTTT發(fā)送郵件
要觸發(fā)電子郵件,我們首先需要注冊IFTTT網(wǎng)站。
選擇搜索按鈕,搜索Webhooks并選擇Documentation。
復(fù)制私鑰。使用此私鑰,您可以觸發(fā)電子郵件警報(bào)。
程序發(fā)送電子郵件使用IFTTT
當(dāng)溫度值超過設(shè)定值時(shí),我們的代碼將被觸發(fā)并向我們發(fā)送警告電子郵件。您可以更改發(fā)生電子郵件觸發(fā)的設(shè)定值。下面的代碼用于與IFTTT服務(wù)器建立TCP連接,為請求創(chuàng)建URL,并將該URL請求發(fā)送到服務(wù)器。
這就是監(jiān)控食品質(zhì)量的方法。溫度、濕度和甲烷值可以通過ThingSpeak從任何地方監(jiān)控。參數(shù)異常時(shí),風(fēng)扇自動開啟,并發(fā)出警告郵件。
本文編譯自iotdesignpro