cjnt007 发表于 2014-2-24 15:27

分享下Arduino做的智跑车机遥控接收模块

本帖最后由 cjnt007 于 2014-2-24 15:29 编辑

前阵子受到坛子车友的诱惑,也跟着入了台智跑车机,为了使用方便,也想利用车机方控功能实现红外遥控。正好手上有几块Arduino Nano的板子,就不需要购买那个20多的遥控模块了,下面我把原理图和Arduino的代码分享出来。
#include <IRremote.h>

const int RECV_PIN = 19;//定义红外接收器的引脚为A5=D19
const int Power_PIN = 8;
const int Src_PIN= 4;
const int Mute_PIN = 5;
const int Up_PIN=2;
const int Down_PIN = 3;
const int VolumUp_PIN = 6;
const int VolumDown_PIN = 7;
int KeyNum = 0;//记录按键号,0表示为无效键
int PowerState=LOW;
unsigned long Counter = 0; //延时计数器

IRrecv irrecv(RECV_PIN);
decode_results results;

void KeyDown(int IO_Num){
//切换为输出脚模式,设置为低电平输出,相当于将对应的电阻接地,
pinMode(IO_Num,OUTPUT);
digitalWrite(IO_Num,LOW);
}

void KeyUp(int IO_Num){
pinMode(IO_Num,INPUT);
}

void setup(){
//Serial.begin(9600);
irrecv.enableIRIn(); // 初始化红外接收器
irrecv.blink13(1);   //开启13脚作指示,在接收时闪烁
//设置为输入模式,各脚呈高阻抗状态,相当于开路
pinMode(Power_PIN,OUTPUT);
digitalWrite(Power_PIN,PowerState);

pinMode(Mute_PIN,INPUT);
pinMode(Up_PIN,INPUT);
pinMode(Down_PIN,INPUT);
pinMode(VolumUp_PIN,INPUT);
pinMode(VolumDown_PIN,INPUT);
}

void loop() {
if (irrecv.decode(&results)) {
    /*
    Serial.print("ircode:");
    Serial.print(results.value, HEX);//以16进制换行输出接收代码
    Serial.print(",bits: ");
    Serial.println(results.bits);
    Serial.println();//为了便于观看输出结果增加一个空行
    */
    switch (results.value){
      case 0x80BF3BC4:// Power键对应的红外接收代码,下同
      //KeyNum=Power_PIN;      break;
      PowerState=~PowerState;
      digitalWrite(Power_PIN,PowerState);
      KeyNum=0;
      break;
      case 0x80BF738C:// Src
      KeyNum=Src_PIN;      break;
      case 0x80BF39C6:// Mute
      KeyNum=Mute_PIN;      break;
      case 0x80BF53AC:// Up
      KeyNum=Up_PIN;      break;
      case 0x80BF4BB4:// Down
      KeyNum=Down_PIN;      break;
      case 0x80BF9966:// V+
      KeyNum=VolumUp_PIN;      break;
      case 0x80BF837C:// V-
      KeyNum=VolumDown_PIN;      break;
      case 0xFFFFFFFF://repeat
      break;
      default:
      KeyNum=0;
    }
    if(KeyNum){
      KeyDown(KeyNum);
      delay(200);
      Counter = 0;
    }
    irrecv.resume(); // 接收下一个值
}else{
    if(KeyNum){
      //delay(200);
      Counter++;
      if (Counter>17000){//如果开启串口输出功能,需将条件判断改为Counter>50
      KeyUp(KeyNum);
      //Serial.println("Key UP");
      KeyNum = 0;
      Counter = 0;
      }
      //Serial.println(Counter);
    }
}
}

http://i03.c.aliimg.com/img/ibank/2013/473/552/1079255374_68760342.jpg
说明下:
1、代码中的红外编码对应的是广电有线机顶盒遥控器的几个按键,如果换用其他遥控器,那几个16进制代码是需要更改的。
2、这个代码可以实现长按键效果,比如长按音量键连续调整音量,长按SRC(遥控器上的确认键)实现软关机。
3、遥控器上的红色待机键对应Power功能,控制5V继电器切换Power-on信号。(我使用的电源将Power-ON信号线接5V,主电源12V开始供电。)
4、Q3如果使用NPN的管子,应该将int PowerState=LOW;这行改为int PowerState=HIGH;

骆骆脆 发表于 2014-2-24 15:36

高手!

万秀 发表于 2014-2-24 16:29

搞得挺复杂手里有现成的还可以不然麻烦啊

cjnt007 发表于 2014-2-24 18:28

是的,其实现成红外模块使用很方便了。我手上正好有这板子,因此就用它折腾了,不过这样也更灵活,以后还可以开发出其他功能,比如定时开机,接上网络模块还可以实现远程控制----把车机变成物联网终端。

万秀 发表于 2014-2-25 00:02

有空研究下can吧,总是不甘心却考试下不去手哈哈!

糖厂R35 发表于 2014-2-25 00:11

试试用手机操控

cjnt007 发表于 2014-2-25 19:01

万秀 发表于 2014-2-25 00:02 static/image/common/back.gif
有空研究下can吧,总是不甘心却考试下不去手哈哈!

can对我来说还是有些难度,慢慢来

cjnt007 发表于 2014-2-25 19:02

糖厂R35 发表于 2014-2-25 00:11 static/image/common/back.gif
试试用手机操控

Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。

糖厂R35 发表于 2014-2-25 22:55

cjnt007 发表于 2014-2-25 19:02 static/image/common/back.gif
Arduino加蓝牙模块、wifi或网络模块都可以实现手机操控的。

实用不耐用

cjnt007 发表于 2014-2-26 06:12

您是否试过,是不是耐用我还真不清楚,我只知道功能上很容易实现。

jpdd521 发表于 2014-2-27 22:20

能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。

cjnt007 发表于 2014-2-28 13:42

jpdd521 发表于 2014-2-27 22:20 static/image/common/back.gif
能否用315M无线来控制呢,那个不用直视操作。或者2.4G的也可以。

我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这样在Arduino上只要从串口上读取相应指令并执行相应动作就可以了。

jpdd521 发表于 2014-3-1 14:37

cjnt007 发表于 2014-2-28 13:42 static/image/common/back.gif
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...

太好了.有时间折腾一下给方向盘上装一个按键...一直都觉得少点什么.

jpdd521 发表于 2014-3-1 14:38

cjnt007 发表于 2014-2-28 13:42 static/image/common/back.gif
我手头上没有315M或2.4G无线模块,但我查了下这两种模块的资料,它们都可以通过uart串口与Arduino通信,这 ...

http://item.taobao.com/item.htm?spm=a230r.1.14.171.ZjuzPz&id=19357078268&_u=1v0j4gjd41d 帮忙看一下这个模块能用吗?是这个吗?

cjnt007 发表于 2014-3-3 14:27

jpdd521 发表于 2014-3-1 14:38 static/image/common/back.gif
http://item.taobao.com/item.htm?spm=a230r.1.14.171.ZjuzPz&id=19357078268&_u=1v0j4gjd41d 帮忙看一下 ...

可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。

jpdd521 发表于 2014-3-3 22:26

cjnt007 发表于 2014-3-3 14:27 static/image/common/back.gif
可以的,与Nano相比,简化掉了usb接口及相应的USB-TTL模块,其他功能一样的。

高手,其实我们可以开发产品出来放TB上面卖的。。。现在很多人方向盘都不是多功能的,升级多功能的话,很麻烦,又是线材,又是装按键的,如果把那种红外的改成这样的,极大的增加了便捷性以及升级的可行性,。给你点个赞。。。
页: [1]
查看完整版本: 分享下Arduino做的智跑车机遥控接收模块