tom 发表于 2012-10-28 20:14:57

Arduino 红外遥控接收篇之一

Arduino 红外遥控接收篇之一



一:红外遥控原理:
      红外遥控是由红外发射和红外接收系统组成



1、红外接收:接收电路是一种集成红外线接收和放大一体的一体化红外接收器模块,能够完成从红外线接收到输出与TTL电平信号兼容的所有工作,它适用于红外线遥控和红外线数据传输。接收器做成的红外接收模块只有三个引脚,信号线,VCC,GND。与arduino和其他单片机连接通信非常方便。

这里我使用的了OCROBOT MANGO(ARDUNIO 兼容控制板)的红外接收套件

2、红外发射:红外发射的遥控器发射的38K红外载波信号是由遥控器里的编码芯片对其进行编码。 至于编码原理查查阅相关的产品说明.









用的时候,VOUT接模拟口或数字脚,GND接到实验板的GND,VCC接到实验板上的+5V 。



本例来源于红外库文件自带的范例Irrecv
二红外遥控实验器材
1实验器材
红外遥控器:1个
红外接收头1个
面包线若干


实验连线

接好Arduino控制器
将红外接收头按上述方法接好,将VOUT接到数字口11;

注意:红外接收器圆形那头对着自己,图片上的标注文字写错了,不好改请见谅.




遥控器的编码方式:NEC协议

实物图片


红外控制库发布地址:https://github.com/shirriff/Arduino-IRremote

下载一个红外接收库Irrecv,将它安装在Ardunio IDE库文件目录下(其实就是把压缩包解压将Irrecv文件夹复制到E:\download\arduino-1.0.1-windows\arduino-1.0.1\libraries,请根据自己的实际的路径作相应的修改)


//本例来自于红外接收模块的IRremote自带范例
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#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)) {
    Serial.println(results.value, HEX);//以16进制换行输出接收代码
    Serial.println();//为了便于观看输出结果增加一个空行
    irrecv.resume(); // 接收下一个值
}
}

执行结果

太行摄狼 发表于 2012-10-30 07:53:15

回头试试,一直想搞这个玩

openmmoo 发表于 2012-10-30 20:11:50

atmega8l最小系统不能使用IRremote.h库,不知道楼主有没有解决方案呀?

tom 发表于 2012-10-30 21:13:32

atmega8l最小系统:
我没有这个硬件,无法测试,请想其它办法解决吧.

单笔爱人 发表于 2012-11-20 20:37:43

嘿嘿,这个好~

yangqiang29 发表于 2012-12-15 16:40:47

tom 发表于 2012-10-30 21:13 static/image/common/back.gif
atmega8l最小系统:
我没有这个硬件,无法测试,请想其它办法解决吧.

可以使用atmega8最小系统来完成本实验。

伊宁 发表于 2013-1-2 17:54:29

:lol这个我也玩过

Anson 发表于 2013-3-12 21:26:51

难道不要放个电阻上去吗?

活着就是幸福 发表于 2013-9-17 19:15:21

#include <IRremote.h>
#include <MotorCar.h>
#include <Ultrasonic.h>
#include <myServo.h>

Ultrasonic ultrasonc(3,2);
MotorCar motor(4,5,8,12,10,11);
myServo servo;
int pos=0;
//int buzzerPin=1;
int ledPin=6;
//int ultInputPin=2;//echo
//int ultOutputPin=3;//trig
int time=0;//to calculate the rotation angle.
const int irReceiverPin=0;
IRrecv irrecv(irReceiverPin);
decode_results results;
//LED blinking
void ledBlink(const int interval=50)
{
   digitalWrite(ledPin,HIGH);
   delay(interval);
   digitalWrite(ledPin,LOW);
   delay(interval);
}

//define the IR code
#define ADV 0xFF18E7
#define LEF 0xFF10EF
#define BAC 0xFF4AB5
#define RIG 0xFF5AA5
#define STO 0xFF38C7

void setup()
{
   Serial.begin(9600);
   servo.ServoInit(9);//connect the signal Pin to control myServo.
   motor.stopCar();
   irrecv.enableIRIn();//start IR enable
}

void loop(){
servo.SetServoAngle(90);
int n=analogRead(A0)/6;
int distance=ultrasonc.Ranging(CM);
if(irrecv.decode(&results))
    {
       Serial.println(results.value,HEX);
       switch(results.value)
      {
      case ADV:
         motor.forward(100);
         break;
      case BAC:
         motor.back(100);
         break;
      case LEF:
         motor.turnLeft(100);
         break;
      case RIG:
         motor.turnRight(100);
         break;
      case STO:
         motor.stopCar();
         break;
      default:
         delay(600);
      }
      irrecv.resume();
   }
}

为什么我的程序执行的时候没有反应呢? 谁帮忙看看。

反冲力! 发表于 2014-5-30 19:09:17

求助,为什么总是有错?

Arduino:1.5.6-r2 (Windows 7), 板:"Arduino Uno"

Build options changed, rebuilding all

使用库 Robot IR Remote 在文件夹: E:\Program Files(for work)\arduino\libraries\RobotIRremote

使用库 IRremote 在文件夹: D:\Personal\Documents\Arduino\libraries\IRremote (legacy)



E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote D:\Personal\Temp\build6035377890728783291.tmp\IRrecvDemo.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\IRrecvDemo.cpp.o

E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremote.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\Robot IR Remote\IRremote.cpp.o

E:\Program Files(for work)\arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=156 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IE:\Program Files(for work)\arduino\hardware\arduino\avr\cores\arduino -IE:\Program Files(for work)\arduino\hardware\arduino\avr\variants\standard -IE:\Program Files(for work)\arduino\libraries\RobotIRremote\src -ID:\Personal\Documents\Arduino\libraries\IRremote E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremoteTools.cpp -o D:\Personal\Temp\build6035377890728783291.tmp\Robot IR Remote\IRremoteTools.cpp.o

E:\Program Files(for work)\arduino\libraries\RobotIRremote\src\IRremoteTools.cpp:5: error: 'TKD2' was not declared in this scope

十月华笑 发表于 2014-6-13 08:43:22

按这个例子,我按下任意一个按钮,得到的值都是FFFFFFFF

不知道错在哪?

a1039752256 发表于 2014-7-7 10:32:48

irrecv.decode(&results)
楼主这句是什么意思啊?好多语法不会

jinmi050811 发表于 2014-7-7 11:35:24

十月华笑 发表于 2014-6-13 08:43
按这个例子,我按下任意一个按钮,得到的值都是FFFFFFFF

不知道错在哪?

按太久了…轻轻点一下就读出来了
页: [1]
查看完整版本: Arduino 红外遥控接收篇之一