作品名:多功能老式空调遥控器
项目简介: 针对老式空调遥控功能单一、定时功能不方便、缺少自动化的问题,设计了这款提升老式空调使用体验的遥控器。该作品以AB32VG1开发板为核心,搭配了0.96寸OLED、温湿度传感器DTH11、红外发射二极管。 实现的功能有: 1.检测并存储空调的红外遥控编码; 2.监控环境温湿度,根据室内环境情况遥控空调工作。 3.更加自由的定时遥控空调开启或关闭。 该作品可以增强老式空调的功能,使之更加自动化,给用户带来更好的体验。
硬件说明: RT-Thread使用情况概述:
整个方案涉及的技术栈有:RT-Thread实时操作系统,OLED驱动、红外遥控编码等方面。在设计该作品的过程中,我加深了对RT-Thread操作系统的理解和红外遥控编码的理解。 内核部分:使用了线程、信号量、邮箱等。 组件部分:使用了串口、传感器接口、PWM、RTC、定时器等。 软件包: 设备驱动: GPIO/PWM/RTC/IRRX等 该作品通过DHT11温湿度传感器获取室内的温度和湿度信息,通信协议为一线制通信。0.96寸OLED用于显示时间、温湿度、空调状态等信息,单片机采用软件模拟IIC方式与OLED通信。使用5mm红外发射管发送遥控信号,阳极串联一个限流电阻后接到板上的3.3V,阴极接单片机IO。开发板上的按钮用于输入控制信息。利用板上的红外接收探头接收空调自带的遥控器的红外遥控信号,记录空调红外遥控信号的波形。
软件说明: 软件方面比较简单较多代码参考了RT官方的例程,用到了multibutton和dhtxx软件包。RT-Thread的软件包和例程十分方便,加快了我的开发进度,十分有利于快速开发一个设备。作品共分为2个工作模式:一个是学习模式,用于接收并记录空调原始遥控器的红外遥控信号数据;一个是遥控模式,用于按照用户预设的室内环境条件、时间条件来遥控空调运行。可实现定时开关机,根据室温改变空调制冷、制热模式。 作品的难点和重点是红外解码以及发送红外遥控信号。 记录红外信号:
大部分红外遥控信号由38KHz的方波和一段低电平信号组成,如下图。有无方波的时长代表了码元'0'和'1'。具有解调功能的红外接收管接收并解调该信号,解调后的信号可以看作是遥控信号的包络。
AB32VG1单片机芯片内部集成了一个红外***,它支持解码NEC制式的红外信号。NEC协议如下图。
符合NEC协议的红外遥控信号经红外接收端口解调后传给解码器,它可以解出遥控信号的地址和命令数据。但是有一些大厂的空调并不使用NEC协议,而是厂家自己设计了一套通信协议。AB32VG1内部的解码器无法处理这种自定义的协议。 不过这种自定义的红外遥控信号仍是使用38KHz的方波作为载波,我可以利用开发板上的红外接收端口将其解调为一段由高低电平组成的序列。单片机只要复制下特定模式的红外信号,在满足我预设的条件时发射出去,即可实现“智能”地遥控空调。
因此,我参照《中科蓝讯AB32VG1开发实践指南》中的软件解码方式,利用定时器的输入捕获功能,记录下空调原装遥控器的红外信号序列的波形。下图是单片机记录的某空调28度制热时的序列时长,通过串口输出。每个数字表示序列高/低电平持续的时长,单位为微秒。
对应的遥控器发出的原始信号如下图。
发射红外信号 本作品中用到的红外发射二极管没有调制功能,单片机利用内部定时器的PWM功能产生一个38KHz的方波,按照记录下来的原始遥控信号序列,在特定时间输出或关闭该PWM,复制空调的遥控信号并发送。
流程如下图。利用TIM1定时器精确控制载波输出时长(微秒),data是存储了上述序列高低电平时长的数组。
演示效果: 作品各组件采用杜邦线加洞洞板连接,为了美观把混乱的走线藏在一个纸盒中,整体照片如图。 |