资料介绍
描述
所以我在 Sparkfun 网站上阅读了关于在他们的网站上生产和销售你的小工具和小工具的能力。我真的很喜欢 Particle Photon,喜欢像 Sparkfun 这样的网站,因为它们鼓励创造力。
输入利用 Particle 固件中的 tone() 功能的想法。一旦我看到它,我就知道我需要提高我在 EagleCad 中的技能,并学习一两件关于设计我的第一个 PCB 的事情。
尽管 Sparkfun 可能实际上不接受这篇文章作为提交,但我想与社区分享我的项目。
步骤 1. 设计 PCB
我使用 EagleCad 设计我的电路和 PCB。这个概念是,拿到这个防护罩的人可以轻松地将它与从 Sparkfun 购买的现有光子防护罩一起使用。
因此,如果您有一个电池保护罩,也许还有一个原型板,现在您想要轻松地将音乐融入您的项目中,您可以做到。
因此,我进行了大量研究和修补,或多或少地复制了 Sparkfun 销售的现有防护罩的规格。当我在做的时候,我尽可能地遵循了他们的提交指南。任何购买过 Sparkfun 的 Photons shield 的人都知道 D0 和 D1 是为 I2C 保留的。所以我放置了一些焊接跳线,让用户可以选择将蜂鸣器分配给哪个引脚。
在这一点上,我发现了一个名为 OSHPark 的服务。他们是最酷的 PCB 服务。在 EagleCad 中完成 PCB 设计后,我将 brd 文件上传到 OSHPark,然后等了不到三周就拿到了实际的 PCB。不到 11.00 美元就不错了!
我从他们那里订购了一些 12 针母头和一些 12 毫米压电蜂鸣器并将其焊接起来。
Step 2. 音乐时间
因此,起初我复制并粘贴了有关使用 tone() 的文档中的示例代码。果然一打开就发出了很酷很短的小曲子!
// EXAMPLE USAGE
// Plays a melody - Connect small speaker to analog pin A0
int speakerPin = A0;
// notes in the melody:
int melody[] = {
1908, 2551, 2551, 2273,
2551, 0, 2024, 1908
}; //C4,G3,G3,A3,G3,0,B3,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 < 8; 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(speakerPin, 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(speakerPin);
}
}
然后我想进一步发挥这个小项目的能力。所以我用谷歌搜索了 MarioBros 的音符,结果发现有人已经将它编码为可以在 Teensy 和 Arduino 上使用!所以我借用了代码并修改了它在 Photon 上的工作。
抱歉,我找不到用于借用代码的站点...
这是改编:
#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
int melodyPin = D2;
int marioMelody[] = {
2637, 2637, 0, 2637,
0, 2097, 2637, 0,
NOTE_G7, 0, 0, 0,
NOTE_G6, 0, 0, 0,
NOTE_C7, 0, 0, NOTE_G6,
0, 0, NOTE_E6, 0,
0, NOTE_A6, 0, NOTE_B6,
0, NOTE_AS6, NOTE_A6, 0,
NOTE_G6, NOTE_E7, NOTE_G7,
NOTE_A7, 0, NOTE_F7, NOTE_G7,
0, NOTE_E7, 0, NOTE_C7,
NOTE_D7, NOTE_B6, 0, 0,
NOTE_C7, 0, 0, NOTE_G6,
0, 0, NOTE_E6, 0,
0, NOTE_A6, 0, NOTE_B6,
0, NOTE_AS6, NOTE_A6, 0,
NOTE_G6, NOTE_E7, NOTE_G7,
NOTE_A7, 0, NOTE_F7, NOTE_G7,
0, NOTE_E7, 0, NOTE_C7,
NOTE_D7, NOTE_B6, 0, 0
};
int tempo[] = {
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
9, 9, 9,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12,
9, 9, 9,
12, 12, 12, 12,
12, 12, 12, 12,
12, 12, 12, 12
};
int underworldmelody[] = {
NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4,
NOTE_AS3, NOTE_AS4, 0,
0,
NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4,
NOTE_AS3, NOTE_AS4, 0,
0,
NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4,
NOTE_DS3, NOTE_DS4, 0,
0,
NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4,
NOTE_DS3, NOTE_DS4, 0,
0, NOTE_DS4, NOTE_CS4, NOTE_D4,
NOTE_CS4, NOTE_DS4,
NOTE_DS4, NOTE_GS3,
NOTE_G3, NOTE_CS4,
NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4,
NOTE_GS4, NOTE_DS4, NOTE_B3,
NOTE_AS3, NOTE_A3, NOTE_GS3,
0, 0, 0
};
//Underwolrd tempo
int underworldtempo[] = {
12, 12, 12, 12,
12, 12, 6,
3,
12, 12, 12, 12,
12, 12, 6,
3,
12, 12, 12, 12,
12, 12, 6,
3,
12, 12, 12, 12,
12, 12, 6,
6, 18, 18, 18,
6, 6,
6, 6,
6, 6,
18, 18, 18, 18, 18, 18,
10, 10, 10,
10, 10, 10,
3, 3, 3
};
void setup(){
delay(1000);
}
void loop(){
for(int thisNote = 0; thisNote < 78; thisNote++){
int noteDuration = 1500/tempo[thisNote];
tone(melodyPin, marioMelody[thisNote], noteDuration);
int pause = noteDuration * 1.33;
delay(pause);
noTone(melodyPin);
}
delay(2000);
for(int thisNote = 0; thisNote < 56; thisNote++){
int noteDuration = 1300/underworldtempo[thisNote];
tone(melodyPin, underworldmelody[thisNote], noteDuration);
int pause = noteDuration * 1.33;
delay(pause);
noTone(melodyPin);
}
}
可以肯定的是,它会同时播放这两种曲调,而且聆听它们真的很有趣。从这里开始,我计划让它变得更加智能。例如,假设您想要触发声音,因为房子对面的另一个 Photon 发布了一个事件。
- AN1176–驱动压电蜂鸣器的设计注意事项 1次下载
- 使用arduino和压电蜂鸣器制作简单的驱蚊器 2次下载
- Arduino圣诞压电蜂鸣器项目 0次下载
- 带有BBC micro:bit的压电蜂鸣器 0次下载
- 华能电子 压电蜂鸣器 MLT-9018数据手册
- 用于sparkfun板的开发和使用 0次下载
- 适用于压电式蜂鸣器的技术规格 4次下载
- 电磁屏蔽理论与屏蔽设计接地设计资料下载 27次下载
- 压电陶瓷和压电蜂鸣器的原理及特点、应用 23次下载
- 使用51单片机驱动无源蜂鸣器的简单说明和程序免费下载 6次下载
- 基于RE46C317/18带升压转换器的压电蜂鸣器驱动器 20次下载
- 基于RE46C108下的压电蜂鸣器驱动器和稳压器 11次下载
- 基于RE46C101下的压电蜂鸣器驱动器和LED驱动器电路 17次下载
- 压电蜂鸣器驱动电路之RE46C100产品手册 30次下载
- 蜂鸣器介绍 0次下载
- 蜂鸣器的发声原理 蜂鸣器电路图分享 1263次阅读
- 蜂鸣器型号及参数规格 946次阅读
- 蜂鸣器工作发声原理图和电路图 1143次阅读
- 蜂鸣器的介绍 如何控制蜂鸣器的工作? 992次阅读
- 单片机控制蜂鸣器报警原理 1400次阅读
- 光子芯片的原理和应用 7286次阅读
- 蜂鸣器声音大小和什么有关 1.9w次阅读
- 压电蜂鸣器的发声机制是什么? 4065次阅读
- 电磁式蜂鸣器和压电式蜂鸣器的工作原理及区别 1.6w次阅读
- 压电式蜂鸣器的选择和优点 3346次阅读
- 电磁式蜂鸣器和压电式蜂鸣器的区别 1w次阅读
- 电磁式和压电式蜂鸣器的区别 2.5w次阅读
- 三分钟看懂压电蜂鸣器工作原理及应用 6.4w次阅读
- 基于vhdl蜂鸣器程序设计详解 2w次阅读
- 单片机蜂鸣器控制程序和驱动电路典型设计案例 6280次阅读
下载排行
本周
- 1储能电源市场分析
- 7.99 MB | 11次下载 | 免费
- 2储能电源市场分析报告
- 2.61 MB | 7次下载 | 免费
- 3labview文档教程资料(一)
- 24.29 MB | 2次下载 | 免费
- 4第三代SiC功率半导体动态可靠性测试系统介绍
- 8.02 MB | 1次下载 | 免费
- 5用于便携可穿戴设备的RX8130CE
- 277.67 KB | 1次下载 | 免费
- 6英集芯IP5353 QFN32 规格书pdf
- 2.70 MB | 1次下载 | 免费
- 742V、5A SIMPLE SWITCHER® 特性降压稳压器LM22677/-Q1数据表
- 1.54MB | 1次下载 | 免费
- 83.5V 至 36V 输入、1V 至 20V 输出、6A 电源模块LMZM33606数据表
- 1.97MB | 1次下载 | 免费
本月
- 1STM32国内外发展现状
- 1.15 MB | 16次下载 | 免费
- 2传感芯片选型指南
- 3.60 MB | 12次下载 | 免费
- 3储能电源市场分析
- 7.99 MB | 11次下载 | 免费
- 4ATmega8芯片中文手册
- 2.45 MB | 8次下载 | 1 积分
- 5TDK电容器产品指南
- 11.88 MB | 7次下载 | 1 积分
- 62A多电池高效开关充电器AN_SY6912A中文资料规格书
- 1.43 MB | 7次下载 | 免费
- 7储能电源市场分析报告
- 2.61 MB | 7次下载 | 免费
- 816A 输出电流,高可靠、高效率 同步降压转换器PCD3201产品手册
- 0.47 MB | 6次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935091次下载 | 免费
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420050次下载 | 免费
- 3Altium DXP2002下载入口
- 未知 | 233068次下载 | 免费
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191317次下载 | 免费
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183316次下载 | 免费
- 6labview8.5下载
- 未知 | 81567次下载 | 免费
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73789次下载 | 免费
- 8NI LabVIEW中实现3D视觉的工具和技术
- 未知 | 70088次下载 | 免费
评论
查看更多