Archive

Archive for April 25, 2014

วิธีการอ่าน PWM Signals จาก Receiver ด้วย Arduino ขั้นพื้นฐาน

เรามาเรียนรู้วิธีการอ่าน สัญญาณ PWM จาก Receiver กันครับ

จากที่เราทราบกัน นั้น ขาสัญญาณที่ใช้คบคุม servo นั้นส่งสัญญาณออกเป็น PWM และสามารถใช้ควบคุม servo ได้โดยตรง หากเราต้องการใช้สัญญาณนี้เราสามารถอ่าน จากขาสัญญาณเหล่านี้ได้ด้วย Arduino โดยตรง
IMG_20140425_222930

ภาพบนเป็นภาพลักษณะการใชงานทั่วไป ครับ เนื่องจาก board ที่เราจะใช้นั้นเป็น Arduino UNO จะมีขาสัญญาณ PWM อยู่สามารถอ่านค่าได้โดยตรง ด้วยคำสั่ง pulseIn(…) ดังนั้นเพื่อทำความเข้าใจ ก็จะลองทดสอบอ่านค่าจากขาสัญญาณ จาก receiver ด้วย Arduino ดูนะครับ

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

เราจะใช้ขา pin 9 ต่อกับ ช่องสัญญาณที่หนึ่งของ Receiver ดังรูป แล้วให้ Power เข้าที่ ช่องสัญญาณที่ 6 แล้วเราลองทดสอบกันด้วยโปรแกรมสั้น ๆ ตามนี้ครับ

int ch1 ; // to keep channel values

void setup()
{
	pinMode(9,INPUT); // set out input pin as such 
	Serial.begin(9600); 
}

void loop()
{
	ch1 = pulseIn(9,HIGH,25000); // Read the pulse width of the channel
	Serial.print(“channel data : “); // print value of
	Serial.println(ch1) ; // the channel
	
	delay(100);
}

puleIn() function ต้องการ 3 arguments ตัวแรกก็คือ หมายเลข pin ที่เราต้องการให้สัญญาณ pulse เข้ามา ตัวที่่ 2 คือ pulse ‘HIGH’ หรือ ‘LOW’ ที่เรากำลังสนใจอยู่ และสุดท้ายก็เป็น เวลาที่เรากำหนดให้ function รออ่านค่า เรียกว่า time-out
ค่าที่ return ให้ของ puleIn() ก็คือ ความยาวของ pulse มีหน่วยเป็น microseconds และนี่ก็คือวิธีการอ่านสัญญาณ PWM ซึ่งเป็นวิธีเดียวกับที่ servo อ่านสัญญาณนี้
ค่าที่ได้เราให้แสดงออกทาง terminal เมื่อเราทำการประมวลผลโปรแกรมนี้เราควรจะได้ ตัวแสดงผลขึ้นมาที่หน้า terminal ตัวเลขนี้ค่าควรจะอยู่ระหว่าง 1000 – 2000 และเมื่อเราขยับ joy stick ที่เชื่อมโยงกับช่องสัญญาณนี้ ตัวเลขก็ควรจะเปลี่ยนแปลงให้เห็น

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

ธีระพงษ์ สนธยามาลย์

s.teerapong@gmail.com