日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派基础实验18:声音传感器实验

發布時間:2024/3/12 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派基础实验18:声音传感器实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、介紹

?? 聲音傳感器是一種接受聲波并將其轉換為電信號的組件,它像麥克風一樣檢測周圍環境中的聲音強度。


二、組件

★Raspberry Pi主板*1

★樹莓派電源*1

★40P軟排線*1

★PCF8591模數轉換器模塊*1

★聲音傳感器模塊*1

★面包板*1

★跳線若干

三、實驗原理

??傳感器模塊上的麥克風可將音頻信號轉換為電信號(模擬量),然后通過PCF8591將模擬量轉換為數字量,并將其傳輸到MCU。
??LM358是一款雙通道運算放大器,它包含兩個獨立的高增益和內部補償放大器,但在本實驗中,我們只使用其中一個。麥克風將聲音信號轉換為電信號,然后將信號發送到LM358的引腳2,并通過外部電路將它們輸出到引腳1(模塊的引腳SIG)。然后使用PCF8591讀取模擬值。

四、實驗步驟

??第1步: 連接電路。

樹莓派T型轉接板PCF8591模塊
SDASDASDA
SCLSCLSCL
5V5VVCC
GNDGNDGND
聲音傳感器模塊T型轉接板PCF8591模塊
AO*AIN0
DOG17*
VCC(+)5VVCC
GND(G)GNDGND

??第2步: PCF8591模塊采用的是I2C(IIC)總線進行通信的,但是在樹莓派的鏡像中默認是關閉的,在使用該傳感器的時候,我們必須首先允許IIC總線通信。

??第3步: 開始編程。這里先編寫一個PCF8591.py庫文件,后面再編寫一個python程序引入這個庫文件。
??PCF8591.py庫文件就是PCF8591模塊的程序,單獨編寫是為了便于重用。在這個腳本中,我們使用了一個放大器用于模擬輸入和一個LED燈用于模擬輸出,模擬輸入不能超過3.3V!
??該程序也可以單獨運行,用于測試3個電阻模塊的功能。需用短路帽連接AIN0和INPUT0(電位計模塊),連接AIN1和INPUT1(光敏電阻模塊),以及連接AIN2和INPUT2(熱敏電阻模塊)。
??連接LED燈,AIN0(模擬輸入0)端口用于接收來自電位計模塊的模擬信號,AOUT(模擬輸出)用于將模擬信號輸出到雙色LED模塊,以便改變LED的亮度。
??PCF8591的詳細內容請查看樹莓派基礎實驗12:PCF8591模數轉換器實驗。

#!/usr/bin/env python #------------------------------------------------------ # # 您可以使用下面語句將此腳本導入另一個腳本: # “import PCF8591 as ADC” # # ADC.Setup(Address) # 查詢PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with the list of detected devices on the specified bus. # ADC.read(channal) # Channal范圍從0到3 # ADC.write(Value) # Value范圍從0到255 # #------------------------------------------------------ #SMBus (System Management Bus,系統管理總線) import smbus #在程序中導入“smbus”模塊 import time# for RPI version 1, use "bus = smbus.SMBus(1)" # 0 代表 /dev/i2c-0, 1 代表 /dev/i2c-1 ,具體看使用的樹莓派那個I2C來決定 bus = smbus.SMBus(1) #創建一個smbus實例#在樹莓派上查詢PCF8591的地址:“sudo i2cdetect -y 1” def setup(Addr):global addressaddress = Addrdef read(chn): #channelif chn == 0:bus.write_byte(address,0x40) #發送一個控制字節到設備if chn == 1:bus.write_byte(address,0x41)if chn == 2:bus.write_byte(address,0x42)if chn == 3:bus.write_byte(address,0x43)bus.read_byte(address) # 從設備讀取單個字節,而不指定設備寄存器。return bus.read_byte(address) #返回某通道輸入的模擬值A/D轉換后的數字值def write(val):temp = val # 將字符串值移動到temptemp = int(temp) # 將字符串改為整數類型# print temp to see on terminal else comment outbus.write_byte_data(address, 0x40, temp) #寫入字節數據,將數字值轉化成模擬值從AOUT輸出if __name__ == "__main__":setup(0x48) #在樹莓派終端上使用命令“sudo i2cdetect -y 1”,查詢出PCF8591的地址為0x48while True:print '電位計 AIN0 = ', read(0) #電位計模擬信號轉化的數字值print '光敏電阻 AIN1 = ', read(1) #光敏電阻模擬信號轉化的數字print '熱敏電阻 AIN2 = ', read(2) #熱敏電阻模擬信號轉化的數字值tmp = read(0)tmp = tmp*(255-125)/255+125 # 125以下LED不會亮,所以將“0-255”轉換為“125-255”,調節亮度時燈不會熄滅write(tmp)time.sleep(2)

??若想深入學習模/數轉換等模電知識,強烈推薦以下書籍,國外大學最經典模電教程,比國內教程生動有趣更易懂。掃碼購買或者點擊下面的鏈接。

《模擬電子基礎》點擊購買:https://u.dangdang.com/OIVk

??第4步: 編寫控制程序。PCF8591將模擬量轉換為的數字量,會隨著檢測到的聲音變大而變小,當數字量小于130時,打印"Voice detected! "。
??這里為什么閾值設為130呢?聲音傳感器模塊有兩個LED燈,LED1燈為電源指示燈,接通電源就會一直常亮。LED2為聲音檢測指示燈,在沒有檢測到聲音時應該熄滅,一旦檢測到聲音,就(才)會亮,而這需要旋轉藍色元件上的金黃色平口螺絲,調節聲音檢測的靈敏度來實現。否則,LED2無論檢測到聲音與否,都可能一直常亮,或者一直不亮。而我調節到合適位置時,安靜狀態下voiceValue = ADC.read(0)的值為133,所以我設置檢測到聲音的閾值為130比較合適。

#!/usr/bin/env python import PCF8591 as ADC import RPi.GPIO as GPIO import timeGPIO.setmode(GPIO.BCM)def setup():ADC.setup(0x48)def loop():count = 0while True:voiceValue = ADC.read(0) #若檢測到有聲音,該值會變小if voiceValue:print 'Value:', voiceValueif voiceValue < 130: #我實驗時安靜狀態下的值約為133,所以設置檢測到有聲音的閾值設為130print "Voice detected! ", countcount += 1time.sleep(0.2)if __name__ == '__main__':try:setup()loop()except KeyboardInterrupt: pass

??

總結

以上是生活随笔為你收集整理的树莓派基础实验18:声音传感器实验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。