Arduino 精准自动吉他调音器 – 基于 Simulink 的快速自动调弦
项目背景
吉他演奏的前提是准确调音。传统手动调音依赖耳力或电子调音器,而本项目利用 Arduino Due 与 Simulink 模型化设计,实现全自动调音:拨动琴弦 → 系统自动识别音高 → 步进电机驱动夹持器旋转调音钮 → 直到音高落入目标范围。全过程无需人工干预,适合初学者、舞台快速换弦、教学演示等场景。
系统架构

- 输入:按键选弦(6 弦循环)、吉他音频信号(模拟输入 A0)
- 输出:6 颗 LED 指示当前选弦、L293D 驱动直流减速电机正反转/停止
- 核心算法:Simulink + Stateflow 建模,自动生成代码烧录 Arduino Due 独立运行
硬件详细设计
音频输入电路
- 吉他信号幅度极小(毫伏级),且以 0V 为中心含负半周
- Arduino Due ADC 范围 0–3.3V,需:放大 + 直流偏移 + 低通滤波
- 推荐 TL972 运放:超低噪声、轨到轨、低压供电
- 采样率 5 kHz → 奈奎斯特频率 2.5 kHz,低通截止 2.5 kHz
- 静音时 ADC 读值约 550,设阈值 575 触发音高分析
电机驱动机构
- 需低速大扭矩减速电机:6 RPM、613 oz-in 扭矩、3–12V 供电(项目用 9V 电池)
- 输出轴装配夹持机构:夹持毂 + 4 颗螺丝 + 胶带,夹住调音钮
- L293D H 桥驱动:3 根数字引脚控制(使能 + 方向 ×2)
按键与 LED 电路
- 按键:下拉电阻数字输入,检测上升沿切换选弦
- LED:6 颗共用限流电阻,对应 E A D G B e 六弦
Simulink 算法核心
Stateflow 选弦状态机

- 6 个状态对应 6 弦,按键上升沿触发循环切换
- 进入状态点亮对应 LED,退出熄灭
- 默认状态:低音 E 弦(第 6 弦)
- 输出
periodRange传递给音高估计函数,表示当前弦的“合格周期范围”
音频处理与音高估计
- 模拟输入模块采样周期 0.0002s (5 kHz)
- 示波器监视波形,调节电位器使峰值不削顶(<1023)
- MATLAB Function 模块实现周期检测 → 频率估计 → 与目标范围比较 → 输出电机控制信号
- 三路输出直连 Arduino 数字输出块驱动 L293D
外部模式调试
- 仿真运行时实时观测按键、音频波形、状态机跳转
- 可在线调整阈值、周期范围等参数,无需重新编译
- 验证无误后一键部署生成独立固件
项目文件获取
完整 Simulink 模型、原理图、3D 打印夹持器 STL 等资源:
演示视频:Automatic Guitar Tuner Using Simulink and Arduino
关键元器件清单
| 元器件 | 规格/型号 | 用途 |
|---|---|---|
| Arduino Due | ARM Cortex-M3, 84 MHz | 主控,注意 3.3V 逻辑 |
| TL972 运放 | 双路、低噪、轨到轨 | 音频前置放大/偏移/滤波 |
| 直流减速电机 | 6 RPM, 613 oz-in, 3-12V | 驱动调音钮 |
| L293D | 四通道 H 桥 | 电机正反转/停止控制 |
| 9V 电池 | 独立供电电机 | 避免电机噪声干扰 ADC |
| 吉他输入插孔 | 6.35mm 单声道 | 接吉他线 |
| 按键 + 6×LED | 普通轻触 + 3mm LED | 选弦与指示 |
原理图概览
四大子电路:
- 按键电路:单按键 + 10kΩ 下拉
- LED 显示:6 LED 并联共用 220Ω 限流
- 音频输入:TL972 两级放大,偏移至 1.65V,RC 低通
- 电机驱动:L293D 引脚 1,2,9 控制,电机接 OUT1/OUT2,9V 独立供电
详细原理图见项目图片资源。
适用场景与局限
- ✅ 标准调音(EADGBE)自动化
- ✅ 教学演示信号处理与控制理论
- ✅ Simulink 嵌入式代码生成实战案例
- ⚠️ 仅支持标准调弦,非标准调式需修改
periodRange表 - ⚠️ 环境噪声大时阈值需调整
- ⚠️ 电机机械结构需适配具体吉他调音钮尺寸
制造工艺