使用強(qiáng)度敏感的壓力傳感器來(lái)創(chuàng)建一個(gè)可見(jiàn)和可聽(tīng)的警報(bào)
在這個(gè)項(xiàng)目中,我們將使用強(qiáng)度敏感的壓力傳感器來(lái)創(chuàng)建一個(gè)警報(bào),在視覺(jué)和聲音上警告我們?cè)谡故局邪l(fā)布的圖形被操縱。這些人物被白光照亮。當(dāng)你被操縱時(shí),燈光的顏色就會(huì)變成紅色,并發(fā)出警報(bào)。即使我們把圖形放回原處,燈光的顏色也不會(huì)改變,警報(bào)繼續(xù)響起,以找出哪個(gè)圖形被操縱了。讓我們先解釋一下什么是強(qiáng)度相關(guān)傳感器。
什么是抗強(qiáng)度相關(guān)的傳感器?
力敏電阻(FSR)傳感器是將施加在其上的物理壓力作為電壓值輸出的傳感器。這基本上是可變電阻。
通常,這些傳感器由導(dǎo)電襯底層和半導(dǎo)體子結(jié)構(gòu)層組成,據(jù)此,這些傳感器通常由導(dǎo)電襯底層和半導(dǎo)體子結(jié)構(gòu)層組成,由此,開(kāi)放層的距離。在傳感器的有源區(qū)施加的壓力越大,該區(qū)域接觸半導(dǎo)體層的點(diǎn)越多,使電阻值下降。
FSR基本上是電阻,改變它們的電阻值(以歐姆Ω為單位),這取決于它們被壓的程度。這些傳感器很容易使用,但不是很精確。它們不提供精確的值。用這些傳感器可以確定重量。然而,你必須將電阻值轉(zhuǎn)換成成比例的重量。那么重量就不準(zhǔn)確了。然而,識(shí)別變化是可能的。這允許傳感器用于此項(xiàng)目。
我們將使用的模塊由FSR傳感器和與傳感器串聯(lián)的510 kΩ電阻組成。該電路由5 VDC供電,電路的輸出信號(hào)電壓從分壓器中移除,分壓器由我們將使用的模塊由FSR傳感器和與傳感器串聯(lián)的510 kΩ電阻組成。電路供電5vdc,電路的輸出信號(hào)電壓從分壓器上取下,由模塊形成的輸出信號(hào)電壓很低,輸出信號(hào)電壓很低。相反,當(dāng)傳感器上的壓力增加時(shí),傳感器的電阻會(huì)下降,從而使模塊輸出信號(hào)上的電壓增加。在我們的項(xiàng)目中,我們將模塊的輸出信號(hào)連接到AZ微控制器的模擬輸入,并在串行監(jiān)視器上顯示測(cè)量值。下圖是AZ-Delivery-Data表中的模塊電路:
電路及所用模塊說(shuō)明
我們對(duì)三個(gè)物體使用三個(gè)壓力傳感器。您將用白色或紅色的光照亮WS2812B LED環(huán)。我們還使用了迷你mp3播放器DFPlayer與迷你揚(yáng)聲器一起播放報(bào)警音。整個(gè)系統(tǒng)由AZ-Atmega328微控制器控制。我們還需要一個(gè)microSD卡來(lái)保存聲音文件。整套設(shè)備由外部5伏直流電源供電。
程序流程和草圖的描述
當(dāng)物體就位時(shí),F(xiàn)SR傳感器模塊有一個(gè)高輸出信號(hào)顯示在串行監(jiān)視器上。LED環(huán)用白光照亮人物或物體。一旦其中一個(gè)對(duì)象被操作,F(xiàn)SR傳感器模塊的輸出信號(hào)下降,被操作對(duì)象的LED環(huán)亮紅燈并發(fā)出報(bào)警聲音。即使同一物體或其他物體再次定位在該位置,警報(bào)仍然存在。
使用迷你MP3播放器DFPlayer模塊需要前兩個(gè)庫(kù)。MP3模塊和微控制器之間的必要通信是串行的。庫(kù)Softwareerial.H包含微控制器激活串行通信的任何數(shù)字PIN的功能。使用庫(kù)Dfrobotdfplayermini.h,讓我們激活使用MP3播放器模塊所需的功能。
第三個(gè)庫(kù)是來(lái)自Adafruit的Neopixel,能夠使用LED環(huán)。
在我們?yōu)轫?xiàng)目集成了必要的庫(kù)之后,我們開(kāi)始創(chuàng)建對(duì)象和變量的定義。為了使用MP3播放器模塊,我們必須在軟件庫(kù)softwareial . h中實(shí)現(xiàn)mysoftwareial對(duì)象。數(shù)字引腳被賦予微控制器,我們將用于模塊的串行通信。我們使用數(shù)字PIN 5接收來(lái)自MP3模塊的數(shù)據(jù),使用數(shù)字PIN 6向MP3模塊發(fā)送數(shù)據(jù)。為了使用模塊的稅務(wù)方法和命令,例如設(shè)置音量或開(kāi)始播放MP3文件,我們從庫(kù)Dfrobotdfplayermini.h中創(chuàng)建對(duì)象mydfplayer。
FSR傳感器的輸出連接到微控制器的模擬輸入。為此聲明了以下變量。我們還將信號(hào)保存在其他變量中。
草圖的下四行是用于將WS2812B LED環(huán)連接到微控制器的數(shù)字引腳的三個(gè)常量,以及用于定義每個(gè)環(huán)的LED數(shù)量的常量,在這種情況下為8個(gè)LED。
對(duì)于每個(gè)WS2812B LED環(huán)的操作,必須為使用的每個(gè)環(huán)創(chuàng)建Neopixel庫(kù)的對(duì)象。一個(gè)環(huán)的led的各自數(shù)量寫(xiě)在這個(gè)對(duì)象的參數(shù)中(我們有這個(gè)number_led_ring的變量),每個(gè)環(huán)連接的微控制器的引腳(為此我們有變量,例如floers_ring_led),以及每個(gè)環(huán)的屬性。它們是三色led (Neo_grb),工作頻率為800 kHz (Neo_khz800)。
在草圖的下一行中,為每個(gè)環(huán)的兩種顏色的RGB值聲明和定義變量。
下一個(gè)代碼塊是setup(),我們?cè)谄渲信渲媚K的初始狀態(tài)。
在前兩行中,我們用Begin指令(“波特率”)初始化串行通信,這兩行都是為了用mysoftwareeries指令與MP3模塊通信。開(kāi)始(9600),以及使用串行指令的串行監(jiān)視器。開(kāi)始(115200)。
接下來(lái),我們檢查MP3模塊是否被IF語(yǔ)句正確初始化。在這種情況下,我們檢查MP3模塊是否由于任何原因沒(méi)有初始化。我們用符號(hào)“!”進(jìn)行初始化。退化,即如果模塊沒(méi)有初始化,條件為真,執(zhí)行花括號(hào)內(nèi)的代碼。如果MP3播放器模塊初始化正確,則不滿足條件,并且不執(zhí)行我們解釋的代碼。setup()方法繼續(xù)通過(guò)serial行執(zhí)行到串行控制臺(tái)。println (f ("correct dfplayer initialization."))告知MP3播放器模塊被正確初始化。
MP3模塊初始化后,三個(gè)LED環(huán)必須使用每個(gè)環(huán)的對(duì)象(name_ring)的Begin()方法。Begin())被初始化。如果有一個(gè)亮了,我們就關(guān)掉所有的led燈。
首先,我們將環(huán)形光的亮度設(shè)置為200,總共為254。
在一個(gè)for循環(huán)中,一個(gè)環(huán)的所有l(wèi)ed都帶有flowers_ring。Setpixelcolor (I, floers_color_white)配置白色照明,然后使用floers_ring。Show()打開(kāi)。計(jì)數(shù)變量I的最大值是我們?cè)陂_(kāi)始時(shí)定義的變量number_leds_ring的值。
兩個(gè)for環(huán)類似于其他兩個(gè)LED環(huán)。
只有FSR模塊的信號(hào)值的變量,它被定義為一個(gè)高值。我們記得,當(dāng)按下傳感器時(shí),模塊的信號(hào)值很高。而不按下時(shí),其值較低。
有了這些行,塊的編程就完成了?,F(xiàn)在讓我們從持續(xù)執(zhí)行的Loop()開(kāi)始。它確定其中一個(gè)圖形是否被移動(dòng)或從其位置移除。我們將描述花中的花的代碼。menina和hand的圖形代碼是相同的,只是每個(gè)圖形變量的值發(fā)生了變化。menina的sensor_menina_signal <1200, hand sensor_hand_signal <1000。
為了檢查FSR傳感器模塊的起始值的變化,我們使用if,在此我們檢查先前存儲(chǔ)的相應(yīng)數(shù)字的傳感器變量的值。三個(gè)數(shù)字的代碼是一樣的,只是每個(gè)數(shù)字的變量的測(cè)試值發(fā)生了變化。在這里,我們也將對(duì)代碼中的變量進(jìn)行檢查,對(duì)花兒的圖形sensor_flowers_signal進(jìn)行分析。
每當(dāng)變量sensor_flowers_signal中的先前存儲(chǔ)值小于1000時(shí),就執(zhí)行塊的內(nèi)部。
一進(jìn)入指令塊,我們就用第一行Analogread (sensor_flowers_pin)讀取FSR傳感器模塊信號(hào)的當(dāng)前值,并將該值保存在相應(yīng)的變量sensor_flowers_signal中。然后我們?cè)诖斜O(jiān)視器中花費(fèi)該值。
下面的If - Else如果檢查變量sensor_flowers_signal當(dāng)前值是否小于200,如果該條件為真,則對(duì)象被移動(dòng),并執(zhí)行以下代碼觸發(fā)告警。
我們?cè)诖斜O(jiān)視器中發(fā)出一個(gè)說(shuō)明:
我們將環(huán)形光的亮度強(qiáng)度設(shè)置為200,總共為254。
為了打開(kāi)受影響的紅色環(huán)的所有l(wèi)ed,我們?cè)俅问褂靡粋€(gè)for循環(huán)來(lái)遍歷環(huán)的所有l(wèi)ed。計(jì)數(shù)變量I對(duì)應(yīng)LED的個(gè)數(shù)。紅色的燈光是與flowers_ring。Setpixelcolor (I, flexers_color_red)配置。然后他們會(huì)和floers_ring在一起。Show()打開(kāi)。我們記得變量I的最大值,因此變量Number_leds_Ring的值的拆除條件是。
現(xiàn)在我們要播放的報(bào)警音,我們?cè)趍icroSD卡下保存的名稱為1.mp3。首先,我們使用mydfplayer配置播放強(qiáng)度。音量(10)并在mydfplayer中循環(huán)播放聲音文件。循環(huán)(1).聲音文件的周期為7秒。一直播放到單片機(jī)復(fù)位為止,因?yàn)槭菆?bào)警,要檢查圖的狀態(tài)。我在草圖中使用了一個(gè)延遲(500),以便在下一個(gè)指令執(zhí)行之前播放警報(bào)音。
到目前為止,只要FSR傳感器變量的值小于200,就可以設(shè)計(jì)if指令的代碼。但是,如果FSR傳感器模塊更新后的測(cè)量值變量的存儲(chǔ)值小于1000,但大于或等于200,則Else IFInstruction的代碼。它只是通知串行監(jiān)視器,相應(yīng)的數(shù)字沒(méi)有被操縱。
所有三個(gè)數(shù)字的代碼幾乎相同,只有測(cè)試區(qū)域的變量隨FSR傳感器的每個(gè)數(shù)字的值而變化。
添加
可以向項(xiàng)目中添加幾個(gè)選項(xiàng)。第一種選擇是安裝一個(gè)外部按鈕,連接在GND連接和微控制器的復(fù)位連接之間。通過(guò)這種方式,我們將復(fù)位微控制器,它將具有與微控制器的復(fù)位按鈕相同的功能。以下組件應(yīng)添加到電路中:
第二種選擇是在揚(yáng)聲器的正極線(紅色電纜)上安裝一個(gè)開(kāi)關(guān)。在另一種安排下,只有當(dāng)開(kāi)關(guān)被翻轉(zhuǎn)時(shí),警報(bào)才會(huì)停止,但數(shù)字的LED環(huán)會(huì)繼續(xù)亮紅燈,以顯示哪個(gè)數(shù)字被操縱了。對(duì)于第二種選擇,我們必須確保在檢查角色狀態(tài)后更改開(kāi)關(guān)以重新激活聲音。
本文編譯自hackster.io