พึ่งเคยใช้งานครั้งแรกโปรดอ่านที่นี่! howtouse!
x
  • Register
หางานด้าน IT อยู่เหรอ?

เกี่ยวกับ Arduino - Servo motor ครับ

0 votes

พอดีืทำโปรเจ็คที่มีความเกี่ยวเนื่องกับ Servo motor อยากให้ค่า หมุนไปในรอบที่ 180 องศาแล้วหยุดการทำงานของ Servo

เหมือนใส่ค่า Low

เพราะผมลงทำตัว Knob + Sweep แล้วมันวนรูปไม่ไปค่าอื่นต่อ

ขอบคุณล่วงหน้าครับ :)

ถามเมื่อ Nov 1, 2013 in Arduino โดย oldoldold (103 คะแนน)
   

1 Answer

+2 votes

เผอิญหา RC Servo มะเจอเลยยังไม่ได้ทดลองนะครับ
แต่ขอตอบเท่าที่รู้ก่อนนะครับ

ในการใช้งาน Rc servo Motor จะต้องส่งสัญญาณ PWM ที่มีความถี่ 50 Hz (หรือคาบ 20 ms) ไปตลอดเพื่อให้มอเตอร์รักษาตำแหน่ง
โดย ความกว้างของคาบเวลาส่วนที่เป็น Logic HIGH จะเป็นคำสั่งควบคุมตำแหน่งของมอเตอร์

ใน Arduino ได้มี Libraries Servo ไว้ให้แล้ว 

เรียกใช่้โดยผ่านการ include นะครับ

#include <Servo.h>  

ซึ่งเริ่มต้นใช่งานด้วยการประกาศ Object ของ Class Servo ก่อนนะครับ

รูปแบบการประกาศเหมือนกับการประกาศตัวแปรครับ

Servo ชื่อobject;

ตัวอย่าง

Servo myServo1;

Servo myServo2;

 

จะทำการ setup Servo ด้วยคำสั่ง attach() ซึ่งเป็นฟังชั่นภายใน Class Servo

รูปแบบการเรียกใช้เป็นดังนี้

ObjectName.attach(pin);                                

pin - หมายเลขของ Digital I/O ที่เชื่อมต่อกับ Board Arduino สำหรับ UNO ( 0 - 19 )
โดย pin ที่ 14 จะเป็น ANALOGIN 0 ครับ ** ระวัง pin ที่ 13 ใน UNO นะครับ ในช่วง Bootloader 

จะมีสัญญาณเกิดขึ้นจากส่วน Bootloader ซึ่งจะทำงานเริ่มต้นหลังจาก Restart หรือ จ่ายไฟฟ้าให้ระบบ
และทำให้มอเตอร์ทำงานเองได้ครับ

ดังนั้นเมื่อเราจะกำหนดใช้งาน Servo motor สองตัวที่ต่อกับ digital pin ที่ 3 และ 5 นะครับ

#include <Servo.h>  
#define servo_pinA 3
#define servo_pinB 5

Servo myServo1;
Servo myServo2;

void setup()
{

myServo1.attach(servo_pinA);
myServo2.attach(servo_pinB);

}

จากนั้นในการสั่งให้ servo motor ทำงานจะใช้คำสั่ง write() และ writeMicroseconds()

รูปแบบคำสั่งจะเป็นดังนี้

ObjectName.write(Position);

ฟังชั่นนี้จะเป็นการสั่งควบคุมมอเตอร์ด้วยตำแหน่งองศาต่างๆ 0 - 180 องศา

ObjectName.writeMicroseconds(time_of_High);
ฟังชั่นนี้จะเป็นการสั่งควบคุมมอเตอร์ด้วยค่า High ของ Servo Motor หน่วยเป็น Microseconds
ซึ่งจะควบคุม Servo Motor ได้ตำแหน่งที่ละเอียดกว่าใช้คำสั่ง write()
โดยค่า time_of_High ถูกกำหนดไว้ในช่วง 700 - 2300 us

ทดลองสั่งให้มอเตอร์ อยู่ที่ตำแหน่ง 0 องศา 90 องศา และ 180 องศาตามลำดับห่างกัน 1 วินาที
 

#include <Servo.h>  
#define servo_pinA 3
#define servo_pinB 5

Servo myServo1;
Servo myServo2;

void setup()
{

myServo1.attach(servo_pinA);
myServo2.attach(servo_pinB);

myServo1.write(0);

myServo2.write(0);
delay(1000);
myServo1.write(90);

myServo2.write(90);
delay(1000);
myServo1.write(180);
myServo2.write(180);

}

ถึงตรงนี้ก็สามารถเขียนโปรแกรมควบคุม Motor Servo ได้แล้วนะครับ

ในส่วนคำตอบของกระทู็นี้ ^^ เพิ่งมาตอบ
ผมคิดว่าใช้คำสั่ง detach() นะครับ

เป็นคำสั่งในการปลดการเชื่อมต่อกับ Servo motor 

โดยเรียกใช้ดังนี้ครับ

ObjectName.detach();

ขอจบการตอบกระทู้แบบงูๆปลาๆ เท่านี้ครับ

ตอบเมื่อ Nov 2, 2013 โดย Silar Wong (112 คะแนน)

Related questions

0 votes
2 คำตอบ
287 views ถามเมื่อ Apr 16, 2015 in Arduino โดย methodplayer (102 คะแนน)
0 votes
1 คำตอบ
0 votes
1 คำตอบ
0 votes
0 คำตอบ
224 views ถามเมื่อ Mar 10, 2014 in Arduino โดย Yrrubbub Tresarpeul (106 คะแนน)
0 votes
1 คำตอบ
603 views ถามเมื่อ Mar 11, 2014 in Arduino โดย PawnniEz Hyun Joong (102 คะแนน)
...