HC-SR04 - เซ็นเซอร์วัดระยะทาง Ultrasonic
พื้นฐานอิเล็กทรอนิกส์
เนื่องจากเซ็นเซอร์นี้ใช้แรงดัน 5V หากใช้งานร่วมกับบอร์ด 3.3V ควรศึกษาเรื่อง ระบบป้องกันและจำกัดแรงดัน เพื่อป้องกันความเสียหายต่อไมโครคอนโทรลเลอร์

📋 ภาพรวม
HC-SR04 เป็นเซ็นเซอร์ที่ใช้คลื่นอัลตราโซนิก (คลื่นเสียงความถี่สูง) ในการวัดระยะทางไปยังวัตถุ มีราคาประหยัดและแม่นยำในช่วงระยะ 2 ซม. ถึง 400 ซม.
ข้อมูลทางเทคนิค
- แรงดันไฟ: 5V DC
- กระแสใช้งาน: 15mA
- ความถี่สัญญาน: 40Hz
- ระยะวัดได้: 2 - 400 ซม.
- ความแม่นยำ: ±3 มม.
- มุมการวัด: 15 องศา
🔌 การต่อสาย
พินของเซ็นเซอร์
- VCC: 5V
- Trig (Trigger): ส่งคลื่นเสียง
- Echo: รับคลื่นเสียงสะท้อน
- GND: Ground
💻 โค้ดตัวอย่าง
Arduino
const int trigPin = 9;
const int echoPin = 10;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Clear the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// ส่งคลื่นออกไป 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// อ่านค่าเวลาที่สะท้อนกลับมา (microseconds)
long duration = pulseIn(echoPin, HIGH);
// คำนวณระยะทาง (cm)
// ความเร็วเสียง = 340 m/s = 0.034 cm/us
// ระยะทาง = (เวลา * ความเร็ว) / 2 (ไป-กลับ)
int distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(100);
}
Library แนะนำ (NewPing)
สำหรับ Arduino และ ESP32 แนะนำให้ใช้ Library NewPing เพื่อประสิทธิภาพที่ดีกว่า
#include <NewPing.h>
#define TRIGGER_PIN 5
#define ECHO_PIN 18
#define MAX_DISTANCE 400
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(115200);
}
void loop() {
delay(50);
Serial.print("Distance: ");
Serial.print(sonar.ping_cm());
Serial.println("cm");
}
🛠️ โปรเจค DIY
1. เครื่องวัดส่วนสูงดิจิตอล
ติดตั้งเซ็นเซอร์ไว้ที่เพดานหรือกรอบประตู เพื่อวัดระยะจากเพดานลงมาที่หัวคน
2. หุ่นยนต์หลบสิ่งกีดขวาง
ใช้ HC-SR04 ติดบน Servo เพื่อหันซ้าย-ขวา ตรวจดูว่ามีทางไหนว่างบ้างก่อนจะเดินต่อ
3. ระบบเตือนถอยหลังรถยนต์
ใช้ Buzzer ส่งเสียงเตือนถี่ขึ้นเมื่อระยะทางเข้าใกล้สิ่งกีดขวางมากขึ้น
⚠️ ข้อควรระวัง
ความเสียหายต่อชิป 3.3V
พิน Echo ของ HC-SR04 จะส่งแรงดันสัญญานที่ 5V เสมอ หากนำไปต่อกับ ESP32 หรือ STM32 โดยตรงอาจทำให้พินรับสัญญานเสียหายได้ ควรใช้วงจรแบ่งแรงดัน (Voltage Divider) ด้วยตัวต้านทาน หรือใช้ Bi-directional Logic Level Shifter
พื้นผิวของวัตถุ
วัตถุที่มีพื้นผิวนุ่มหรือดูดซับเสียง เช่น ผ้า หรือฟองน้ำ อาจทำให้การวัดคลาดเคลื่อนเนื่องจากเสียงไม่สะท้อนกลับมาที่เซ็นเซอร์