ผู้เขียน หัวข้อ: งานครั้งที่ 45 เขียนโปรแกรมวัดระยะด้วย Ultrasonic แสดงผลที่ UART (install Lib)  (อ่าน 5043 ครั้ง)

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 706
    • ดูรายละเอียด
    • อีเมล์
เขียนโปรแกรมวัดระยะด้วย Ultrasonic แสดงผลที่ UART
Arduino สามารถเขียนโค้ดเพื่ออ่านค่าระยะจาก Ultrasonic ได้ไม่ยาก เขียนโค้ดเพียงไม่กี่บรรทัด เพียงแต่ค่าที่ได้ยังมีจุดด้อยกว่าการเขียนโค้ดโดยพึ่งไลบรารี่
ฟังก์ชั่นอยู่ในกลุ่ม Serial http://arduino.cc/en/Reference/Serial
-Serial.begin() http://arduino.cc/en/Serial/Begin
-if (Serial) http://arduino.cc/en/Serial/IfSerial
-Serial.available() http://arduino.cc/en/Serial/Available
-Serial.read() http://arduino.cc/en/Serial/Read
-Serial.print() http://arduino.cc/en/Serial/Print
-Serial.println() http://arduino.cc/en/Serial/Println
-Serial.flush() http://arduino.cc/en/Serial/Flush

ฟังก์ชั่นที่ใช้งาน
-pinMode() http://arduino.cc/en/Reference/PinMode
-digitalWrite() http://arduino.cc/en/Reference/DigitalWrite
-delay() http://arduino.cc/en/reference/delay

ไลบารี่เพิ่มเติม
-Ultrasonic.h https://github.com/JRodrigoTech/Ultrasonic-HC-SR04

การเพิ่มไลบารี่ลงในโปรแกรม Arduino IDE จากไฟล์ Zip
1. ดาวน์โหลดไฟล์ Zip ดังรูป


2. แตกไฟล์ด้วยโปรแกรม winrar


3. ดับเบิลคลิกเข้าไปในโฟลเดอร์ที่แตกมาได้จากข้อ 2 คัดลอกเฉพาะโฟลเดอร์ Ultrasonic (คลิกขวาที่โฟลเดอร์เลือก copy)


4. นำไปวางในโฟลเดอร์ที่เก็บไลบรารี่ของโปรแกรม Arduino IDE ซึ่งจะอยู่ที่
C:\Users\......\Documents\Arduino\libraries
(คลิกขวาบริเวณว่าง ๆ ภายในโฟลเดอร์แล้วเลือก paste)


โจทย์การทดลอง
-เขียนโปรแกรมวัดระยะด้วย Ultrasonic แสดงผลที่ UART
-โปรแกรมรายละเอียดพิเศษรายกลุ่ม (แจ้งให้ทราบเมื่อถึงชั่วโมงเรียน)

วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้บอร์ด Arduino


วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้ไอซี ATmega328 (ที่มี Boot Loader Arduino)


ตัวอย่างโปรแกรมที่ไม่ใช้ไลบรารี่
โค๊ด: [Select]
#define TRIGGER_PIN  9 //  digital pin D9
#define ECHO_PIN     8 //  digital pin D8

void setup()
{
  Serial.begin (9600);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}
void loop()
{
  double duration, distance;
  digitalWrite(TRIGGER_PIN, LOW);       // Get Start
  delayMicroseconds(2);                 // stable the line
  digitalWrite(TRIGGER_PIN, HIGH);      // sending 10 us pulse
  delayMicroseconds(10);                // delay
  digitalWrite(TRIGGER_PIN, LOW);       // after sending pulse wating to receive signals
  duration = pulseIn(ECHO_PIN, HIGH);   // calculating time
  distance = (duration/2) / 29.1;       // single path
  Serial.print(distance);
  Serial.println(" cm");
  delay(500);
}

ตัวอย่างโปรแกรมที่ใช้ไลบรารี่
โค๊ด: [Select]
#include <Ultrasonic.h>

Ultrasonic ultrasonic(A5,A4);               // (Trig PIN,Echo PIN)

void setup() {
  Serial.begin(9600);
}

void loop()
{
  Serial.print(ultrasonic.Ranging(CM));      // CM or INC
  Serial.println(" cm" );
  delay(100);
}

การเปลี่ยนค่า time out เพื่อปรับระยะการวัด
ค่าปกติของไลบรารี่จะกำหนดมาให้วัดได้ประมาณ 50 cm ซึ่งมีค่า Default TimeOut เท่ากับ 3000 µs = 50cm
คำสั่งที่ใช้คือ
Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)

ผู้ใช้สามารถเปลี่ยนค่าระยะการวัดได้ โดยการกำหนดค่า TimeOut เข้าในฟังก์ชั่น ตัวอย่างเช่น
Ultrasonic ultrasonic(9,8,3000); // (Trig PIN,Echo PIN, Max.TimeOut in µsec )

วิธีการคำนวณค่า TimeOut เพื่อให้ได้ระยะการวัดที่ต้องการ
-ต้องการระยะการวัดสูงสุดหน่วยเป็นเซนติเมตรใช้สูตร
     TimeOut = Max.Distance(cm) * 58
     Example: 50 cm * 58 = 2900 µs
-ต้องการระยะการวัดสูงสุดหน่วยเป็นนิ้วใช้สูตร
     TimeOut = Max.Distance(inc) * 148
     Example: 25 inc * 148 = 3700 µs
« แก้ไขครั้งสุดท้าย: กรกฎาคม 14, 2017, 08:42:50 PM โดย admin »