资料介绍
描述
所以我在 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–驱动压电蜂鸣器的设计注意事项
- 使用arduino和压电蜂鸣器制作简单的驱蚊器 2次下载
- 使用连接到Bolt WiFi模块的简单压电蜂鸣器
- Arduino圣诞压电蜂鸣器项目
- 带有BBC micro:bit的压电蜂鸣器
- 华能电子 压电蜂鸣器 MLT-9018数据手册
- 用于sparkfun板的开发和使用 0次下载
- 适用于压电式蜂鸣器的技术规格 4次下载
- 压电陶瓷和压电蜂鸣器的原理及特点、应用 24次下载
- 基于RE46C317/18带升压转换器的压电蜂鸣器驱动器
- 基于RE46C108下的压电蜂鸣器驱动器和稳压器
- 基于RE46C101下的压电蜂鸣器驱动器和LED驱动器电路
- 基于RE46C117下的DC/DC转换器和压电式蜂鸣器驱动
- 压电蜂鸣器驱动电路之RE46C100产品手册
- 蜂鸣器介绍 0次下载
- 光子集成芯片和光子集成技术是什么 747次阅读
- 蜂鸣器的发声原理 蜂鸣器电路图分享 1.1w次阅读
- 蜂鸣器型号及参数规格 4310次阅读
- 蜂鸣器的介绍 如何控制蜂鸣器的工作? 2178次阅读
- 单片机控制蜂鸣器报警原理 4138次阅读
- 新能源汽车高压电缆编织屏蔽及其屏蔽效能的研究 1461次阅读
- 蜂鸣器声音大小和什么有关 2.2w次阅读
- 压电蜂鸣器的发声机制是什么? 4776次阅读
- 电磁式蜂鸣器和压电式蜂鸣器的工作原理及区别 1.7w次阅读
- 压电式蜂鸣器的选择和优点 3624次阅读
- 电磁式蜂鸣器和压电式蜂鸣器的区别 1.2w次阅读
- 电磁式和压电式蜂鸣器的区别 2.6w次阅读
- 三分钟看懂压电蜂鸣器工作原理及应用 6.5w次阅读
- 基于vhdl蜂鸣器程序设计详解 2.1w次阅读
- 单片机蜂鸣器控制程序和驱动电路典型设计案例 6473次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多