站内搜索
发作品签到
专业版

专业级全键盘电子钢琴

工程标签

7.2k
0
0
36

简介

专业级全键盘电子钢琴(88键),支持和弦、伴奏、按键指示及自动播放等功能

简介:专业级全键盘电子钢琴(88键),支持和弦、伴奏、按键指示及自动播放等功能
星火计划2025

开源协议

GPL 3.0

创建时间:2025-10-11 14:30:58更新时间:2025-11-28 15:20:55

描述

简介:专业级全键盘电子钢琴(88键),支持按键指示及自动播放等功能,使用分块电容按键组合形式,减小了PCB制作尺寸,通过IO扩展芯片等采集按键、通过正弦计算叠加到DAC进行DMA传输、进而合成键音。

视频介绍:https://www.bilibili.com/video/BV1ohUmB7EPt/

程序:https://gitee.com/lovelessing

1,硬件组成

作为全键钢琴,标准钢琴的键盘区宽度约为122cm,由于PCB工艺限制没法生产那么大的PCB,所以分成7块进行设计

最左侧的15键模块、最右侧的13键模块和中间5块12键的模块,正好PCB打样是5块,一个都不浪费,并且15键、13键也可以复用12键的设计

每个按键使用PT2041电容按键检测芯片设计,TOG拉低使用同步输出模式,AHLB拉高反转输出,按下时输出低电平,用10K电阻拉高输出

12键模块使用12个完全一样的设计

然后把所有电容按键输出接到IIC接口的IO扩展芯片上,通过IIC来读取按键状态。

最终把IIC接口接到连接端子上,通过连接线把所有的IIC设备连接到一起,同时也预留了CAN接口,还可以使用CAN总线来做按键通信,但是成本略高,需要自行斟酌

板子需要做成白色阻焊,正好作为白按键,黑色阻焊对应黑按键

CN3,CN2用于两侧的板子对接,将所有的IIC和CAN链接到一起,将按键通过总线汇报给主机。CN1用于给预留芯片下载程序

13键在12键的基础上多增加1路

15键在12键的基础上多增加3路,最终板子拼接到一起组成1.22米长的钢琴按键区。

这是主板,用来读取按键状态,然后播放钢琴音频,支持和弦播放。正面的屏幕用来控制音量、伴奏、演奏模式等等。喇叭用来播放钢琴音。

背面使用一块衡山派来作为主控芯片,因为作者已经先通过衡山派在RTT环境下调试出来音频混合播放功能了,所以就这么决定了,PS:本来想用AT32的。

有的小伙伴就说了,你是不是不会画板子,欸,这就有了。基于衡山派改的专门用来作为钢琴控制器的板子就来了。

取消了背面元件,贴起来成本低一点。

设计按键的时候比较匆忙,没有加指示灯,当然也跟板子有关系,塞不下了,不是按下去就亮的指示灯,而是独立控制的,比如需要先根据乐谱点亮指示灯,然后用户跟着指示灯按按键,这是就不能把指示灯加在电容按键芯片输出上了,必须要独立控制,这样的话使用如果IIC扩展,那么PCA9555的3位可编辑地址就不够了,使用单片机的话成本也要跟着增加,所以使用外置的指示灯。

将FPC剪开焊接在一起粘在按键上,通过WS2812一根数据线就可以控制所有的灯了,普通模式下就是用户按按键指示灯就跟着亮,学习模式时,先按照乐谱点亮指示灯,用户跟着指示灯来按按键。当然了,后期还是尽量集成到按键模块上,比较方便。

最后是FPC延长线,因为屏幕和衡山派的相对位置没法直接接上排线,所以要延长一下。

最后是对接板,用来将所有按键板接到一起。

采用232方式将7块板子全部连接到一起。

 

2,软件设计

增加piano_demo用来作为电子琴项目源程序目录,pca9555文件用于驱动IIC扩展IO,读取按键状态。piano_ui用于显示操作UI、播放音频等主要功能。

定义一些常量及结构体,用于确定音频播放采样率、缓冲区、延音、音量、按键状态等。

定义按键名称及ID的对应关系,方便根据乐谱点亮指示灯和控制自动演奏模拟按键按下。

最初采用正弦波合成的方式作为键音。不过确实是想简单了,就是最常见的那种声音,和钢琴音相差还是太大。

接着又尝试了方波、三角波、锯齿波和风琴音色,最终发现只有风琴音色是比较接近风琴音色的,有点琴音的感觉了。

最后尝试生成最复杂的钢琴音色,测试了多个参数,最后都不是很理想。最终还是采用播放钢琴键音原始文件的方式来做琴音。

github上找到了标准钢琴的音频原始文件,为了加速解析和减少MCU的CPU负担,写了个脚本把mp3文件转换为采样率为22.05K原始的音频数据bin文件。

最终得到了以下bin文件

放到SD卡就可以使用了,原始数据比较大,即便是16MB的FLASH也不够用,所以只能放内存卡。

将文件名声明到数组,便于后续调用播放数据。

为了同时播放多个音频,就需要提前将需要播放的多个音频线混合到缓冲区,然后统一送到DAC来播放,由于人只有10个手指,所以目前最多支持同时播放10段音频。

并且需要注意的是按键抬起时需要及时取消掉该段音频的混合,以及设置了延音时需要延后一段时间再取消,都需要一些结构体来管理。

接着定义一些默认曲目的演奏数据,用于自动演奏,主要记录了按哪些按键、按多久、停止多久。

通过线程读取乐谱数据来循环模拟按键来自动演奏,演奏结束停止线程。

 

3,复刻注意事项

R83,R84,R85用于配置IIC的地址,需要保证每块板子上的地址都不一样,15按键的第一块建议设置为0,13键设置为6,中间为1~5。

U4的12脚用于启用CAN的120R电阻,34脚用于打开IIC的4.7K上拉电阻,但是每块板子上都有,建议打开最末尾一块板子上的就行。控制板上也有电阻。

U22用于选择通讯接口,拨12选择CAN接口、拨34选择IIC接口。

将板子组装起来

最终组装效果

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
VID_20251112_212937.mp4
41
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航