亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino 的自动吉他调音器

组件和用品

Arduino UNO
× 1

应用和在线服务

Simulink

关于这个项目

弹吉他时最重要的事情之一是确保乐器调准。即使是最好的吉他手,如果吉他走调,也不会发出任何好声音。使用标准调音器手动给吉他调音一直很常见,但自动调音器让事情变得更容易,更有趣!这个基于 Arduino 的项目将为您调整吉他。

这是一个显示该项目的视频:https://www.mathworks.com/videos/automatic-guitar-tuner-using-simulink-and-arduino-1501787185047.html

概览

上图是自动吉他调音器的概览。

  • 按钮用于选择要调的弦
  • 六个 LED 显示屏用于指示已选择的字符串
  • 与电机相连的夹子用于转动调音栓,直到琴弦调准。

输入和输出由上述四个电路控制:按钮的数字输入电路、吉他的模拟音频输入电路、LED显示的数字输出电路和调音栓的电机驱动电路抓手。这四个电路与 Arduino Due 交互,后者运行使用 Simulink 开发的算法。

音频输入电路

吉他通过标准吉他电缆连接到调音器。吉他电缆的末端有两个连接,称为尖端和套管。电缆的一端将连接到输入插孔,该插孔具有用于尖端和套管的引线。我将电线焊接到这些引线上,将尖端和套管连接到音频输入电路。

我建议为该电路使用 TL972 运算放大器。它是一种极低噪声、轨到轨放大器,可以在极低的电源电压下工作。

电动调音夹钳

我不能在这个项目中使用任何直流电机。我需要一个低速高扭矩的减速电机。我使用的电机速度为 6 RPM,最大扭矩为 613 oz-in。它的电压范围为 3-12 V,所以我使用了 9 V 电池作为电源。

在电机的轴上,我使用夹毂、四个螺钉和一些胶带组装了一个简单的夹持机构。

软件

我使用 Simulink 及其对 Arduino 的支持包来开发调谐器的算法。 Simulink 是一个框图环境,用于开发算法和建模动态系统。支持包允许我使用 Simulink 块读取和写入 Arduino 上的引脚。使用软件的外部模式功能,我可以在 Arduino 上模拟算法,自动生成代码并在模拟运行时调整参数,而无需重新编译任何代码。然后,我可以将算法部署到硬件以独立执行。我创建的模型如下所示。

外部模式允许在算法在硬件上运行时使用示波器模块来监控算法的一部分。这对于监听来自按钮的数字输入和来自吉他的模拟输入特别有用。从按钮作用域我们可以看到,当按下按钮时,输入从0变为1。

我希望这种从 0 到 1 的更改触发所选字符串的更改。这被称为上升触发器。我创建了一个名为“Select String”的 Stateflow 图,它​​有六个状态,每个字符串一个状态,并根据这个上升触发输入从一个状态更改为下一个状态。下面是更详细的 Stateflow 图。

进入每个状态后,相应串的 LED 引脚设置为高电平。退出每个状态后,该引脚设置为低电平。我选择了低 E 弦,即六个弦中最低的弦作为我的默认弦。当我第一次打开调谐器电源时,它会以这种默认状态启动。

Stateflow 图上有七个输出:一个用于六个串中每一个的 LED,一个称为“periodRange”,我将在后面讨论。六个 LED 输出直接进入 Arduino 数字输出模块,以打开或关闭相应的 LED。

现在让我们看看模型的音频处理部分。吉他信号通过模拟输入模块输入。对于 5 kHz 采样率,我将块的采样时间设置为 0.0002 秒。当我弹奏吉他并打开音频示波器块时,我能够看到如下所示的波形。

示波器模块帮助我调整音频电路中的电位器以改变输入增益。增益应设置得尽可能高,不要让波形的峰值达到最大值 1023。这样才能最精确地读取信号。

当吉他没有弹奏时,输入信号应该是 500 到 700 之间的一条平坦线。在我的例子中,它是大约 550。知道这个值很重要,因为调音器应该只在有音符时处理音频正在播放。我选择了 575 的值,刚好在这条平坦线之上,作为我的阈值。只有当信号高于此阈值时才会处理音频。由于 Simulink 允许我在模拟运行时调整参数,因此我可以轻松设置阈值。

在吉他上弹奏单个音符时,生成的波形是周期性的。波形的周期对应于某个音高。调音算法通过确定波形的周期来估计弦的音高。我编写了一个执行这种音高估计的 MATLAB 函数,并使用 MATLAB 功能块将其包含在我的 Simulink 模型中。为了确定字符串是否调好,MATLAB 函数需要一个输入来指示每个字符串被认为调好的周期范围。这是 Stateflow 图的输出“periodRange”。该函数根据周期范围确定琴弦的音高是否过高、过低或调音,并相应地为电机生成输出。

MATLAB 函数的输出是控制电机的三个引脚。这些输出直接进入 Arduino 数字输出模块。

一旦我确保我的算法一切正常,我就可以将它部署到硬件上,这样它就可以独立运行,无需连接到 PC 并且独立于 Simulink。

现在我可以自动给吉他调音了!

这个项目的所有必要文件都可以在这里找到:

https://www.mathworks.com/matlabcentral/fileexchange/63697-automatic-guitar-tuner-using-simulink-and-arduino

示意图

按钮电路是一个带有下拉电阻的简单开关。 LED显示电路包括6个LED和一个限流电阻。 我使用Arduino上的模拟输入引脚“A0”读取来自吉他的音频信号。 Arduino Due 读取的电压介于 0 V 和 3.3 V 之间。然而,来自吉他的信号幅度非常低并且在 0 V 附近振荡,这意味着它包含一些 Arduino 无法读取的负电压。为了解决这个问题,输入电路需要放大信号并添加直流偏移。该电路还需要提供一个低通滤波器来消除信号中的高频分量。任何采样信号不应包含高于采样率一半的频率。由于调谐器以 5 kHz 的速率对音频进行采样,因此我的电路消除了 2.5 kHz 以上的频率。我组装了如下所示的电路。 我使用连接到 L293D H 桥芯片的 Arduino 的三个数字输出引脚来控制电动调谐夹爪.该芯片允许我们根据这三个引脚的状态向任一方向转动电机或停止电机。其中一个引脚称为使能引脚,只有当使能引脚设置为高电平时,电机才会转动。另外两个引脚确定电机的方向。我按如下所示连接了电路。

制造工艺

  1. 电吉他
  2. Spork
  3. 钛合金
  4. 生物陶瓷
  5. 响板
  6. 胶水
  7. 线程
  8. 乙炔
  9. 石棉
  10. 骰子
  11. 胶合板
  12. Tin