雷竞技注册
项目

大Arduino钢琴!像Tom Hanks一样使用脉宽调制来跳舞

2017年3月29日经过瑞恩•琼斯

这架大钢琴将有助于锻炼身心!你所需要的只是几个按钮,一个扬声器和一些舞鞋。

这架大钢琴将有助于锻炼身心!你所需要的只是几个按钮,一个扬声器和一些舞鞋。

BOM:

为什么?

我在看电影大的前几天,我意识到我想像汤姆汉克斯一样跳舞。没有算命先生或附近的生物,以帮助制作这个键盘大的我知道我需要重新思考一下。有了一些高质量的泡沫板和其他各种美术用品,我开始制作原型,并想出了一个简单易行的方法来制作一个巨大的、按按钮启动的钢琴!

我想让这个项目保持简单,所以我想大多数观众的按键比力敏电阻多,所以我把多余的按键粘在了按键的底部。在理想情况下,将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。

其他我的创新:

big_button_keyboard.zip.

3评论
  • pius4109 2017年8月23日

    我可以将引脚设置为高电平,然后激活Arduino输入升降电阻,并更改IF语句以示例(ButtonCstate == Low):

    喜欢的。 回复
  • pius4109 2017年8月23日

    制作高,低的所有引脚

    喜欢的。 回复
    • RK37. 2017年9月4日
      是的,您可以使用内部上拉电阻(而不是外部下拉电阻)。开关的另一侧将连接到地而不是5 V,并且您将检查按钮引脚上的逻辑低。
      喜欢的。 回复