Thursday, December 13, 2018

ทดสอบ อัลตร้าโซนิค SRF05




อุปกรณที่ใช้


1. บอร์ด Arduino UNO R3

2. Sensor Shield V5.0

3. จอแสดงผล LCD

4. แผ่นอะคริลิค ขนาด 15 x 30 เซนติเมตร

5. สกรูหัวกลม+น็อตตัวเมีย ขนาด 3 มม. ยาว 12 มม.

6. เสารองแผ่นพีซีบีแบบโลหะ ยาว 25 มม.

7. Jumper 30cm Female to Female

8. อัลตร้าโซนิค เซนเซอร์ SRF05


รู้จักกับคลื่นอัลตร้าโซนิค

คลื่นอัลตร้าโซนิค เป็นคลื่นความถี่เหนือความถี่สัญญาณเสียง โดยปกติแล้ว มนุษย์จะสามารถได้ยินเสียง หรือรับรู้ได้ที่ความถี่ 20Hz ถึง 20kHz แต่คลื่นอัลตร้าโซนิคนั้น ระบุเพียงว่าเป็นคลื่นที่มีความถี่เหนือคลื่นความถี่เสียง แต่ไม่ได้บอกว่าความถี่เท่าใด

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




หลักการวัดระยะด้วยคลื่นอัลตร้าโซนิค

หลักการที่สำคัญของการวัดระยะด้วยคลื่นอัลตร้าโซนิค คือการส่งคลื่นอัลตร้าโซนิคจำนวนหนึ่งออกไปจากตัวส่ง (Transmitter) เมื่อคลื่นวิ่งไปชนกับวัตถุ คลื่นจะมีการสะท้อนกลับมา แล้ววิ่งกลับไปชนตัวรับ (Receiver) ด้วยการเริ่มนับเวลาที่ส่งคลื่นออกไป จนถึงได้รับคลื่นกลับมานี้เอง ทำให้เราสามารถหาระยะห่างระหว่างวัตถุกับเซ็นเซอร์ได้




หลักการทำงานของ HY-SRF05

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

การทำงานเริ่มจากเมื่อทริกสัญญาณเข้าที่ขา Trig ให้เป็น HIGH จะทำให้โมดูลเริ่มวัดระยะ แล้วส่งค่าที่วัดได้ออกมาเป็นความกว้างพัลส์ที่ขา Echo นำค่าเวลาความกว้างพัลส์ที่ส่งมาจากขา Echo เมื่อนำมาหาร 29 / 2 จะได้ค่าระยะออกมาเป็นเซ็นติเมตร โดยสามารถวัดระยะได้ตั้งแต่ 2 เซ็นติเมตร ไปจนถึง 4.5 เมตร ความผิดพลาดขึ้นอยู่กับระยะทางที่วัด

ขั้นตอนการทำงาน

1. เชื่อมต่อ อัลตร้าโซนิค SRF05 เข้ากับ Sensor Shield V5.0

     Shield  <->  SRF05

      G        <->    GND
      V        <->    VCC
      A2      <->    Trig
      A3      <->    Echo


const ค่าคงที่ (Constant) เป็นตัวแปรประเภทหนึ่งที่ไม่สามารถเปลี่ยนแปลงค่าได้ในขณะที่โปรแกรมทำงาน นั่นหมายความว่าเราจะต้องกำหนดค่าให้ตัวแปรในเวลาที่คอมไพเลอร์ทำงาน หรือในตอนแรกที่เราสร้างตัวแปรค่าคงที่ขึ้นมา

ตัวแปรแบบ unsigned แสดงว่าเป็นตัวแปรที่เก็บค่าเป็นจำนวนเต็ม แบบไม่คิด เครื่องหมาย ( เป็นบวกเท่านั้น ) มักจะใช้เป็นคำนำหน้าตัวแปร ตัวอย่างการใช้งาน เช่น unsigned int มีค่าตั้งแต่ 0 ถึง 65535


2. 
อัพโหลดโค้ด


#include <Wire.h>

#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 16, 2);


String My_Object;

const unsigned int TRIG_PIN = A2;

const unsigned int ECHO_PIN = A3;

const unsigned int BAUD_RATE = 9600;


void setup() {

  pinMode(TRIG_PIN, OUTPUT);

  pinMode(ECHO_PIN, INPUT);

  Serial.begin(BAUD_RATE);

}



void loop() {

  digitalWrite(TRIG_PIN, LOW);

  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG_PIN, LOW);



  const unsigned long duration = pulseIn(ECHO_PIN, HIGH);

  int distance = duration / 29 / 2;

  if (duration == 0) {

    Serial.println("Warning: no pulse from sensor");

  }

  else {

    Serial.print("distance :");

    Serial.println(distance) + " cm";
    
    My_Object = "Object " + String (distance) + " cm";
    
    lcd.begin();
    
    lcd.backlight();
    
    lcd.print(My_Object);

  }

  delay(100);

}


3. ผลลัพธ์การทำงาน




No comments:

Post a Comment