• 上海合作组织青岛峰会举行 2019-04-20
  • 遭遇隐形歧视 就业权益谁来维护 2019-04-20
  • 杨立新解读2018年天津市《政府工作报告》--天津频道--人民网 2019-04-19
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-04-19
  • 让个体诚信有力推动社会诚信 2019-04-13
  • 习近平会见巴基斯坦总统侯赛因 2019-04-13
  • 罗亦农:“残躯何足惜,大敌正当前” 2019-03-21
  • 由进口至出口再至走向世界,这一路着实不易,其中少不了无数位科研人员的奉献与牺牲。 2019-03-21
  • 查看: 26351|回复: 43
    打印 上一主题 下一主题

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

    [复制链接]
    本帖最后由 virtualwiz 于 2016-3-16 17:51 编辑







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

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

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




    想看更多~请往下翻~~


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

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

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



    2,准备材料
    有请主角出场——步进电机四枚


    控制板,开关等。每个电机需要一枚Pro Mini,或者Nano也可以。我还额外用了一个Bluno,既可以用作蓝牙接收装置,也可以用作液晶屏界面的控制器。


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


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


    螺丝、扎带(大量)等辅助材料,画板一块


    74HC04 六通道反相器一片,后面我会说明用途



    3,问题与构思


    正式开始制作之前我进行了一些测试,发现了一些问题。我会写出解决方法供参考。

    一开始我想用1片Bluno控制全部四个电机,结果无论程序代码怎么调整、优化,都表现得非常不稳定,发出异常响声或者直接卡死。这个问题至今无解,怀疑是ATMega328P的RAM不够。
    于是买了5片DF的Cheapduino,8MHz的芯片,又发现无法使用tone()函数(后来搜索了一下,Arduino NG上执行tone()函数确实有问题)。
    最终也是为了便于安装,使用了Pro Mini,与Uno相同是ATMega328的芯片,所有功能都正常。

    调试阶段遇到的另一个问题是,当我把Romeo的RX与4片Nano并起来的时候,发现它们都不工作了,但是将Romeo与Mega的RX相连是可以正常工作的。不知原因,用示波器观察RX上的波形,BLE芯片给328P的是3.3v的电平。连接Nano后电平被直接拉到了5V。简单的解决方法是,用一片74HC04反相器(Vcc=5V)将3.3v的信号反相两次,即可变成5V电平。



    4,开工


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




    先组装电机的控制板。取4片Pro Mini,焊上侧面的所有排针,用芯片座将它们固定在洞洞板上。
    LZ没有正好一样大的,只好将更长的芯片座剪开。

    将所有芯片的RX引脚连在一起,并与Vcc,Gnd一起引出。并将D6引脚(程序中可设置) 引出到电路板正面,作为信号输出。

    将电机和驱动也连接好,固定在画板上??梢圆慰脊郝虻牡缁乃得魇?。
    每个板子上都有安装螺丝的孔。但我觉得扎带比较方便,就没有用螺丝。


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


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



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



    全部完成的效果,可以上12V电试一下了。LZ用的电机驱动和稳压器可以输入9V~24V,所以接各种航模电池也没问题。

    板子上指示灯特别多,晚上开启会有意外惊喜



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

    简单介绍一下配置方法。
    插入DFRobot BLE Link,然后打开Rosegarden和Hairless,首次运行Hairless要设置波特率,如下图。


    在Rosegarden打开的情况下,将MIDI端口和串口设置好,MIDI In要选择Rosegarden:3 ,这个是默认的输出端口。


    然后就可以在Rosegarden中加载一个你喜欢的MIDI文件了,以GodFather为例。

    按下Alt-K ,再按M,使所有音轨静音。这时音轨前面的蓝灯会熄灭。

    找到你认为要演奏的通道,比如贝斯。先点亮蓝灯,然后按鼠标右键,通用MIDI设备,在1,2,3,4中可以任意选择,分别对应1,2,3,4号步进电机。

    然后切记要在Rosegarden的左下角将通道设置从auto改成fixed。LZ调试的时候在这一步卡了两天多,才发现
    然后以此类推,将其余3个通道设置好,每个通道都要将auto改成fixed。


    如果电机连接正确,并可以发出上电铃声,就可以等待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 (543.32 KB, 下载次数: 1025)

    IMG_4210.png
    推荐

    virtualwiz  版主
     楼主|

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

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

    @Ash   已经更新啦,请慢用


    点评

    开源的,就这一点比某国技术宅强10倍,赞一个  发表于 2016-4-20 19:31
    so sweet~~  发表于 2016-3-16 18:22
    沙发

    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
    不是啦不过一直想认真地给自己做一样乐器

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

    dsweiliang  版主

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

    牛到1B
    6#

    heinau  高级技匠

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

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

    源代码  中级技匠

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

    哈哈  这音乐有毒  楼主屌爆了
    8#

    virtualwiz  版主
     楼主|

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

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

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

    virtualwiz  版主
     楼主|

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

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

    10#

    virtualwiz  版主
     楼主|

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

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

    我也觉得声音好魔性:lol
    11#

    luna  管理员

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

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

    virtualwiz  版主
     楼主|

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

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

    真的嘛
    13#

    大连林海  初级技神

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

    楼主是职业玩乐器的
    14#

    virtualwiz  版主
     楼主|

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

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

    15#

    Ash  管理员

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

    V神 我可以点歌吗吗吗吗吗 [崇拜脸]
    16#

    iooops  版主

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

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

    virtualwiz  版主
     楼主|

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

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

    欢迎点歌老板的指示呀
    18#

    virtualwiz  版主
     楼主|

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

    本帖最后由 virtualwiz 于 2016-3-16 12:09 编辑
    iooops 发表于 2016-3-15 23:48
    哇 - -  V神你真是捕捉到了声音的精髓啊……

    好硕大一只彼尔德:lol


    19#

    Ash  管理员

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

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

    in the hall of the mountain king  在山魔王的宫殿
    20#

    iooops  版主

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

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

    你的比我大啊 - -
    12下一页
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    为本项目制作心愿单
    购买心愿单
    心愿单 编辑
    wifi气象站

    硬件清单

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

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

    浙江6加1开奖结果
  • 上海合作组织青岛峰会举行 2019-04-20
  • 遭遇隐形歧视 就业权益谁来维护 2019-04-20
  • 杨立新解读2018年天津市《政府工作报告》--天津频道--人民网 2019-04-19
  • 【北京海之沃车型报价】北京海之沃4S店车型价格 2019-04-19
  • 让个体诚信有力推动社会诚信 2019-04-13
  • 习近平会见巴基斯坦总统侯赛因 2019-04-13
  • 罗亦农:“残躯何足惜,大敌正当前” 2019-03-21
  • 由进口至出口再至走向世界,这一路着实不易,其中少不了无数位科研人员的奉献与牺牲。 2019-03-21