標題:利用Arduino製作拍手開關電路
組員:411214302林昕潔/411214326張瓊予
動機:
在宿舍中,由於採用上下舖設計,每次要關燈或開燈時,若人已經在上鋪準備休息,還需要下床去操作牆上的開關,很麻煩。因此,我們希望能透過聲音感應的方式,只要簡單地拍手,就能實現遠端控制燈泡的開與關,提升生活便利性。
所需元件:
Arduino UNO*1
KY-038聲音感測模組*1
繼電器模組*1
220Ω電阻*1
LED燈*1
麵包版*1
杜邦線*1
接線:
聲音感測模組:
VCC → Arduino 5V
GND → Arduino GND
D0 接 Arduino D2
繼電器模組:
VCC → Arduino 5V
GND → Arduino GND
IN → Arduino D8
COM 端接5V
NO端接LED正極
LED:
短腳(陰極)接220Ω電阻後接地
長腳(陽極)接NO端
程式碼:
const int SOUND_PIN = 2; // 聲音感測器 D0 接 Arduino D2
const int RELAY_PIN = 8; // 繼電器模組 IN 接 D8
bool ledState = false; // 記錄 LED 的狀態
int lastSoundState = LOW;
unsigned long lastTriggerTime = 0;
const unsigned long debounceDelay = 300; // 避免連續觸發
void setup() {
pinMode(SOUND_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // 一開始 LED 關
}
void loop() {
int currentSoundState = digitalRead(SOUND_PIN);
unsigned long currentTime = millis();
// 偵測 LOW → HIGH 邊緣
if (currentSoundState == HIGH && lastSoundState == LOW) {
if (currentTime - lastTriggerTime > debounceDelay) {
// 切換 LED 狀態
ledState = !ledState;
digitalWrite(RELAY_PIN, ledState ? HIGH : LOW);
lastTriggerTime = currentTime;
}
}
lastSoundState = currentSoundState;
}
成果:
影片網址:https://youtube.com/shorts/92U7-JIHSjU?si=xwtlbOS_E_nqb6BO
問題與解決方案:
在過程中我們遇到最初寫得程式碼並不符合我們要的條件,我們要的是LED燈初始狀態為關燈,在我們拍手一下的時候LED燈要亮起並持續亮著到我們下一次拍手,但是我們得到的是拍手一下燈亮一下。後來更改程式碼後,變成他會自己亮起,所以調整了聲音感測器的敏感度。中間我們反反覆覆改過好幾次程式碼,也改過接線,才完成這個拍手開關電路。
結論:
運用 Arduino UNO 搭配 KY-038 聲音感測模組與繼電器模組,實現透過拍手聲來控制 LED 燈開與關的功能。系統初始狀態下 LED 燈為關閉,使用者透過一次拍手觸發燈光開啟,再次拍手則關閉燈光,形成一個簡易的「拍手開關系統」。