Page 418 - เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น
P. 418
เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์เบื้องต้น 22
โปรแกรมที่ 9.4 การควบคุม Continuous Rotation Servo โดยใช้ Potentiometer
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup(){
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop(){
val = analogRead(potpin); // reads the value of the potentiometer value
// between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo value
// between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
โค้ดเหมือนกับตัวอย่าง RC Servo Motor โดยใช้ Potentiometer แต่ผลการท างานจะแตกต่างกัน
ผลการท างานของ Code การควบคุม Continuous Rotation Servo โดยใช้ Potentiometer
val = analogRead(potpin);
อ่านค่า Analog จาก Potentiometer ที่ต่ออยู่ที่ขา A0 เก็บไว้ในตัวแปร val
val = map(val, 0, 1023, 0, 179);
เนื่องจาก ADC ภายใน Arduino เป็น ADC ขนาด 10-bit จึงอ่านค่า Analog ได้ตั้งแต่ 0-1023
แต่ Continuous Rotation Servo รับค่าได้ในช่วง 1-180 จึงต้องใช้ Function map เพื่อสเกลค่าจาก 0-1023
เป็น 0-179 แล้วน าไปเก็บไว้ในตัวแปร val
myservo.write(val);
เมื่อสเกลค่า จาก 0-1023 ลงเหลือ 0-179 แล้วก็น ามาสั่งให้ Servo Motor หมุนในความเร็วและ
ทิศทางตามค่าความกว้างของพัลซ์ที่จ่ายออกไป
delay(15);
หน่วงเวลา 15 ms
หน่วยที่ 9 การควบคุมเซอร์โวมอเตอร์ด้วย Arduino เรียบเรียงโดยครูทันพงษ์ ภู่รักษ์