Arduino教程(提高篇)——舵机的驱动-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 368739|回复: 230

Arduino教程(提高篇)——舵机的驱动

  [复制链接]
发表于 2012-5-4 18:04 | 显示全部楼层 |阅读模式
本帖最后由 奈何col 于 2012-12-13 00:41 编辑

       在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
       舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。

1.舵机与控制原理

2.servo类介绍
servo类下有以下成员函数
attach()//连接舵机
write()//角度控制
writeMicroseconds()//
read()//读上一次舵机转动角度
attached()//
detach()//断开舵机连接
发表于 2012-6-13 10:40 | 显示全部楼层
为了给您顶贴,俺们还特地去注册。。
发表于 2012-6-13 10:32 | 显示全部楼层
最方便的方法~ 我感觉"单独供电"要加粗加红~
 楼主| 发表于 2012-5-4 18:04 | 显示全部楼层
本帖最后由 奈何col 于 2012-5-9 10:46 编辑

普通舵机有3根线:GND(黑)、VCC(红)、Signal(黄),一般情况下,我们建议为舵机单独供电,此处实验为了图方便,用arduino为舵机供电。  

3.实例1

需要的器材:
arduino控制器、舵机、杜邦线若干
首先将舵机如下图连接:

下载以下例程(程序可以在IDE>File>Examples>Servo>Sweep中找到,我只是做个中文介绍)
  1. #include <Servo.h>
  2. Servo myservo;  //创建一个舵机控制对象
  3.                           // 使用Servo类最多可以控制8个舵机
  4. int pos = 0;    // 该变量用与存储舵机角度位置
  5. /*~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  6. void setup()
  7. {
  8.   myservo.attach(9);  // 该舵机由arduino第九脚控制
  9. }
  10. /*~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  11. void loop()
  12. {
  13.   for(pos = 0; pos < 180; pos += 1)  // 从0度到180度运动
  14.   {                                                     // 每次步进一度
  15.     myservo.write(pos);        // 指定舵机转向的角度
  16.     delay(15);                       // 等待15ms让舵机到达指定位置
  17.   }
  18.   for(pos = 180; pos>=1; pos-=1)   //从180度到0度运动  
  19.   {                                
  20.     myservo.write(pos);         // 指定舵机转向的角度
  21.     delay(15);                        // 等待15ms让舵机到达指定位置
  22.   }
  23. }
复制代码

4.实例2
需要的器材:
arduino控制器、舵机、电位器、杜邦线若干
首先将舵机如下图连接:

下载以下例程(程序可以在IDE>File>Examples>Servo>Knob中找到)
  1. #include <Servo.h>

  2. Servo myservo;  
  3. //创建一个舵机控制对象  

  4. int potpin = 0;  //该变量用于存储用电位器读出的模拟值
  5. int val;   
  6. // 该变量用与存储舵机角度位置  

  7. void setup()
  8. {
  9.   myservo.attach(9);  
  10. // 该舵机由arduino第九脚控制  
  11. }

  12. void loop()
  13. {
  14.   val = analogRead(potpin);            //读取电位器控制的模拟值 (范围在0-1023)
  15.   val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  16.   myservo.write(val);                  
  17. // 指定舵机转向的角度  
  18.   delay(15);                           
  19. // 等待15ms让舵机到达指定位置   
  20. }
复制代码



5.其他驱动方法:

传送门:
arduino驱动舵机,不调用库函数:http://www.arduino.cn/thread-45-1-1.html
 楼主| 发表于 2012-5-10 12:51 | 显示全部楼层
更新了一大部分~~~{:soso__14610756010512383460_3:}
发表于 2012-5-11 15:47 | 显示全部楼层
add..

futaba 白红黑 白——信号 红——正极 黑——负极

JR       橙红褐 橙——信号 红——正极 褐——负极
发表于 2012-5-11 15:47 | 显示全部楼层
add..

futaba 白红黑 白——信号 红——正极 黑——负极

JR       橙红褐 橙——信号 红——正极 褐——负极
发表于 2012-5-12 21:37 | 显示全部楼层
几天前写错程序  舵机就坏了{:soso_e109:}
 楼主| 发表于 2012-5-12 22:14 | 显示全部楼层
大鹏·Roc 发表于 2012-5-12 21:37
几天前写错程序  舵机就坏了

是插错了吧~~~
发表于 2012-5-12 23:00 | 显示全部楼层
奈何col 发表于 2012-5-12 22:14
是插错了吧~~~

没加 delay
就悲剧了
发表于 2012-5-23 23:42 | 显示全部楼层
谢谢版主
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 08:10 , Processed in 0.081138 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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