设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8389|回复: 0

官方舵机库(Servo)的使用

[复制链接]

签到天数: 380 天

[LV.9]以坛为家II

发表于 2013-8-6 16:01:01 | 显示全部楼层 |阅读模式
官方舵机库(Servo)的使用

arduino控制舵机在论坛中已经有,你可以点击这里Arduino如何控制盛辉舵机正反转,下面我就来介绍下官方舵机库的一些语法及用法!

官方舵机库的介绍:http://arduino.cc/en/Tutorial/Sweep

电路连接:我们使用的舵机有3根线,分别为橙色(信号线)、红色(VCC)和褐色(GND)。在此特别提醒,舵机的实验中要使用外接电源哦~小心烧坏控制板。

下面介绍下库中函数的使用:

1、attach():绑定Arduino引脚为舵机变量
语法

servo.attach(pin)

servo.attach(pin, min, max)

参数

servo:一个Servo类型的变量

pin:舵机连接的Arduino引脚编号

min:(可选): 脉冲宽度,以微秒为单位,对应舵机的最小角度(0度)(默认为544)

max:(可选): 脉冲宽度,以微秒为单位,对应舵机的最大角度(180度)(默认为2400)



2、write():写一个值到舵机,控制相应的主轴
语法

servo.write(angle)

参数

servo:一个Servo类型的变量

angle:写入舵机的值(从0到180)



3、writeMicroseconds():写一个值(单位为微秒uS)到舵机,控制相应的主轴
语法

servo.writeMicroseconds(uS)

参数

servo:一个Servo类型的变量

uS:写入的值微秒级(整型int)

说明:在标准舵机中,这将会设置主轴的角度。在标准舵机系统参数值中1000是完全的逆时针位置,2000是完全的顺时针位置,而1500则在中间(即1.5ms)。当然,有些制造商不会完全按照标准来执行,导致有些舵机可能会在700到2300的范围响应。在此注意,试图驱动舵机超出范围,会使得其处于一个大电流状态,应该尽力避免!!连续旋转舵机时,舵机就会以write()类似的响应方式进行工作。


4、read():读取当前的舵机角度(该值是最近一次调用write()函数的角度)
语法

servo.read()

参数

servo:一个Servo类型的变量

返回值

舵机的角度(范围0到180)



5、attached():检查舵机变量是否绑定Arduino引脚
语法

servo.attached()

参数

servo:一个Servo类型的变量

返回值

True or False (如果舵机已经绑定则返回True,否则返回False)



6、detach():解除舵机变量与Arduino管脚的绑定
语法

servo.detach()

参数

servo:一个Servo类型的变量  

库的用法就是这些,要想能够灵活的运用他们还需要多多练习~~~






我们看下官方给我们提供的两个例子:Knob 和 Sweep。

Knob例子是利用电位器来控制舵机角度(官方地址):

  1. // Controlling a servo position using a potentiometer (variable resistor)
  2. // by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

  3. #include <Servo.h>

  4. Servo myservo;  // create servo object to control a servo

  5. int potpin = 0;  // analog pin used to connect the potentiometer
  6. int val;    // variable to read the value from the analog pin

  7. void setup()
  8. {
  9.   myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  10. }

  11. void loop()
  12. {
  13.   val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  14.   val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  15.   myservo.write(val);                  // sets the servo position according to the scaled value
  16.   delay(15);                           // waits for the servo to get there
  17. }
复制代码
Servo myservo; 创建对象用来控制舵机;

Sweep例子是直接控制舵机往复摆动(官方地址):

  1. // Sweep
  2. // by BARRAGAN <http://barraganstudio.com>
  3. // This example code is in the public domain.


  4. #include <Servo.h>

  5. Servo myservo;  // create servo object to control a servo
  6.                 // a maximum of eight servo objects can be created

  7. int pos = 0;    // variable to store the servo position

  8. void setup()
  9. {
  10.   myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  11. }


  12. void loop()
  13. {
  14.   for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  15.   {                                  // in steps of 1 degree
  16.     myservo.write(pos);              // tell servo to go to position in variable 'pos'
  17.     delay(15);                       // waits 15ms for the servo to reach the position
  18.   }
  19.   for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  20.   {                                
  21.     myservo.write(pos);              // tell servo to go to position in variable 'pos'
  22.     delay(15);                       // waits 15ms for the servo to reach the position
  23.   }
  24. }
复制代码

上面两个官方的例子很简单,相信大家通过上面的语法学习,对于这两个例子的理解一定会有所帮助!!


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-1-24 13:03 , Processed in 0.381802 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表