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

18luck网站

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

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

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

目 錄

1. 舵機簡介

2 硬件電路連線

3 項目:舵機來回轉動

3.1 控製代碼

3.2 仿真結果

4 項目2:光控舵機

4.1 硬件電路連線

4.2 控製代碼

4.3 仿真結果

5 項目3:串口控製舵機和內(nei) 置LED燈

5.1 仿真結果

6 用到的函數解釋


1. 舵機簡介

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

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

  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); //修正脈衝(chong) 寬度 } void loop() { for (pos = 0; pos <= 180; pos += 1) { //pos+=1等價(jia) 於(yu) 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產(chan) 生的模擬值大於(yu) 500時,內(nei) 置的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]產(chan) 生的模擬值轉換成[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()函數的使用率比較高,將某一區間的值轉換為另外區間的值。

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

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

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

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