資料介紹
描述
所以我在 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次下載 | 免費
評論
查看更多