วันเสาร์ที่ 19 พฤษภาคม พ.ศ. 2561

วัดระยะด้วย Ultra sonic

วัดระยะด้วย Ultrasonic sensor

ที่มา : https://www.arduitronics.com/article/18/ultrasonic-ranging-module-hc-sr04

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

ระยะห่าง = ระยะเวลา * ความเร็วเสียง / 2


สิ่งที่จะต้องทราบคือ Ultrasonic คือเสียง ซึ่งความเร็วในการเดินทางของเสียงจะแปรผันตามอุณหภูมิที่เปลี่ยนแปลงไป จึงอาจทำให้ค่าระยะทางที่วัดได้มีความคลาดเคลื่อน แต่ Sensor บางรุ่นจะมีเซ็นเซอร์วัดอุณหภูมิมาด้วย ทำให้สามารถวัดระยะทางได้แม่นยำมากขึ้น สำหรับรุ่นที่ไม่มี อาจใช้เซนเซอร์วัดอุณหภูมิมาใช้เพื่อแก้ไขค่าผิดพลาดเองได้ หรือใช้อุณหภูมิเฉลี่ยของประเทศไทยที่ 27 องศาเซลเซียสก็ได้
อีกส่วนที่จะต้องรู้คือช่วงวัดและมุมที่สามารถวัดได้ เช่น Sensor บางตัวอาจมีระยะที่วัดได้ระหว่าง 2 ซ.ม. - 400 ซ.ม. และมีมุมวัด 15 องศk เป็นต้น ทั้งนี้ขึ้นกับรูปร่างลักษณะของลำโพงที่ใช้กำเนิดเสียงด้วย
ที่มา : https://www.arduitronics.com/article/18/ultrasonic-ranging-module-hc-sr04
การทำงาน
เซนเซอร์บางรุ่นจะใช้สายสัญญาณ 2 เส้น คือ Trig สำหรับส่งสัญญาณ และ Echo สำหรับรับสัญญาณกลับมา โดยเริ่มต้นจะต้องให้สัญญาณขา Trig มีสถานะเป็น LOW จากนั้นจึงเริ่มทริกสัญญาณ โดยให้ขา Trig มีสถานะเป็น HIGH ค้างไว้อย่างน้อย 10us แล้วจึงปรับสถานะเป็น LOW

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

  1. Arduino UNO
  2. Ultrasonic sensor

วงจร

Ultrasonic sensor จะมี 4 pin คือ Vcc, Ground, Trig, Echo แต่ถ้ามีขา Out เพิ่มมาอีก 1 pin ให้เว้นไว้ไม่ต้องต่อสาย

ไลบรารี

  • NewPing

ตัวอย่าง Code

แบบไม่ใช้ไลบรารี

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const int pingPin = 13;
int inPin = 12;

     
void setup() {
  Serial.begin(9600);
}
 
void loop()
{
  long duration, cm;
 
  pinMode(pingPin, OUTPUT);
 

  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
  pinMode(inPin, INPUT);
  duration = pulseIn(inPin, HIGH);

  cm = microsecondsToCentimeters(duration);

  Serial.print(cm);
  Serial.print("cm");
  Serial.println();     
  delay(100);
}
 
long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

แบบใช้ไลบรารี


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");
}

บรรณานุกรม




ไม่มีความคิดเห็น:

แสดงความคิดเห็น