2026寒假练 - 基于树莓派RP2040的嵌入式系统实现声音音量条显示
该项目使用了游戏机+麦克风模块,MicroPython语言,实现了声音音量条显示的设计,它的主要功能为:使用ADC将麦克风模块输出采集后进行简单的滤波和量化,使用显示屏将当前音量显示出来。
标签
嵌入式系统
寒彬彬
更新2026-03-24
36

 任务介绍和项目介绍

以前没有接触过使用MicroPython语言进行开发,故在在众多项目中,选择了RP2040系统板和麦克风模块,结合MicroPython进行音频处理和实时显示这一项目。

这一项目主要任务就是通过麦克风模块的输出进行AD采集、信号处理您使用显示屏显示实时显示音量,配合其他的外设来控制显示的刷新率主题以及一键归零。

 硬件介绍

1. RP2040 系统板

RP2040是Raspberry Pi推出的一款低功耗微控制器,具有双核ARM Cortex-M0+处理器,支持丰富的I/O接口。外接12MHZ晶振提供时钟,以及一个复位按键组成。

2. 麦克风模块

使用的麦克风模块电容式麦克风,麦克风输出通过电容去除直流成分并通过运放将其信号进行放大,从而提供高灵敏度的音频信号输出。通过ADC接口,主控可以将模拟音频信号转换为数字信号。

3. LCD 显示屏

LCD显示屏分辨率为240*240,控制芯片采用ST7789使用SPI接口进行控制显示内容,用于实时显示音量条和峰值信息。

4. 姿态传感器

姿态传感器使用MMA7660FFC来对板卡的运动状态进行反馈,用于判断设备的静止状态,能够监测加速度和角速度。该芯片采用IIC协议进行通信。

5. 摇杆模块

摇杆模块采用两路ADC采集(X,Y两路可看成坐标)来代表摇杆的位置。根据摇杆不同的位置调节数据刷新率,提供直观的用户交互方式。

6.按键

按键另一端连接GND,在按下时会将信号拉低,用来控制显示音量的主题和划线的颜色

方案框图和项目设计

设计思路介绍:首先在使用串口调试显示出麦克风输出的电压值,并对采集到的数据进行简单的滤波。第二步将采集到的数据使用LCD显示屏进行显示,完成任务中的显示实时显示音量,再将采集到的数据画成波形以及将采集到的最大值进行保持显示,最后使用按键控制切换主题和显示的颜色并使用摇杆来控制刷新率。

图片.png


软件介绍

PR2040是树莓派推出的微控制器,使用ARM M0+内核,支持MicroPython和C++/C两种语言来进行开发,我选择了官方推荐的MicroPython,初步接触到了MicroPython的简单语法和类的概念

1. 麦克风模块

将麦克风模块连接完成后,利用RP2040的ADC接口采集音频信号后进行直流去除和短时RMS计算,并将采集到的数值进行量化基础代码如下:

volume_ADC= ADC(Pin(26)) #选择ADC0来作为麦克风的数据采集,引脚编号26
raw_value = self.adc.read_u16() >> 4 #读取AD采集的值
#中间进行数据处理包括去除直流分量以及滤波算法
quantized = self._linear_quantize(normalized_volume) #将采集数据进行量化

以上的代码执行完后就可以进行应用显示音量的大小了

2. LCD 显示屏

应用显示屏,初始化SPI接口,使用官方的软件库即可,代码如下:

#初始化SPI接口
spi_sck=Pin(2)
spi_tx=Pin(3)
spi0=SPI(0,baudrate=4000000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)
#应用官方库的ST7789类中的显示函数即可

3、摇杆应用和麦克风模块的应用大部分是一样的,不在赘述

4按键驱动

首先因未在连接主控另一端的地方没有上拉电阻,所以要将IO配置上拉输入模式,在开始时仅在while中读取状态,会出现按下无反应的情况,固改用外部中断方式来进行检测,以下是基础代码:

self.pin6 = machine.Pin(pin6, machine.Pin.IN, machine.Pin.PULL_UP)	#初始化按键A为上拉输入模式
self.pin6.irq(trigger=machine.Pin.IRQ_FALLING, handler=self._handle_pin6) #开启按键的中断触发,并指定中断服务函数
#编写函数名为:_handle_pin6的中断服务函数

软件流程图:

图片.png




功能展示图及说明

简单说明如下:

设置有三个模式:

①实时音量显示模式:

mmexport1773934458381.gif


②峰值保持模式:

mmexport1773934177243.gif

③波形模式:

ce76b163954f38aa6349fe4eee602ea1.jpg

按键B按下可三个模式循环切换,按下按键A即可切换当前显示的颜色,在模式②时静止1s就会波峰归零,在模式③上下拉动摇杆可以改变刷新率

具体功能演示见B站。

心得体会

无意中发现了电子森林这么一个宝藏平台,这也是我参加的第一个活动,也是首次使用树莓派和MicorPython语言实现了一个简单的小任务,接触到了一些新奇的语言和平台,收获颇丰



附件下载
任务代码.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号