เขียนโปรแกรมวัดระยะด้วย 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)
ตัวอย่างโปรแกรมที่ไม่ใช้ไลบรารี่
#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);
}
ตัวอย่างโปรแกรมที่ใช้ไลบรารี่
#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