舵机角度控制
舵机角度控制
1.舵机介绍
舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。
舵机的基本原理是接受 PWM 信号,经由内部电路计算出转动角度,根据我查到的资料来看,大多数舵机旋转角度是 0 到 180 度,PWM 讯号的频率必须是 50 Hz,控制舵机角度的脉冲持续时间约是 1.0 ms 到 2.0 ms,脉冲持续时间若为 1.0 ms 时角度为 0 度,1.2 ms 时角度为 45 度,1.5 ms 时角度为 90 度,2.0 ms 时角度为 180 度。
舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分。电机有三根线引出,分别接VCC、GNG和信号线。
- 棕、红、橙(棕色连接GND、红色连接VCC、橙色连接信号);
- 红、黑、黄(红色连接VCC、黑色连接GND、黄色连接信号)。
2.舵机控制
2.1.控制舵机正反转
1.材料清单
- ArduinoUno主板
- Tower Pro 9g servos 舵机
- 面包板
- 杜邦线
1.硬件组装
- 舵机红线接主板5v
- 舵机棕线接主板主板GND
- 舵机橙线接主板9号引脚(pwm)
2.软件控制
该程序通过Arduino的标准库来控制舵机,首先通过IDE安装Servo标准库。然后通过该库提供的函数来控制舵机。
#include <Servo.h>
Servo myServo;
// 用于存储舵机位置的变量
int pos = 0;
void setup(){
// 舵机控制信号引脚
myServo.attach(9);
}
void loop(){
//舵机正转180度
for(pos=0; pos<180; pos++){
myServo.write(pos);
delay(50);
}
//舵机反转180度
for(pos=180; pos>1; pos--){
myServo.write(pos);
delay(50);
}
}
2.2.通过第三方信号控制舵机角度
通过接受其他传感器的采集数据来控制舵机角度,例如根据光敏电阻采集光照强度来控制舵机的转动。
1.材料清单
- ArduinoUno主板
- Tower Pro 9g servos 舵机
- 面包板
- 杜邦线
- 光敏电阻
2.硬件组装
- 舵机红线接主板5v
- 舵机棕线接主板主板GND
- 舵机橙线接主板9号引脚(pwm)
- 光敏电阻不分正负极
- 1号引脚接220Ω电阻,电阻另一端接主板5v
- 1号引脚直接接主板A0
- 2号引脚接主板GND
3.软件控制
#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);
}
3.Servo库介绍
- Servo.h
舵机库文件,直接在Aruidno IDE中可以加载。 - Servo myservo
创建Servo类对象,本质就是一个名称,myservo可自己命名。 - myservo.attach(9)
表示控制舵机的引脚。 - myservo.write(45)
表示舵机旋转到45°的位置,而不是旋转了45°,通过该方法可以控制舵机到指定的角度。