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