项目简介 - 电子扬琴

大概是2014年底,参加上海纽约大学的黑客马拉松比赛项目。

主要技术###

--硬件技术:焊接,小到wii cam 摄像头模块0.5mm的焊盘间距,大到0805电阻电容IIC电平转换电路,都是我们一丝不苟焊接完成

pic
pic


--软件技术:
1. IR 红外摄像头wii cam的使用
2. 压电传感
3. Arduino 编程

应用场景###

很多小孩子都很有可能学习一到两种乐器,其中有很多,其实都是按照家长的意愿在学习。比如有的孩子可能天赋是钢琴,家长却让他学了二胡,有的孩子天赋是扬琴,家长却让学了萨克斯。如果能够在决定学习那种乐器之前就能发现孩子真正的兴趣所在,岂不是更好?
我们以扬琴为例,在还没有决定是否学习之前,铺上一块扬琴桌布,先让孩子完成测试,看看是否有这方面的天赋。换一块架子鼓桌布,就可以测试一下是否有架子鼓方面的天赋。
选择一种孩子真的有兴趣并且是天赋所在的乐器来进行学习,不但能让孩子发展的更好,更重要的是,这个发展的成长的过程是快乐的。

比赛收获

在整个比赛中,我用自带的恒温焊台和示波器,同何老大一起enable了压电传感部分、IIC电平转换、wii cam模块外围电路。
和三名队友一起拼搏24小时,并一同坚持到最终的expo 以及 presentation。收获的不单是奖品,更是和队友一同奋斗的快乐和珍贵的记忆。
我们做的项目跟硬件相关性比较大,我们自带了恒温焊台以及示波器等设备,在整个项目中起到了非常大的作用,增进了基本功。
从项目的选题直到最后做出来,我们的领袖&PM飞飞姐非常认真的帮我们做好了规划,思路清晰,目标明确,保证了我们能在24小时完成。
而在presentation和expo的时候,领袖光芒再次绽放,不管是一个评委的评审,还是百人的expo,都能收放自如临危不乱,将我们的24小时的工作与努力完美地展现给每一个观众、评委。

期待提高

事先准备的较少,可以提前思考一下会做什么东西,哪些工具可能用上的可能性比较大,事先准备好,以及,工欲善其事必先利其器,电脑、工具软件等都应该提前准备好。
下次如何做的更好:积极地思考,在日常工作生活中思考有可能存在的有用的创意点,同时也天马行空的思考一些点子,这样在参加黑马的时候有很多想法可以跟队友交流,另外也需要曾进自己各方面技术。

总结为一下几点:
1.强化技术部分,更加深入地了解开发的每一个环节,如何起步,如何测试,发现问题如何快速定位并解决。
2.多与其他人进行交流,了解别人的项目,包括项目的技术价值、创新点、进展。
3.更多地接触新鲜的技术,当下不同的技术层出不穷,从硬件到软件,从前端到后端,广泛接触研究,“好读书,不求甚解”。

后记

回到学校,睡到第二天中午11点,总算是休整过来了,想想我们的项目,感觉还是有些不完善的地方,比如声音。虽然能有声音发出,但是并没有形成音阶,更没法让用户敲击出旋律。为什么呢?这是一个比较头疼的问题。在最后的2小时内,sommily就在解决这个问题,但是没有解决出来。现在静下心来,我来试试。打开Arduino IDE,导入MIDI库,测试一下

    int m=60;
    MIDI.sendNoteOn(m,120,7);
    delay(500);
    MIDI.sendNoteOff(m,0,7);
    delay(500);

发现可以播放出一个音符,回想起来,当时sommily一直没有解决的问题是就是这个 m 和真实的音符音高的对应关系。分析一下,这个 m 的最大值是127,而大一些的钢琴也就88键,所以很有可能一个相邻键位对应的m值相差是1。于是进行了如下的测试:

    int m=61; // fa
    MIDI.sendNoteOn(m,120,7);
    delay(50);
    MIDI.sendNoteOff(m,0,7);
    delay(50);
    m=63;  // so
    MIDI.sendNoteOn(m,120,7);
    delay(50);
    MIDI.sendNoteOff(m,0,7);
    delay(50);

视听了一下效果,Ding! 听起来好像是音符 Fa 和 So, 而最开始的m=60像是 Mi 。Bingo!验证了猜想,因为Mi的升音(升Mi)就是Fa,而#Fa(升Fa)对应的应该是就没有测到的62。
接下来继续验证,果然就是这样。
现场马拉松时候另一个没有完美解决的问题是:评分显示。冷静思考一下,因为MIDI的使用使得唯一的串口被占用,无法通过串口显示出评分,那怎么办?当时没有做出来。其实还有那么多数字IO口没有使用。如果使用7段数码管,那样两位数的分数就需要至少14个IO口,数量不够。对了,要使用1602液晶模块的话就可以了!只需要4个数字IO口,并且Arduino库中自带1602的库,调用也很简单。