การใช้งาน Arduino
uno r3 กับ เซ็นเซอร์วัดระยะทาง (Ultrasonic Module HC-SR04)
ก่อนที่เราจะเข้าสู่ขั้นตอนการใช้งาน Arduino uno r3 กับ เซ็นเซอร์วัดระยะทาง (Ultrasonic Module HC-SR04) นั้น เรามาทำความรู้จักเจ้า Sensor ตัวนี้กันก่อนดีกว่า
โมดูล
HC-SR04 เป็นอุปกรณ์อิเล็กทรอนิกส์ราคาถูก
สำหรับวัดระยะห่างด้วยคลื่นอัลตราโซนิค (ใช้คลื่นเสียงความถี่ ประมาณ 40kHz)
มีสองส่วนหลักคือ
ตัวส่งคลื่นที่ทำหน้าที่สร้างคลื่นเสียงออกไปในการวัดระยะแต่ละครั้ง ("Ping")
แล้วเมื่อไปกระทบวัตถุหรือสิ่งกีดขวาง คลื่นเสียงถูกสะท้อนกลับมายังตัวรับแล้วประมวลผลด้วยวงจรอิเล็กทรอนิกส์ภายในโมดูล
ถ้าจับเวลาในการเดินทางของคลื่นเสียงในทิศทางไปและกลับ
และถ้าทราบความเร็วเสียงในอากาศ ก็จะสามารถคำนวณระยะห่างจากวัตถุกีดขวางได้
รูปที่ 1 แสดง Ultrasonic Module HC-SR04
โมดูล HC-SR04 ทำงานที่แรงดันประมาณ +5V
(4.5V ถึง +5.5V) โดยป้อนให้ขา
VCC และ GND โมดูลนี้
มีขาสัญญาณดิจิทัล TRIG (อินพุต) และ ECHO (เอาต์พุต) ที่นำไปเชื่อมต่อกับไมโครคอนโทรลเลอร์ได้ อย่างเช่น Arduino
ในการวัดระยะห่างแต่ละครั้ง จะต้องสร้างสัญญาณแบบ Pulse ที่มีความกว้าง (Pulse Width) อย่างน้อย 10 usec
ป้อนให้ขา TRIG และหลังจากนั้นให้วัดความกว้างของสัญญาณช่วง
HIGH จากขา ECHO ถ้าวัตถุอยู่ใกล้
ความกว้างของสัญญาณ Pulse ที่ได้ก็จะน้อย
แต่ถ้าวัตถุอยู่ไกลออกไป ก็จะได้ค่าความกว้างของสัญญาณ Pulse ที่มากขึ้น
รายละเอียดสำคัญของตัวเซ็นเซอร์
· ใช้แรงดันประมาณ
+5V
· กินกระแสประมาณ
15mA
· ช่วงการวัดระยะทาง
(measurement
range): ประมาณ 4cm ถึง 4m
· ความกว้างเชิงมุมในการวัด
(measuring
angle): 15 องศา
· ความกว้างของสัญญาณ
Pulse
สำหรับ Trigger: 10 usec
· ระดับแรงดันลอจิกสำหรัขา
TRIG
และ ECHO: 5V TTL
Datasheet:
http://elecfreaks.com/store/download/HC-SR04.pdf (local
copy)
การต่อใช้งานระหว่าง Arduino
uno r3 กับ Ultrasonic Module HC-SR04
- Vcc -> 5v
- Gnd -> Gnd
- Trig -> 10
- Echo -> 9
Example Code
#define ECHO_PIN
9
#define TRIG_PIN
10
void setup() {
pinMode(
TRIG_PIN, OUTPUT );
pinMode(
ECHO_PIN, INPUT );
digitalWrite( TRIG_PIN, LOW ); // output LOW to the TRIG pin
Serial.begin( 115200 ); // initialize serial, use baudrate=115200
}
void loop() {
Distance();
//
Serial.println( cm );
}
void Distance()
{
int cm;
unsigned
long duration_usec;
unsigned
long distance_mm;
// v =
340 m/s = (340 * 100)/10^6 cm/usec = 34/1000 cm/usec
// 2*d =
v*t => d = v*t/2 = (17*t)/1000 cm = (17*t)/100 mm.
duration_usec = ping();
distance_mm = (17*duration_usec)/100;
if (
distance_mm > 4000 ) { // out of range (beyond 4 meters)
//
Serial.println( "Out of range!" );
}
else
{
Serial.print( "Distance: " );
cm =
distance_mm / 10;
Serial.print( cm );
Serial.print( '.' );
Serial.print( distance_mm % 10 );
Serial.println( " cm" );
}
}
unsigned long ping() {
// send a
pulse (at least 10 usec long) to the TRIG pin
digitalWrite( TRIG_PIN, HIGH );
delayMicroseconds( 12 );
digitalWrite( TRIG_PIN, LOW );
//
measure the ECHO pulse width (in microseconds)
unsigned
long duration_usec = pulseIn( ECHO_PIN, HIGH );
return
duration_usec;
}
/////////////////////////////////////////////////////////////////////
ผลลัพท์ที่ได้
อ้างอิงข้อมูลจาก