44522浏览
查看: 44522|回复: 49

ChoirBot,桌子上的迷你机械乐队

[复制链接]
ChoirBot,桌子上的迷你机械乐队图8





步进电机,作为一种相当普遍使用的机电设备,具有相当灵活的调速性能,工作时也会产生转动的嗡嗡声。既然这种电机的声音可以被控制,那就一定有变成乐器的潜质:lol

其实不光是步进电机,各种电机都可以变成乐器。曾经在YouTube上看见歪果仁将音频信号送入电机驱动,直流电机直接像扬声器似的唱了起来。再比如,玩过四轴的朋友们一定听过无刷电调、电机上电的铃声。甚至还有人利用闭环控制,让摩托车发动机奏响了星球大战主题曲…让在场观众长跪不起…..
于是我决定做个小项目,让四枚步进电机分别担当主音、贝司、节奏、弦乐的角色,随时可以在办公桌上来一场小型音乐会----听起来就像机器人组成的唱诗班,命名为
ChoirBot

-->点这里,传送到Bilibili视频专辑<--




想看更多~请往下翻~~


1,科普在先
它是怎么出声音的?
骑过摩托车没?设想你正在一条长长的路上骑行,突然将油门拧到底!脑补一下发动机的声音,是不是某种频率逐渐上升的音调?要是你忽大忽小地拧油门,控制得足够快、足够准确,你也可以用摩托车的发动机来演奏一曲,哈哈。这和步进电机演奏乐曲的道理是差不多的,只不过这回是Arduino在骑摩托车:lol

为什么用步进电机?
有两种方法让电机唱歌。
   --->  一种是将音频信号经过某种放大,直接送给电机。
   --->  另一种是用传感器获取电机的转动声,通过快速傅里叶变换(FFT)算出声音的频率,再通过比例、微分、积分(PID)计算,控制电机加速、减速到匹配的频率。
直流电机也是可以的,若是使用上述第一种方法,驱动电路非常简单,成本也低。但是电机不是处于正常(直流)的工作状态,电机轴不转,声音很小,而且没什么机械感。要是采用第二种方法,复杂程度就不用说了,对电机性能、单片机运算速度要求高,而且系统太复杂很容易受干扰,四个电机一起唱就是真的作死啦。
步进电机就不同了,静态时会刹车不受自身惯性影响,而且工业用的电机驱动非常成熟,只要送入一定频率的调速脉冲,就可以随便控制电机以任何步进速率运转,而且声音也富有机械感,像机器人在唱歌。

我喜欢的歌曲都可以直接播放吗?
不一定都可以。首先你要找到这首歌的MIDI格式文件(.mid)。这种文件跟我们平常听的mp3有很大不同,MIDI文件中存储的是一行行的指令,比如
第一秒,选择第8通道,启动A5这个音符,用小提琴的音色,力度127;第1秒半踩下延音踏板;第二秒关闭所有音符……
就是一连串这些指令构成了MIDI音乐文件,一般一首歌只有十几至一百多KB,而且在不同的声卡上,播放效果有很明显的区别。
一些吉他谱的格式,比如gp5,实际上也是midi文件,可以互相转换。要是在网上找不到你喜欢的Midi文件,你又恰巧懂乐理,可以用编曲软件自己制作。



2,准备材料
有请主角出场——步进电机四枚
ChoirBot,桌子上的迷你机械乐队图9

控制板,开关等。每个电机需要一枚Pro Mini,或者Nano也可以。我还额外用了一个Bluno,既可以用作蓝牙接收装置,也可以用作液晶屏界面的控制器。
ChoirBot,桌子上的迷你机械乐队图10ChoirBot,桌子上的迷你机械乐队图16ChoirBot,桌子上的迷你机械乐队图11

12V开关电源,和7805三端稳压器。我用7805给5个单片机供电的时候,发现管子的温度相当高,所以又用了一个开关稳压模块,将输入电压降至9V左右,再均匀分配给独立7805和Bluno上的稳压管,减少了电源部分的发热量。
ChoirBot,桌子上的迷你机械乐队图17ChoirBot,桌子上的迷你机械乐队图18

电机驱动,要选择这种带脉冲输入的。这种黑盒驱动比较贵,我用的是不带外壳的板子,带有电流、细分调节、刹车电流设置等不少功能。
ChoirBot,桌子上的迷你机械乐队图15

螺丝、扎带(大量)等辅助材料,画板一块
ChoirBot,桌子上的迷你机械乐队图14ChoirBot,桌子上的迷你机械乐队图12

74HC04 六通道反相器一片,后面我会说明用途
ChoirBot,桌子上的迷你机械乐队图13


3,问题与构思

ChoirBot,桌子上的迷你机械乐队图1
正式开始制作之前我进行了一些测试,发现了一些问题。我会写出解决方法供参考。
ChoirBot,桌子上的迷你机械乐队图2
一开始我想用1片Bluno控制全部四个电机,结果无论程序代码怎么调整、优化,都表现得非常不稳定,发出异常响声或者直接卡死。这个问题至今无解,怀疑是ATMega328P的RAM不够。
于是买了5片DF的Cheapduino,8MHz的芯片,又发现无法使用tone()函数(后来搜索了一下,Arduino NG上执行tone()函数确实有问题)。
最终也是为了便于安装,使用了Pro Mini,与Uno相同是ATMega328的芯片,所有功能都正常。
ChoirBot,桌子上的迷你机械乐队图4ChoirBot,桌子上的迷你机械乐队图3ChoirBot,桌子上的迷你机械乐队图6
调试阶段遇到的另一个问题是,当我把Romeo的RX与4片Nano并起来的时候,发现它们都不工作了,但是将Romeo与Mega的RX相连是可以正常工作的。不知原因,用示波器观察RX上的波形,BLE芯片给328P的是3.3v的电平。连接Nano后电平被直接拉到了5V。简单的解决方法是,用一片74HC04反相器(Vcc=5V)将3.3v的信号反相两次,即可变成5V电平。
ChoirBot,桌子上的迷你机械乐队图5ChoirBot,桌子上的迷你机械乐队图7


4,开工

ChoirBot,桌子上的迷你机械乐队图23
写这个固件的时候参考了Arduino官方社区的 greg-kennedy的帖子 http://forum.arduino.cc/index.php?topic=79326.0,他提出了Arduino制作简易合成器的方法。
为四片Pro Mini烧写固件。在这个项目中,4片芯片的串口RX是连在一起的,为什么能够发出不同声部的音乐呢?
秘密在此处:程序开头的地方有一个myChannel的宏定义,它定义的是芯片将会接收哪一个MIDI通道上的内容。(一般最多有16个通道)
明白了吧?比如下载第一个芯片时,设置成0x00,第二片设置成0x01............第四片设置成0x03。只有这里需要手动改一下。


ChoirBot,桌子上的迷你机械乐队图24

先组装电机的控制板。取4片Pro Mini,焊上侧面的所有排针,用芯片座将它们固定在洞洞板上。
LZ没有正好一样大的,只好将更长的芯片座剪开。
ChoirBot,桌子上的迷你机械乐队图19ChoirBot,桌子上的迷你机械乐队图21
将所有芯片的RX引脚连在一起,并与Vcc,Gnd一起引出。并将D6引脚(程序中可设置) 引出到电路板正面,作为信号输出。
ChoirBot,桌子上的迷你机械乐队图22
将电机和驱动也连接好,固定在画板上。可以参考购买的电机驱动的说明书。
每个板子上都有安装螺丝的孔。但我觉得扎带比较方便,就没有用螺丝。
ChoirBot,桌子上的迷你机械乐队图20

当你固定完四个电机后,如果你不需要蓝牙和液晶屏的部分,这个程序已经可以让你的乐队试着演奏一曲了。具体怎么演奏请往后看。
ChoirBot,桌子上的迷你机械乐队图25

如果用Bluno作为蓝牙接收器就需要一片74HC04六非门,来转换一下BLE芯片的逻辑电平。
将RX信号输入任意一个非门A,再将A的输出连接B的输入,B的输出引出,相当于将信号翻转了两次,3.3V的电平就变成5V了。
(此处明天补充一个电路图)


ChoirBot,桌子上的迷你机械乐队图26
接着是自由发挥部分,液晶屏、开关可以随便接,DIY一个可以显示信息、调试电机的东西。这个代码LZ写得仓促,很乱,就不发上来迷惑大家了

ChoirBot,桌子上的迷你机械乐队图28

全部完成的效果,可以上12V电试一下了。LZ用的电机驱动和稳压器可以输入9V~24V,所以接各种航模电池也没问题。
ChoirBot,桌子上的迷你机械乐队图27
板子上指示灯特别多,晚上开启会有意外惊喜
ChoirBot,桌子上的迷你机械乐队图29


说一下电脑端的设置,LZ用的是Linux系统,上面有一款超级强大的MIDI工作站软件,叫Rosegarden,而且是免费的。
  1. sudo apt-get install rosegarden
复制代码
要实现串口到MIDI转换,还需要一个非常小巧但非常实用的工具:Hairless MidiSerial.可以在这里下载
  1. http://projectgus.github.io/hairless-midiserial/
复制代码

简单介绍一下配置方法。
插入DFRobot BLE Link,然后打开Rosegarden和Hairless,首次运行Hairless要设置波特率,如下图。
ChoirBot,桌子上的迷你机械乐队图30

在Rosegarden打开的情况下,将MIDI端口和串口设置好,MIDI In要选择Rosegarden:3 ,这个是默认的输出端口。
ChoirBot,桌子上的迷你机械乐队图31

然后就可以在Rosegarden中加载一个你喜欢的MIDI文件了,以GodFather为例。
ChoirBot,桌子上的迷你机械乐队图32
按下Alt-K ,再按M,使所有音轨静音。这时音轨前面的蓝灯会熄灭。

找到你认为要演奏的通道,比如贝斯。先点亮蓝灯,然后按鼠标右键,通用MIDI设备,在1,2,3,4中可以任意选择,分别对应1,2,3,4号步进电机。
ChoirBot,桌子上的迷你机械乐队图33
然后切记要在Rosegarden的左下角将通道设置从auto改成fixed。LZ调试的时候在这一步卡了两天多,才发现
然后以此类推,将其余3个通道设置好,每个通道都要将auto改成fixed。
ChoirBot,桌子上的迷你机械乐队图34
ChoirBot,桌子上的迷你机械乐队图35
如果电机连接正确,并可以发出上电铃声,就可以等待BLE连接好后,点击播放按钮试试了:lol
要是没反应,检查Bluno的收发指示灯有没有闪烁。也许是Hairless的端口没有选对。有时关闭Hairless桥重新打开可以解决问题。
建议勾上Debug MIDI messages来看看有没有数据送出。



5,演出开始!
在你将这个装置搬上舞台之前,也许需要仔细调试才能确保电机发出最好的声音。比如,负责贝斯的电机很有可能声音太大,并导致桌子上的东西共振,甚至跳起来。你可以拨动驱动板上的开关来取消贝斯电机的细分设置,或者减小电流。
Tocatta and Fugue


GodFather


歌唱祖国


Country Roads


In the Hall of the Mountain King


时间太晚了,LZ没能一天赶出所有视频和更加详细的说明,请待我明天继续补充,谢谢大家!

IMG_4210.png

virtualwiz  中级技匠
 楼主|

发表于 2016-3-16 17:57:14

Ash 发表于 2016-3-16 13:26
in the hall of the mountain king  在山魔王的宫殿

@Ash   已经更新啦,请慢用


回复

使用道具 举报

charlesshi  学徒

发表于 2016-4-20 19:28:36

本帖最后由 charlesshi 于 2016-4-20 21:55 编辑

视频: 【技术帝】only my railgun马达演奏版


视频: 技术宅! 机械硬盘演奏only my railgun



好多年前看过,日本技术宅坐的,这次终于在arduino实现了,话说,51都能做出来的,arduino肯定没问题,哈哈

arduino让电脑可以控制外界的输出,或者让外部的输入能控制电脑,算是给PC加了个可自定AD,DA吧,哈哈

以前电脑只能玩软件编程,现在可以通过arduino开发,自由与外界交互啦,哈哈,做硬件的也能玩电脑啦,哈哈
回复

使用道具 举报

hnyzcj  版主

发表于 2016-3-15 06:43:24

楼主是职业玩乐器的吗?
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 07:32:58

hnyzcj 发表于 2016-3-15 06:43
楼主是职业玩乐器的吗?

不是啦:lol不过一直想认真地给自己做一样乐器
回复

使用道具 举报

hnyzcj  版主

发表于 2016-3-15 08:42:31

virtualwiz 发表于 2016-3-15 07:32
不是啦不过一直想认真地给自己做一样乐器

你这套东西不光吊爆了,而且还有技术含量,哈哈
回复

使用道具 举报

dsweiliang  初级技神

发表于 2016-3-15 08:42:49

牛到1B
回复

使用道具 举报

heinau  高级技匠

发表于 2016-3-15 10:14:35

卧槽V神新作真的是。。牛掰到炸裂!!!
#妈妈问我为神马要跪着看视频系列#
回复

使用道具 举报

源代码  中级技匠

发表于 2016-3-15 11:09:16

哈哈  这音乐有毒  楼主屌爆了
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 12:27:01

hnyzcj 发表于 2016-3-15 08:42
你这套东西不光吊爆了,而且还有技术含量,哈哈

哈哈多谢还有不少不完善的地方望大家提出建议
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 13:01:36

heinau 发表于 2016-3-15 10:14
卧槽V神新作真的是。。牛掰到炸裂!!!
#妈妈问我为神马要跪着看视频系列# ...

回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 13:02:02

源代码 发表于 2016-3-15 11:09
哈哈  这音乐有毒  楼主屌爆了

我也觉得声音好魔性:lol
回复

使用道具 举报

luna  初级技神

发表于 2016-3-15 16:06:36

v神,给你开个音乐会吧~~有木有兴趣?
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 16:17:28

luna 发表于 2016-3-15 16:06
v神,给你开个音乐会吧~~有木有兴趣?

真的嘛
回复

使用道具 举报

大连林海  初级技神

发表于 2016-3-15 19:03:08

楼主是职业玩乐器的
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-15 19:26:29

大连林海 发表于 2016-3-15 19:03
楼主是职业玩乐器的

回复

使用道具 举报

Ash  管理员

发表于 2016-3-15 20:57:35

V神 我可以点歌吗吗吗吗吗 [崇拜脸]
回复

使用道具 举报

iooops  中级技匠

发表于 2016-3-15 23:48:07

哇 - -  V神你真是捕捉到了声音的精髓啊……
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-16 12:04:10

Ash 发表于 2016-3-15 20:57
V神 我可以点歌吗吗吗吗吗 [崇拜脸]

欢迎点歌老板的指示呀
回复

使用道具 举报

virtualwiz  中级技匠
 楼主|

发表于 2016-3-16 12:06:49

iooops 发表于 2016-3-15 23:48
哇 - -  V神你真是捕捉到了声音的精髓啊……

好硕大一只彼尔德:lol


回复

使用道具 举报

Ash  管理员

发表于 2016-3-16 13:26:26

virtualwiz 发表于 2016-3-16 12:04
欢迎点歌老板的指示呀

in the hall of the mountain king  在山魔王的宫殿
回复

使用道具 举报

iooops  中级技匠

发表于 2016-3-16 14:33:48

virtualwiz 发表于 2016-3-16 12:06
好硕大一只彼尔德

你的比我大啊 - -
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail