日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ardino基础教程 19_舵机控制

發布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ardino基础教程 19_舵机控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗十九:舵機控制

舵機控制實驗Servo庫版本的代碼參考如下鏈接:ArduinoCode19-舵機控制Servo庫版本代碼.ino
舵機是一種位置伺服的驅動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。其工作原理是由接收機或者單片機發出信號給舵機,其內部有一個基準電路,產生周期為20ms,寬度為1.5ms 的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經由電路板上的IC 判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回信號,判斷是否已經到達定位。適用于那些需要角度不斷變化并可以保持的控制系統。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。一般舵機旋轉的角度范圍是0 度到180度。

舵機有很多規格,但所有的舵機都有外接三根線,分別用棕、紅、橙三種顏色進行區分,由于舵機品牌不同,顏色也會有所差異,棕色為接地線,紅色為電源正極線,橙色為信號線。

舵機的轉動的角度是通過調節PWM(脈沖寬度調制)信號的占空比來實現的,標準PWM(脈沖寬度調制)信號的周期固定為20ms(50Hz),理論上脈寬分布應在1ms到2ms 之間,但是,事實上脈寬可由0.5ms 到2.5ms 之間,脈寬和舵機的轉角0°~180°相對應。有一點值得注意的地方,由于舵機牌子不同,對于同一信號,不同牌子的舵機旋轉的角度也會有所不同。

實驗器材清單

了解了基礎知識以后我們就可以來學習控制一個舵機了,本實驗所需要的元器件很少只需要舵機一個、跳線一扎就可以了。

  • 舵機 1個
  • 面包板 1個
  • 面包板跳線 1扎
  • 實驗接線

    用Arduino 控制舵機的方法有兩種,一種是通過Arduino 的普通數字傳感器接口產生占空比不同的方波,模擬產生PWM 信號進行舵機定位,第二種是直接利用Arduino 自帶的Servo 函數進行舵機的控制,這種控制方法的優點在于程序編寫,缺點是只能控制2 路舵機,因為Arduino 自帶函數只能利用數字9、10 接口。Arduino 的驅動能力有限,所以當需要控制1 個以上的舵機時需要外接電源。

    方法一


    將舵機接數字 9 接口上。
    編寫一個程序讓舵機轉動到用戶輸入數字所對應的角度數的位置,并將角度打印顯示到屏幕上。


    參考源程序A:
    int servopin=9;//定義數字接口9 連接伺服舵機信號線
    int myangle;//定義角度變量
    int pulsewidth;//定義脈寬變量
    int val;
    void servopulse(int servopin,int myangle)//定義一個脈沖函數
    {
    pulsewidth=(myangle11)+500;//將角度轉化為500-2480 的脈寬值
    digitalWrite(servopin,HIGH);//將舵機接口電平至高
    delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
    digitalWrite(servopin,LOW);//將舵機接口電平至低
    delay(20-pulsewidth/1000);
    }
    void setup()
    {
    pinMode(servopin,OUTPUT);//設定舵機接口為輸出接口
    Serial.begin(9600);//連接到串行端口,波特率為9600
    Serial.println(“servo=o_seral_simple ready” ) ;
    }
    void loop()//將0 到9 的數轉化為0 到180 角度,并讓LED 閃爍相應
    數的次數
    {
    val=Serial.read();//讀取串行端口的值
    if(val>‘0’&&val<=‘9’)
    {
    val=val-‘0’;//將特征量轉化為數值變量
    val=val(180/9);//將數字轉化為角度
    Serial.print("moving servo to ");
    Serial.print(val,DEC);
    Serial.println();
    for(int i=0;i<=50;i++) //給予舵機足夠的時間讓它轉到指定角度
    {
    servopulse(servopin,val);//引用脈沖函數
    }
    }
    }


    方法二

    先具體分析一下 Arduino 自帶的Servo 函數及其語句,來介紹一下
    舵機函數的幾個常用語句吧。
    1、attach(接口)——設定舵機的接口,只有數字9 或10 接口可利用。
    2、write(角度)——用于設定舵機旋轉角度的語句,可設定的角度范圍是0°到180°。
    3、read()——用于讀取舵機角度的語句,可理解為讀取最后一條write()命令中的值。
    4、attached()——判斷舵機參數是否已發送到舵機所在接口。
    5、detach()——使舵機與其接口分離,該接口(數字9 或10 接口)可繼續被用作PWM 接口。

    注:以上語句的書寫格式均為“舵機變量名.具體語句()”例如:myservo.attach(9)。
    仍然將舵機接在數字9 接口上即可。


    #include <Servo.h>//定義頭文件,這里有一點要注意,可以直接在Arduino 軟件菜單欄單擊Sketch>Importlibrary>Servo,調用Servo 函數,也可以直接輸入#include <Servo.h>,但是在輸入時要注意在#include 與<Servo.h>之間要有空格,否則編譯時會報錯。
    Servo myservo;//定義舵機變量名
    void setup()
    {
    myservo.attach(9);//定義舵機接口(9、10 都可以,缺點只能控制2 個)
    }
    void loop()
    {
    myservo.write(90);//設置舵機旋轉的角度
    }


    以上就是控制舵機的兩種方法,各有優缺點大家根據自己的喜好和需要進行選擇。

    程序代碼

    舵機控制-自由版本代碼

    int servopin=9;//定義數字接口9 連接伺服舵機信號線 int myangle;//定義角度變量 int pulsewidth;//定義脈寬變量 int val; void servopulse(int servopin,int myangle)//定義一個脈沖函數 { pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值 digitalWrite(servopin,HIGH);//將舵機接口電平至高 delayMicroseconds(pulsewidth);//延時脈寬值的微秒數 digitalWrite(servopin,LOW);//將舵機接口電平至低 delay(20-pulsewidth/1000); } void setup() { pinMode(servopin,OUTPUT);//設定舵機接口為輸出接口 Serial.begin(9600);//連接到串行端口,波特率為9600 Serial.println("servo=o_seral_simple ready" ) ; } void loop()//將0 到9 的數轉化為0 到180 角度,并讓LED 閃爍相應數的次數 { val=Serial.read();//讀取串行端口的值 if(val>'0'&&val<='9') { val=val-'0';//將特征量轉化為數值變量 val=val*(180/9);//將數字轉化為角度 Serial.print("moving servo to "); Serial.print(val,DEC); Serial.println(); for(int i=0;i<=50;i++) //給予舵機足夠的時間讓它轉到指定角度 { servopulse(servopin,val);//引用脈沖函數 } } }

    控制控制-Servo庫版本代碼

    #include <Servo.h>之間要有空格,否則編譯時會報錯。 Servo myservo;//定義舵機變量名 unsigned char jiao;// void setup() { myservo.attach(9);//定義舵機接口(9、10 都可以,缺點只能控制2 個) } void loop() {for(jiao=0;jiao<180;jiao++){myservo.write(jiao);//設置舵機旋轉的角度 delay(10); }for(jiao=180;jiao>0;jiao--){myservo.write(jiao);//設置舵機旋轉的角度 delay(10); } }

    總結

    以上是生活随笔為你收集整理的Ardino基础教程 19_舵机控制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。