使用LM393声音传感器检测声音频率



我使用声音传感器模块LM393来检测Raspberry Pi 3 Model B+设置中打鼾的声音频率,该频率约为300-500Hz。我的迷你项目的范围是检测特定范围内的声音,然后将其发送到firebase实时数据库,稍后我可以在web应用程序前端使用该数据库。目前,LM393传感器检测到任何使用其内置功能校准的声音,并将消息发送到firebase。

#!/usr/bin/python
import RPi.GPIO as GPIO
from time import sleep
import datetime
from firebase import firebase
import urllib2, urllib, httplib
import json
import os 
from functools import partial
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
GPIO.setwarnings(False)
#GPIO SETUP
channel = 24
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel, GPIO.IN)
firebase = firebase.FirebaseApplication('....', None)
def update_firebase():
print('Sound Detected')
data = {"Sound": "Sound Detected"}
firebase.post('/sensor/sound', data)
def update_firebase2():
print('Sound Detected')
data2={"Sound": "Sound Not Detected"}
firebase.post('/sensor/sound',data2)

def callback(channel):
if GPIO.input(channel):
update_firebase()
else:
update_firebase2()
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)  # let us know when the pin goes HIGH or LOW
GPIO.add_event_callback(channel, callback)  # assign function to GPIO PIN, Run function on change
# infinite loop
while True:
callback(channel)
#sleepTime = int(sleepTime)
sleep(10)

您不能使用lm393传感器来检测声音的频率。因此,无论你制造什么软件,检测频率都是不可能的。但是,通过更改电位计值,可以更改检测声音的范围或阈值。

此传感器仅识别声音的可用性,而无法识别声音的大小或声音的特定频率。

参考:https://robu.in/product/lm393-sound-detection-sensor-module-black/

使你的问题复杂化的是,你试图检测到打鼾,这是一种声音的混合。它不是一个简单的正弦波,而是一个复杂的函数。如果你想检测正弦波的频率,这将是一个简单的问题。自然声音是复杂的,是随着声音持续时间的变化而变化的频率的混合物。为此,你需要傅立叶变换和FFT。

你必须将声音"分解"成各个频率,并测量或可视化每个频率。

最新更新