听Arduino在唱歌~手工电子DIY教程
电子DIY2.69W
制作时间: 2小时 制作难度: ★★★☆☆ GEEK指数: ★★★★☆Arduino,是一块基于开放源代码的USB接口Simple I/O接口板,或者可以诠释为一种开源硬件和开源软件相结合的创新,它能实现的功能相当丰富。在此之前的文章中,已经有不少利用Arduino实现的DIY作品,为使童鞋们能循序渐进的加深了解,我将介绍一些Arduino的基本应用。首先要介绍的是如何利用Arduino板发出简单的声音,即如何把Arduino板做成一个迷你的音频发生器。
1 工具和材料○ 1个8欧姆的小扬声器;○ 1块Arduino实验板;○ 1个按钮;○ 1个阻值10k的电阻○ 以及导线若干。
这里我用一块Adafruit ProtoShield原型扩展板来搭建测试电路
2 如何产生音乐● 在开始动手制作之前,我们最好先提前运行一下音乐程序,这样对搭建出的Arduino电路应该发出什么音乐就能做到心中有数。你可以从Arduino集成开发环境中获得相应的音乐程序。● 为方便起见我在这里直接给出了一段音乐程序代码(都是基础的C语言,别有压力!)。 #include "pitches.h"// notes in the melody:int melody[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};// note durations: 4 = quarter note, 8 = eighth note, etc.:int noteDurations[] = {4, 8, 8, 4,4,4,4,4 };void setup() {// iterate over the notes of the melody:for (int thisNote = 0; thisNote// to calculate the note duration, take one second// divided by the note type.//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.int noteDuration = 1000/noteDurations[thisNote];tone(8, melody[thisNote],noteDuration);// to distinguish the notes, set a minimum time between them.// the note's duration + 30% seems to work well:int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);// stop the tone playing:noTone(8);}}void loop() {// no need to repeat the melody.}} ● 另外还需要一个文件来定义基本音调,这个文件也能在集成开发环境中找到,在此我也给出了这段代码,你只需将其保存为.h格式,并放到程序目录下即可: /***************** Public Constants ********************/#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978 ● 按照上图所示连接扬声器并烧入程序,电源正极连接8脚,负极连接接地脚,不出意外的话,这样就能听到一小段曲子了。● 如果想尝试换成其他音乐,还可以从 这里 下载相应代码。 3 Tone函数● Arduino板上产生的音乐由tone()函数控制,改动该函数即可改变音乐旋律,代码有两种形式分别为:tone(pin, frequency, duration)或tone(pin, frequency)● 第一个函数中,pin代表连接扬声器的管脚,frequency代表发声频率,duration代表持续的时间,单位是毫秒。● 如果用第二个函数,则还需另外的noTone()函数来控制音乐的停止noTone(pin)。● 在上一步音乐程序中,还需包括一个pitches.h文件。该文件的作用是根据声音频率改变自动得出相应变量,这样我们就无需自己计算基本音调,有了这个功能,我们这些菜鸟级的作曲家也有机会推出自己的作品了。 4 制作简易键盘 ● 接下来我们要制作一个简易的单键键盘,这一步工作主要是把电路各个部分组合起来,并使其在按键控制下正常发声。● 下面两张图片分别是实际接线图和接线示意图。实际接线图
接线示意图
● 下面是单个音调的程序代码,将其添加到tone函数中,另外千万不要忘记pitches.h文件哦(除非哪位蛋疼哥想亲自动手把赫兹换算成音调):#include "pitches.h"const int buttonPin = 2; // the number of the pushbutton pinint note1 = NOTE_C4; // define note sound// variables will change:int buttonState = 0; // variable for reading the pushbutton status void setup() {// initialize the pushbutton pin as an input:pinMode(buttonPin, INPUT);}void loop(){// read the state of the pushbutton value:buttonState = digitalRead(buttonPin);// check if the pushbutton is pressed.// if it is, the buttonState is HIGH:if (buttonState == HIGH) {// sound tonetone(8, note1);}else {//turn off soundnoTone(8);}} ● 连接好电路并载入上面这段代码,按下按键后听到的声音应该是C调。下面我们再来看段视频以进一步加深理解: 5 震撼出笼!● 作品揭晓的时刻到啦!看爱出镜的作者自HIGH的摸样是不是很有感染力?! ● 如果你觉得音调不够丰富,想添加更多音调,那么只需继续增加按键和相应代码。 ● 让我们来期待更多的arduino基本应用吧!-
高阻线 让你的播放器更加hifi ⊙▽⊙手工电子DIY教程
喜欢请关注我•﹏•主要材料:镀银线10~15mm插座1插头150~150Ω电阻2打火机1所需工具:电烙铁1制作步骤:第1步:成品预览线的材质和颜色及插头均可随意定制第2步:镀银线长度自定第3步:焊电阻按我的焊吧左声道右声道一样一根串入电阻我用的是100Ω的(建议用万用表测标注的稍...
-
手工DIY远程电子点火器 放烟花就安全多啦
燃放烟花爆竹,既污染空气,让PM2.5爆表,也存在安全隐患,果壳网并不提倡。但作为一个传统民俗,仍有不少人仍认为烟花朵朵和爆竹声声才能烘托年味儿。那么如果一定放,切记人身安全,DIY一个远程电子点火器,确保自己在安全距离之外点燃它们。本制作涉及高压电,有一定安全风险...
-
LED发光名片【转译】手工电子DIY教程
这个发光的LED名片是由幼儿园老师设计的,名片上面印着小朋友的名字,方便老师记忆。主要材料:2023纽扣电池3mm高亮led2个2mm厚的亚克力板短导线2根透明胶带所需工具:剪刀制作步骤:第1步:还需要一台激光雕刻机。第2步:第3步:用激光雕刻机进行雕刻。首先输入小盆友的名字...
-
面包板实验:利用ArduinoIDE 语句控制灯的开关手工电子DIY教程
1.认识LED灯结构及使用方法,掌握利用ArduinoIDE语句控制灯的开关。2.认识面包板及使用方法,了解在电路设计中所起的作用。3.Arduino板载LED灯闪烁实验物理电路的正确连接。主要材料:DFRobotArduino入门套件所需工具:Arduinoide1.04制作步骤:第1步:玩了板载的LED,我们...
相关文章
- 设计师Supon Phornirunlit和年Naked Decor产品目录
- 巴西室内设计师Mauricio Arruda作品:Residência Lorena小制作
- Run Rabbit Run - Childhood Painting by Dawn Senior-Trask
- I Beg Your Pardon I Never Promised I Wouldn't Eat Your Rose Garden by Tracy Anderson
- Children's Afternoon At Wargemont by Pierre Auguste Renoir
- 听过这对年仅10岁的姐妹自弹自唱Jason Mraz的经典名曲,许多人都认为她们唱得比原唱好听!
- Children's Afternoon At Wargemont by Pierre-Auguste Renoir
- 巴西室内设计师Mauricio Arruda作品:Residência Canário小制作
- 巴西室内设计师Mauricio Arruda作品:Residência Lorena
- 巴西室内设计师Mauricio Arruda作品:Residência Canário