นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1
นางสาวรัตนาพร กลิ่นผล 6031280040 1สทค2
HC-SR04
หลักการทำงาน
การต่อใช้งานโมดูล
การต่อใช้งานโมดูล
- ขา VCC สำหรับต่อแรงดันไฟเลี้ยงไม่เกิน 5V
- ขา Trig เป็นขาอินพุตรับสัญญาณพัลส์ความกว้าง 10 ไมโครวินาทีเพื่อกระตุ้นการสร้างคลื่นอัลตราโซนิกความถี่ 40KHz ออกสู่อากาศจากตัวส่ง
- ขา Echo เป็นขาเอาต์พุตสำหรับส่งสัญญาณพัลส์ออกจากโมดูลไปยังไมโครคอนโทรลเลอร์ เพื่อตรวจจับความกว้างของสัญญาณพัลส์และคำนวณเป็นระยะทาง
- ขา GND สำหรับต่อจุดกราวด์ร่วมแรงดันและสัญญาณ
HC-SR04 เป็นเซนเซอร์โมดูลสำหรับตรวจจับวัตถุและวัดระยะทางแบบไม่สัมผัส [1-2] โดยใช้คลื่นอัลตราโซนิก ซึ่งเป็นคลื่นเสียงความถี่สูงเกินกว่าการได้ยินของมนุษย์ วัดระยะได้ตั้งแต่ 2 – 400 เซนติเมตร หรือ 1 – 156 นิ้ว สามารถต่อใช้งานกับไมโครคอนโทรลเลอร์ได้ง่าย ใช้พลังงานต่ำ เหมาะกับการนำไปประยุกต์ใช้งานด้านระบบควบคุมอัตโนมัติ หรืองานด้านหุ่นยนต์ หลักการทำงาน จะเหมือนกันกับการตรวจจับวัตถุด้วยเสียงของค้างคาว ตามรูปที่ 1 โดยจะประกอบไปด้วยตัว รับ-ส่ง อัลตราโซนิก ตัวส่งจะส่งคลื่นความถี่ 40 kHz ออกไปในอากาศด้วยความเร็วประมาณ 346 เมตรต่อวินาที และตัวรับจะคอยรับสัญญาณที่สะท้อนกลับจากวัตถุ เมื่อทราบความเร็วในการเคลื่อนที่ของคลื่น, เวลาที่ใช้ในการเดินทางไป-กลับ (t) ก็จะสามารถคำนวณหาระยะห่างของวัตถุ (S) ได้จาก
S = 346 × 0.5t (1)
รูปที่ 1 หลักการตรวจจับและวัดระยะห่างระหว่างวัตถุด้วยคลื่นเสียง
เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้
โมดูลนี้มีจุดต่อใช้งานทั้งหมด 4 จุด การใช้งานบอร์ด STM32F4DISCOVERY การทดลองในเบื้องต้นสามารถต่อวงจรอย่างง่ายได้โดยใช้โปรโตบอร์ดและสายไฟต่อวงจรตามรูปที่ 2 ทั้งนี้ต้องตรวจสอบคุณสมบัติของพอร์ตของไมโครคอนโทรลเลอร์จากดาต้าชีท [3] ว่าสามารถทนระดับแรงดันลอจิก High (5V) ได้
รูปที่ 2 การต่อใช้งานโมดูลอัลตราโซนิก HC-SR04
ตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 10 msec ป้อนเข้าที่ขา Trig หลังจากนั้นอีกประมาณ 1.4 msec จึงจะเริ่มมีสัญญาณพัลส์เกิดขึ้นที่ขา Echo มีความกว้างของสัญญาณตั้งแต่ 150 usec – 25 msec ซึ่งถ้าหากกว้างกว่านี้จะถือว่าตรวจไม่พบวัตถุ หลังจากนั้นควรหน่วงเวลาออกไปอีก 10 mS จึงจะส่งสัญญาณ Trig ออกไปอีกรอบ ตามรูปที่ 3
รูปที่ 3 สัญญาณที่ขา Trig และขา Echo ของโมดูลเซนเซอร์อัลตราโซนิก HC-SR04
การตรวจจับความกว้างของสัญญาณใช้โมดูล PWM Capture ซึ่งให้เอาต์พุตออกมาเป็นเวลาในหน่วยวินาที และใช้สมการ (2) หรือ (3) เพื่อคำนวณหาระยะทางระหว่างวัตถุที่ตรวจพบ
ระยะทาง (cm) = ความกว้างของสัญญาณ Echo * 106 /58 (2)
ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148 (3)
อุปกรณ์ที่ใช้
1. โฟโต้บอร์ด 1 บอร์ด
2. HC-SR04 1 ตัว
3. บอร์ด Arduino 1 บอร์ด
4. ตัวต้านทาน 220𝛀 6 ตัว
4. ตัวต้านทาน 220𝛀 6 ตัว
5. สายไฟ ผู้ - ผู้ 11 เส้น
6. สายอัปโหลด
7. ไฟ LED 4 ดวง
รูปวงจร
ดาวน์โหลดรูปวงจร ที่นี่
Code
const int trigPin = 9;
const int echoPin = 10;
float duration , distance;
int LEDG1=2;
int LEDG2=3;
int LEDY1=4;
int LEDY2=5;
int LEDR1=6;
int LEDR2=7;
void setup() {
pinMode(LEDG1,OUTPUT);
pinMode(LEDG2,OUTPUT);
pinMode(LEDY1,OUTPUT);
pinMode(LEDY2,OUTPUT);
pinMode(LEDR1,OUTPUT);
pinMode(LEDR2,OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
if (distance <= 6){
digitalWrite(LEDG1, HIGH);
digitalWrite(LEDG2, HIGH);
digitalWrite(LEDY1, HIGH);
digitalWrite(LEDY2, HIGH);
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDR1, HIGH);
delay(300);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(LEDY1, LOW);
digitalWrite(LEDY2, LOW);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR1, LOW);
}
if (distance <=10){
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDR1, HIGH);
}
if (distance <=20){
digitalWrite(LEDY1, HIGH);
digitalWrite(LEDY2, HIGH);
}
if (distance <=30){
digitalWrite(LEDG1, HIGH);
digitalWrite(LEDG2, HIGH);
}
if (distance <=30){
digitalWrite(LEDG1, HIGH);
digitalWrite(LEDG2, HIGH);
}
if (distance <=20){
digitalWrite(LEDY1, HIGH);
digitalWrite(LEDY2, HIGH);
}
if (distance <=10){
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDR1, HIGH);
}
if (distance <= 6){
digitalWrite(LEDG1, HIGH);
digitalWrite(LEDG2, HIGH);
digitalWrite(LEDY1, HIGH);
digitalWrite(LEDY2, HIGH);
digitalWrite(LEDR1, HIGH);
digitalWrite(LEDR2, HIGH);
digitalWrite(LEDR1, HIGH);
delay(300);
digitalWrite(LEDG1, LOW);
digitalWrite(LEDG2, LOW);
digitalWrite(LEDY1, LOW);
digitalWrite(LEDY2, LOW);
digitalWrite(LEDR1, LOW);
digitalWrite(LEDR2, LOW);
digitalWrite(LEDR1, LOW);
}
}
ดาวน์โหลดโค้ด Arduino ที่นี่
ดาวน์โหลดโค้ด Arduino ที่นี่
คำอธิบาย
วงจรนี้เป็นวงจรวัดระยะทาง ทำงานโดยที่ ระทางตั้งแต่ 21-30 ซม. LED สีเขียวติด2ดวง
ระทางตั้งแต่ 11-20 ซม. LED สีเหลืองติด2ดวงและสีเขียวก็ยังคงติดอยู่
ระทางน้อยกว่า 6 ให้ LED กระพริบทั้ง6ดวง และถ้านอกเหนือจากนี้LEDจะดับทั้งหมด
ระทางตั้งแต่ 6-10 ซม. LED สีแดงติด2ดวง สีเหลืองและสีเขียวยังคงติดอยู่
และแสดงระยะทางบน serial monitor (บน serial monitor แสดงระยะทางเป็น เซนติเมตร)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น