光劍的題材很多人在做,比如說 泡棉光劍..有音效 可對打不怕重傷 又有藍芽控制 真的好棒.
想要當原力武士要打造一把自己專屬光劍,只要會Arduino,靠網路上的分享文章就可以DIY了,
以下文章的資源大部分都來自於網路上的分享.
如想要簡單的光劍,揮舞有音效,開啟以及關閉時會有光線升降的效果
- 就材料上單晶片挑選Arduino nano當控制板,一來小二來便宜.
- 音效需要MP3 player. Mini MP3 module *1, 稍嫌貴了些...
音效coding的部分可參考DFPlayer Mini MP3的範例 - TF card *1 用來存放MP3檔案,MP3的音效檔可以到The Force Net尋找Lightsaber sound的MP3
- 劍身先找壓克力燈管 直徑23mm左右的.先把燈管做出來
- 劍柄的部分找3D印表機列印囉.
- 電源的部分,可以找單顆18650電池的行動電源提供5V的DC輸出
- 開關的部分 需要微動開關作為Power ON/OFF的切換
- 水銀開關作為晃動時的Audio ON/FF的判斷
- LED數顆,光劍的LED串接可以參考超炫IoT光劍自製HowTo完全公開!
(以下相關LED連接的圖片都擷取自上述連結)
但使用上 就要規劃一下,看一下如果想要有10段光線升降,會用掉D2~D11 pin
在超炫IoT光劍自製的文章中採用的是6段光線升降,用的是3.3V的DC,
可能實際上要考慮一下Arduino是5V的DC
至於5V能並聯幾顆LED,串聯電阻多大,可以先參考一下這篇文章,
為什麼LED需要串聯的電阻值是220 ohm?
也可利用以下連結直接在線上作計算.
LED限流電阻值-線上計算器
針對Arduino的pin define先規劃一下
D0~D1連接Mini MP3 player
D2~D11連接LED Matrix控制LED燈管
剩下的D12 / D13當電源控制開關的訊號囉.
Pin define的規劃如下.剩下就是coding跟買材料來組裝.
Arduino
Nano
|
DFPlayer
Mini MP3
|
Speaker
|
LED
|
N/A
|
SPK_1
|
RED Line
|
|
N/A
|
SPK_2
|
Black Line
|
|
TX/D1
|
RX
|
||
RX/D0
|
TX
|
||
RST
|
|||
GND
|
GND
|
GND
|
GND
|
D2
|
LED matrix
1
|
||
D3
|
LED matrix
2
|
||
D4
|
LED matrix
3
|
||
D5
|
LED matrix
4
|
||
D6
|
LED matrix
5
|
||
D7
|
LED matrix
6
|
||
D8
|
LED matrix
7
|
||
D9
|
LED matrix
8
|
||
D10
|
LED matrix
9
|
||
D11
|
LED matrix
10
|
||
D12
|
LED On/OFF
|
||
D13
|
Audio
On/OFF
|
||
3V3
|
|||
AREF
|
|||
A0
|
|||
A1
|
|||
A2
|
|||
A3
|
|||
A4
|
|||
A5
|
|||
A6
|
|||
A7
|
|||
5V
|
VCC
|
VCC
|
|
RESET
|
|||
GND
|
|||
VIN
|
#include "SoftwareSerial.h" #include "DFPlayer_Mini_Mp3.h" const int LedMartix1 = 2; //設定LED Martix1接腳在第2pin const int LedMartix2 = 3; //設定LED Martix2接腳在第3pin const int LedMartix3 = 4; //設定LED Martix3接腳在第4pin const int LedMartix4 = 5; //設定LED Martix4接腳在第5pin const int LedMartix5 = 6; //設定LED Martix5接腳在第6pin const int LedMartix6 = 7; //設定LED Martix6接腳在第7pin const int LedMartix7 = 8; //設定LED Martix7接腳在第8pin const int LedMartix8 = 9; //設定LED Martix8接腳在第9pin const int LedMartix9 = 10; //設定LED Martix9接腳在第10pin const int LedMartix10 = 11; //設定LED Martix10接腳在第11pin const int PowerON = 12; //設定LED啟動開關接腳在第12pin const int AudioON = 13; //設定水銀開關接腳在第13pin const int LEDdelay = 30; //延遲0.03秒進行一次LED升降 int LEDstatus = 0; //定義變量為LEDstatus=0 void setup () { Serial.begin (9600); mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module mp3_set_volume (10); pinMode(AudioON, INPUT); //設定水銀開關為輸入端 pinMode(PowerON, INPUT); //設定LED啟動開關為輸入端 pinMode(LedMartix10, OUTPUT); //設定LED Martix10為輸出端 pinMode(LedMartix9, OUTPUT); //設定LED Martix9為輸出端 pinMode(LedMartix8, OUTPUT); //設定LED Martix8為輸出端 pinMode(LedMartix7, OUTPUT); //設定LED Martix7為輸出端 pinMode(LedMartix6, OUTPUT); //設定LED Martix6為輸出端 pinMode(LedMartix5, OUTPUT); //設定LED Martix5為輸出端 pinMode(LedMartix4, OUTPUT); //設定LED Martix4為輸出端 pinMode(LedMartix3, OUTPUT); //設定LED Martix3為輸出端 pinMode(LedMartix2, OUTPUT); //設定LED Martix2為輸出端 pinMode(LedMartix1, OUTPUT); //設定LED Martix1為輸出端 digitalWrite(LedMartix10, LOW); //設定LED Martix10預設LOW digitalWrite(LedMartix9, LOW); //設定LED Martix9預設LOW digitalWrite(LedMartix8, LOW); //設定LED Martix8預設LOW digitalWrite(LedMartix7, LOW); //設定LED Martix7預設LOW digitalWrite(LedMartix6, LOW); //設定LED Martix6預設LOW digitalWrite(LedMartix5, LOW); //設定LED Martix5預設LOW digitalWrite(LedMartix4, LOW); //設定LED Martix4預設LOW digitalWrite(LedMartix3, LOW); //設定LED Martix3預設LOW digitalWrite(LedMartix2, LOW); //設定LED Martix2預設LOW digitalWrite(LedMartix1, LOW); //設定LED Martix1預設LOW } void loop() { if (LEDstatus == 0 && digitalRead(PowerON) == HIGH) { //當有開關觸發LED亮 mp3_play (random(6, 8)); //先將光劍啟動的音效檔定為0006.mp3 或0007.mp3, 藉由亂數處理任意播放 delay (1000); //播放1秒音效 for (int i = 2; i <= 11; i++) { digitalWrite(i, HIGH); delay(LEDdelay); LEDstatus = 1; } } if (LEDstatus == 1 && digitalRead(PowerON) == HIGH) { //當有再次開關觸發LED暗 mp3_play (random(9, 11)); //先將光劍關閉的音效檔定為0009.mp3 或0010.mp3, 藉由亂數處理任意播放 delay (1000); //播放1秒音效 for (int i = 11; i >= 2; i--) { digitalWrite(i, LOW); delay(LEDdelay); LEDstatus = 0; } } if (LEDstatus == 1) { //當光劍啟動時紀錄水銀開關觸發狀態 for (int i = 0; i < 4; i++) { hum[i] = digitalRead(AudioON); } if ((hum[0] != LOW && hum[1] != LOW && hum[2] != LOW && hum[3] != LOW) || (hum[0] != HIGH && hum[1] != HIGH && hum[2] != HIGH && hum[3] != HIGH)) { randNumber = random(1, 5); mp3_play (randNumber); //先將揮光劍的音效檔定為0001~0004.mp3, 藉由亂數處理任意播放 delay (randNumber * 1000); } } }
請問要用哪種晶體
回覆刪除你好 請問 hum[i] 如何作宣告 謝謝
回覆刪除int hum[]={1,2,3,4,5,6,7,8,9,10};
回覆刪除int i;
int randNumber;
宣告後 開機沒有伸縮功能及聲音 led一直跑來跑去不知哪裡debug囉! 請指導一下 謝謝 !
你好 照這程式及接法 揮動及開關機都沒聲音 不知哪裡宣告錯誤 請指導一下 謝謝
回覆刪除你好 照這程式及接髮 都沒反應及聲音 真是不解 請指導一下 謝謝
回覆刪除