[UNICON] [HC-SR04] วัดระยะทางด้วยคลื่นอัลตร้าโซนิก

แนะนำโมดูลวัดระยะทางด้วยคลื่นอัลตร้าโซนิก HC-SR04

<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>

 

UniconProject06-fig26_CO-[Converted]

 

        HC-SR04 เป็นโมดูลวัดระยะทางที่ใช้หลักการสะท้อนของคลื่นอัลตร้าโซนิก ราคาประหยัด โดยตัว HC-SR04 มีแหล่งกำเนิดคลื่นอัลตร้าโซนิกส่งไปสะท้อนกับวัตถุที่อยู่ข้างหน้ากลับมายังตัวรับสัญญาณ โดยระยะทางที่วัดได้จะสัมพันธ์กับระยะเวลาที่คลื่นอัลตร้าโซนิกเคลื่อนที่ไปกระทบวัตถุและสะท้อนกลับมายังตัวรับ เมื่อรู้ระยะเวลาที่คลื่นอัลตร้าโซนิกสะท้อนกลับมา จึงนำมาคำนวณหาเป็นระยะทางระหว่างโมดูล HC-SR04 กับวัตถุได้ โดยโมดูล HC-SR04 วัดระยะทางในช่วง 2 ถึง 500 ซม. (5 เมตร) มีความละเอียดอยู่ที่ 0.3 ซม. ใช้ไฟเลี้ยง +5V

 

โมดูล HC-SR04 พร้อมกับสาย JST3AC-8 จำนวน 2 เส้น เพี่อเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์

 

 

การติดต่อกับบอร์ด Unicon

 

        การเชื่อมต่อกับบอร์ด Unicon ของโมดูล HC-SR04 ใช้สายสัญญาณแบบ JST3AC-8 จำนวน 2 เส้น โดยปลายสายด้านหัวต่อ IDC ตัวเมียของสาย JST3AC-8 เส้นที่ 1 ต่อกับคอนเน็กเตอร์ของโมดูล HC-SR04 ที่ขาไฟเลี้ยง (+V), กราวด์ (GND) และ Trigger ส่วนเส้นที่ 2 ให้ต่อสายสัญญาณ (สีขาว เส้นกลาง) กับขา Echo ส่วนหัวต่อ IDC ตัวเมียของสายสีแดงและดำที่เหลือให้ปล่อยลอยไว้ ส่วนปลายสายด้านที่เป็นหัวต่อ JST ให้นำไปเสียบจุดต่อพอร์ต 2 สำหรับขา Trigger และพอร์ต 3 สำหรับขา Echo บนบอร์ด Unicon

UniconProject06-fig26_CO-[Converted]วงจรเชื่อมต่อเพื่อใช้งานโมดูล HC-SR04 กับบอร์ด Unicon

 

        ในการสื่อสารข้อมูลกับโมดูล HC-SR04 ใช้ขาสัญญาณ 2 ขา คือ Trigger และ Echo โดยขา Trigger มีไว้สำหรับสั่งงานให้โมดูล HC-SR04 ส่งคลื่นอัลตร้าโซนิกออกไปข้างหน้า เมื่อคลื่นอัลตร้าโซนิกสะท้อนกลับมาจากวัตถุเป้าหมาย จะส่งสัญญาณพัลส์ออกมาทางขา Echo โดยสัญญาณนี้จะมีความกว้างที่สัมพันธ์กับระยะทางที่วัดได้ ดังนั้น ไมโครคอนโทรลเลอร์จะต้องส่งสัญญาณพัลส์ที่มีความกว้างพัลส์อย่างน้อย 10 ไมโครวินาทีไปยังขา Trigger ของโมดูล HC-SR04 แล้วรอรับสัญญาณพัลส์ที่ส่งกลับมาทางขา Echo เพื่อวัดความกว้างของสัญญาณพัลส์

 UniconProject06-fig27_CO-[Converted]การติดต่อระหว่างบอร์ด Unicon กับโมดูล HC-SR04 เพื่อวัดระยะทาง

 

        เมื่อวัดความกว้างของสัญญาณพัลส์จากขา Echo ในหน่วยไมโครวินาทีแล้ว นำไปคำนวณเป็นระยะทางในหน่วยเซนติเมตรหรือนิ้วได้ดังนี้

                    ระยะทาง (เซนติเมตร) = (ระยะเวลาในหน่วยไมโครวินาที / 29) / 2
                    ระยะทาง (นิ้ว) = (ระยะเวลาในหน่วยไมโครวินาที / 74) / 2

 

เขียนโค้ด

 

         ตัวอย่างโปรแกรมสำหรับติดต่อกับโมดูล HC-SR04 ของบอร์ด Unicon ฟังก์ชั่นหลักของโปรแกรมนี้คือ getDistance();  โดยการทำงานของฟังก์ชั่นนี้ เริ่มต้นด้วยการกำหนดให้ขาพอร์ต 30 เป็นเอาต์พุตดิจิตอล แล้วส่งสัญญาณพัลส์กว้าง 10 ไมโครวินาทีออกไป จากนั้นกำหนดให้ขาพอร์ต 6 เป็นอินพุตดิจิตอล เพื่อรอรับสัญญาณพัลส์กลับมาจากขา Echo ของโมดูล HC-SR04 โดยใช้ฟังก์ชั่น pulseIn(); จากนั้นนำค่าความกว้างของพัลส์ที่วัดได้มาทำการคำนวณเป็นระยะทางในหน่วยเซนติเมตรและนิ้ว

         จากนั้นจึงนำค่าที่วัดได้ไปแสดงผลที่จอแสดงผล GLCD-XT ทั้งในหน่วยเซนติเมตรและหน่วยนิ้ว

/*****************************************************
 * 
 *   TITLE : ULTRASONIC RANGING
 *   CATAGORIES : PULSE
 *   CREATED DATE : DECEMBER 9, 2013
 *   AUTHOR : INNOVATIVE EXPERIMENT CO., LTD. (INEX)
 *   WEBSITE : HTTP://WWW.INEX.CO.TH
 *   DESCRIPTION : Measure distance between HC-SR04 and any object
 *                 and show distance on Unicon board's GLCD 
 *                 in centimetre unit
 *                 โปรแกรมวัดระยะทางระหว่าง HC-SR04 กับวัตถุใดๆ
 *                 โดยแสดงค่าระยะทางที่วัดได้ในหน่วยเซนติเมตรมาแสดงบน GLCD
 *
 ******************************************************/

#include <unicon.h>

// Trigger Pin = Pin 30
#define triggerPin  30      

// Echo Pin = Pin 6
#define echoPin     6    

void setup()
{
  // Clear GLCD screen
  glcdClear();
  
  // Set output pin for trigger pin
  pinMode(triggerPin, OUTPUT);       
  
  // Set output pin for echo pin
  pinMode(echoPin, INPUT);   
}

void loop()
{
  // Get distance in centimetre unit
  long data = getRawData();
  
  // Get distance in inch
  long distance_in = (data / 74) / 2;  
  
  // Get distance in centimetre
  long distance_cm = (data / 29) / 2;
  
  // Show distance on GLCD
  glcd(0, 0, "Distance : %d cm  ", distance_cm);
  glcd(1, 0, "Distance : %d in  ", distance_in);
  
  // Delay 500 milliseconds
  delay(500);
}

// Get raw data from HC-SR04
long getRawData()
{
  // Trig high pulse on trigger pin for 10 microseconds
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);                
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  
  // Wait for the echo pin to go HIGH
  // and get the length of the pulse in microseconds
  long time = pulseIn(echoPin, HIGH);   
  
  // Return distance
  return time;                     
}

    โปรแกรมสำหรับติดต่อกับโมดูลวัดระยะทางด้วยคลื่นอัลตร้าโซนิก HC-SR04 ของบอร์ด Unicon

 

 

ทดสอบวัดระยะทาง

 

     เมื่อรันโปรแกรม ที่จอแสดงผล GLCD-XT จะแสดงข้อความและค่าของการวัดในหน่วยเซนติเมตรและนิ้วทันที ทดลองใช้มือบังที่ด้านหน้าของโมดูล HC-SR04 แล้วเลื่อนมือเข้าใกล้และถอยห่างออกจากโมดูล สังเกตค่าการวัดที่ได้ อาจตรวจสอบความแม่นยำในการวัดด้วยการใช้ไม้บรรทัดหรือตลับเมตรวัดเทียบได้

     จากการทดสอบในพื้นที่โล่งกับวัตถุที่มีรูปร่างแน่นอนเพียง 1 ชิ้น โดยมีการปรับระยะทดสอบอย่างต่อเนื่องพบว่า
โมดูล HC-SR04 วัดระยะทางได้ระหว่าง 2 เซนติเมตร ถึง 5 เมตร แต่ระยะทำการที่ให้ผลค่อนข้างแน่นอนคือ 4 เซนติเมตร ถึง 3 เมตร

UniconProject06-fig28-[Converted]ผลการทำงานของโมดูล HC-SR04 บนบอร์ด Unicon

 

Facebook Comments