เซนเซอร์ Ultrasonic HC-SR04 ตัวอย่าง

การทำงานของ HC-SR04 กับ Arduino ตัวอย่างการทำงาน

สิ่งประดิษฐ์เกิดจากกระบวนการคิดเพื่อแก้ปัญหาใดๆ และเรามักจะพบกับปัญหาที่เกี่ยวข้องกับระยะทางในช่วงสั้นๆที่มีความแม่นยำ หากความต้องการที่กล่าวมาข้างต้นเราจะพิจารณาเอาอุปกรณ์ตัวนึงเข้ามาแก้ปัญหาเหล่านี้ เป็นอุปกรณ์ที่ได้รับความนิยมเป็นอย่างมากเพราะใช้งานง่ายการเชื่อมต่อสื่อสารไม่ซับซ้อนและมีโปรแกรมตัวอย่างให้ใช้งานมากมายนั้นคือ HC-SR04 เป็นเซ็นเซอร์วัดระยะทางด้วยอัลตราโซนิก (Ultrasonic Sensor) ที่ทำงานโดยการปล่อยคลื่นเสียงความถี่สูงและรับสัญญาณสะท้อนกลับมาเพื่อคำนวณระยะทาง วัดจากระยะเวลาที่เสียงใช้ในการเดินทางจากตัวปล่อย (transmitter) ไปยังวัตถุและสะท้อนกลับมาที่ตัวรับ (receiver)

การทำงานของ HC-SR04

  1. Trigger Signal: ใช้ขาสัญญาณ Trigger เพื่อส่งพัลส์สั้น ๆ ให้กับเซ็นเซอร์ โดยต้องส่งสัญญาณที่มีความกว้าง 10 ไมโครวินาที
  2. Sound Emission: เมื่อรับสัญญาณจาก Trigger ขา Echo จะเริ่มทำงาน โดยเซ็นเซอร์จะปล่อยคลื่นเสียงที่มีความถี่ 40 kHz ออกไปจากตัวปล่อย
  3. HC-SR04 กับ Arduino
    1. Reflection: คลื่นเสียงเดินทางไปยังวัตถุ และเมื่อชนกับวัตถุจะสะท้อนกลับมายังตัวรับของเซ็นเซอร์
    2. Echo Signal: ขา Echo จะรับสัญญาณเสียงที่สะท้อนกลับมา โดยระยะเวลาที่ใช้ในการเดินทางไปและกลับของคลื่นจะถูกนำมาคำนวณเพื่อหาค่าระยะทาง
    3. Distance Calculation: ใช้สูตรการคำนวณระยะทางดังนี้:
      หารด้วย 2 เนื่องจากคลื่นเสียงต้องเดินทางไปและกลับ

    การต่อวงจร

    • VCC: จ่ายไฟ 5V ให้กับ HC-SR04
    • GND: ต่อเข้ากับกราวด์
    • Trigger: ต่อเข้ากับขาดิจิตอลของ Arduino เช่น Pin 9
    • Echo: ต่อเข้ากับขาดิจิตอลของ Arduino เช่น Pin 10

    สำหรับการต่อใช้งานนั้น อุปกรณ์ทุกชนิดจำเป็นต้องมีพลังงานเลี้ยงเพื่อให้ตัวมันเองสามารถทำงานได้เราจึงต้องต่อไฟเลี้ยง Vcc และ Gnd เพื่อให้การทำงานได้ครบวงจร และการใช้งานรับส่งข้อมูลสามารถต่อเข้ากับขาดิจิตอลขาใดๆก็ได้ของ arduino แต่เมื่อต่อแล้วต้องกำหนดขานั้นๆให้ตรงกับขาที่เปลี่ยนไปด้วย มิฉนั้นการอ่านค่าจะเกิดความผิดพลาด และเป็นจุดที่นักเรียนมือใหม่มักจะผิดพลาด.

    ตัวอย่างโค้ดการใช้งาน HC-SR04 กับ Arduino

    
    const int trigPin = 9;
    const int echoPin = 10;
    
    void setup() {
      Serial.begin(9600); // เริ่มต้นการสื่อสารผ่าน Serial Monitor
      pinMode(trigPin, OUTPUT); // กำหนดขา Trigger เป็นเอาต์พุต
      pinMode(echoPin, INPUT);  // กำหนดขา Echo เป็นอินพุต
    }
    
    void loop() {
      long duration;
      float distance;
    
      // ทำความสะอาดสัญญาณที่ขา Trigger ก่อน
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
    
      // ส่งพัลส์ที่ขา Trigger นาน 10 ไมโครวินาที
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
    
      // อ่านค่าจากขา Echo เป็นระยะเวลาที่เสียงใช้ในการเดินทาง
      duration = pulseIn(echoPin, HIGH);
    
      // คำนวณระยะทาง (ความเร็วเสียงในอากาศคือ 343 m/s)
      distance = (duration * 0.0343) / 2;
    
      // แสดงผลระยะทางผ่าน Serial Monitor
      Serial.print("Distance: ");
      Serial.print(distance);
      Serial.println(" cm");
    
      // หน่วงเวลาการอ่านค่าครั้งถัดไป
      delay(1000);
    }
        

    อธิบายโค้ด

    • pinMode(trigPin, OUTPUT): กำหนดขา Trigger เป็นเอาต์พุต
    • pinMode(echoPin, INPUT): กำหนดขา Echo เป็นอินพุตเพื่อรับสัญญาณสะท้อนกลับ
    • digitalWrite(trigPin, LOW): ทำให้ขา Trigger ต่ำก่อนเริ่มต้น
    • pulseIn(echoPin, HIGH): วัดระยะเวลาที่ขา Echo สูง (สัญญาณเสียงสะท้อนกลับ)
    • คำนวณระยะทาง: นำเวลาที่ได้จาก Echo มาคูณด้วยความเร็วเสียงเพื่อหาค่าระยะทาง

    ข้อควรระวัง

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