“舵机使用”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Created page with "{| style="width: 800px;" |- | ==目的== 本教程将教大家如何使用Mcookie的舵机。 ==设备== *'''Microduino-CoreUSB/zh''' *'''Microduino-Servo/zh''' *'''...")
 
第1行: 第1行:
 +
 
{| style="width: 800px;"
 
{| style="width: 800px;"
 
|-
 
|-
 
|
 
|
==目的==
+
==概述==
 +
舵机不像普通电机那样只会转圈圈,它可以根据你的指令转至0-180°之间的任意角停下来。
 +
也叫伺服电机, 主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。
 +
===工作原理===
 +
由控制器发出讯号给舵机,经由电路板上的 芯片判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。
  
本教程将教大家如何使用Mcookie的舵机。
+
===使用的注意事项===  
 
+
舵机转角在0~180°,当高电平脉冲大于2.5ms,,一般没有自我保护的舵机,都会使转角超出正常的范围,使内部直流电机处于堵转状态,一两分钟就会使舵机发烫,甚至烧坏舵机。使用时,尽量让舵机在45°到135°之间转动,这范围内舵机转角也更精准。
==设备==
 
*'''[[Microduino-CoreUSB/zh]]'''
 
*'''[[Microduino-Servo/zh]]'''
 
*'''[[Microduino-Sensorhub/zh]]'''
 
  
 +
==舵机转接板==
 +
*标准的伺服电机有三条控制线。分别为:电源(VDD)、地(GND)及控制信号线,一般对应红线为电源,灰线为地,橙线为控制信号线。舵机转接板中标有GND,VDD,1/2。按照对应关系接线即可。
 +
*一个舵机转接板可以接2个舵机,在Hub中,一个底座有两个信号线(GND,VCC,信号0,信号1),信号0对应的就是舵机转接板上上面的排针(1/2处),信号1是下面的排针(1/2处)。
 +
[[File:servo-line.jpg|center|400px]]
 +
==规格==
 +
===舵机===
 +
*电器规格
 +
**工作电压: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)
 +
==开发==
 +
===设备===
 +
{|class="wikitable"
 +
|-
 +
|模块||数量||功能
 +
|-
 +
|[[mCookie-CoreUSB/zh]]||1||核心板
 +
|-
 +
|[[mCookie-Hub/zh]]||1||传感器转接板
 +
|-
 +
|[[Microduino-Servo Connector/zh]]||1||舵机连接板
 +
|}
  
 
*其他硬件设备
 
*其他硬件设备
 +
**舵机
 
**USB数据连接线  一根
 
**USB数据连接线  一根
 +
[[File:module-light.jpg|600px|center]]
 +
 +
===准备===
 +
*Setup 1:将Microduino-Servo Connector和舵机连接,接到上一排排针上。
 +
[[file:mCookie-Servo Connector-sensor.JPG|600px|center]]
 +
*Setup 2:将Microduino-Servo Connector和Hub的模拟口IIC接起来。
 +
[[file:mCookie-Servo Connector-hub.JPG|600px|center]]
 +
*Setup 3:将所有设备连接在一起。通过USB数据线将接入电脑。
 +
[[file:mCookie-Light-pc.JPG|600px|center]]
 +
 +
===实验一:驱动舵机 ===
 +
*打开Arduino IDE,将下列代码复制到IDE中。
 +
<source lang="cpp">
 +
#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
 +
}
  
  #include <Servo.h>
 
 
 
  Servo myservo;  // create servo object to control a servo
 
                  // a maximum of eight servo objects can be created
 
 
 
  int pos = 0;    // variable to store the servo position
 
 
 
  void setup()
 
  {
 
    myservo.attach(9);  // attaches the servo on pin 9 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>=1; 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
 
    }
 
  }
 
==调试==
 
  
步骤一:
+
void loop()
把Microduino的舵机插到Microduino-SensorHub的D9引脚.
+
{
[[File:McookieServoSensor.png|600px|center|thumb]]
+
  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
 +
  }
 +
}
 +
</source>
 +
*编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。
 +
[[file:upload.JPG|500px|center]]
 +
*下载完毕你可以看到舵机按角度循环转动。
  
 +
===程序调试===
 +
*采用Arduino自带的Servo驱动库,调用Servo.h文件
 +
*在setup函数里面定义驱动舵机引脚:“myservo.attach(servo_pin);”
 +
*通过“myservo.write(pos);”来控制舵机转到指定角度
 +
*采用for循环来实现角度自动变化,for循环值是从0-180,用户可以更改对应值看看结果有啥变化。
 +
*采用delay函数来控制舵机转的速度,户可以更改对应值看看结果有啥变化。
 +
===实验一:驱动舵机 ===
 +
*打开Arduino IDE,将下列代码复制到IDE中。
 +
<source lang="cpp">
 +
#include <Servo.h>
  
步骤二:
+
Servo myservo;  // create servo object to control a servo
用USB线连接电脑,下载代码并烧录到Microduino-CoreUSB中。
+
// a maximum of eight servo objects can be created
[[File:McookieServoSensor1.png|600px|center|thumb]]
 
  
 +
#define servo_pin SDA
  
步骤三:
+
String inString = "";
烧录完毕后舵机会在0读至180都之间不停地摆动:
 
[[File:McookieServoSensor2.png|600px|center|thumb]]
 
  
 +
int pos = 0;    // variable to store the servo position
  
步骤四:
+
void setup()
试着改变一下转动角度大小,看看是不是正确。
+
{
[[File:McookieServoSensor3.png|600px|center|thumb]]
+
  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 = "";
 +
}
 +
</source>
 +
*编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。
 +
[[file:upload.JPG|500px|center]]
 +
*下载完毕,打开串口监视器,在串口输入框中输入任意角度(0-180),点击发送。
 +
[[file:serial-.JPG|500px|center]]
 +
*结果,可以通过串口精确控制舵机角度。
  
你可以控制舵机转到指定的角度了。
+
===程序调试===
 +
*串口接收发送的数据,将接收到的数据转换成字符串
 +
<source lang="cpp">
 +
  while (Serial.available() > 0)
 +
  {
 +
    inString += char(Serial.read());
 +
    delay(2);
 +
  }
 +
</source>
 +
*当有数据输入,控制舵机
 +
<source lang="cpp">
 +
  if (inString.length() > 0)
 +
  {
 +
    myservo.write(inString.toInt());
 +
    Serial.println(inString.toInt());
 +
  }
 +
</source>
 +
*因为字符数据一直是累加的,所以每接收一次需要对数据清空数据。” inString = "";”
 +
==应用==
 +
*
  
 
==视频==
 
==视频==
  
 
|}
 
|}

2015年10月23日 (五) 03:27的版本

概述

舵机不像普通电机那样只会转圈圈,它可以根据你的指令转至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 传感器转接板
Microduino-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 = "";”

应用

视频