Last updated on
วิธีใช้งานเซ็นเซอร์เสียง KY-037 กับ Arduino
วิธีใช้งานเซ็นเซอร์เสียง KY-037 กับ Arduino
เซ็นเซอร์เสียง KY-037 เป็นโมดูลตรวจจับเสียงที่ให้ output ได้ทั้งแบบ analog และ digital มีความไวสูง เหมาะกับโปรเจกต์ที่ต้องการวัดระดับเสียงหรือตรวจจับเสียงที่เกิดขึ้น
อุปกรณ์ที่ต้องใช้
- Arduino UNO R3
- สาย USB สำหรับ upload โค้ด
- เซ็นเซอร์เสียง High Sensitivity Sound KY-037
- LED สีแดง 1 ดวง
- ตัวต้านทาน 220 Ohm
- บอร์ดทดลอง (Breadboard)
- สายไฟจัมเปอร์
ต่อวงจร Arduino กับ KY-037
| Arduino UNO | อุปกรณ์ | หมายเหตุ |
|---|---|---|
| Pin 2 | LED (ผ่าน R 220Ω) | ควบคุม LED ติด-ดับ |
| 5V | KY-037 ขา + | จ่ายไฟให้เซ็นเซอร์ |
| GND | KY-037 ขา G | กราวด์ร่วม |
| A5 | KY-037 ขา A0 | อ่านค่า analog |
โค้ด Arduino อ่านค่าเสียงจาก KY-037
const int soundPin = A5; // ขา analog อ่านค่าเสียง
const int ledPin = 2; // ขา LED
const int threshold = 725; // ค่าเกณฑ์ ปรับได้ตามสภาพแวดล้อม
int ledState = LOW; // สถานะ LED เริ่มต้น
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(soundPin, INPUT);
}
void loop() {
int soundValue = analogRead(soundPin); // อ่านค่า 0-1023
Serial.println(soundValue); // แสดงใน Serial Plotter
// ถ้าค่าเสียงเกินเกณฑ์ ให้สลับสถานะ LED
if (soundValue > threshold) {
ledState = !ledState; // สลับ ติด->ดับ, ดับ->ติด
digitalWrite(ledPin, ledState);
delay(200); // debounce ป้องกันทำซ้ำเร็วเกิน
}
}
วิธีทดสอบด้วย Serial Plotter
- Upload โค้ดลง Arduino
- เปิด Serial Plotter ที่ Tools → Serial Plotter หรือ Serial Monitor
- สังเกตค่าที่แสดงขณะเงียบ ค่าจะอยู่ที่ประมาณ 0-50
- ตบมือหรือทำเสียงดังข้างเซ็นเซอร์ ค่าจะพุ่งขึ้น
- ปรับ threshold ในโค้ดตามค่าที่วัดได้จริงในสภาพแวดล้อมของตัวเอง
จุดที่ต้องปรับแต่งเพิ่มเติม
- threshold — ถ้า LED ติดเองทั้งที่เงียบ แปลว่าค่า threshold ต่ำเกินไป ให้เพิ่มค่าขึ้น ถ้าเสียงดังแล้ว LED ไม่ติด ให้ลดค่าลง
- delay(200) — ปรับระยะ debounce ได้ ค่าน้อย = ตอบสนองเร็ว แต่อาจกระพริบหลายครั้งจากเสียงเดียว
- ขา A0 — สามารถเปลี่ยนเป็น A0-A4 ตามชอบ แก้ค่าในโค้ดด้วย
ต่อ digital output สำหรับงาน simpler
ถ้าต้องการแค่ตรวจจับว่ามีเสียงหรือไม่ (HIGH/LOW) ไม่ต้องใช้ analog ใช้ขา D0 แทน
const int digitalPin = 4; // ขา digital ของ KY-037 (D0)
const int ledPin = 2;
void setup() {
Serial.begin(9600);
pinMode(digitalPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int digitalValue = digitalRead(digitalPin);
Serial.println(digitalValue);
digitalWrite(ledPin, digitalValue); // LED ติดเมื่อมีเสียง
}
หมายเหตุ: ขา D0 จะตั้งค่า HIGH/LOW โดยอัตโนมัติจาก trimpot บนบอร์ด หมุนปรับความไวได้เลย
วิดีโออ้างอิง
อยากทำโปรเจคแบบนี้?
รับทำโปรเจค Arduino / IoT จบงานไว ส่งงานครบ พร้อมสอน
หากต้องการ รับทำโปรเจคอาดูโน่ หรือระบบ IoT แบบเร่งด่วน สามารถดูรายละเอียดบริการได้ที่หน้าแรก
จ้างทำโปรเจคเลย