曉東
樓道中的聲光雙控?zé)羰且环N很常見的利用聲音和光線信號(hào)來控制照明的電子裝置,其應(yīng)用場(chǎng)景是在光線昏暗時(shí)對(duì)一定強(qiáng)度的響聲做出亮燈“回應(yīng)”,持續(xù)十幾秒鐘后再關(guān)閉燈光照明,也就是必須要同時(shí)滿足光線較暗和響聲達(dá)到一定程度這兩個(gè)條件才會(huì)“開燈”,否則一直處于“不工作”狀態(tài)。在Arduino中,我們可以利用聲音傳感器和光線傳感器來分別檢測(cè)環(huán)境周圍的聲音與光線強(qiáng)弱,然后分別通過Arduino IDE代碼編程、Python代碼編程和Mind+圖形化編程三種方式,實(shí)現(xiàn)“聲光雙控?zé)簟惫δ堋?h3>1.實(shí)驗(yàn)器材與電路連接
實(shí)驗(yàn)器材:Arduino UNO主板一個(gè),聲音傳感器一個(gè),光線傳感器一個(gè),紅色LED燈一支,面包板一塊,各種顏色的杜邦線若干。
首先,將LED燈長(zhǎng)腿插入13號(hào)引腳,短腿插入GND接地引腳;接著,將Arduino的5V和GND與面包板邊緣插槽連接(紅色與藍(lán)色標(biāo)注),再通過杜邦線將聲音傳感器和光線傳感器的VCC正極和GND接地也插接至面包板;然后將聲音傳感器的OUT信號(hào)輸出端連接至Arduino的2號(hào)數(shù)字引腳,光線傳感器的AO模擬信號(hào)輸出端連接至Arduino的A2模擬引腳;最后,通過數(shù)據(jù)線將Arduino與計(jì)算機(jī)USB接口連接(如圖1)。
首先,在Arduino IDE中通過“int led = 13;”和“int SoundSensorPin = 2;”兩個(gè)語句,分別對(duì)LED燈和聲音傳感器的連接引腳進(jìn)行聲明;接著,在setup()函數(shù)中通過“pinMode(led,OUTPUT);”和“pinMode(SoundSensorPin,INPUT);”兩個(gè)語句,設(shè)置13號(hào)引腳為輸出模式、2號(hào)引腳為輸入模式。
在loop()函數(shù)中,先通過“int LightSensorValue
=analogRead(A2);”語句,建立變量LightSensorValue,其值是讀取光線傳感器通過A2模擬引腳的傳輸數(shù)據(jù);再通過“int SoundSensorValue = digitalRead(SoundSensorPin);”語句,建立變量SoundSensorValue,其值是讀取聲音傳感器通過2號(hào)數(shù)字引腳的傳輸數(shù)據(jù)。
經(jīng)過實(shí)驗(yàn)測(cè)試后發(fā)現(xiàn),正常室內(nèi)光線時(shí)所測(cè)得的光線數(shù)據(jù)是220左右,用手捂住光線傳感器(模擬低光照條件)時(shí)測(cè)得的光線數(shù)據(jù)是930左右,而用手電照射光線傳感器時(shí)測(cè)得的光線數(shù)據(jù)是20左右,這說明光線越強(qiáng),數(shù)據(jù)值越小,光線越弱,數(shù)據(jù)值越大。通過調(diào)節(jié)聲音傳感器上的電位器,使其處于一個(gè)比較合適的檢測(cè)環(huán)境周圍聲音強(qiáng)度范圍內(nèi),發(fā)現(xiàn)“沒有聲音”時(shí)的檢測(cè)值是1(對(duì)應(yīng)HIGH高電平),“有聲音”時(shí)的檢測(cè)值是0(對(duì)應(yīng)LOW低電平)。因此在“if…else…”選擇結(jié)構(gòu)中將判斷條件構(gòu)建為“SoundSensorVal
ue == LOW and LightSensorValue >= 500”,也就是判斷聲音傳感器的檢測(cè)值是否為0、光線傳感器的檢測(cè)值是否在500以上,當(dāng)這兩個(gè)條件同時(shí)滿足時(shí),就應(yīng)當(dāng)去控制LED燈發(fā)光:“digitalWrite(led,HIGH);”,而且要讓它持續(xù)發(fā)光3秒:“delay(3000);”。條件不成立的話,LED處于熄滅狀態(tài),在else分支中通過“digitalWrite(led,LOW);”語句來實(shí)現(xiàn)(如圖2)。
將程序編譯并上傳Arduino,對(duì)聲光雙控?zé)暨M(jìn)行測(cè)試:當(dāng)室內(nèi)光線處于正常照明狀態(tài)時(shí),音箱中音樂的強(qiáng)度再大,LED燈也不會(huì)亮;如果用手捂住光線傳感器,此時(shí)再播放音樂的話,LED燈就會(huì)應(yīng)聲而亮(如圖3)。同樣,當(dāng)光線傳感器被捂住時(shí),保持周圍環(huán)境處于比較安靜的狀態(tài),LED燈也不會(huì)發(fā)光。
借助pinpong庫模塊,在PythonIDLE編程環(huán)境中對(duì)Arduino進(jìn)行代碼編程。首先,通過“import time”和“from pinpong.board import Board,Pin”語句,導(dǎo)入time和pinpong庫模塊;“Board(“uno”).begin()”語句的作用是實(shí)現(xiàn)對(duì)Arduino UNO板型的初始化操作(包括連接主板端口號(hào)的自動(dòng)識(shí)別);接著,分別建立led、SoundSensor和LightSensor三個(gè)變量,分別對(duì)應(yīng)LED燈、聲音傳感器和光線傳感器的聲明設(shè)置,語句“l(fā)ed = Pin(Pin.D13, Pin.OUT)”的作用是設(shè)置連接在13號(hào)引腳的LED燈為信號(hào)輸出端,語句“SoundSensor = Pin(Pin.D2, Pin.IN)”的作用是設(shè)置連接在2號(hào)數(shù)字引腳的聲音傳感器為信號(hào)輸入端,語句“LightSensor = Pin(Pin.A2, Pin.ANALO
G)”的作用是設(shè)置連接在A2模擬引腳的光線傳感器為模擬信號(hào)端。