体感电视遥控器

来自Microduino Wikipedia
Hustshenyang@126.com讨论 | 贡献2015年6月22日 (一) 08:54的版本 原理
跳转至: 导航搜索
Language English

目的

通过体感遥控电视机,遥控器处在不同的姿势或运动状态来控制电视机的换台和音量。

原理

利用三轴加速度传感器MPU6050检测遥控器的运动状态变化,然后红外发射传感器通过匹配编码控制电视机的功能。

设备

模块 数量 功能
Microduino-CoreUSB/zh 1 核心板
Microduino-Sensorhub/zh 1 传感器转接板
Microduino-10DOF/zh 1 矢量传感器模块
Microduino-IR transmitter/zh 1 红外发送传感器
Microduino-BM/zh 1 电源管理


搭建硬件

  • Setup 1:将CoreUSB、10DOF与Sensorhub叠堆。
  • Setup 2:将红外发射传感器接到Sensorhub的D3引脚上.
Microduino-sensorhub rule.JPG

软件调试

  • 电视机红外遥控编码定义,此处控制的是长虹电视机,采用NEC编码格式
#define ITEM+  0x02FDD827  //节目+
#define ITEM-  0x02FDF807  //节目-
#define VOL+  0x02FD58A7   //音量+
#define VOL-  0x02FD7887   //音量-

MPU6050 accelgyro;       //三轴陀螺仪
IRsend irsend;           //红外发射
  • 三轴陀螺仪初始化
Serial.println("Initializing I2C devices...");
accelgyro.initialize();    //初始化I2C设备

Serial.println("Testing device connections...");
Serial.println(accelgyro.testConnection() ?"MPU6050 connection successful" : "MPU6050 connection failed");   //测试MPU6050已连接上
  • 判断遥控器的运动状态。遥控器向右摆,电视机换下一个台,向左摆,电视机换上一个台;遥控器向上摆,电视机音量增加,向下摆,电视机音量减小。
 accelgyro.getAcceleration(&ax, &ay, &az);   //获得三轴加速度值 
    Ax = ax/16384.00;      
    Ay = ay/16384.00;
    Az = az/16384.00;
    
    if(Ay >= 0.6 )      //检测到遥控器向右开始摆动
    {
      irsend.sendNEC(ITEM+,32);   //发射换台编码
      delay(1000);      //延时等待摆动停下来
    }
    else if(Ay <= -0.6) //检测到遥控器向左开始摆动
    {
      irsend.sendNEC(ITEM-,32);   
      delay(1000);     
    }
    else if(Az >= 1.5)   //检测到遥控器向上开始摆动
    {
      irsend.sendNEC(VOL+,32);   
      delay(1000);
    }
    else if(Az <= 0.5)   //检测到遥控器向下开始摆动
    {
       irsend.sendNEC(VOL-,32);  
       delay(1000);
    } 
    delay(100);
  • 注意:如果感觉红外发射器遥控距离太短,可以通过减小红外发射器上的限流电阻来增加发射距离。

结果

遥控器左右摆动可以控制电视机换台,上下摆动可以控制电视机加减音量,可以增加其他姿态来控制电视机的其他功能。

视频