“舵机使用”的版本间的差异
(Created page with "{| style="width: 800px;" |- | ==目的== 本教程将教大家如何使用Mcookie的舵机。 ==设备== *'''Microduino-CoreUSB/zh''' *'''Microduino-Servo/zh''' *'''...") |
(→设备) |
||
(未显示3个用户的7个中间版本) | |||
第1行: | 第1行: | ||
+ | |||
{| style="width: 800px;" | {| style="width: 800px;" | ||
|- | |- | ||
| | | | ||
− | == | + | ==概述== |
+ | 舵机不像普通电机那样只会转圈圈,它可以根据你的指令转至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处)。 | ||
+ | [[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||传感器转接板 | ||
+ | |- | ||
+ | |[[Sensor-Servo Connector/zh]]||1||舵机连接板 | ||
+ | |} | ||
*其他硬件设备 | *其他硬件设备 | ||
+ | **舵机 | ||
**USB数据连接线 一根 | **USB数据连接线 一根 | ||
+ | **传感器连接线 一根 | ||
+ | |||
+ | [[File:module-sevo.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-servo-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 | ||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | 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 | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | *编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。 | ||
+ | [[file:upload.JPG|600px|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 | |
− | + | // 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 = ""; | ||
+ | } | ||
+ | </source> | ||
+ | *编译完成后在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号,然后直接下载程序。 | ||
+ | [[file:upload.JPG|600px|center]] | ||
+ | *下载完毕,打开串口监视器,在串口输入框中输入任意角度(0-180),点击发送。 | ||
+ | [[file:serial-.JPG|600px|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 = "";” | ||
+ | ==应用== | ||
+ | * | ||
==视频== | ==视频== | ||
|} | |} |
2017年3月20日 (一) 06:59的最新版本
目录概述舵机不像普通电机那样只会转圈圈,它可以根据你的指令转至0-180°之间的任意角停下来。 也叫伺服电机, 主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。 工作原理由控制器发出讯号给舵机,经由电路板上的 芯片判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,藉由检测电阻值便可知转动的角度。 使用的注意事项舵机转角在0~180°,当高电平脉冲大于2.5ms,,一般没有自我保护的舵机,都会使转角超出正常的范围,使内部直流电机处于堵转状态,一两分钟就会使舵机发烫,甚至烧坏舵机。使用时,尽量让舵机在45°到135°之间转动,这范围内舵机转角也更精准。 舵机转接板
规格舵机
舵机转接板
开发设备
准备
实验一:驱动舵机
#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
}
}
程序调试
实验一:驱动舵机
#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 = "";
}
程序调试
while (Serial.available() > 0)
{
inString += char(Serial.read());
delay(2);
}
if (inString.length() > 0)
{
myservo.write(inString.toInt());
Serial.println(inString.toInt());
}
应用视频 |