เปิดปิดไฟ AC 220V ด้วยเสียง
เรียนรู้วิธีควบคุม Arduino ด้วย เซ็นเซอร์เสียง Voice Sound Detection Sensor Module เราจะควบคุม การ เปิด ปิดไฟ AC 220V ด้วยเสียงตบมือ โดยเราจะใช้เซ็นเซอร์ตรวจจับเสียง + รีเลย์ และแสดงผลด้วยไฟ หลอดไฟบ้าน
(เพื่อความปลอดภัย : ผู้ทำโปรเจค ควรมี ความรู้ด้านไฟฟ้าเป็นอย่างดี)
อุปกรณ์ที่ใช้
1. Arduino UNO R3 - Made in italy
2. Sensor Shield V 5.0
3. สาย Jumper Female to Male ยาว 20cm.
4. สาย Jumper Female to Female ยาว 20cm.
5. Relay 1 Channel 5V DC Solid State High Level Trigger
6. Voice Sound Detection Sensor Module
7. สกรูหัวกลม+น็อตตัวเมีย ขนาด 3มม ยาว 12มม
อุปกรณ์ไฟฟ้าอื่นๆ เช่น หลอดไฟ , ปลั๊กไฟ , ขั้วหลอดไฟ , สายไฟ หาซื้อได้ตามร้านขายอุปกรณ์ไฟฟ้าทั่วๆไป
การต่อวงจร ระหว่าง Sensor Shield กับ เซ็นเซอร์เสียง
Shield <-> เซ็นเซอร์เสียง
G <-> GND
V <-> VCC
S(4) <-> OUT
การต่อวงจร ระหว่าง Sensor Shield กับ รีเลย์
Shield <-> รีเลย์
G <-> DC-
V <-> DC+
S(5) <-> CH1
การต่อวงจร ระหว่าง Sensor Shield + เซ็นเซอร์เสียง + รีเลย์
ใช้สาย USB เชื่อมต่อระหว่าง คอมพิวเตอร์ กับ Arduino UNO R3
บล็อกไดอะแกรม
อธิบายโค้ด
int sound_sensor = 4; // ประกาศให้พินดิจิตอล 4 เป็นตัวแปรชื่อ sound_sensor มีชนิดของข้อมูลคือ int คือ เลขจำนวนเต็ม
int relay = 5; // ประกาศให้พินดิจิตอล 5 เป็นตัวแปรชื่อ relay มีชนิดของข้อมูลคือ int คือ เลขจำนวนเต็ม
int clap = 0; // ประกาศตัวแปรชื่อ clap มีชนิดของข้อมูลคือ int คือ เลขจำนวนเต็ม มีค่าเริ่มต้น เป็น 0
long detection_range_start = 0; // ประกาศตัวแปรชื่อ detection_range_start มีชนิดของข้อมูลคือ long คือ เลขจำนวนเต็ม มีค่าเริ่มต้น เป็น 0
long detection_range = 0; // ประกาศตัวแปรชื่อ long detection_range มีชนิดของข้อมูลคือ long คือ เลขจำนวนเต็ม มีค่าเริ่มต้น เป็น 0
boolean status_lights = false; // ประกาศตัวแปรชื่อ status_lights มีชนิดของข้อมูลคือ boolean คือ มีค่าได้เพียงสองค่าคือ จริง-true และ เท็จ-false โดยให้มีค่าเริ่มต้น เป็น เท็จ-false
void setup() { // ฟังก์ชัน setup จะทำงานครั้งแรก เพียงครั้งเดียวเท่านั้น
pinMode(sound_sensor, INPUT); // ให้ พินดิจิตอล 4 ตัวแปร sound_sensor เป็นพินโหมด แบบอินพุท เพื่อรับค่า จากเซ็นเซอร์เสียง
pinMode(relay, OUTPUT); // ให้ พินดิจิตอล 5 ตัวแปร relay เป็นพินโหมด แบบเอาท์พุทเพื่อส่งค่าการทำงานให้กับ รีเลย์
} // สิ้นสุดการทำงานของฟังก์ชัน setup
void loop() { // ฟังก์ชัน loop จะทำงานซ้ำ วนลูป ไปเรื่อยๆ
int status_sensor = digitalRead(sound_sensor); // ประกาศตัวแปร status_sensor และรับค่าจาก พินดิจิตอล 4 ตัวแปร sound_sensor
if (status_sensor == 0) // ถ้า status_sensor เท่ากับ 0
{
if (clap == 0) // ถ้า clap เท่ากับ 0
{
detection_range_start = detection_range = millis(); // ให้ตัวแปร detection_range_start และ detection_range มีค่าเท่ากับ millis หรือ milliseconds คือการจับเวลาของ Arduino ทันทีที่มีไฟเลี้ยงเข้า
clap++; // ให้ clap มีค่าอยู่เท่าไรให้บวกหนึ่ง
}
else if (clap > 0 && millis()-detection_range >= 50) // ถ้า clap มากกว่า 0 และ millis ลบกับ detection_range มากกว่าหรือเท่ากับ 50
{
detection_range = millis(); // ให้ detection_range เท่ากับ millis
clap++; // ให้ clap มีค่าอยู่เท่าไรให้บวกหนึ่ง
}
}
if (millis()-detection_range_start >= 400) // ถ้า millis ลบกับ detection_range_start มากกว่าหรือเท่ากับ 400
{
if (clap == 2) // ถ้า clap เท่ากับ 2
{
if (!status_lights) // ถ้า status_lights เป็นเท็จ
{
status_lights = true; // ให้ status_lights เท่ากับ จริง
digitalWrite(relay, HIGH); // ส่งข้อมูล HIGH ไปที่รีเลย์ เพื่อให้ไฟติด
}
else if (status_lights) // ถ้า status_lights เป็นจริง
{
status_lights = false; // ให้ status_lights เป็นเท็จ
digitalWrite(relay, LOW); // ส่งข้อมูล LOW ไปที่รีเลย์ เพื่อให้ไฟดับ
}
}
clap = 0; // ให้ clap เท่ากับ 0
}
} // สิ้นสุดการทำงานของฟังก์ชัน loop แล้วเริ่มทำงานฟังก์ชัน loop ใหม่ซ้ำไปเรื่อยๆ
อัพโหลดโค้ด
เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3
int sound_sensor = 4; int relay = 5;
int clap = 0; long detection_range_start = 0; long detection_range = 0; boolean status_lights = false;
void setup() { pinMode(sound_sensor, INPUT); pinMode(relay, OUTPUT); }
void loop() { int status_sensor = digitalRead(sound_sensor); if (status_sensor == 0) { if (clap == 0) { detection_range_start = detection_range = millis(); clap++; } else if (clap > 0 && millis()-detection_range >= 50) { detection_range = millis(); clap++; } } if (millis()-detection_range_start >= 400) { if (clap == 2) { if (!status_lights) { status_lights = true; digitalWrite(relay, HIGH); } else if (status_lights) { status_lights = false; digitalWrite(relay, LOW); } } clap = 0; }
}
ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO
ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง ให้เลือกตัวอื่นที่ไม่ใช่ COM1)
ในตัวอย่างเลือกเป็น "COM3"
(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)
กดปุ่ม
เพื่ออัพโหลด
หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง
ให้เอาไขควงหมุน ปรับค่าการรับสัญญาณเสียง โดยให้หมุนตัว R ปรับค่าได้ แบบ trimpot สีฟ้า
ให้ไฟ LED สีเขียว ด้านซ้ายมือติดดวงเดียว เมื่อตบมือให้ LED สีเขียวด้านขวามือ กระพริบ ตาม การตบมือของเรา
และ เมื่อตบมือ 2 ครั้ง ให้ ไฟ LED สีแดง ที่ รีเลย์ ติด และ เมื่อ ตบมืออีก 2 ครั้ง ให้ ไฟ LED สีแดง ที่ รีเลย์ ดับ
การต่อวงจร ระหว่าง หลอดไฟ กับ รีเลย์
ภาพรวมการต่อวงจร
วีดีโอผลลัพธ์ โปรเจค Arduino เปิด ปิดไฟ AC 220V ด้วยเสียง