1、概述
近期看到一些书上,有对红外遥控的介绍,各大论坛也有很多对红外遥控器的介绍,但是发现一个问题是:大部分都很难控制家里的空调或者彩电或者因为作者的写帖子或者教程的习惯,导致有些操作萌新还不是很清楚。今天我们就来整理一下,尝试一个红外发射模块控制家用空调。
对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。
2、所需材料
1、UNO主控板:官方板 或者 国产板
2、辅助配件:杜邦线、9V电池、9V电池座
3、传感器和模块:红外发射模块、红外接收模块
3、接线图
4、示例程序
(接收模块)
#include <IRremote.h>
int RECV_PIN = 11; //红外接收模块连接在11脚
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
dump(&results);
irrecv.resume();
}
}
void dump(decode_results *results)
{
int count = results->rawlen;
Serial.print("Raw (");
Serial.print(count);
Serial.print("): ");
for (int i = 0; i < count; i++)
{
Serial.print(results->rawbuf[i]*USECPERTICK);
Serial.print(",");
}
Serial.println();
}
int RECV_PIN = 11; //红外接收模块连接在11脚
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
dump(&results);
irrecv.resume();
}
}
void dump(decode_results *results)
{
int count = results->rawlen;
Serial.print("Raw (");
Serial.print(count);
Serial.print("): ");
for (int i = 0; i < count; i++)
{
Serial.print(results->rawbuf[i]*USECPERTICK);
Serial.print(",");
}
Serial.println();
}
发射部分
#include <IRremote.h>
//红外发射模块接D3引脚
IRsend irsend;
unsigned int key_on[198]={6100,7300,550,550,550,550,550,600,550,550,550,600,550,550,550,600,500,600,550,550,550,550,550,600,500,600,500,650,500,600,550,550,550,600,550,550,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,550,600,550,550,550,1650,500,600,550,550,550,600,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,550,600,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,600,550,550,550,550,600,550,1600,550,550,600,1600,500,650,500,600,550,550,550,550,600,550,550,550,550,600,550,550,550,550,550,600,500,600,550,1650,500,600,500,650,500,1650,550,550,550,600,500,600,550,550,550,1650,500,1650,550,600,500,1650,550,600,550,550,550,1600,600,550,550,1600,550,1650,500,1650,600,550,500,600,500,1700,550,550,550,1600,600,1600,550,7350,500,};
unsigned int key_off[198]={6050,7350,550,550,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,500,600,550,600,500,600,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,550,550,550,600,500,600,550,550,550,600,550,550,550,600,500,600,500,650,500,1650,550,550,500,600,550,600,550,550,550,600,500,600,550,550,550,600,500,600,550,600,500,600,500,600,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,500,600,550,600,550,550,550,550,550,600,550,550,550,600,500,600,550,550,550,1650,550,550,550,600,500,600,500,600,550,600,500,600,550,550,550,600,500,600,550,600,500,600,500,1650,550,600,500,600,500,1700,500,600,550,550,550,600,500,600,550,1650,500,1650,550,600,500,1650,550,550,550,600,500,1650,550,600,500,1650,550,1600,600,550,500,600,550,600,500,1650,550,600,500,1650,550,1650,500,7350,550,
};//编码部分
void setup(){}
void loop()
{
irsend.sendRaw(key_on,198,38);//发送原始编码数据.
delay(5000);
irsend.sendRaw(key_off,198,38);
delay(5000);
}
//红外发射模块接D3引脚
IRsend irsend;
unsigned int key_on[198]={6100,7300,550,550,550,550,550,600,550,550,550,600,550,550,550,600,500,600,550,550,550,550,550,600,500,600,500,650,500,600,550,550,550,600,550,550,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,550,600,550,550,550,1650,500,600,550,550,550,600,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,550,600,550,550,550,600,550,550,550,550,600,550,550,550,550,600,500,600,500,600,550,550,600,550,550,550,550,600,550,1600,550,550,600,1600,500,650,500,600,550,550,550,550,600,550,550,550,550,600,550,550,550,550,550,600,500,600,550,1650,500,600,500,650,500,1650,550,550,550,600,500,600,550,550,550,1650,500,1650,550,600,500,1650,550,600,550,550,550,1600,600,550,550,1600,550,1650,500,1650,600,550,500,600,500,1700,550,550,550,1600,600,1600,550,7350,500,};
unsigned int key_off[198]={6050,7350,550,550,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,500,600,550,600,500,600,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,550,550,550,600,500,600,550,550,550,600,550,550,550,600,500,600,500,650,500,1650,550,550,500,600,550,600,550,550,550,600,500,600,550,550,550,600,500,600,550,600,500,600,500,600,550,550,550,600,500,600,550,600,500,600,550,550,550,600,500,600,500,600,550,600,550,550,550,550,550,600,550,550,550,600,500,600,550,550,550,1650,550,550,550,600,500,600,500,600,550,600,500,600,550,550,550,600,500,600,550,600,500,600,500,1650,550,600,500,600,500,1700,500,600,550,550,550,600,500,600,550,1650,500,1650,550,600,500,1650,550,550,550,600,500,1650,550,600,500,1650,550,1600,600,550,500,600,550,600,500,1650,550,600,500,1650,550,1650,500,7350,550,
};//编码部分
void setup(){}
void loop()
{
irsend.sendRaw(key_on,198,38);//发送原始编码数据.
delay(5000);
irsend.sendRaw(key_off,198,38);
delay(5000);
}
5、操作步骤
首先,将红外接收模块与Arduino连接(接D11引脚),上传接收到Arduino上,上传成功后打开串口监视器,随后拿出空调遥控器,对准红外接收头,看一下遥控器上的电源键(开),再次按一下遥控器上的电源键(关)。
然后将红外接收模块换成红外发射模块连接到Arduino上(D3引脚),上传发射程序到Arduino上,上传成功后打开串口监视器,随后接个DC头供电,使其成为一个DIY遥控器。接下来做的就是对准空调就好了。
实验效果
本示例仅对大部分空调进行测试,格力空调、海尔空调、伊莱克斯空调,编码方式很复杂。可自行尝试。
6、重要提醒
因为现在大部分的新款空调或者电视机,加长了编码,那么对于IRremote.h来说就有些吃力,所以我们要进行库文件的修改(本页提供的库文件已修改好):
1、找到IRremoteInt.h
2、修改RAW值的大小,防止溢出。
3、修改GAP范围,50000
修改库文件的定义。
请先
!