2012年6月26日星期二

Arduino教程(提高篇)——舵機的驅動


在機器人機電控制系統中,舵機控制效果是性能的重要影響因素。舵機可以在微機電系統和航模中作為基本的輸出執行機構,其簡單的控制和輸出使得單片機系統非常容易與之介面。
       舵機是一種位置(角度)伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。目前在高檔遙控玩具,如航模,包括飛機模型,潛艇模型;遙控機器人中已經使用得比較普遍。舵機是一種俗稱,其實是一種伺服馬達。

1.舵機與控制原理

2.servo類介紹
servo類下有以下成員函數
attach()//
write()//
writeMicroseconds()//
read()//
attached()//
detach()//


普通舵機有3根線:GND(黑)、VCC(紅)、Signal(黃),一般情況下,我們建議為舵機單獨供電,此處實驗為了圖方便,用arduino為舵機供電。  

3.實例1
需要的器材:
arduino控制器、舵機、杜邦線若干 
首先將舵機如下圖連接:
ebkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;float:none;word-spacing:0px'>attached()//
detach()//
下載以下常式(程式可以在IDE>File>Examples>Servo>Sweep中找到,我只是做個中文介紹
    1. #include <Servo.h> 
    2. Servo myservo;  //创建一个舵机控制对象
    3.                           // 使用Servo类最多可以控制8个舵机
    4. int pos = 0;    // 该变量用与存储舵机角度位置
    5. /*~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~ */
    6. void setup() 
    7.   myservo.attach(9);  // 该舵机由arduino第九脚控制
    8. /*~~~~~~~~~~~~~~~~~~~~~~~~~~华丽的分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~ */ 
    9. void loop() 
    10.   for(pos = 0; pos < 180; pos += 1)  // 从0度到180度运动 
    11.   {                                                     // 每次步进一度
    12.     myservo.write(pos);        // 指定舵机转向的角度
    13.     delay(15);                       // 等待15ms让舵机到达指定位置
    14.   } 
    15.   for(pos = 180; pos>=1; pos-=1)   //从180度到0度运动  
    16.   {                                
    17.     myservo.write(pos);         // 指定舵机转向的角度 
    18.     delay(15);                        // 等待15ms让舵机到达指定位置 
    19.   } 
    20. }

4.實例2
需要的器材:
arduino控制器、舵機、電位器、杜邦線若干
首先將舵機如下圖連接:
  1. #include <Servo.h> 

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

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

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

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

5.其他驱动方法:

传送门:arduino驱动舵机,不调用库函数:http://www.arduino.cn/thread-45-1-1.html



没有评论:

发表评论