目 錄
1. 舵機簡介
舵機是一種位置(角度)伺服的驅動器。舵機隻是一種通俗的叫法,其實質是一個(ge) 伺服馬達。在需要角度不斷變化並可以保持的控製係統中應用廣泛。如遙控機械人、飛機模型等。
舵機的轉動角度為(wei) 0~180°,其內(nei) 部結構包括電機,控製電路和機械結構三部分。電機有三根線引出,分別接VCC、GNG和信號線。主要有兩(liang) 種引出線的格式:
- 棕、紅、橙(棕色連接GND、紅色連接VCC、橙色連接信號);
- 紅、黑、黃(紅色連接VCC、黑色連接GND、黃色連接信號)。
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 仿真結果
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 仿真結果
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 仿真結果
6 用到的函數解釋
- Serial.begin()是串口初始化函數,設置傳輸速率。
- Serial.println()與Serial.print()的區別在於前者具備換行功能,後者不具備。
- Servo.h是舵機庫文件,直接在Aruidno IDE中可以加載。
- Servo myservo為創建對象,本質就是一個名稱,myservo可自己命名。
- myservo.attach(9)表示控製舵機的引腳。
- myservo.write(45)表示舵機旋轉到45°的位置,而不是旋轉了45°。
- 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。