这架大钢琴将有助于锻炼身心!你所需要的只是几个按钮,一个扬声器和一些舞鞋。
BOM:
- Arduino Uno.
- CUI 8欧姆扬声器
- x8按钮
- X8 10K电阻
- X1 220欧姆电阻
- 跳线电线
- 电路试验板
- Foamboard或硬纸板
为什么?
我在看电影大的前几天,我意识到我想像汤姆汉克斯一样跳舞。没有算命先生或附近的生物,以帮助制作这个键盘大的我知道我需要重新思考一下。有了一些高质量的泡沫板和其他各种美术用品,我开始制作原型,并想出了一个简单易行的方法来制作一个巨大的、按按钮启动的钢琴!
我想让这个项目保持简单,所以我想大多数观众的按键比力敏电阻多,所以我把多余的按键粘在了按键的底部。在理想情况下,将fsr添加到按键中会使触摸更加柔和,但我将把这个修改留给你们。
仔细看看我们的组件
如何?
泡沫板不是必要的,因为这个项目可以简单地组装在面包板上。该视频涵盖了测量、切割和附加按钮的基础知识,所以我将在这里坚持技术细节。如果你没有适当的数量的组件,你可以跟随只有一个按钮,一些电阻,和一个扬声器。
如果你以前用过Arduino,你很可能用过按钮,并理解下拉电阻的重要性。下拉电阻“在没有其他有源器件连接时保持逻辑信号接近零伏”,(Arduino操场).这有助于确保可靠和准确的读数从我们的按钮。
基本上,我们有8个按钮分别连接到引脚2-9。每个按钮需要5V的电源,一个10k的下拉电阻,和一条信号线到输入引脚。在我们的程序中,我们为每个按钮分配一个特定的方波频率,以便在按钮被按下时播放(logic HIGH)。这些是帮助创造音阶的特定频率。
基本看看我们的输入和输出
有许多不同类型的电波,包括正弦波,锯齿波,三角波,和(用于我们与Arduino的使用)方波。要从这些按钮创建声音,我们的扬声器需要由可以处理脉冲宽度调制(PWM)的Arduino引脚驱动。可以产生脉冲宽度调制的Arduino引脚产生不同频率的方波。
我们实际上不需要改变信号的脉冲宽度。我们所有的扬声器信号都是50%占空比。但是我们将使用Arduino PWM引脚,因为PWM功能提供了一种简单的方法来设置频率。
我们的八个按钮代表了音乐键盘/钢琴的八个音符,完整的八度音量 - 特别是C重大比例。这些注意包括C5,D5,E5,F5,G5,A5,B5和C6。
您可能会注意到有两个不同的C笔记,C5和C6。注意C6简直是C5的频率的两倍,称为八度音阶的间隔,并且仍然被认为是C音符。虽然C5的频率为523Hz,但C6是1047Hz。虽然没有完美“在调整”中,这与Arduino可以生产的适当信号接近。
你看,虽然钢琴和乐器看起来可能令人恐惧,但它们实际上就在不同的“八仙陨香”中重复一遍又一遍地的笔记。例如,注意G7将是G5频率的三倍。
八度音的波形比较
音乐课上够了!扬声器的正引线应该有一个220欧姆的电阻与能够产生PWM的引脚10串联。另一根应该绑在地上。因为我们用的是方波,所以信号除了基频外还有谐波频率。理想情况下,我们会使用正弦波来获得更好的音质,但方波对我们的目的来说已经足够好了。
查看我们的代码,我们使用简单的语句在每次某个按钮读取逻辑高电平时,我们使用简单的语句来在“投节”库中生成特定频率。例如,您将注意到,注释F5是698Hz,而F6大约是频率的双倍,1397Hz。
只要重复这些步骤,你拥有的所有按钮,你将拥有世界上最大的键盘!
if(buttoncstate == high){tone(10,note_c5);if(buttondstate == high){tone(10,note_d5);}如果(buttonestate == high){tone(10,note_e5);}如果(buttonfstate == high){tone(10,note_f5);}
#define note_cs5 554 #define note_d5 587 #define note_ds5 622 #define note_f5 698 #define note_fs5 740 #define note_g5 784 #define note_a5 880 #define note_as5 932 #define note_b5 988 #define note_b5 988 #definenote_c6 1047 #define note_cs6 1109 #define note_d6 1175 #define note_ds6 1245 #define note_e6 1319 #define note_f6 1397
现在让我们开始跳舞吧!
自己试试这个项目吧!得到bom。
其他我的创新:
- 猫互助的!(Arduino控件伺服制造商)
- 基于发射台的激光绊线报警器!(推出PAD安全系统)
- Arduino通用遥控器!(整个房子的IR接收器)
- 作物粉碎机停机!(拍摄控制的气味管理系统)
- 交通灯控制器!(Arduino延时语句课)
- 跳舞捉鬼敢死队的烤面包机!(关于螺线管和电感负载的教训)
- 树莓派物体探测猫玩具!(关于RPi GPIO的教训)
- Zambroombi !(对象避免机器人)
- 节日模拟警报!(卫生保卫系统)
- 圣诞老人凸轮!(假日运动激活相机)
- 物联网Beaglebone Beagle Treat dispenserer - feeder !(自动化借口不佳)
- 普克托尼克5000年!(一种有趣的方式来避免寒冷)
我可以将引脚设置为高电平,然后激活Arduino输入升降电阻,并更改IF语句以示例(ButtonCstate == Low):
制作高,低的所有引脚