在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。

       舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。


1.舵机与控制原理

2.servo类介绍

servo类下有以下成员函数

attach()//连接舵机

write()//角度控制

writeMicroseconds()//

read()//读上一次舵机转动角度

attached()//

detach()//断开舵机连接

本帖最后由 奈何col 于 2012-5-9 10:46 编辑



普通舵机有3根线:GND(黑)、VCC(红)、S

ignal(黄),一般情况下,我们建议为舵机单独供电,此处实验为了图方便,用arduino为舵机供电。  


3.实例1


需要的器材:


arduino控制器、舵机、杜邦线若干


首先将舵机如下图连接:


arduino ESP32舵机控制 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. }
24.


复制代码



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


arduino ESP32舵机控制 arduino 舵机程序_分割线_02


下载以下例程(程序可以在IDE>File>Examples>Servo>Knob中找到)


    1. #include <Servo.h> 
    2. 
    3. Servo myservo;  
    4. //创建一个舵机控制对象  
    5. 
    6. int potpin = 0;  //该变量用于存储用电位器读出的模拟值
    7. int val;    
    8. // 该变量用与存储舵机角度位置  
    9. 
    10. void setup() 
    11. { 
    12.   myservo.attach(9);  
    13. // 该舵机由arduino第九脚控制  
    14. } 
    15. 
    16. void loop() 
    17. { 
    18.   val = analogRead(potpin);            //读取电位器控制的模拟值 (范围在0-1023) 
    19.   val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
    20.   myservo.write(val);                  
    21. // 指定舵机转向的角度  
    22.   delay(15);                           
    23. // 等待15ms让舵机到达指定位置   
    24. }


    复制代码





    5.其他驱动方法:

    传送门: