“第十一课--Microduino 红外控制舵机角度/zh”的版本间的差异
(→视频) |
(→设备) |
||
第6行: | 第6行: | ||
==设备== | ==设备== | ||
− | '''[[Microduino-Core]]''' | + | *'''[[Microduino-Core]]''' |
− | '''[[Microduino-FT232R]]''' | + | *'''[[Microduino-FT232R]]''' |
*其他硬件设备 | *其他硬件设备 | ||
**面包板跳线 一盒 | **面包板跳线 一盒 | ||
第19行: | 第19行: | ||
[[File:第十一课-舵机.jpg|600px|center|thumb]] | [[File:第十一课-舵机.jpg|600px|center|thumb]] | ||
舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。 | 舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。 | ||
− | |||
==原理图== | ==原理图== |
2014年2月21日 (五) 05:49的版本
目的本教程将教大家使用红外来控制舵机转动,话不多说,请看原理图和代码 设备
舵机 舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。 原理图在原理图中,黑线为接地线都接到GUN,红线为电源线都接到5V电压,蓝线为红外接收器的信号线,黄线为舵机的信号线 程序#include <IRremote.h>
#include <Servo.h>
int action;
int deg=0;
int t;
int RECV_PIN = 11;//定义红外接收器的引脚为11
IRrecv irrecv(RECV_PIN);
Servo servo;
decode_results results;
int deckey(unsigned long t)
{
switch(t){
case 0xFD08F7://按钮1的编码
return 1;
break;
case 0xFD8877://按钮2的编码
return 2;
break;
case 0xFD48B7://按钮3的编码
return 3;
break;
case 0xFD28D7://按钮4的编码
return 4;
break;
case 0xFDA857://按钮5的编码
return 5;
break;
case 0xFD6897://按钮6的编码
return 6;
break;
case 0xFD18E7://按钮7的编码
return 7;
break;
case 0xFD9867://按钮8的编码
return 8;
break;
case 0xFD58A7://按钮9的编码
return 9;
break;
default:
return 0;
break;
}
}
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
servo.attach(9);//D9pin
servo.write(0);
t=0;
}
void loop() {
deg=servo.read();
if (irrecv.decode(&results))
{
action=deckey(results.value);
Serial.println(results.value, HEX);//以16进制换行输出接收代码
Serial.println(action);
Serial.println();//为了便于观看输出结果增加一个空行
switch(action)
{
case 1:
servo.write(0);
break;
case 2:
servo.write(20);
break;
case 3:
servo.write(40);
break;
case 4:
servo.write(60);
break;
case 5:
servo.write(80);
break;
case 6:
servo.write(100);
break;
case 7:
servo.write(120);
break;
case 8:
servo.write(140);
break;
case 9:
servo.write(160);
break;
}
delay(10);
irrecv.resume();
}
}
调试步骤一:下载IRremote库 [1] 步骤二:把压缩包解压到Arduino IDE的libraries文件夹中 步骤三:搭建硬件电路,注意引脚接法; 步骤四:打开串口监视器,用遥控器对着红外接收器按键,会显示红外编码。 结果按遥控机按键1,2,3,4.。。。,看舵机开始动了! 视频 |