极客大神教你用arduino打造手势控制的电视遥控器

发新帖

29

主题

29

帖子

238

积分

版主

Rank: 7Rank: 7Rank: 7

积分
238
发表于 2018-7-24 15:35:04 | 显示全部楼层 |阅读模式
分享:
查看: 795|回复: 1
在下面的步骤中,国外极客大神将教我们如何制作一个电视遥控器,你可以用手势来控制它。本项目利用了Arduino Pro控制芯片和apds-9960 RGB手势传感器。
第一步:材料清单




Arduino Pro控制器(USB电缆)
apds-9960 RGB手势传感器
红外发光二极管
红外接收器
线路板
跳线
所有这些物品都可以在网上买到便宜货,国内比国外便宜太多了。
第二步:捕捉和解码你的红外遥控器信号

红外接收器接线图
红外接收器
Arduino引脚

接口11
中心引脚
GND接口

5v
捕捉和解码你的红外遥控信号
首先,你需要安装Arduino 的irlib IR库。,有很多在线的简单教程,可以教你如何花2分钟来进行设置Arduino IDE。
接下来,我们将代码上传到arduino,并打开电脑的串口监视器。
只要打开串口监视器,就可以启动了。只需将红外遥控器对着在红外接收器点,然后按一个按钮。
在串行监视器中,您将看到与下面类似的内容:
DecodedNEC(1): Value:FD807F (32 bits)Rawsamples(68): Gap:40826Head: m8850 s44500:m500 s6001:m550 s5502:m500 s6003:m550s600 4:m500s600 5:m500s600 6:m500s600 7:m550
以上的内容很多,但是你只需要第一行:解码NEC(1):价值:fd807f(32位)。
你要做的只是按下遥控器上的每一个按钮,当得到数据结果的时候,把第一行复制并粘贴到一个txt文件中,这样就不必记住它们了。按下遥控器上的按钮,并保存数据。别忘了给每个数据标上标签。
以下是红外接收代码:
#include <IRLib.h>
//Create a receiver object to listen on pin 11
IRrecv My_Receiver(11);
//Create a decoder object
IRdecode My_Decoder;
void setup()
{
Serial.begin(9600);
My_Receiver.enableIRIn(); // Start the receiver
}
void loop() {
//Continuously look for results. When you have them pass them to the decoder
if (My_Receiver.GetResults(&My_Decoder)) {
My_Decoder.decode();//Decode the data
My_Decoder.DumpResults();//Show the results on serial monitor
My_Receiver.resume(); //Restart the receiver
}
}
接收结果如下:

现在我们有了遥控器的IR代码,我们只要把它们放在下代码中,并上传给arduino。
第三步:上传代码
建议你看一下下面的代码,你可以看到,每个运动都对应了“61a030cf”这样的代码,这些都是对应不同的手势运动方向,你可以通过移动你的手,向电视发送以上红外代码信号,所以把你上面收集的代码植入相应的位置就行了。
#include <IRLib.h>
#include <Wire.h>
#include <APDS9960.h> //Download Code Library Below
#define APDS9960_INT 1 // Needs to be an interrupt pin
APDS9960 apds = APDS9960();
int isr_flag = 0;
IRsend My_Sender;
void setup() {
pinMode(APDS9960_INT, INPUT); // Set interrupt pin as input
Serial.begin(9600); //Initialize Serial Port
Serial.println();
Serial.println("--------------------------------");
Serial.println("14CORE | GESTURE TEST W/D APDS-9960");
Serial.println("--------------------------------");
attachInterrupt(0, interruptRoutine, FALLING); // Initialize interrupt service routine
if ( apds.init() ) {
Serial.println("APDS-9960 initialization complete"); // Initialize APDS-9960 (configure I2C and initial values)
} else {
Serial.println("Error APDS Initialization");
}
if ( apds.enableGestureSensor(true) ) {
Serial.println("Gesture sensor is now running");
} else {
Serial.println("Error APDS Initialization");
}
}
void loop() {
if( isr_flag == 1 ) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
My_Sender.send(NEC,0x61A030CF, 32);
break;
case DIR_DOWN:
Serial.println("DOWN");
My_Sender.send(NEC,0x61A0B04F, 32);
break;
case DIR_LEFT:
Serial.println("LEFT");
My_Sender.send(NEC,0x30DFC03F, 32);
break;
case DIR_RIGHT:
Serial.println("RIGHT");
My_Sender.send(NEC,0x30DF40BF, 32);
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
第四步 布线
在你完成以上代码后,把它上传到你的微处理器上,然后我们再看看布线。

对应接线端口:
Arduino端口 APDS 9960
2 SDA
3 SCL
1* INT
GND GND
3.3v VCC
第五步 使用
把arduino通电,然后用手在设备上挥手,就可以使用了。
如果你想检测一下,你的手势遥控器工作是否正常,你可以使用数码相机或者手机摄像头,对准红外发射管。如果你的手势挥动之后,可以看到红外线闪烁。或者把arduino接入计算机,并打开一个串口监视器,看到手势反馈信息。就表明运行一切正常

如果arduino微控制器有USB连接器附加,你还可以对它进行扩展升级,来控制其他设备。
收藏 回复

使用道具 举报

1

主题

8

帖子

0

积分

新手上路

Rank: 1

会员升级进度

积分
0
发表于 2018-7-30 08:46:41 | 显示全部楼层
分享:
查看: 795|回复: 1
NB,厉害了
收藏 回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表