当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]这是我的一个老项目,我从来没有完成过。废品抽屉竞赛是一个很好的机会,最终把项目带回家。这个故事中的很多文字都是6年前的,但我已经编辑了很多。

这是我的一个老项目,我从来没有完成过。废品抽屉竞赛是一个很好的机会,最终把项目带回家。这个故事中的很多文字都是6年前的,但我已经编辑了很多。

简而言之就是钟琴

钟琴,一种带有教堂大钟的钟琴,通常包括自动化装置。Netduino,这个项目的原始µC板。慈善机构。从这些话中,我想出了charillino这个名字。我还是会以某种方式加入慈善。最终的微控制器板(µC)将具有物联网功能,人们将能够从网站上选择歌曲,同时该项目为慈善机构筹集资金。

这个乐器由25个铝制琴键组成,或者说是铝制琴条,都是从我扔掉的钟琴上取下来的。我是一名音乐老师,我有太多这样的想法了。25根木条以半圆形放置在一块400 * 800毫米的木板上,这是一块来自Lundia书架的书写架。两个木槌敲打着栏杆。一个木槌连接在一个微伺服器上,执行垂直打击。微伺服连接到一个更大的伺服,使其水平转动,允许木槌在任何酒吧打击。木棒实际上是沿着两个相互重叠的半圆放置的,优化了每个木槌的击球点。从G5开始,一个木槌主要敲击小节的下端。另一个木槌敲到了G7的高端。

在每根棒子下面的木板上有一个洞,木板下面伸出一根铝管。电子管作为声音的共振器,放大声音。

一个µC板控制伺服器,使它们播放旋律。

使项目自动化

这是最大的变化,当项目适应垃圾抽屉比赛。我的一个学生送了我一个可爱的圣诞小精灵。我用粗铁线给小精灵做了一个座位。他的腿很长很邋遢,我把脚绑在木槌上,希望它们能抑制巨大的震动,这是我一直无法摆脱的。它几乎起作用了。

音乐的数据结构

我可以选择midi,但是midi解析器太复杂了,通常需要在第一个音符发出之前将整个文件读取到RAM中。相反,我采用了这样的结构:

第一个数字是音调的中音数字。第二个数字是以毫秒为单位的时间戳,第三个数字是哪个木槌在敲击,1代表低音,0代表距离。数据结构将来可能会改变,如果我想把速度作为一个参数,来改变音乐的动态。没有音符事件,因为查里利诺只是敲击小节,而不会在之后减弱它们。

在其最简单的形式中,程序读取一行,等待机器时钟传递时间戳,然后右木槌转向右钟琴条并敲击它。

但还有更多的原因。如果右边的棒子离之前的打击很远,移动到那里需要时间,所以如果木槌提前移动到那里会更好。然而,拙劣的安排可能会导致两个木槌碰撞,如果一个过早地移动到下一个小节。写得不好的安排可能会引起各种问题。

我决定依靠书面安排。如果可能的话,我会提前把木槌搬到下一个酒吧。

在Musescore中编写音乐

Musescore也许是最流行的免费乐谱编辑器。

简单的两五线谱就可以了:

在这个例子中,使用了Charillino的全系列。最高的是G7,最低的是G5。

这些注释将被转移到前面清单中所示的数据结构中。这里我们可以使用Musescore的插件系统。有一个插件可以根据特定的配色方案给笔记上色。我使用了这个脚本,跳过了上色,而是让脚本为每个音符写midi数字和事件的时间。幸运的是,有一个函数以毫秒为单位返回时间,并带有无数小数。插件中的关键行是这样的:

Cur是一个游标对象,它指向乐谱中的一个元素。它可以是休止符,和弦或者别的什么。我从游标对象读取时间,并将其舍入到毫秒(没有人会注意到亚毫秒级的错误)。和弦由一个或几个音符组成。插件遍历嵌套循环,最外面的遍历所有五线谱,下一个遍历一个五线谱中的所有和弦,最里面的遍历一个和弦中的所有音符。因此,音调的音高或中音数可以从音符对象中读取,而时间则从光标对象中读取。在我的代码中,五线谱数(它转移到木槌数)保存在五线谱变量中。运行此插件将在插件工具的控制台窗口中显示一个列表(必须在Musescore中打开)。清单看起来是这样的:

注意,在轮到下一个五线谱之前,一个五线谱的所有音符都先出现。从这里,我复制文本并将其粘贴到Libreoffice的电子表格中,在那里我根据时间戳对它们进行排序。我还添加了花括号,以适应C程序中的结构数组。然后我将其从Libreoffice复制粘贴到Arduino IDE,到char伊利诺_tunes.h选项卡。

在Libreoffice中的表单:

当我从Musescore中的控制台复制数据时,我将其粘贴到单元格A7中。重要的数据放在B、C和D列。在根据C列(时间戳)对所有内容进行排序之后,我在E列中创建代码,并将其直接复制到Arduino IDE项目中的char伊利诺_tune .h文件中。对于新曲调,我删除a列中的内容,将新数据粘贴到A7中并再次排序(a列现在显示新列表的长度)。E列很好地更新了自己,如果新的曲调比以前的更长,我只需要扩展它。

我真的应该学习Javascript并在Musescore插件中进行排序。

程序流程

在其最简单的形式中,程序将运行如下:

在char伊利诺_tunes.h文件中以结构形式存储大约10首曲调。一个只有10个音符的曲调可能是这样的:

首先,我们为一个音符事件定义Tunes结构。然后我们将一个曲调定义为音符事件的数组。最后一个元素的时间戳为9999999,作为曲子结束的标志(键和五线谱编号无关)。我可以随意命名一个曲调数组。在主程序中,我有一个指向这些曲调的指针数组:

当程序启动时,一切都设置好了,指针指向这个调音列表中的第一个元素。曲子奏起了。5秒的延迟,下一曲开始。当到达NULL元素时,指针返回到第一个元素。

当一个曲调演奏时,一个木槌等待下一个乐章的发生。首先,木槌水平移动到右边的酒吧。然后,200毫秒后,它击中了键。播放一个曲调的程序流程是这样的:

•读取每个木槌的第一个音符事件,并为之前200毫秒的水平移动创建时间戳。

•记录曲子的开始时间。注意,音符击打的第一个时间戳可能是0,所以第一个水平移动的时间戳可能是-200毫秒,但这不会导致问题,因为主时钟是millis(),总是大于1000的值。

•等待下一个时间戳。如果它是一个水平运动,做这个运动,然后再等待一次。如果是为了打击,执行打击,搜索下一个事件,为水平移动创建时间戳。这个步骤循环,直到曲子播放完毕。所以下一个时间戳可以是木槌,可以是水平运动的时间戳,也可以是击打的时间戳。

•当一个曲调结束时,等待5秒并选择下一个曲调,最终循环回到列表中的第一个曲调。

木槌如何移动

水平运动将木槌置于杆上方约30毫米的位置。击打使木槌迅速移动到棒子上方约5毫米处。如果一切都校准完美,木槌的灵活杆使木槌击中酒吧一次。木槌保持在这个位置,直到下一个水平运动发生,同时将木槌从5毫米提高到30毫米。

电路图

这个示意图展示了我在2021年是如何设计它的。原理图中显示的Arduino Leonardo恰好具有与Netduino相同的外形因素,该项目中的原始µC板。我烤了一个Netduino。我还喝了一杯,但厌倦了。. NET东西-错误的编程语言,一个乳齿象IDE。所以我现在切换到Seeeduino XIAO,稍后切换到一些ESP32板,如果我去物联网。我最初选择了一个12 V的电源和一个LM2596来把功率降低到5V。那时候我经常在大多数项目中使用12V的铅电池。

这是一个简单的设置,可以通过开关和电位器进行改进,也许还可以使用显示器。我不会在这个项目中深入讨论。

在这个项目中使用的垃圾

伦迪亚书架。我阁楼上还有很多伦迪亚的零件。对于每一个新项目,我都检查一下那里有什么。

为了这个项目,我把钟琴扔了。它实际上并不是垃圾,但有15个钟楼,一个钟楼或多或少是垃圾。

精灵。这是我的一个学生送给我的圣诞礼物。它本身不是垃圾,但我找不到任何用途,它不适合我的家庭装饰。反正我妻子也讨厌它。

给小精灵的电线。我自己也有一些粗铝线,放在我的一个杂物抽屉里,但它承受不了那么大的重量。所以我用了一些学校的生锈的4毫米铁丝,从一个堆满金属碎片的垃圾角落里拿来做学校项目。这是一种交易,因为我之前把我的旧铁旗杆捐给了我们学校。

µC板,PCA9685,临时原型板,都是从我的一个垃圾抽屉里找到的东西。再说一次,不是垃圾本身,而是垃圾中的宝石。我们都知道自己的抽屉里装满了宝石,不是吗?

实际上伺服器已经变成垃圾了。由于早期的测试用了太重的木槌,垂直伺服器上的一些齿已经磨损了,我不得不打开它们,把齿轮转到新的位置,以避免磨损的齿。下次发生这种情况时,我得把伺服器换掉。可惜金属齿轮对仪器来说太吵了。

校准charillino

一个打击包括移动垂直伺服从一个较高的位置到较低的位置。根据使用的伺服系统以及锤头的扭矩和惯性扭矩有多大,这些角度值不可能在没有测试的情况下提前设定。如果木槌打得太用力,就会粘在棒子上,发出难看的短金属声,或者木槌打了两次才落在5mm的高度。如果它打得太轻,甚至不会每次都被击中。我们想要一个清晰的单击,让振动棒发出持续的声音。

需要专门的校准程序。结果将是一个查找表,其中包含每个键和每个槌的上、下位置的最佳角度。为了让它更上一层楼,我们可以尝试通过改变上部位置来加入强音和弱音。

我的校准程序

校准程序通过在计算机上输入字母来工作。µC通过串行USB接收字母命令并发回角度值列表。下面是命令列表:

‘a’:移动到上一个键。

“f”:移动到下一个键。

‘1’:按当前参数的键。

“3”:播放三个连续的键,直到当前键来比较它们。

‘s’:将木槌的水平角度降低一个单位。

‘d’:将木槌的水平角度提高一个单位。

“w”:将击槌的上位角度降低一个单位。

“e”:将击打槌的上端角度提高一个单位。

“x”:将击槌的下位角度降低一个单位。

“c”:将击打槌的下位角度提高一个单位。

输入两个字母的角度将改变10个单位的角度。角度的数值不是以度为单位,而是在100到400的范围内。这都是关于伺服电机所需的特殊类型的PWM。我猜控制伺服电机的常规方法是servo.write(a);其中a是角度,在0到180的范围内。在这里,我使用数字来告诉脉冲在50hz或20ms周期中总共有多少个部分。

每次输入后,所有27个音调的两个阵列都被打印在串行上。如果μ C挂起,这种情况时有发生,我的电脑屏幕上总是有最新的更改。从那里,我可以将数组复制粘贴到Arduino IDE中的草图中并重新编译。校准好后,我将相同的数组复制粘贴到实际的音乐播放程序中。

好吧,本来可以更好的。但这是个管用的查利诺琴。它播放播放列表中的所有17首曲子,然后重新开始。但无法产生可识别的曲调。木槌失去了精度。那么,我会毁掉整个项目吗?不!我只需要改进一下伺服器和木槌的动力。伺服器可能需要更高的电压,或更多的安培来获得精度,必须检查。伺服系统可能需要减速,就像你在3D打印机上看到的步进电机那样。也许可以调整伺服器的工作频率,使之与摆动木槌的频率相适应。每次罢工后,伺服器可能必须关闭一段时间,以避免持续的振荡。木槌可能需要一个新的设计,以减少振动。小精灵可能需要更大的鞋子。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭