第十一课--Microduino 红外控制舵机角度/zh

来自Microduino Wikipedia
Pkj讨论 | 贡献2014年3月5日 (三) 06:10的版本
跳转至: 导航搜索
Language English

目的

本教程将教大家使用红外来控制舵机转动,话不多说,请看原理图和代码

设备

  • Microduino-Core
  • Microduino-FT232R
  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • 遥控器 一个
    • 红外接收头 一个
    • 舵机 一个
    • USB数据连接线 一根

舵机

第十一课-舵机.jpg

舵机(英文叫Servo):它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号,指定输出轴旋转角度。舵机一般而言都有最大旋转角度(比如180度。)与普通直流电机的区别主要在,直流电机是一圈圈转动的,舵机只能在一定角度内转动,不能一圈圈转(数字舵机可以在舵机模式和电机模式中切换,没有这个问题)。普通直流电机无法反馈转动的角度信息,而舵机可以。用途也不同,普通直流电机一般是整圈转动做动力用,舵机是控制某物体转动一定角度用(比如机器人的关节)。

原理图

第十一课-Microduino红外控制舵机角度原理图.jpg

在原理图中,黑线为接地线都接到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文件夹中

步骤三:搭建硬件电路,注意引脚接法;

步骤四:打开串口监视器,用遥控器对着红外接收器按键,会显示红外编码。

第十一课-串口显示红外接收编码并转换为按键值.jpg

结果

按遥控机按键1,2,3,4.。。。,看舵机开始动了!

视频

http://v.youku.com/v_show/id_XNjc1NjQ4Mzcy.html