โปรเจค Arduino ควบคุมการติด-ดับ LED 3 ดวง ด้วยเสียงปรบมือ (Sound Detection Sensor LM393)
ในโปรเจคนี้เราจะสร้างโปรเจคควบคุมการทำงานของหลอดไฟผ่านการตรวจจับเสียงปรบมือ ด้วยการใช้เซ็นเซอร์เสียง Sound Detection Sensor Module LM393 และ Arduino โดยระบบนี้สามารถใช้เสียงปรบมือเพื่อเปิด-ปิด ไฟ LED ทำให้การควบคุมแสงเป็นเรื่องง่ายและน่าสนใจมากขึ้น
โปรเจคนี้เป็นตัวอย่างที่ดีในการใช้งานเซ็นเซอร์เสียงเพื่อควบคุมการทำงานของหลอดไฟ การเปิด-ปิด โดยเมื่อปรบมือ 1 ครั้งให้ไฟติด 1 หลอด , ปรบมือ 2 ครั้ง ให้ติดพร้อมกัน 2 หลอด , ปรบมือ3 ครั้ง ให้ติดพร้อมกัน 3 หลอด และปรบมือ 4 ครั้ง ให้ไฟดับพร้อมกันหมดซึ่งเป็นการผสมผสานเทคโนโลยีและความสะดวกสบายให้กับการใช้งานในชีวิตประจำวัน
1. อุปกรณ์ที่ใช้
- 1. Arduino UNO R3
- 2. Sensor Shield V 5.0
- 3. สาย Jumper Female to Female ยาว 20cm.
- 4. Relay 4 Channel DC 5V
- 5. Sound Detection Sensor Module LM393
- 6. รางถ่าน AA 8 ก้อน 12 โวลต์
- 7. แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno
- 8. สายไฟแดงดำ ขนาด 22AWG
- 9. หลอดไฟ LED 12 V
- 10. Prototype PCB Board 4×6 cm Double Sides
- 11. แผ่นอะคริลิคใสขนาด A4
2. หลักการทำงาน
- Sound Detection Sensor
- Sound Detection Module LM393 จะตรวจจับระดับเสียงรอบข้างผ่านไมโครโฟนในตัว
- เมื่อมีเสียงดังถึงเกณฑ์ที่ตั้งไว้ (กำหนดผ่านตัวปรับความไวของโมดูล) โมดูลจะส่งสัญญาณ ดิจิทัล (High หรือ Low) ไปยัง Arduino
- Arduino รับสัญญาณ
- ขาของเซ็นเซอร์เชื่อมต่อกับขาดิจิทัลอินพุตของ Arduino
- Arduino ตรวจสอบสถานะของเซ็นเซอร์ (High หรือ Low) เพื่อควบคุม LED
- ควบคุมการทำงานของ LED
- เมื่อเซ็นเซอร์ตรวจพบเสียง (สัญญาณ High):
- LED จะสว่างทีละดวง (เรียงลำดับ) ตามลำดับที่ตั้งไว้ในโปรแกรม
- หากไม่มีเสียง (สัญญาณ Low):
- LED จะดับทีละดวง หรือดับทั้งหมดตามเงื่อนไขที่กำหนด
- เมื่อเซ็นเซอร์ตรวจพบเสียง (สัญญาณ High):
- ลูปการทำงาน
- Arduino จะวนตรวจจับเสียงจากเซ็นเซอร์อย่างต่อเนื่อง
- อัปเดตสถานะของ LED ตามสถานะเสียงที่ตรวจพบ
3. ขั้นตอนการทำโปรเจค
ประกอบ sensor shield v 5.0 เข้า กับ Arduino Uno R3
Arduino Shield เวอร์ชัน 5 บอร์ดขยายพอร์ท Arduino สำหรับเสียบกับสายเซนเซอร์ หรืออุปกรณ์ต่อพ่วงต่าง ๆ ได้อย่างสะดวก
Arduino ทุกเวอร์ชั่น (ยกเว้นพวกที่เป็น SMD และ เวอร์ชั่นที่ทำขึ้นกันเอง) จะถูกออกแบบให้มี Layout ของ Pin ต่างๆในรูปแบบเดียวกัน เพื่อให้สามารถใช้อุปกรณ์เสริมหลายๆอย่างร่วมกันได้ โดยวิธี Plug n’ play หมายถึงแค่เสียบลงไปแล้วก็นำไปใช้งานได้เลย …. ทำให้อุปกรณ์เสริมที่นำมาใช้ต่อพ่วงร่วมกันเรียกว่า Shield (ซึ่งหมายถึง เกราะ หรืออะไรประมาณนั้น ประมาณว่า สวมเกราะเสร็จ ออกไปรบได้เลย)
Shield ส่วนใหญ่จะใช้ ICSP Connector ในการเชื่อมต่อกับ Arduino board (หรือ Galileo board) โดยเมื่อเชื่อมต่อ Shield แล้วเรายังสามารถใช้งาน Digital pin และ Analog pin บางอันได้อยู่ (หมายถึงว่า เราจะเสียการเชื่อมต่อบางอันไปให้ Shield ทำงาน) ในปัจจุบันมีการออกแบบให้ Shield ใช้ทรัพยากรในการเชื่อมต่อกับบอร์ดน้อยที่สุด ทำให้สามารถเชื่อมต่อกับอุปกรณ์อื่นๆได้มากขึ้น
ดังนั้นเพื่อเพิ่มความสามารถของ บอร์ด Arduino UNO R3 ให้ประกบ บอร์ด Arduino Sensor Shield V5.0 เข้าที่ ด้านบนของ บอร์ด Arduino UNO R3 ดังรูป



เชื่อมต่อ Sound Detection Sensor Module LM393
G <-> GND
V <-> 5V
S <-> OUT



เชื่อมต่อ Relay 4 Channel
Shield <-> Relay
6 <-> IN3
7 <-> IN2
8 <-> IN1
G <-> GND
V <-> VCC




เชื่อมต่อ รางถ่าน + Relay + หลอด LED

เชื่อมต่อ แจ๊กขั้วถ่านกับรางถ่าน แล้วเสียบเข้าบอร์ด Arduino


4. อัพโหลดโค้ด
ติดตั้ง Arduino IDE
https://www.arduino.cc/en/software

โค้ด
#define CH1 8 // กำหนด CH1 เป็นพิน 8 ซึ่งเชื่อมต่อกับหลอดไฟดวงที่ 1
#define CH2 7 // กำหนด CH2 เป็นพิน 7 ซึ่งเชื่อมต่อกับหลอดไฟดวงที่ 2
#define CH3 6 // กำหนด CH3 เป็นพิน 6 ซึ่งเชื่อมต่อกับหลอดไฟดวงที่ 3
int sound_sensor = 4; // กำหนด sound_sensor เป็นพิน 4 สำหรับเซนเซอร์เสียง
int clap = 0; // ตัวแปรนับจำนวนการปรบมือ
long detection_range_start = 0; // เวลาที่เริ่มตรวจจับการปรบมือครั้งแรก
long detection_range = 0; // เวลาของการตรวจจับการปรบมือล่าสุด
void setup() {
Serial.begin(9600); // เริ่มต้นการสื่อสารผ่าน Serial Monitor ที่ความเร็ว 9600 bps
pinMode(sound_sensor, INPUT); // กำหนดพินของเซนเซอร์เสียงเป็น INPUT
pinMode(CH1, OUTPUT); // กำหนดพิน CH1 เป็น OUTPUT
pinMode(CH2, OUTPUT); // กำหนดพิน CH2 เป็น OUTPUT
pinMode(CH3, OUTPUT); // กำหนดพิน CH3 เป็น OUTPUT
digitalWrite(CH1, HIGH); // ตั้งสถานะหลอดไฟ CH1 เป็นปิด (HIGH)
digitalWrite(CH2, HIGH); // ตั้งสถานะหลอดไฟ CH2 เป็นปิด (HIGH)
digitalWrite(CH3, HIGH); // ตั้งสถานะหลอดไฟ CH3 เป็นปิด (HIGH)
}
void loop() {
int status_sensor = digitalRead(sound_sensor); // อ่านค่าจากเซนเซอร์เสียง
if (status_sensor == 0) { // หากเซนเซอร์ตรวจพบเสียง (ค่าต่ำ)
if (clap == 0) { // หากเป็นการปรบมือครั้งแรก
detection_range_start = detection_range = millis(); // บันทึกเวลาเริ่มต้น
clap++; // เพิ่มจำนวนการปรบมือเป็น 1
} else if (clap > 0 && millis() - detection_range >= 40) {
// หากมีการปรบมือและเวลาห่างจากการปรบมือครั้งก่อน >= 40 มิลลิวินาที
detection_range = millis(); // อัปเดตเวลาการปรบมือล่าสุด
clap++; // เพิ่มจำนวนการปรบมือ
}
}
if (millis() - detection_range_start >= 800) {
// หากเวลาห่างจากการปรบมือครั้งแรก >= 800 มิลลิวินาที
if (clap == 1) { // หากปรบมือ 1 ครั้ง
Serial.println("clap = 1 , Lamp1 = ON"); // แสดงข้อความใน Serial Monitor
digitalWrite(CH1, LOW); // เปิดหลอดไฟดวงที่ 1
digitalWrite(CH2, HIGH); // ปิดหลอดไฟดวงที่ 2
digitalWrite(CH3, HIGH); // ปิดหลอดไฟดวงที่ 3
}
else if (clap == 2) { // หากปรบมือ 2 ครั้ง
Serial.println("clap = 2 , Lamp2 = ON"); // แสดงข้อความใน Serial Monitor
digitalWrite(CH1, LOW); // เปิดหลอดไฟดวงที่ 1
digitalWrite(CH2, LOW); // เปิดหลอดไฟดวงที่ 2
digitalWrite(CH3, HIGH); // ปิดหลอดไฟดวงที่ 3
delay(100); // รอ 100 มิลลิวินาที
}
else if (clap == 3) { // หากปรบมือ 3 ครั้ง
Serial.println("clap = 3 , Lamp3 = ON"); // แสดงข้อความใน Serial Monitor
digitalWrite(CH1, LOW); // เปิดหลอดไฟดวงที่ 1
digitalWrite(CH2, LOW); // เปิดหลอดไฟดวงที่ 2
digitalWrite(CH3, LOW); // เปิดหลอดไฟดวงที่ 3
delay(100); // รอ 100 มิลลิวินาที
}
else if (clap == 4) { // หากปรบมือ 4 ครั้ง
Serial.println("clap = 4 , Lamp1-3 = OFF"); // แสดงข้อความใน Serial Monitor
digitalWrite(CH1, HIGH); // ปิดหลอดไฟดวงที่ 1
digitalWrite(CH2, HIGH); // ปิดหลอดไฟดวงที่ 2
digitalWrite(CH3, HIGH); // ปิดหลอดไฟดวงที่ 3
delay(100); // รอ 100 มิลลิวินาที
}
clap = 0; // รีเซ็ตจำนวนการปรบมือ
}
}
ตรวจสอบ Port ของบอร์ด Arduino โดย คลิกที่ Device Manager

ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด Arduino ในตัวอย่างเป็น Arduino Uno (COM19)

ไปที่ Tools -> Board -> Arduino AVR Boards -> Arduino Uno

เลือก Port โดยไปที่ Tools -> Port -> COM19
(โดย COM19 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)


คลิกที่ Upload

รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว

5. ผลลัพธ์การทำงาน
ข้อดีของการทำโปรเจค Arduino UNO R3 ตรวจจับเสียงปรบมือ:
- เหมาะสำหรับการเรียนรู้การใช้งาน Arduino เบื้องต้น
- โปรเจคนี้ใช้โค้ดง่าย ๆ เหมาะสำหรับผู้เริ่มต้นที่ต้องการเรียนรู้การเขียนโปรแกรมควบคุมฮาร์ดแวร์ด้วย Arduino UNO R3
- การเรียนรู้การประมวลผลเสียง (Sound Signal Processing)
- ได้เรียนรู้วิธีใช้งานเซ็นเซอร์เสียง เช่น Sound Sensor Module และการเขียนโปรแกรมเพื่อตรวจจับจำนวนครั้งของเสียงปรบมือ
- การพัฒนา Logic Control
- ฝึกการคิดเชิงตรรกะ (Logical Thinking) ในการกำหนดเงื่อนไขการเปิด-ปิดไฟ LED ตามจำนวนครั้งของการปรบมือ
- ต้นทุนต่ำ
- ใช้อุปกรณ์ราคาประหยัด เช่น บอร์ด Arduino UNO R3, ไฟ LED, ตัวต้านทาน และ Sound Sensor Module ซึ่งเป็นชิ้นส่วนที่หาง่ายในท้องตลาด
- ประยุกต์ใช้งานได้จริง
- สามารถนำไปใช้ในระบบควบคุมในบ้าน เช่น เปิด-ปิดไฟในห้องโดยไม่ต้องใช้สวิตช์
- การพัฒนาทักษะการทำงานร่วมกับเซ็นเซอร์
- ได้เรียนรู้การเชื่อมต่อและการใช้งานเซ็นเซอร์ในรูปแบบต่าง ๆ รวมถึงการเขียนโปรแกรมให้สอดคล้องกับการตรวจจับของเซ็นเซอร์เสียง
- เสริมสร้างความคิดสร้างสรรค์
- โปรเจคสามารถพัฒนาเพิ่มเติมได้ เช่น เพิ่มจำนวนไฟ LED หรือนำไปควบคุมอุปกรณ์อื่น ๆ นอกเหนือจากไฟ เช่น พัดลมหรือมอเตอร์
- การฝึกทำงานแบบโครงงาน (Project-Based Learning)
- เป็นโครงงานที่สามารถใช้ประกอบการเรียนในโรงเรียนหรือมหาวิทยาลัย เพื่อฝึกการทำงานเป็นทีมและการแก้ปัญหาในสถานการณ์จริง
- เพิ่มความสนุกและการมีปฏิสัมพันธ์กับโปรเจค
- การใช้เสียงปรบมือเป็นตัวควบคุมช่วยเพิ่มความสนุกและความท้าทายให้กับผู้ใช้งาน
- ปรับแต่งง่าย
- สามารถปรับแต่งโปรแกรมเพื่อรองรับเสียงในลักษณะอื่น ๆ เช่น เสียงเคาะ หรือเพิ่มฟังก์ชันอื่น ๆ ได้อย่างง่ายดาย
แนวทางการพัฒนาต่อยอดโปรเจค Arduino UNO R3 ตรวจจับเสียงปรบมือ
- ควบคุมอุปกรณ์ไฟฟ้าอื่น ๆ:
ใช้รีเลย์ (Relay Module) เพื่อควบคุมอุปกรณ์ไฟฟ้าภายนอก เช่น พัดลม หลอดไฟ หรือมอเตอร์ เพิ่มความสะดวกสบายในบ้านอัจฉริยะ (Smart Home) - เพิ่มการจดจำรูปแบบเสียง:
ปรับปรุงโปรเจคให้ตรวจจับรูปแบบเสียงที่ซับซ้อนขึ้น เช่น การแยกแยะจังหวะปรบมือ (เร็วหรือช้า) เพื่อควบคุมฟังก์ชันที่แตกต่างกัน - ใช้ร่วมกับระบบ IoT:
เชื่อมต่อกับ NodeMCU หรือ ESP32 เพื่อส่งข้อมูลเสียงปรบมือไปยังแอปพลิเคชันมือถือ หรือควบคุม LED ผ่านเครือข่าย Wi-Fi - เพิ่มระบบแสดงผล:
ติดตั้งจอ OLED หรือ LCD เพื่อแสดงสถานะ เช่น จำนวนเสียงปรบมือที่ตรวจจับได้ หรือสถานะการทำงานของระบบ - รองรับการใช้งานหลายเซ็นเซอร์:
รวมเซ็นเซอร์อื่น ๆ เช่น PIR (ตรวจจับการเคลื่อนไหว) หรือเซ็นเซอร์วัดอุณหภูมิ เพื่อสร้างระบบควบคุมที่ตอบสนองต่อสภาพแวดล้อม - ปรับปรุงการตอบสนองเสียง:
ใช้ไมโครโฟนที่มีคุณภาพสูงกว่า หรือติดตั้งวงจรกรองสัญญาณรบกวน เพื่อเพิ่มความแม่นยำในการตรวจจับเสียงปรบมือ - ออกแบบเคสหรืออุปกรณ์เสริม:
สร้างกล่องหรือเคสสำหรับเซ็นเซอร์และ Arduino เพื่อความสวยงามและความปลอดภัยของอุปกรณ์ - ใช้กับระบบแสงไฟ RGB:
แทนที่จะใช้ LED ธรรมดา เปลี่ยนเป็นไฟ RGB เพื่อสร้างเอฟเฟกต์แสงสีที่ตอบสนองต่อเสียงปรบมือ เช่น เปลี่ยนสีไฟตามจำนวนเสียงปรบมือ
การพัฒนาต่อยอดเหล่านี้จะช่วยเพิ่มความหลากหลายและความสามารถในการใช้งานโปรเจค ทำให้เหมาะกับการประยุกต์ใช้ในชีวิตประจำวันหรือการเรียนรู้เพิ่มเติม.