舵机角度控制

舵机角度控制

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°,通过该方法可以控制舵机到指定的角度。