我如何制作数字迷你吉他

图片



在本文中,我将尝试概括地描述从概念到可用原型的实现创建设备的路径。



我叫德米特里·杜达列夫(Dmitry Dudarev)。我从事电子产品的开发,并且非常喜欢创建各种便携式设备。我也喜欢音乐。六个月前,我从朋友那里借了一把原声吉他,尝试从YouTube的课程和编排中学习如何弹奏。那个挺难。我做错了什么,或者我做错了,或者在祖先的社会中,良好的运动技能损害了生殖能力。无论如何,除了嘎嘎作响的声音对我来说什么都没有。琴弦的不断失谐加剧了我的愤慨。我周围的人千分之一次地不喜欢听我的曲调。



但是在这些痛苦中,我没有忘记电子工程师的主要规则。如果存在,则可以在其中插入微控制器。或至少进行便携式电子修改。





理念



数字吉他的结构开始浮现在脑海。



首先,我列出了该设备的要求:



  1. 设备应在指板上模拟6弦12品格的吉他
  2. 应该紧凑,理想情况下是可折叠的,因此无论您走到哪里都可以随身携带
  3. 应该连接到所有流行的轴-Android,IOS,Windows,Linux,MacOS,并在那里被定义为没有任何驱动程序的MIDI设备
  4. 电池操作
  5. 连接应以无线方式进行(但由于会有USB连接器进行充电,因此也可以通过电线进行连接)
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


当然,对于移动平台,您将需要编写一个应用程序,在该应用程序中,您可以选择用于通过LED进行教学的制表法,选择一种乐器(声学,古典,具有各种滤波器预设的电吉他等)并播放声音。



从理论上讲,您应该获得一种紧凑的乐器,可以像吉他一样演奏,没有模拟缺陷,并配备了视觉训练系统。

听起来可以实现。



类似物



因此,首先,我想到了如今几乎不可能提出新的东西并且已经有人做过的想法,我去谷歌搜索。实际上,事实证明,第一款数字吉他是1981年制造的,但是由于功能有限,它并未得到广泛使用。







也有现代紧凑型Midi吉他,但它们是为更专业的目标受众而设计的,价格昂贵,最重要的是没有“推光”模式。iPad甚至还有奇异的选择,而不是弦乐或类似蛤lam。







这样就可以开始了。



概念证明



我决定从概念验证开始。匆忙的最小原型。

首先,您需要确定元素基础。



控制器



在我的项目中,我主要使用STM32。它们功能强大,价格便宜,价格适中。选择STM32F042。它具有一个USB(以及一个特殊的内部48MHz振荡器,以免挂在外部石英上),一个32位内核和所有必需的外围设备。而这一切不到一美元。



我决定将无线连接留给下一个迭代。



甲板上的



弦线作为弦线,我决定打印塑料簧片,将它们固定在带弹簧的电位器上,并测量偏转角。



实体模型并打印以评估人体工程学。











事实证明,触摸效果很好。应该管用。



脖子传感器



吉他应该有6弦和12品格。脖子上总共有72个传感器,甲板上还有6个。一个人可以在每个元素上使用一个勾号按钮,但首先,它们会单击,其次,它将无法实现幻灯片或颤音之类的技术。我也想确定压力。



应变片似乎最适合此任务。它们根据工作区域上的压力改变其阻力。







事实证明,要找到合适数量的销售非常困难,而且价格昂贵。我不得不订购阿里。



ADC



需要一个ADC来读取每个传感器的状态。 STM中只有少数几个传感器,因此您将需要其他一些东西来轮询78个传感器。可以使用外部多通道ADC芯片,但是它们太昂贵了。因此,我决定安装5个便宜的16通道模拟多路复用器CD74HC4067,并将每个STM ADC通道连接一个。



费用



在开始测量之前,请启动电路板。传感器引线很长,因此我们必须将它们重叠。















在订购电路板印刷之前,我决定等待应变计。而且,事实证明,这并非徒劳。



在这80个传感器中,只有少数几个在工作,然后具有不同的参数。







它们与卖方网站上的图像明显不同,更糟的是。



什么也我希望阿里?购买电子时..



然后我恍然大悟。



毕竟,您可以应用另一种检测方法-与触摸传感器一样测量电容。它便宜得多而且负担得起。而且,如果您正确地设计了力学,则可以确定工作量。



好。我删除所有已完成的操作。







重新再来



在简约概念验证的新版本中,我选择了从4毫米铜棒上锯开并焊接到板上作为传感器元件的圆柱体。



现在我们需要弄清楚如何测量78个容器。



传感器调查经过



一番摸索,我发现有很多微电路-触摸键盘的控制器。其中我们设法找到了便宜的12通道通用电容表。它以皮法拉单位为单位测量电容,这对于我计划在下一个修改中实现的力测量电路应该足够了。

另外,以防万一,我在每个脖子上都挂了一个纽扣或类似物的座位。他在板上开孔,这样您不仅可以触摸圆柱体,还可以将其挤压到内部。您可以尝试不同的演奏技巧。



该微电路通过I2C接口连接,并具有2个用于设置地址的配置引脚。因此,一条总线上最多可悬挂4个微电路。我需要12。没问题,我将它们分为三组,并通过多路复用器将它们连接到STM总线。















这次,我们设法订购了板,甚至等待其生产。



密封套件,铜制圆柱体和电位计后,我意识到带塑料弦的设计太复杂了。因此,就目前而言,我决定将相同的传感器圆柱体悬挂在甲板上,但更为真实。为了不重做整个电路板,我做了一个小的覆盖并将其连接到第二条I2C STM总线。







铁片准备好了。下一个任务是扮演她。



软件



该计划如下:



  1. 下载可以与MIDI设备配合使用并产生吉他声音的虚拟合成器。
  2. 编写固件,该固件将轮询传感器并将结果通过USB自定义HID接口每秒传输约100次。
  3. 编写一个将接收此数据,模拟虚拟MIDI设备,生成MIDI数据包并将其发送到虚拟合成器的python程序。


我决定弄清楚如何稍后再假装成为MIDI设备。



如何再现声音?



有许多支持MIDI的Windows虚拟合成器。我在Kontakt的RealGuitar,FL工作室尝试了Ableton live。我停在RealGuitar,因为它的吉他简单且精确。他甚至知道如何模仿人类演奏的不完美之处-手指在琴弦上的滑动,音符的随机参数。







连接到虚拟合成器



对于python,我们设法找到了可以模拟虚拟midi端口的mido库,该库可以通过“ loopmidi” midi电缆的外部仿真器连接到虚拟合成器的输入。







在程序界面中,我以图形方式显示了每个传感器测得的电容水平,以简化滤波器的调整。另外,为了将来,我添加了LED控件,振动电机(我尚不知道为什么,但也将在吉他中使用),加速度计的可视化效果和电池电量。







为了敲击吉他弦以触发正确的音符,指板上的所有72个传感器必须映射到适当的音符。



事实证明,在12个品格的72个元素中,只有37个是独特的音符。它们是按照一定的结构排列的,因此,不用建立一个大桌子,而是可以导出一个简单的方程式,该方程式将相应的音符编号与传感器编号一起给出。







测试



看起来一切准备就绪,可以进行第一次测试。我懒得看杆子并焊接所有12品格,所以我将自己限制在第8位。关键时刻:





它还活着!该概念的可行性已得到确认。幸运的是,没有限制!但是你不能放松。



下一步是在所有流行的平台上添加LED,加速计,振动电机,电池,无线设备,外壳以及无需驱动程序或Midi仿真程序即可工作的功能。



LED



要连接84个LED,我选择了14个8位移位寄存器的最简单菊花链。将它们连接到STM的SPI MOSI引脚并通过DMA发送数据阵列非常方便,而无需内核的参与。



加速度计



我对加速度计没有任何特殊要求,因此我选择了最简单的LIS3D。有了它,吉他将确定其相对于水平线的倾斜度,这将允许您在用手演奏时调节各种声音滤波器。



无线



对于无线数据传输,我决定安装ESP32。它支持各种蓝牙和WI-FI协议,会有一些试验(当时我还不知道在我的情况下只有一种正确的连接方式)。



主体



主体必须是可折叠的,因此甲板和颈部的电子设备必须分成两块板,并通过带状电缆连接。



当琴颈打开时,由于琴颈上的磁铁靠近盖板上的霍尔传感器,将打开电源。



入门



在尝试各种触觉颈部设计和LED扩散器方面,已经做了很多工作。我希望元素的整个表面均匀发光,同时保持检测触摸和按下按钮的能力。







我找了一个专业从事工业设计的朋友。我们提出了吉他弯曲装置的设计,然后他设计并印刷了原型琴体。







似乎所有事情都考虑周全,您可以开始对电路板进行布线。























MIDI设备



首先,在新版本中,我希望将吉他通过USB连接时检测为MIDI设备,而无需任何其他程序。



事实证明,这样做并不是那么困难,所有规范都在官方网站usb.org上。但是必须在控制器中的C中重写在Python应用程序一侧执行的所有算法。



我很惊讶它立即在所有设备上都起作用。 Windows 10,MacOS,Debian 9,Android(通过USB适配器)。只需插入电线,一个名为“ Sensy”的MIDI设备就会出现在系统中,并且被所有合成器识别。我还无法使用iPhone进行测试。没有适配器。但是它应该以相同的方式工作。







无线接口



下一个挑战是无线完成工作。



我太懒了,无法立即使用Google,所以我花了几天的时间测试各种无线接口。我立即解雇了BLE,因为在我的脑海中,“低能耗”与低数据包速率密切相关。在客户端模式下尝试WI-FI,在热点模式下尝试WI-FI,在SPP模式下尝试蓝牙等。到处都存在相同的问题-巨大的延迟(每眼超过100毫秒)和不均匀的数据包到达时间。这使游戏无法进行。



我正准备放弃并制作一个单独的加密狗,该加密狗会插入手机或计算机的USB中,并通过自定义收音机接收吉他的数据。



但是后来我偶然偶然发现了新版本的BLE协议的规范,发现最小连接间隔为7.5ms,这完全符合我的要求。



此外,事实证明,存在一个BLE MIDI协议,所有新操作系统都支持该协议,并且该协议无需USB MIDI等任何驱动程序即可工作。



唯一的问题是,通常只有相对较新的平台才支持如此短的连接间隔和BLE MIDI。细节仍有待观察,但是对我可用的设备的测试是成功的。



一些新iPhone甚至预装了虚拟Garage Band合成器,能够产生高质量的吉他声音(如果没有,您可以从App Store免费下载)。



固件



编写了所有必要的最低限度功能后,我完全依靠了STM闪存的大小。只有168个字节保持空闲状态。显然,硅神很喜欢我,这意味着我朝着正确的方向前进。







可能会更深入地优化代码并显着减少占用的内存量,但在下一版本中使用较厚的控制器会更容易,后者的成本增加了5美分,并且不会浪费时间。而且,您永远都不知道要添加哪些其他功能。

但是最低的功能还不够,您仍然需要使用游戏技术。首先,我要实现幻灯片。这是当您开始用固定的品格弹奏音符并将您的手沿琴颈滑动时,从品格跳到品格的时候。



我已经对USB有了一些乐趣,因此您可以注释掉与USB相关的所有代码以及可用内存。您还可以进行无线测试:





如果您在黑暗的洞穴中迷路,可以使用所有LED亮起的吉他。







这种设计的缺点是什么?



  1. 在传感器上,没有在任何地方测量压力。这带来了三个问题:

    • 甲板和指板上的相邻弦乐不断受到随机敲击。这使游戏非常具有挑战性。
    • 所有演奏的音符都以相同的音量演奏。大多数主体并没有注意到这一点,但是我想更接近真实的吉他演奏。
    • 无法使用锤击,拉动和颤音技术
  2. LED是一种颜色。这会限制演奏表谱时的清晰度。我希望能够用不同的颜色指示游戏的不同方法。
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



我将移至STM32F07系列控制器。它已经具有128KB的闪存-足够用于任何功能。甚至是复活节彩蛋。



在吉他的最终版本中使用ESP32太过胆了,所以我去寻找更正统的东西。在可访问性,文档可用性和站点充分性方面,选择取决于NRF52。



当然,还将实施三项重大创新:



  • LED现在是RGB,
  • 棒的每个传感器上都会进行力测量(不再需要轻触按钮),
  • 音板上的弦将移动。


此刻,盖板看起来像这样(以防万一,我留下了ESP的足迹):





该项目称为Sensy,目前正在积极开发中。已经完全有信心将实现所有计划的功能,因此决定进一步开发。



我们在圣彼得堡,现在团队由两个人组成:我负责技术部分,我的合伙人-市场,财务,法律事务。



如果在船体设计或移动开发领域的Jedi读者中希望加入该项目,请随时随地给我写信。



谁有兴趣关注该项目的新闻-在网站上的表格中留下邮件并订阅社交网络。



我真的希望从Habrasocommunity反馈意见和建议!



开发过程中的有趣片段
NRF52, UART. . , , , .



– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».



NRF- ? . , ? - . , NON GENUINE DEVICE?



, , ftdi , USB-UART , . , . , .



.



感谢您的关注!



All Articles