ข้ามไปที่เนื้อหา

HC-SR04 - เซ็นเซอร์วัดระยะทาง Ultrasonic

พื้นฐานอิเล็กทรอนิกส์

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

HC-SR04 Sensor

📋 ภาพรวม

HC-SR04 เป็นเซ็นเซอร์ที่ใช้คลื่นอัลตราโซนิก (คลื่นเสียงความถี่สูง) ในการวัดระยะทางไปยังวัตถุ มีราคาประหยัดและแม่นยำในช่วงระยะ 2 ซม. ถึง 400 ซม.

ข้อมูลทางเทคนิค

  • แรงดันไฟ: 5V DC
  • กระแสใช้งาน: 15mA
  • ความถี่สัญญาน: 40Hz
  • ระยะวัดได้: 2 - 400 ซม.
  • ความแม่นยำ: ±3 มม.
  • มุมการวัด: 15 องศา

🔌 การต่อสาย

พินของเซ็นเซอร์

  1. VCC: 5V
  2. Trig (Trigger): ส่งคลื่นเสียง
  3. Echo: รับคลื่นเสียงสะท้อน
  4. GND: Ground
HC-SR04          Arduino
───────          ───────
VCC        →      5V
Trig       →      Digital Pin 9
Echo       →      Digital Pin 10
GND        →      GND
HC-SR04          ESP32
───────          ─────
VCC        →      5V (หรือ VIN ถ้าใช้ USB)
Trig       →      GPIO 5
Echo       →      GPIO 18
GND        →      GND

* คำแจ้งเตือน: Echo ส่งสัญญาน 5V กลับมา 
ควรใช้ Voltage Divider เพื่อลดเหลือ 3.3V สำหรับ ESP32
HC-SR04          STM32
───────          ─────
VCC        →      5V
Trig       →      PA1
Echo       →      PA2
GND        →      GND

💻 โค้ดตัวอย่าง

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

พื้นผิวของวัตถุ

วัตถุที่มีพื้นผิวนุ่มหรือดูดซับเสียง เช่น ผ้า หรือฟองน้ำ อาจทำให้การวัดคลาดเคลื่อนเนื่องจากเสียงไม่สะท้อนกลับมาที่เซ็นเซอร์