天天看點

一起玩轉樹莓派(20)——噪聲監測一起玩轉樹莓派(20)——噪聲監測

一起玩轉樹莓派(20)——噪聲監測

噪聲污染是非常令人讨厭的一件事,長時間暴露在噪聲中,不僅會使人心煩意亂,甚至還會影響我們的身心健康。本節,借助聲音傳感器,我們可以開發一個小型的噪聲監測工具,當環境噪音過大時,發出提醒。

一.聲音傳感器

聲音傳感器子產品是一種将聲波轉換成電信号的元件。使用它可以友善的擷取環境中的聲音強度。本次實驗,我們使用的聲音傳感器子產品如下圖所示:

一起玩轉樹莓派(20)——噪聲監測一起玩轉樹莓派(20)——噪聲監測

如圖所示,此傳感器子產品有4個對外引腳,其中AO引腳是模拟引号輸出引腳,DO引腳是數字引号輸出引腳。G引腳用來接地,+引腳接5V電源。

此傳感器子產品上還有兩個LED訓示燈,LED1是電源訓示燈,隻要傳感器的正負極正常連通,此訓示燈就會亮。LED2是聲音檢測訓示燈,環境聲音強度沒有超過一定值時,此訓示燈會熄滅,環境聲音強度超過了一定數值後,此訓示燈會亮。具體的門檻值可以通過調節圖中藍色部分的可變電阻來進行調整。

本次實驗我們使用的聲音傳感器子產品既可以輸出數字信号也可以輸出模拟信号,對于數字信号,我們可以直接将其接樹莓派的GPIO來進行接收,由于樹莓派沒有内置數模轉換子產品,是以對于模拟信号,我們需要使用PCF8591數模轉換子產品來讀取模拟信号。

二. 實驗

首先先确認下我們要使用的引腳,聲音傳感器的數字信号引腳可以直接連接配接樹莓派的GPIO17(BCM編碼),模拟引号引腳連接配接PCF8591的AINO。如下表:

PCF8591與樹莓派:

PCF8591 樹莓派
SCL
SDA
GND
VCC +5V

聲音傳感器子產品與樹莓派:

聲音傳感器
G
+
DO GPIO17(BCM編碼,對應實體編碼11)

聲音傳感器與PCF8591:

AO AIN0

編寫示例代碼如下:

#SMBus (System Management Bus,系統管理總線) 
import smbus   #在程式中導入“smbus”子產品
import RPi.GPIO as GPIO 
import time

bus = smbus.SMBus(1)         #建立一個smbus執行個體

# 通過PCF8591讀取模拟信号

# 聲音強度的模拟資料
def readData():
    #發送一個控制位元組到裝置 表示要讀取AIN0通道的資料
    bus.write_byte(0x48,0x40)   
    bus.read_byte(0x48)         # 空讀一次,消費掉無效資料
    return bus.read_byte(0x48)  # 傳回某通道輸入的模拟值A/D轉換後的數字值

# 通過GPIO讀取數字信号

# 設定使用的引腳編碼模式
GPIO.setmode(GPIO.BOARD)
# 數字輸出引腳 BCM 17
P = 11

# 引腳初始化
GPIO.setup(P, GPIO.IN)

while True:
    print('--------分割線----------')
    print('環境聲音強度數字信号:', GPIO.input(P))
    data = readData()
    print('環境聲音強度模拟信号:', readData())
    if data < 130:
        print("噪聲過大,請注意!!!!!!!!!")
    time.sleep(2)           

上面代碼中設定模拟信号小于130則表示環境聲音過強,需要注意,如果你運作上面的程式發現數值一直很小,可能是靈敏度設定過高所緻,可以調節可變電阻來得到合适的靈敏度。

代碼運作效果如下圖所示:

一起玩轉樹莓派(20)——噪聲監測一起玩轉樹莓派(20)——噪聲監測

本次實驗并沒有特别新穎的地方,所使用到的技術本系列之前部落格中都有詳細的介紹。

專注技術,懂的熱愛,願意分享,做個朋友

繼續閱讀