首页 » 排名链接 » DIY一套便宜好用的电子爵士鼓(鼓面好用爵士鼓电子可以用)

DIY一套便宜好用的电子爵士鼓(鼓面好用爵士鼓电子可以用)

落叶飘零 2024-11-01 13:26:18 0

扫一扫用手机浏览

文章目录 [+]

主要的电子设备是一块Arduino MEGA开发板,还有压电陶瓷片——它可以用电压表示其表面压力的变化率,从而起到采集鼓面震动情况的作用。

制作过程

1 先从制作鼓面开始。
为了降低敲击噪声,我用双面胶在木板上粘贴了一层2mm厚的软橡胶(你也可以用鼠标垫代替)。
这样既可以灵敏地测到数据,木板本身又不会发出太大的声响。

2 然后在没有橡胶的一面粘上压电陶瓷片(也叫压电震动传感器,或者piezo)。
如果是新的元器件,焊接导线可能有一点难度,需要涂上助焊剂,用合适的温度快速焊上。
此外提醒,传感器片不可以用502胶水粘贴,502胶水会腐蚀压电陶瓷。
在元器件两端并联一个1kΩ的电阻,防止元器件产生太高的电压。
完成后可以用示波器测试元器件的输出电压,确保即使大力敲击木板,元器件也不会产生高于5V的电压,因为Arduino的ADC最大只可以承受5V的输入。
将这些元器件用胶布固定好,制作出不同大小的多个鼓面。

DIY一套便宜好用的电子爵士鼓(鼓面好用爵士鼓电子可以用) 排名链接
(图片来自网络侵删)

3 然后就可以将制作好的鼓面固定在支架上了。
我用了M10丝杆和螺帽,以及自己设计的3D打印件。

4 踏板很好制作。
如果不需要力度响应,用两个键盘的延音踏板即可(实际为脚踏开关)。

5 接下来测试下位机端的程序。
图中所示为Arduino Nano,因为其模拟输入口数量不够,最终换用Arduino MEGA。
设计一块扩展板,以便用你喜欢的接口连接各个鼓面。

6 将鼓面按程序中设定好的顺序分别连接板子的I/O口,硬件部分就全部完成了!

PC端软件

这里需要在安装Linux操作系统的PC上安装以下软件:

(1)Jackd:这是一个简单易用的MIDI、ALSA接口管理器;

(2)Qjackctl:Jackd的GUI界面,可能会自动安装上;

(3)Fluidsynth:MIDI合成器;

(4)Qsynth:Fluidsynth的GUI;

(5)Fluid-soundfont-gm:免费的MIDI音色库;

(6)Hairless-Midiserial:MIDI-串口转换器。

如果需要编曲、伴奏等更高级的功能,还需要rosegarden等音序器应用程序。

将它们分别打开,进行一些设置。

1 打开Hairless的Settings,设置好对应的波特率,然后选择Arduino的串口号,在“Serial<->MIDI Bridge On”前打钩,此时Arduino会重启。

2 打开QSynth的Setup,切换到Soundfonts选项卡,单击“Open”加载Fluid音色库。

3 最后一步,打开Qjackd 的Connects窗口,在ALSA选项卡中,将Hairless的输出端口连接到Fluid的输入端口上,大功告成!

4 在QSynth的Channels窗口中选择第10通道,可以切换很多种鼓的声音。

设置好这些后,就可以试着演奏了,电脑的扬声器中会实时播放出你敲击的鼓面所对应的声音。

MIDI协议

Arduino向PC发送信息的代码片段如下:

void midiSend (int cmd, int pitch, int velocity) {

Serial.write(cmd);

Serial.write(pitch);

Serial.write(velocity);

}

这种通信协议就是MIDI协议。
标准的乐器MIDI有其特定的波特率(31250)。
因为我们这里可以使用串口-MIDI转换,所以可以随意设置波特率。
一句MIDI指令包含3字节数据:

(1)MIDI命令,就是启动或者停止一个音符;

(2)音符,指定要传送的是哪个音符;

(3)力度,这个音符的演奏力度强弱。

//Adjust this if your pads are

dull or too sensitive

//{crash, hat, snare, tom_bass, crash_right, tom_high, tom_low}

unsigned char adc_cutoff[7]=

{3,3,10,7,3,3,3};

//minimum strength

unsigned char adc_limit[7]=

{40,10,30,50,40,10,10};

//maximum strength

以上这段代码是每个鼓面力度范围设置,请根据制作所用的材料和结构不同进行设置,如果某些鼓面不灵敏,或者过于灵敏,这些值有可能需要大幅调节。

然后,程序会轮询收集来自各个传感器的数据并判断两个踏板的开关量。

for(byte count=0;count<=6;count++)

{

adc_sample[count]=map(analogRead (adc_channel[count]),0,1023,0,254);

}

因为在一次敲击过程中,鼓面可能会振动一小段时间,可能会使Arduino采集了太多次,向电脑发送大量数据,导致电脑停止响应。
简单的解决方法是,在每次采集过程的最后加一句“delay(5);”。
这种方法不会降低实时性。

以上这些就是制作这套Arduino架子鼓的一些经验。
基于这种思想,还可以做出很多不一样的乐器,以及多用途控制器等产品。

(此处已添加圈子卡片,请到今日头条客户端查看)
标签:

相关文章