舵机使用

来自Microduino Wikipedia
跳转至: 导航搜索

概述

舵机不像普通电机那样只会转圈圈,它可以根据你的指令转至0-180°之间的任意角停下来。 也叫伺服电机, 主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。

工作原理

由控制器发出讯号给舵机,经由电路板上的 芯片判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。

使用的注意事项

舵机转角在0~180°,当高电平脉冲大于2.5ms,,一般没有自我保护的舵机,都会使转角超出正常的范围,使内部直流电机处于堵转状态,一两分钟就会使舵机发烫,甚至烧坏舵机。使用时,尽量让舵机在45°到135°之间转动,这范围内舵机转角也更精准。

舵机转接板

  • 标准的伺服电机有三条控制线。分别为:电源(VDD)、地(GND)及控制信号线,一般对应红线为电源,灰线为地,橙线为控制信号线。舵机转接板中标有GND,VDD,1/2。按照对应关系接线即可。
  • 一个舵机转接板可以接2个舵机,在Hub中,一个底座有两个信号线(GND,VCC,信号0,信号1),信号0对应的就是舵机转接板上上面的排针(1/2处),信号1是下面的排针(1/2处)。

规格

舵机

  • 电器规格
    • 工作电压:4.8-6V
  • 技术参数
    • 扭力:1.6kg-cm/4.8V,1.8kg-cm/6.0V
    • 速度:0.11sec/60°4.8V, 0.10sec/60° 6.0V
  • 尺寸
    • 大小:22.4mm*12.5mm*22.8mm
  • 接口
    • 电源(VCC),地(GND),信号(in)

舵机转接板

  • 一个舵机转接板可接两个舵机
  • 接口
    • 地(GND),电源(VDD),信号(1/2)

开发

设备

模块 数量 功能
mCookie-CoreUSB/zh 1 核心板
mCookie-Hub/zh 1 传感器转接板
Sensor-Servo Connector/zh 1 舵机连接板
  • 其他硬件设备
    • 舵机
    • USB数据连接线 一根
    • 传感器连接线 一根

准备

  • Setup 1:将Microduino-Servo Connector和舵机连接,接到上一排排针上。
  • Setup 2:将Microduino-Servo Connector和Hub的模拟口IIC接起来。
  • Setup 3:将所有设备连接在一起。通过USB数据线将接入电脑。

实验一:驱动舵机

  • 打开Arduino IDE,将下列代码复制到IDE中。
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// a maximum of eight servo objects can be created

#define servo_pin SDA

int pos = 0;    // variable to store the servo position

void setup()
{
  myservo.attach(servo_pin);  // attaches the servo on pin SDA to the servo object
}


void loop()
{
  for (pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
  { // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) // goes from 180 degrees to 0 degrees
  {
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
  • 编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。
Upload.JPG
  • 下载完毕你可以看到舵机按角度循环转动。

程序调试

  • 采用Arduino自带的Servo驱动库,调用Servo.h文件
  • 在setup函数里面定义驱动舵机引脚:“myservo.attach(servo_pin);”
  • 通过“myservo.write(pos);”来控制舵机转到指定角度
  • 采用for循环来实现角度自动变化,for循环值是从0-180,用户可以更改对应值看看结果有啥变化。
  • 采用delay函数来控制舵机转的速度,户可以更改对应值看看结果有啥变化。

实验一:驱动舵机

  • 打开Arduino IDE,将下列代码复制到IDE中。
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// a maximum of eight servo objects can be created

#define servo_pin SDA

String inString = "";

int pos = 0;    // variable to store the servo position

void setup()
{
  Serial.begin(9600);
  myservo.attach(servo_pin);  // attaches the servo on pin 9 to the servo object
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
}


void loop()
{
  while (Serial.available() > 0)
  {
    inString += char(Serial.read());
    delay(2);
  }
  if (inString.length() > 0)
  {
    myservo.write(inString.toInt());
    Serial.println(inString.toInt());
  }
  inString = "";
}
  • 编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。
Upload.JPG
  • 下载完毕,打开串口监视器,在串口输入框中输入任意角度(0-180),点击发送。
  • 结果,可以通过串口精确控制舵机角度。

程序调试

  • 串口接收发送的数据,将接收到的数据转换成字符串
  while (Serial.available() > 0)
  {
    inString += char(Serial.read());
    delay(2);
  }
  • 当有数据输入,控制舵机
  if (inString.length() > 0)
  {
    myservo.write(inString.toInt());
    Serial.println(inString.toInt());
  }
  • 因为字符数据一直是累加的,所以每接收一次需要对数据清空数据。” inString = "";”

应用

视频