用树莓派pico、OLED I2C显示屏、LM324运算放大器、麦克风等设计音频频谱仪,实现频谱的实时显示
时间: 2024-01-01 21:03:13 浏览: 292
首先,需要将麦克风接入树莓派pico的GPIO引脚上,通过pico的ADC模块读取声音信号,然后将读取到的数据传入LM324运算放大器进行放大处理。接下来,将处理后的信号传入频谱分析算法中,计算出频谱数据并通过I2C总线传输给OLED显示屏进行实时显示。
具体实现步骤如下:
1. 准备材料
- 树莓派pico
- OLED I2C显示屏
- LM324运算放大器
- 麦克风
- 杜邦线
2. 连接电路
将麦克风的VCC引脚连接到pico的3.3V引脚上,将GND引脚连接到pico的GND引脚上,将OUT引脚连接到pico的ADC引脚上。然后将LM324运算放大器的电源引脚连接到pico的3.3V引脚上,将GND引脚连接到pico的GND引脚上,将IN+引脚连接到pico的ADC引脚上,将IN-引脚连接到pico的GND引脚上,将OUT引脚连接到pico的GPIO引脚上。
3. 编写代码
使用Micropython语言编写代码,读取声音信号并通过LM324运算放大器进行放大处理,然后使用频谱分析算法计算出频谱数据,最后将数据通过I2C总线传输给OLED显示屏进行实时显示。具体代码如下:
```python
from machine import Pin, ADC, I2C
import ssd1306
import utime
# 定义OLED显示屏相关参数
WIDTH = 128
HEIGHT = 64
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=200000)
oled = ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c)
# 定义LM324运算放大器相关参数
gain = 100
# 定义频谱分析算法相关参数
N = 64
fs = 20000
f = [i * fs / N for i in range(N // 2)]
y = [0 for i in range(N // 2)]
# 初始化ADC模块
adc = ADC(0)
while True:
# 读取声音信号并进行放大处理
v = adc.read_u16() / 65535 * 3.3
v = v * gain
# 更新频谱数据
y.pop(0)
y.append(v)
# 计算频谱并显示在OLED屏幕上
oled.fill(0)
for i in range(N // 2):
oled.line(i * 2, HEIGHT, i * 2, HEIGHT - int(y[i] / 10))
oled.show()
# 等待一段时间后再次更新频谱数据
utime.sleep_ms(10)
```
4. 运行程序
将代码上传到树莓派pico上,然后将OLED显示屏连接到pico的I2C引脚上,启动程序后,当麦克风接收到声音时,程序会实时计算出频谱数据并在OLED显示屏上显示出来。
阅读全文