โปรเจกต์คู่บุญเด็ก IoT! จับ HC-SR04 มาต่อวัดระยะทางร่วมกับบอร์ด Arduino และ ESP32
Wassup สาย Maker มือใหม่และวัยรุ่น IoT ทุกคน! 🚀 ถ้าพูดถึงเซนเซอร์ตัวแรกๆ ที่ทุกคนต้องเคยจับตอนเริ่มเล่นบอร์ดไมโครคอนโทรลเลอร์ คงหนีไม่พ้นเจ้า HC-SR04 (Ultrasonic Distance Sensor) หรือเซนเซอร์ตาสองดวงที่หน้าตาคล้ายหุ่นยนต์ Wall-E นั่นเองครับ!
ทำไมมันถึงฮิตนัก? ก็เพราะมันทั้งถูก ใช้ง่าย และวัดระยะทางได้แม่นยำตั้งแต่ 2 เซนติเมตร ไปจนถึง 4 เมตร (400cm) เลยทีเดียว เอาไปทำโปรเจกต์ได้เพียบ ไม่ว่าจะเป็น หุ่นยนต์หลบสิ่งกีดขวาง, ถังขยะเปิดอัตโนมัติ, หรือระบบเช็กที่จอดรถว่าง วันนี้เราจะพามาเจาะลึกหลักการทำงาน และวิธีต่อใช้งานกับบอร์ดลูกรักอย่าง Arduino Uno และ ESP32 กันครับ!
ทำงานยังไง? (สวมวิญญาณค้างคาว 🦇)
เจ้า HC-SR04 ทำงานด้วยหลักการที่เรียกว่า Time of Flight (ToF) หรือการคำนวณระยะเวลาเดินทางของคลื่นเสียงครับ หลักการง่ายๆ คือ:
- บอร์ดของเราจะส่งสัญญาณสั้นๆ (10µs) ไปกระตุ้นที่ขา TRIG (Trigger)
- เซนเซอร์จะยิงคลื่นเสียงอัลตราโซนิกความถี่ 40kHz ออกไป (เป็นความถี่ที่หูคนไม่ได้ยิน)
- เมื่อคลื่นเสียงวิ่งไปชนวัตถุ มันจะสะท้อนกลับมาเข้าที่ตัวรับ
- ขา ECHO จะส่งสัญญาณกลับมาหาบอร์ดว่าใช้เวลาเดินทางไป-กลับกี่ไมโครวินาที
จากนั้นเราก็เอา "เวลา" ที่ได้ ไปเข้าสูตรคำนวณกับ "ความเร็วเสียง" (0.0343 cm/µs) แล้วหาร 2 (เพราะต้องคิดแค่ขาไปอย่างเดียว) แค่นี้ก็ได้ระยะทางเป็นเซนติเมตรเป๊ะๆ แล้ว!
💡 พร้อมลุยโปรเจกต์แรกหรือยัง? ของมันต้องมี!
สำหรับใครที่อ่านแล้วคันไม้คันมือ อยากทำโปรเจกต์หุ่นยนต์หลบหลีก หรือถังขยะอัจฉริยะ สามารถมาเหมา เซนเซอร์ HC-SR04, บอร์ด Arduino Uno R3, บอร์ด ESP32, สาย Jumper และตัวต้านทาน แบบครบเซ็ตได้ที่ Globalbyte Shop เลยครับ! ของแท้ ส่งไว พร้อมใช้งาน ทัก LINE OA มาให้แอดมินช่วยจัดเซ็ตให้ได้เลย!
การต่อสายใช้งาน (Wiring) 🔌
เซนเซอร์ตัวนี้มีแค่ 4 ขา คือ VCC (ไฟเลี้ยง), GND (กราวด์), TRIG (สั่งยิงเสียง), และ ECHO (รับสัญญาณกลับ) แต่เดี๋ยวก่อน! บอร์ดแต่ละรุ่นต่อไม่เหมือนกันนะ!
-
สำหรับ Arduino Uno: ต่อตรงๆ ได้เลย เอา VCC เข้า 5V, GND เข้า GND ส่วน TRIG กับ ECHO เสียบเข้าขา Digital (เช่น 9 กับ 10) ได้อย่างปลอดภัย เพราะลอจิกเป็น 5V เหมือนกัน
⚠️ คำเตือน: สาย ESP32 ต้องระวังพัง!
บอร์ด ESP32 ทำงานที่ลอจิก 3.3V แต่ขา ECHO ของเซนเซอร์ HC-SR04 ดันส่งสัญญาณกลับมาเป็น 5V! หากต่อตรงๆ บอร์ด ESP32 อาจจะพังได้ครับ จำเป็นต้องใช้ "Voltage Divider" (วงจรแบ่งแรงดัน) โดยเอาตัวต้านทาน (Resistor) 2kΩ และ 3.3kΩ มาต่อคั่นที่ขา ECHO ก่อนเข้าบอร์ดเสมอ!
แจกโค้ด (Arduino Sketch) 💻
ก๊อปปี้โค้ดด้านล่างนี้ไปวางในโปรแกรม Arduino IDE แล้วกด Upload ได้เลย! โค้ดนี้ใช้ได้ทั้ง Arduino และ ESP32 (เพียงแค่เปลี่ยนหมายเลขพินของ TRIG และ ECHO ให้ตรงกับบอร์ดที่ใช้ครับ)
const int trigPin = 9;
const int echoPin = 10;
long duration;
float distanceCm;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
Serial.println("HC-SR04 Distance Sensor Ready!");
}
void loop() {
// เคลียร์สถานะพิน TRIG ให้เป็น LOW ก่อน
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// สั่งยิงคลื่นเสียง (ส่งสัญญาณ HIGH เป็นเวลา 10 ไมโครวินาที)
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// จับเวลาที่คลื่นเสียงสะท้อนกลับมา (หน่วยเป็นไมโครวินาที)
duration = pulseIn(echoPin, HIGH, 30000);
// ตรวจสอบว่ามีวัตถุหรือไม่
if (duration == 0) {
Serial.println("No object detected or object out of range");
} else {
// คำนวณเป็นระยะทางเซนติเมตร (ความเร็วเสียง 0.0343 cm/µs หาร 2)
distanceCm = duration * 0.0343 / 2.0;
Serial.print("Distance: ");
Serial.print(distanceCm, 2);
Serial.println(" cm");
}
// หน่วงเวลา 0.5 วินาทีก่อนวัดรอบถัดไป
delay(500);
}
🔗 ข้อมูลอ้างอิงและจุดวาร์ป:
ใครอยากอ่านคู่มือเจาะลึก ทริกแก้ปัญหา (Troubleshooting) หรือดาวน์โหลดโปรเจกต์ตัวเต็ม สามารถกดลิงก์อ้างอิงด้านล่างนี้ได้เลยครับ:
⚡ โค้ดพร้อม วงจรพร้อม! มาเสกโปรเจกต์เจ๋งๆ ด้วยมือคุณเองกันเถอะ ⚡
*Disclaimer (ข้อจำกัดความรับผิดชอบ): เนื้อหาบทความนี้และโค้ดตัวอย่าง ถูกเรียบเรียงและสรุปมาจากโปรเจกต์เพื่อการศึกษาบนแพลตฟอร์ม Hackster.io การต่อวงจรอิเล็กทรอนิกส์ควรตรวจสอบแรงดันไฟ (Voltage) ขาเข้าของบอร์ดให้ดีก่อนจ่ายไฟเสมอ โดยเฉพาะบอร์ด ESP32 ที่ไม่รองรับลอจิก 5V ตรงๆ หากต่อผิดพลาดอาจทำให้อุปกรณ์เสียหายได้ สามารถอ่านคู่มือวงจร Voltage Divider ฉบับเต็มเพิ่มเติมได้ที่
บทความต้นฉบับ ครับ!