งานที่มอบหมาย ครูประภาส

บทความประกอบการเรียนรู้ => ไมโครคอนโทรลเลอร์ (Arduino) => ข้อความที่เริ่มโดย: admin ที่ เมษายน 07, 2016, 02:31:47 PM

หัวข้อ: งานครั้งที่ 45 เขียนโปรแกรมวัดระยะด้วย Ultrasonic แสดงผลที่ UART (install Lib)
เริ่มหัวข้อโดย: admin ที่ เมษายน 07, 2016, 02:31:47 PM
เขียนโปรแกรมวัดระยะด้วย Ultrasonic แสดงผลที่ UART
Arduino สามารถเขียนโค้ดเพื่ออ่านค่าระยะจาก Ultrasonic ได้ไม่ยาก เขียนโค้ดเพียงไม่กี่บรรทัด เพียงแต่ค่าที่ได้ยังมีจุดด้อยกว่าการเขียนโค้ดโดยพึ่งไลบรารี่
ฟังก์ชั่นอยู่ในกลุ่ม Serial http://arduino.cc/en/Reference/Serial (http://arduino.cc/en/Reference/Serial)
-Serial.begin() http://arduino.cc/en/Serial/Begin (http://arduino.cc/en/Serial/Begin)
-if (Serial) http://arduino.cc/en/Serial/IfSerial (http://arduino.cc/en/Serial/IfSerial)
-Serial.available() http://arduino.cc/en/Serial/Available (http://arduino.cc/en/Serial/Available)
-Serial.read() http://arduino.cc/en/Serial/Read (http://arduino.cc/en/Serial/Read)
-Serial.print() http://arduino.cc/en/Serial/Print (http://arduino.cc/en/Serial/Print)
-Serial.println() http://arduino.cc/en/Serial/Println (http://arduino.cc/en/Serial/Println)
-Serial.flush() http://arduino.cc/en/Serial/Flush (http://arduino.cc/en/Serial/Flush)

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

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

การเพิ่มไลบารี่ลงในโปรแกรม Arduino IDE จากไฟล์ Zip
1. ดาวน์โหลดไฟล์ Zip ดังรูป
(http://www.praphas.com/PhotoForum/arduino/Lab-45-a.png)

2. แตกไฟล์ด้วยโปรแกรม winrar
(http://www.praphas.com/PhotoForum/arduino/Lab-45-b.png)

3. ดับเบิลคลิกเข้าไปในโฟลเดอร์ที่แตกมาได้จากข้อ 2 คัดลอกเฉพาะโฟลเดอร์ Ultrasonic (คลิกขวาที่โฟลเดอร์เลือก copy)
(http://www.praphas.com/PhotoForum/arduino/Lab-45-c.png)

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

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

วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้บอร์ด Arduino
(http://www.praphas.com/PhotoForum/arduino/Lab-45-01.png)

วงจรที่ใช้ในการทดลองสำหรับผู้ที่ใช้ไอซี ATmega328 (ที่มี Boot Loader Arduino)
(http://www.praphas.com/PhotoForum/arduino/Lab-45-02.png)

ตัวอย่างโปรแกรมที่ไม่ใช้ไลบรารี่
โค๊ด: [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