日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 基礎入門 >> Arduino開發學習 >> 正文

Arduino控制舵機詳解(含代碼)_Arduino舵機控制程序

作者:佚名    文章來源:網絡整理    點擊數:    更新時間:2024/4/6

目 錄

1. 舵機簡介

2 硬件電路連線

3 項目:舵機來回轉動

3.1 控制代碼

3.2 仿真結果

4 項目2:光控舵機

4.1 硬件電路連線

4.2 控制代碼

4.3 仿真結果

5 項目3:串口控制舵機和內置LED燈

5.1 仿真結果

6 用到的函數解釋


1. 舵機簡介

舵機是一種位置(角度)伺服的驅動器。舵機只是一種通俗的叫法,其實質是一個伺服馬達。在需要角度不斷變化并可以保持的控制系統中應用廣泛。如遙控機械人、飛機模型等。

舵機的轉動角度為0~180°,其內部結構包括電機,控制電路和機械結構三部分。電機有三根線引出,分別接VCC、GNG和信號線。主要有兩種引出線的格式:

  1. 棕、紅、橙(棕色連接GND、紅色連接VCC、橙色連接信號);
  2. 紅、黑、黃(紅色連接VCC、黑色連接GND、黃色連接信號)。

 

9g舵機實物圖 

圖1 舵機實物圖

2 硬件電路連線

Arduino

功能 舵機 功能
VCC 正極 紅色 正極
GND 負極 棕色 負極
D9(PWM) 數字引腳(PWM) 橙色(信號傳輸) 信號輸入

3 項目:舵機來回轉動

實現功能:舵機0~180°來回轉動。

3.1 控制代碼

#include <Servo.h>            //加載文件庫
int pos = 0;
Servo myservo;
void setup()
{
  myservo.attach(9, 500, 2500);          //修正脈沖寬度
}
void loop()
{
  for (pos = 0; pos <= 180; pos += 1) {       //pos+=1等價于pos=pos+1
    myservo.write(pos);
    delay(15);     
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);      
  }
}

3.2 仿真結果

舵機連線及仿真圖 

 

圖2 舵機連線及仿真圖

4 項目2:光控舵機

實現功能:隨著光照強度增加,舵機跟著轉動。A0產生的模擬值大于500時,內置的13引腳的可編程LED發光。

4.1 硬件電路連線

Arduino

功能 舵機 功能
VCC 正極 紅色 正極
GND 負極 棕色 負極
D9(PWM) 數字引腳(PWM) 橙色(信號傳輸) 信號輸入
A0 模擬接口(光敏電阻)

4.2 控制代碼

#include <Servo.h>
const int sensorPin = A0;       
int led=13;         
int pos = 0;
Servo myservo;//創建舵機對象
void setup(){
  myservo.attach(9, 500, 2500);
  pinMode(led,OUTPUT);
  Serial.begin(9600);
}
void loop(){
  int val=analogRead(sensorPin);
  if(val>500){
    digitalWrite(led,HIGH);
  }
  else{
    digitalWrite(led,LOW);
  }
  
  int yp=map(val,0,1023,0,180);
    //數值轉換,將[0,1023]產生的模擬值轉換成[0,180]中的值
  Serial.println(yp);
  myservo.write(yp);
  delay(10);
}

4.3 仿真結果

光控舵機仿真 

 

圖4 光控舵機仿真

5 項目3:串口控制舵機和內置LED燈

實現功能如下:

串口輸入2,led點亮,同時串口打印“ON”,舵機轉動到90°。

串口輸入4,led熄滅,同時串口打印“OFF”,舵機轉動到180°


#include <Servo.h>
int led4=4;       
 
int led=13;         
Servo myservo;//創建舵機對象
 
void setup(){
  myservo.attach(9, 500, 2500);
  pinMode(led,OUTPUT);
  pinMode(led4,OUTPUT);
  Serial.begin(9600);
}
 
void loop(){
  if(Serial.available()>0){
    char c=Serial.read();
    if(c=='2'){
      digitalWrite(led,HIGH);
      digitalWrite(led4,HIGH);
      myservo.write(90);
      Serial.println("ON");
    }
    else if(c=='4'){
      digitalWrite(led,LOW);
      digitalWrite(led4,LOW);
      myservo.write(180);
      Serial.println("OFF");
    }
  }
}

5.1 仿真結果

串口控制舵機仿真 

 

圖4 串口控制舵機仿真

6 用到的函數解釋

  1. Serial.begin()是串口初始化函數,設置傳輸速率。
  2. Serial.println()與Serial.print()的區別在于前者具備換行功能,后者不具備。
  3. Servo.h是舵機庫文件,直接在Aruidno IDE中可以加載。
  4. Servo myservo為創建對象,本質就是一個名稱,myservo可自己命名。
  5. myservo.attach(9)表示控制舵機的引腳。
  6. myservo.write(45)表示舵機旋轉到45°的位置,而不是旋轉了45°。
  7. map()函數的使用率比較高,將某一區間的值轉換為另外區間的值。

語法格式為: val =map(value, fromLow, fromHigh, toLow, toHigh);

val,value為同類型變量,fromHigh與fromLow為變量a的最大與最小值,toHigh與toLow為val變量的最大與最小值。map()函數根據范圍比例即可將某一區間的值縮放至另外區間的值,并將值賦予val。

Tags:Arduino,程序代碼,控制舵機  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢