HX1838红外接收模块-红外遥控(外部中断+状态机)

目录

红外遥控

模块介绍

HX1838红外接收二极管

红外发射遥控器

遥控器键码

模块接线

NEC协议编码

状态机分析

驱动代码

IR.h

IR.c

main.c


红外遥控

红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出。红外线的波长在可见光范围外,所以人眼是看不到的。

在地球上充满了各种波长的电磁波,所谓的可见(色)光就是人眼可见的电磁波谱,其波长为 380~770nm,为了避免遥控器发射的光造成人眼不适及减少一般人造光源干扰,故选 用人眼不可见的红外线(Infrared)波长,目前业界遥控器发射头几乎都选用 940nm 波长。

模块介绍

总实物图

HX1838红外接收二极管

红外接收二极管,一般为黑色。

红外接收器是一种能够接收红外光信号并将其转换为电信号的元件。在NEC通信协议中,红外接收器会按照协议规定的解码方式,对接收到的红外光信号进行解析,以还原出原始的指令或数据。红外接收头通常被集成在一个元件中,内部包含光敏二极管等关键部件,以及用于信号放大、解调等功能的电路。

HX1838模块是可接收标准38KHz调制的遥控器信号,通过对进行编程,即可实现对遥控器信号的解码操作。它负责将接收红外遥控器发射过来的信息并将其解码成十六进制码,这样才能实现既定的通信。HX1838 红外接收头自带了滤波的功能。

红外发射遥控器

Mini薄红外遥控器,具有17个功能键,发射距离远可达8~10米(红外接收头本身质量,中间有无障碍物等因素会影响到遥控距离)。

红外发光二极管位于遥控器前部,发出的是红外线而不是可见光。它将电信号转换为红外光信号进行发送。这些红外光信号按照NEC协议的编码规则进行调制,以传输特定的指令或数据

发射管红外波长 940nm
有效角度 60度
晶振频率 455KHZ的晶振
载波频率 38KHZ
编码格式 NEC
尺寸 86*40*6mm
面贴材料 0.125mmPET,有效寿命2万次
电源 CR2025环保纽扣电池/1600mAH
电流 静态电流3-5uA,动态电流3-5mA。

注意:使用前一定要记得给红外遥控器装上电池(抽出隔离贴),还有红外遥控器要对着红外接收模块使用


遥控器键码

### 使用 STM32HX1838 实现红外遥控控制 LED 灯 #### 准备工作 为了实现这一目标,需要准备如下硬件组件: - STM32 开发板一块 - HX1838 红外接收头一个 - WS2812B 或其他类型的可编程 RGB LED 模块若干 - 连接线若干根 确保开发环境已经配置好,并安装了必要的库文件用于处理红外信号和驱动LED。 #### 接口连接说明 HX1838 的 VCC 引脚接到 5V 电源上;GND 引脚接地;OUT 输出引脚则需连至 STM32 上的一个 GPIO 输入捕获端口。对于WS2812B来说,则将其 DIN 数据输入引脚与另一个GPIO相连作为PWM输出来发送数据给LED条带[^1]。 #### 软件设计思路 程序主要分为两大部分:一是对接收到的红外编码进行解码分析得到按键信息;二是依据解析后的命令去操作相应的LED状态变化逻辑。 针对上述需求编写C语言源代码如下所示: ```c #include "stm32f1xx_hal.h" #include "irremote.h" #define LED_PIN GPIO_PIN_13 #define LED_PORT GPIOD // 初始化函数 void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); IRrecv irrecv(GPIO_PIN_IR); // 假设IR传感器连接到了定义好的PIN decode_results results; while (true) { if(irrecv.decode(&results)){ switch(results.value){ // 对应不同的键值执行不同动作 case KEY_ONOFF:// 关机/开机键 Toggle_LED(LED_PIN, LED_PORT); break; default: break; } irrecv.resume(); // Continue receiving } } } // 切换LED开关状态 void Toggle_LED(uint16_t pin, GPIO_TypeDef* port){ HAL_GPIO_TogglePin(port,pin); } ``` 这段代码实现了基本的功能框架,在`main()`循环里不断监听来自HX1838传来的脉冲序列,并尝试匹配预存于内部表中的标准协议模板。一旦成功识别出特定模式下的按压事件就会触发相应分支内的指令集完成实际的任务——这里是改变指定IO管脚上的高低电平从而达到点亮或熄灭外部负载的目的[^2]。 #### 注意事项 由于某些品牌的产品可能采用了私有的加密算法或者其他复杂机制使得其发出的信息难以被第三方解读模仿,所以在实践中可能会遇到兼容性方面的问题。因此建议先从小型家电如风扇、简易电视机等开始测试再逐步扩大适用范围。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值