基于物聯(lián)網(wǎng)的庫存管理系統(tǒng),使用稱重傳感器和NodeMCU
庫存控制是有效的庫存管理的關(guān)鍵組成部分。跟蹤你的股票可以讓你提前做好計劃和決策。如今,我們當(dāng)?shù)氐某泻痛笮凸S將貨物儲存在大貨架或巨大的倉庫中,為了了解當(dāng)前的商店/業(yè)務(wù)數(shù)量,業(yè)主必須手動數(shù)包。這個過程不僅需要時間,而且還會引入人為錯誤。在大型倉庫的情況下,情況變得非常復(fù)雜,人工定期檢查庫存變得非常困難。
這就是為什么在本教程中,我們想到在流行的NodeMCU ESP8266微控制器的幫助下建立一個基于物聯(lián)網(wǎng)和傳感器的自動庫存管理系統(tǒng),它可以自動檢測貨架上存在的貨物數(shù)量,或者可以準(zhǔn)確地提供特定貨物的重量。為了方便起見,我們將物聯(lián)網(wǎng)技術(shù)與ThingSpeak云平臺結(jié)合起來,這樣店主就可以從家里/辦公室監(jiān)控庫存。最后,我們將使用另一種流行的技術(shù),IFTTT,如果產(chǎn)品數(shù)量低于一定水平,我們會發(fā)送電子郵件。廢話不多說,我們開始吧。
我們之前使用ThingSpeak與ESP8266構(gòu)建空氣質(zhì)量監(jiān)測系統(tǒng),物聯(lián)網(wǎng)氣象站和智能路燈。您可以通過以下鏈接查看所有ThingSpeak和ESP2866相關(guān)項目。
自動庫存管理系統(tǒng)-工作
要知道庫存中可用的包的數(shù)量,我們必須知道總重量和單個包的重量。例如,如果一個包的重量是10克,而庫存貨架的總重量是100克,那么我們可以很容易地計算出貨架上可用的包的數(shù)量,方法是將總重量除以單個包的重量。在上述示例中,我們將獲得10個包。下一個問題是,如何計算或測量總重量。這個問題的答案很簡單,我們將使用稱重傳感器。我們可以測量總重量,我們可以在微控制器的幫助下進行所有必要的計算。這樣,我們就可以計算出庫存中可用的包裹數(shù)量。
現(xiàn)在,讓我們將這個值上傳到云平臺,這樣我們就可以在庫存管理軟件的幫助下,從世界任何地方監(jiān)控我們的庫存管理系統(tǒng)的狀態(tài)。在我們的項目中,我們將使用一個NodeMCU和ThingSpeak來完成所有的工作。
構(gòu)建自動化庫存管理系統(tǒng)所需的組件
用于構(gòu)建這個項目的所有硬件組件都非常通用,您可以在當(dāng)?shù)氐膼酆蒙痰暾业狡渲械拇蠖鄶?shù)。下面給出了所需組件的列表。
?NodeMCU - 1
?稱重傳感器- 1
?HX711稱重傳感器放大模塊
?128*64 OLED顯示屏
?連接電線
?中密度纖維板,硬紙板,泡沫板
?7.4伏鋰離子電池
自動庫存管理系統(tǒng)組成說明
在繼續(xù)本文之前,我們應(yīng)該了解有關(guān)所使用組件的一些細節(jié)。在本節(jié)中,我們討論了將用于構(gòu)建電路的所有組件。
NodeMCU ESP8266開發(fā)板
NodeMCU是一個基于ESP8266 Wi-Fi SoC的開源開發(fā)平臺,由Espressif Systems開發(fā)。它有一個內(nèi)置的Wi-Fi模塊,這使得它適合物聯(lián)網(wǎng)相關(guān)的應(yīng)用。這就是我們使用NodeMCU的原因。在之前的教程中,我們已經(jīng)使用NodeMCU構(gòu)建了許多其他項目。如果你想了解更酷的基于NodeMCU的項目,你可以查看這些。NodeMCU單板的外觀如下圖所示。
稱重傳感器和HX711稱重傳感器放大模塊
這個項目的關(guān)鍵部件是稱重傳感器。這是我們的稱重傳感器,如你所見,一面標(biāo)有10公斤。你可能已經(jīng)注意到在測壓元件上有一些白色的保護膠,四條不同顏色的電線出來了,我們稍后會看到下面的白色保護膠是什么。首先,這些測壓元件是由鋁塊制成的,正如你所看到的,材料的中間部分更薄,所以這一點會變形。稱重傳感器有兩邊,我們說左右兩邊。想象一下,測壓元件被固定在右邊,力被施加在左邊,這樣測壓元件就會彎曲。因此,在測壓元件的頂部和底部都會產(chǎn)生很小的變形。頂部將受到拉伸,底部將受到壓縮。鋁條左側(cè)向下彎曲。如果我們能測量這種變形,我們就能測量施加在鋁塊上的力,這就是我們要做的。
應(yīng)變計是用來測量應(yīng)變的元件。如果我們仔細看看這個組件,我們可以看到兩個連接墊,然后我們有導(dǎo)線圖案與重復(fù)偏轉(zhuǎn)。這種導(dǎo)線有固定的電阻。當(dāng)我們彎曲它時,電阻值會改變嗎?應(yīng)變片的一側(cè)安裝固定在一個地方。如果我們在鋁棒的另一邊放一個重物,這將迫使應(yīng)變計彎曲,這將導(dǎo)致阻力的變化。這是怎么發(fā)生的?應(yīng)變片的導(dǎo)電模式是由銅制成的,這種導(dǎo)線會有一定的面積和長度,所以這兩個單位會給出導(dǎo)線的電阻。導(dǎo)線的電阻與電流相反。
很明顯,如果導(dǎo)線的面積變小,通過的電子就會變少,這意味著電流變小。現(xiàn)在,如果我們增加面積,就會增加導(dǎo)體的電阻。如果對這條線施加力,就會拉伸這條線的面積,它會變小,同時,阻力也會增大。但是這種阻力變化非常小。如果我們拉伸應(yīng)變計,電阻會增加,如果我們壓縮它,電阻會變小。為了測量力,我們需要測量阻力。直接測量電阻并不總是可行的,因為變化很小。所以,我們可以很容易地測量電壓,而不是測量電阻。在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。
我們可以借助惠斯通橋。我們把應(yīng)變計放在惠斯通橋上。如果電橋是平衡的,那么在中間點的電壓應(yīng)該是零(之前我們已經(jīng)建立了一個項目,我們已經(jīng)描述了惠斯通電橋是如何工作的,如果你想了解更多關(guān)于這個主題,你可以檢查一下)。當(dāng)應(yīng)變片改變其電阻時,會使電橋失去平衡,電壓也會發(fā)生變化。這就是惠斯通電橋如何將電阻變化轉(zhuǎn)換為電壓值。
128X64 OLED顯示屏:
這種有機發(fā)光二極管(OLED)顯示屏是一種單色顯示屏,0.96英寸,像素為128×64。顧名思義,OLED顯示屏不需要背光,因為它們是led顯示屏,這就是為什么OLED顯示屏在黑暗環(huán)境中有很好的對比度。此外,該顯示器的像素是由led制成的,因此它們只有在打開時才消耗少量能量,與其他顯示器相比,OLED顯示器消耗的能量更少。它只有四個引腳,使用I2C通信協(xié)議與微控制器通信。OLED顯示器非常適合電池供電的項目,這就是我們在這里使用OLED的原因。
自動庫存管理系統(tǒng)電路圖
基于物聯(lián)網(wǎng)的自動庫存管理系統(tǒng)的完整電路圖如下所示。
庫存的電路圖非常簡單。在這里,我們將OLED顯示器連接到NodeMCU的I2C引腳,即板上的D1和D2引腳。接下來,我們將稱重傳感器連接到NodeMCU。稱重傳感器有四根電線-紅,黑,綠,白。不同廠家的顏色可能會有所不同,最好以數(shù)據(jù)表為準(zhǔn)。紅色接HX711單板的E+,黑色接E-,白色接A+,綠色接單板的A-, Dout接D5, D6接時鐘。然后將OLED顯示器和放大器的接地連接到NodeMCU的接地。OLED和負(fù)載傳感器放大器工作在5v,但是NodeMCU沒有5v引腳,所以我們必須使用5v穩(wěn)壓器。下圖顯示了面包板原型。
自動庫存管理系統(tǒng)——安裝電路的外殼
為了容納電路和庫存,我們需要做一個外殼。為此,我們使用了聚氯乙烯板材。你可以使用任何類型的材料,如中密度纖維板,泡沫板等。在這里,我使用PVC板更好的強度。首先,我從PVC板上剪下20 x 20厘米的正方形和三個20 x 5的矩形。然后,用熱熔膠和PVC剪下來的碎片,我做了一個小盒子。然后我用一個舊紙板箱作為頂部(存儲空間)的規(guī)模。你必須留出一些空間從地面到細胞,使它能夠彎曲。在測壓元件和底座之間放置螺絲螺母。我在稱重傳感器和頂部之間添加了塑料墊片。這就是我制作庫存體的方法。你可以根據(jù)自己的想法進行設(shè)計,但要記住將稱重傳感器放置在如圖所示的位置。您可以使用下面給出的圖像作為參考。
建立ThingSpeak賬戶的自動庫存管理系統(tǒng)
ThingSpeak是一個開放的數(shù)據(jù)物聯(lián)網(wǎng)分析平臺,允許您在云中聚合、可視化和分析實時數(shù)據(jù)。你可以使用ThingSpeak控制你的設(shè)備,你可以從你的設(shè)備向ThingSpeak發(fā)送數(shù)據(jù),你甚至可以創(chuàng)建實時數(shù)據(jù)的即時可視化,并使用Twitter和ThingHTTP等網(wǎng)絡(luò)服務(wù)發(fā)送警報。
首先,去Thingspeak.com注冊你的郵箱,然后點擊頻道。從那里,單擊新通道以創(chuàng)建接口。
現(xiàn)在,您將看到這樣一個選項卡,用于創(chuàng)建通道,給出名稱和描述(如果需要的話)。我們需要兩個字段來收集esp的數(shù)據(jù)(總重量和剩余件數(shù))。為此,在字段1和字段2中給出名稱“總重量”和“剩余件數(shù)”。勾選這兩個字段的復(fù)選框。另外,在表單中選中“公開”選項的復(fù)選框,最后保存通道。現(xiàn)在,您的新頻道已經(jīng)創(chuàng)建。
之后,單擊API密鑰并復(fù)制寫API密鑰。我們需要在主程序中輸入這個鍵來上傳數(shù)據(jù)到ThingSpeak云。
現(xiàn)在,我們需要在網(wǎng)站上顯示數(shù)據(jù)。為此,單擊小部件并選擇一個小部件。這里,我們需要顯示總重量和件數(shù)(數(shù)字),因此選擇數(shù)字顯示并單擊下一步?,F(xiàn)在,我們需要命名小部件。這里我寫的是“集裝箱的總重量”?,F(xiàn)在,選擇字段1(因為我們需要顯示字段1的值)。然后選擇單元,單擊“創(chuàng)建”。對第二個字段執(zhí)行相同的操作。
接下來,單擊add visualization并添加一個圖表,以圖形方式顯示數(shù)量(如果需要的話)。現(xiàn)在,我們的接口已經(jīng)準(zhǔn)備好接收數(shù)據(jù),看起來像這樣。
IFTTT設(shè)置自動電子郵件通知
在介紹部分,我們告訴過您,只要達到某個閾值,我們就會發(fā)送電子郵件。為此,我們需要建立一個IFTTT帳戶。首先,登錄ifttt.com,用你的憑證注冊。單擊位于此搜索webhooks附近的添加按鈕并選擇webhooks,給出事件名稱,并創(chuàng)建觸發(fā)器?,F(xiàn)在,您可以看到它后面的webhooks徽標(biāo)。
現(xiàn)在,點擊下一個添加按鈕,搜索“email”,選擇郵箱,根據(jù)你的意愿定制你的信息。另外,定制郵件正文。在這里,我寫了“庫存耗盡”,然后點擊完成。這里,“This”函數(shù)是webhooks服務(wù),“that”函數(shù)是email服務(wù)。
現(xiàn)在,單擊webhooks徽標(biāo),然后單擊文檔。然后我們需要更改事件名稱。將事件完全替換為我們的事件名稱。之后,復(fù)制顯示的URL。
去thingspeak.com,然后點擊Apps,點擊Thing HTTP。當(dāng)您在那里時,給出一個名稱,粘貼之前復(fù)制的URL。選擇POST方法。在Body中,給出通道id(您將通過單擊創(chuàng)建的通道獲得通道id),并根據(jù)剩余的件數(shù)更改我們需要發(fā)送郵件的字段,因此我選擇字段2。下面的圖片會讓你更好地了解這個過程。
現(xiàn)在,進入應(yīng)用程序,然后點擊反應(yīng)。這里給出一個名稱,選擇條件類型為數(shù)字,選擇通道?,F(xiàn)在,給出條件(如果值小于5,我這樣給出),你可以根據(jù)自己的想法進行修改。然后選擇ThingHTTP,最后單擊save react。當(dāng)股票低于5單位時,所有這些都會聯(lián)合發(fā)送電子郵件通知。
這標(biāo)志著服務(wù)器設(shè)置過程的結(jié)束,我們可以繼續(xù)編寫NodeMCU的代碼。
自動庫存監(jiān)控和管理系統(tǒng)- Arduino代碼
我將用Arduino IDE將代碼上傳到NodeMCU板。因此,我們需要在Arduino IDE中添加ESP Board包。為此,打開Arduino IDE,然后從文件菜單中打開preferences。粘貼下面給出的鏈接并按OK。
然后進入tools->boards->board manager。現(xiàn)在搜索ESP并安裝。
安裝完這個程序后,我們就可以開始編寫程序了。
基于NodeMCU的庫存管理系統(tǒng)的完整代碼如下所示。我們通過包含所有必需的庫來開始編寫代碼。為了使用某些I2C設(shè)備,需要包含Wire庫。在這里,我們使用基于I2C的OLED模塊,因此我們需要包括線庫。我們還需要包括adafruit gfx和ssd1306,以便與OLED一起工作。ESP8266WiFi用于將Wi-Fi連接到ESP板,HX711用于從稱重傳感器讀取讀數(shù),EEPROM用于將值存儲在ESP的EEPROM中。
接下來,在四行中,我們定義了OLED顯示器的屬性,根據(jù)您的顯示器更改這些屬性(代碼中注釋了所有行)
然后我們?yōu)槟K定義了引腳,并為EEPROM地址分配了零值。HX711_ADC loadcell功能用于設(shè)置Dout和時鐘引腳。此外,我們還定義了整數(shù)來保存EEPROM地址。
要校準(zhǔn)并將該校準(zhǔn)值存儲在EEPROM中,首先,轉(zhuǎn)到文件>示例> HX 711_ADC,然后選擇校準(zhǔn)代碼。上傳代碼前,將天平放在一個穩(wěn)定的平面上。然后將代碼上傳到Arduino并打開串行監(jiān)視器。修改波特率為572600?,F(xiàn)在,顯示器要求抵消重量,為此,我們需要按t。
現(xiàn)在,我們需要把已知的重量放在天平上。在我的例子中是194克。在放置已知重量后,在串行監(jiān)視器上鍵入重量的數(shù)值并按enter鍵。
現(xiàn)在監(jiān)視器詢問您是否要將值保存在EEPROM中,輸入y。現(xiàn)在,我們可以在串行監(jiān)視器上看到重量。
這樣,NodeMCU自動從EEPROM中選擇校準(zhǔn)值。接下來,我們需要為API密鑰SSID和密碼設(shè)置字符串和字符。在SSID和pass部分使用您自己的憑據(jù)。
接下來,在設(shè)置部分,我輸入了顯示器的I2C地址。然后,為了更好地調(diào)試,我以112500的波特率啟動串行通信。此外,我還啟動了Wi-Fi通信,傳感器和EEPROM。
接下來,在循環(huán)部分,首先,我們使用LoadCell.update檢查來自稱重傳感器的數(shù)據(jù)是否可用。如果可用,我們讀取并存儲該數(shù)據(jù)。
然后,我配置顯示器,使顯示器顯示值。這樣,我就可以顯示稱重傳感器的值。以同樣的方式,我們可以顯示自制庫存中剩余件數(shù)的價值。
我定義了一個浮點變量和一個整數(shù)。Float (w)用于存儲一塊的權(quán)重(我們需要手動輸入這個值),integer (k)用于存儲計算結(jié)果。計算很簡單。我們通過總重量(i)除以單個重量(w)得到零件數(shù)(k)
下面幾行代碼用于將數(shù)據(jù)發(fā)送到ThingSpeak云。
這就是關(guān)于編碼部分的所有內(nèi)容?,F(xiàn)在,只需選擇單板NodeMCU12E編譯并上傳即可。
本文編譯自iotdesignpro