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

Python 使用LM393声音传感器检测声音频率,python,raspberry-pi,iot,Python,Raspberry Pi,Iot,我正在使用声音传感器模块LM393检测Raspberry Pi 3 B+型设置中打鼾的声音频率,其发生频率约为300-500Hz。我的小型项目的范围是检测该特定范围内的声音,然后将其发送到firebase实时数据库,稍后我可以从该数据库在我的web应用程序前端使用。目前,LM393传感器检测任何使用其内置功能校准的声音,并将信息发送至firebase #!/usr/bin/python import RPi.GPIO as GPIO from time import sleep import d

我正在使用声音传感器模块LM393检测Raspberry Pi 3 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传感器检测声音的频率。因此,无论你开发什么软件,检测频率都是不可能的。但是,通过改变电位计值,可以改变检测声音的范围或阈值

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

参考:

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


您必须将声音“分解”为单独的频率,并测量或想象每个单独的频率。

感谢您提供的信息性回复。在此链接中,他使用LM393仅检测哨声。我可以知道这是否可以检测到打鼾。声音分类是一个困难的问题,但至少,你需要一个实际的模拟音频输入。查看USB“声卡”(通常是单声道输入,即使是立体声或5.1输出)或GPIO接口上的某种PI声卡。但是首先考虑在PC或笔记本电脑上整理算法,一旦调试和验证,只将其移动到PI。