基于Atmega16单片机的新型智能空调遥控器

最新更新时间:2014-11-23来源: 互联网关键字:Atmega16  单片机  智能空调遥控器 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  近年来,计算机技术、现代通信技术和自动控制技术高速发展,智能化家居系统也随着新技术的发展进入了千家万户,家居系统中如空调、电视、照明系统等,都使用遥控器进行控制。红外线遥控器由于具有结构简单、体积小、功耗低、功能强、成本低等特点,已成为使用最广泛的一种遥控方式。然而,由于各种红外设备采用的技术标准与协议大不相同,使得各种设备的遥控器并不能兼容,给用户和消费者带来了诸多不便。

  目前,市场上已有的万能遥控器多是内置了多种品牌的红外控制指令,对内置品牌以外的红外设备则无能为力。为此,本文设计了一款针对空调设备的智能学习型红外遥控器,采用记录脉冲宽度的方法,成功实现了对多种红外空调遥控信号的学习与再现,真正实现了"万能".本文在阐述了系统的总体结构及硬件设计的基础上,详细研究了系统学习,发送及通信功能的软件设计与实现。

  2 系统总体结构与硬件设计

  系统采用模块化设计,各模块通过接口电路与主控芯片相连。主要模块有:矩阵键盘,液晶显示,存储模块,红外发送模块,红外接收模块,RS232、RS485 通信模块,以及温度检测模块。系统结构图如图1 所示。

  系统以Atmega16 单片机作为主控芯片,Atmega16具有16K 字节的系统内可编程Flash ,512 字节EEPROM,1K 字节SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8 路10 位具有可选差分输入级可编程增益的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。该芯片功能强大,满足系统设计需要并提供了充分的扩展空间。主控芯片使用8MHz 的晶振,晶振电路靠近主控芯片,尽量减少输入噪声。复位电路采用低电平复位。

  

 

  图1 系统结构图

  矩阵键盘采用3*3 的设计,设置了8 个功能键,方便用户进行手动操作。其中单独设计了一颗模式切换键,可在学习、发射、通信模式中切换。为了实现学习功能, 红外接收模块使用了一体化接收头NB1838,其光电检测和前置放大器集成于同一封装,中心频率为37.9KHz. NB1838 的环氧树脂封装结构为其提供了一个特殊的红外滤光器,对自然光和电场干扰有很强的防护性。NB1838 对接收到的红外信号进行放大、检波、整形,并调制出红外编码,得到TTL 波形,反相后输入单片机,再由单片机进行进一步的处理,存储到EEPROM 中,接收电路如图2 所示。

  

 

  图2 接收硬件电路图。

  考虑到系统需要的存储空间比较大,设计了单独的存储模块,选用的EEPROM 是AT24C64,它提供了8KB 的容量,通过IIC 协议与Atmega16 TWI 接口通信,将学习到的红外指令存储在此,掉电不丢失。

  在发射模式下,系统从EEPROM 读取相应数据信息,利用三极管9013 组成的放大电路,通过大功率红外发射管将调制好的红外信号发射出去。发射电路如图3所示,非发送状态时,三极管工作在截止状态,红外发射管不工作,有利于降低功耗以及延长红外发射管的使用寿命。经实际测试,发射距离可达到10m 左右。

  

 

  图3 发射硬件电路图。

  通信模式中,系统通过RS232 电路与上位机通信,在与上位机通信时使用DS18B20 反馈温度信息,DS18B20 一线总线设计大大提高了系统的抗干扰性,独特而且经济。系统还增加了RS485 模块,便于组网,以实现对多个红外设备进行控制。RS485 在组网时只需要用一对双绞线将子设备的"A"、"B"端连接起来,这种接线方式为总线式拓扑结构,在同一总线上可挂接多个结点,连接方便。

  为了增加设备的实用性,系统设计了两个电源方案,一个是直接接入5V 直流电源,一个是接入12V直流电源,然后通过L7805 构成的变压电路降压为5V使用。

  3 系统软件设计与实现

  系统程序主要分为三个部分:学习模式,发送模式以及通信模式。当第一次进入系统时,初始化设置设备地址,然后设置通信的波特率,提供1200、9600 以及19200 三种选择。系统主程序即在三个模式间切换,默认进入通信模式,可以通过模式切换按键改变模式,也可以通过上位机直接更改。出于系统的稳定性需要,在程序中加入了软件看门狗,防止程序"跑飞".

  3.1 学习功能设计

  3.1.1 学习模式

  红外遥控器的码型多样,编码一般包括:帧头、系统码、操作码、同步码、帧间隔码、帧尾,且同步码与帧间隔码出现的位置不固定,因此码型格式灵活多变,很难区分各种码型的编码含义;各个红外遥控的编码长度不尽相同,发送方式也多种多样,最常用的有三种:完整帧只发送一次、完整帧重复发送两次、先发送一个完整帧,后重复发送帧头和一个脉冲。面对如此多样化的编码方式,如果区分每种编码的含义进行学习,学习的复杂度将会很高,并且通用性也会受到影响。所以,为了避开各色码型的干扰,系统在学习时并不关心码型数据的实际意义,只记录脉冲的时间宽度。系统主要针对载波频率为38KHz(周期为26us)的红外遥控器,利用变量IR_time 记录接收到的脉冲宽度。学习程序流程如图4 所示。

  

 

  图4 学习程序流程图。

  3.1.2 压缩存储

  由于不考虑具体的码型数据意义,只记录脉冲的宽度,系统的学习功能通用性得到了提高,但这种方式学习到的数据量很大,对存储的要求就变得很高。

  尽管系统针对存储的大容量需求设计了单独的存储模块,但考虑到应在不增加硬件开销的情况下保证足够的存储容量,以及满足未来扩展的需要,在进行数据存储时,采取了数据压缩技术。  从学习到的电平数据可以发现,无论数据是1 还是0,都有相同时长的电平出现,这符合游程编码的特点。游程编码是一种简单的非破坏性资料压缩法,其好处是加压缩和解压缩都非常快,其方法是计算连续出现的资料长度压缩之。比如:一张二值图像的数据为:

  WWWWWWWWBWWWWBBBWWWWWWWBWWWWW

  使用游程编码压缩可得:8W1B4W3B7W1B 5W.

  可见,压缩效率极高,且可避免复杂的编码和解码运算。所以,在存储时,系统对学习到的数据进行游程编码压缩[7,8].例如,学习到的一组空调遥控器的数据为[157 153 23 53 … 23 53 23 180 156 152 23 53 …53 23],如图5 所示,对重复的电平数据采用游程编码压缩后,原本需要199 字节的空调遥控码,只需要106个字节即可存储,压缩率达53.27%.因此,在存储时针对学习到的数据特点采取游程编码压缩,可以有效节约存储空间。

  

 

  图5 一组典型的空调数据帧。

  3.2 发射功能设计

  现有的红外遥控器很多都是采用外部电路产生载波信号,例如使用NEC555 振荡器产生载波信号。为了减少硬件开销,本系统使用单片机内部的定时器产生载波。系统使用的是Atmega16 单片机,其定时器功能强大,具有普通模式、CTC 模式、快速PWM 模式、相位修正PWM 模式等工作模式,系统利用定时器1,使其工作在快速PWM 模式,产生占空比为1:3 的38KHz 的PWM 波。当发送某条指令时,单片机从对应的EEPROM 中提取指令信息,然后调制到生成的载波上,再通过发射电路即可完成红外信号的发射。

  3.3 通信功能设计

  3.3.1 上位机通信

  本遥控器除了能通过功能按键实现手动操作外,还可以通过上位机软件对遥控器进行控制。遥控器与上位机通过RS232 模块进行通信,首先配置上位机软件,确定串口号,选择与设备相同的波特率及主从设备地址,然后根据需要选择相应的指令,点击发送即可通过上位机对设备进行控制。由于本遥控器是基于空调遥控器进行研究的,在与上位机通信时,系统中的温度检测模块会上传实时温度,便于用户进行调整。图6 为上位机软件流程图。

  

 

  图6 上位机软件流程图。

  3.3.2 组网控制

  为了实现对多个设备的联网控制,还设计了RS485 模块。各子遥控器通过RS485 模块的"A"、"B"端连接在一起,组成控制网络,如图7 所示,其中一个作为主遥控器,与上位机通过RS232 模块进行串口通信。当上位机需要对某个子设备进行控制时,选择相应的子设备地址号,发送指令即可,主遥控器收到指令信息后,会将指令发给对应的子设备。与主遥控器相连的上位机PC 连接Internet,作为本地服务器,可实现远程控制。

  用户登录远程客户端,经身份验证后与服务器建立连接,可发送指令给本地服务器,本地服务器再经过串口通信对遥控器进行相应操作。如果遥控器主机与上位机距离较远,RS232 不能满足通信需要,也可不使用遥控器主机,在上位机PC 上使用RS232-485 转接头,通过RS485 直接将遥控器网络与PC 机485 接口相连,利用上位机对遥控器网络直接进行控制。

  

 

  图7 控制网络示意图。

  4 结语

  本文设计了一款智能空调遥控器。该系统采用只记录红外信号脉冲宽度,不考虑红外编码格式的方式,通过游程编码算法将红外信号压缩后保存到EEPROM 中,并直接利用主控芯片定时器的PWM 模式产生38KHz 的载波,节约了硬件成本,除手动操作外还可以通过上位机对遥控器进行控制,使用方便。

  系统成功实现了对多种空调遥控器的学习与功能再现,操作灵活,性能稳定,已成功运用于深圳中联通电子有限公司的机房空调的控制。本系统还可用于智能家居中,对不同的红外设备进行控制,也可用于远程网络控制,为智能家居及远程监控提供了一种实现方法。

关键字:Atmega16  单片机  智能空调遥控器 编辑:探路者 引用地址:基于Atmega16单片机的新型智能空调遥控器

上一篇:嵌入式ARM多核处理器并行化方法
下一篇:C8051F020单片机的RS485串行通信设计

推荐阅读最新更新时间:2023-10-12 22:49

一种基于单片机的正弦波输出逆变电源的设计
O 引言     低压小功率逆变电源已经被广泛应用于工业和民用领域。特别是新能源的开发利用,例如太阳能电池的普遍使用,需要一个逆变系统将太阳能电池输出的直流电压变换为220V、50Hz交流电压,以便于使用。本文给出了一种用单片机控制的正弦波输出逆变电源的设计,它以12V直流电源作为输入,输出220V、50Hz、0~150W的正弦波交流电,以满足大部分常规小电器的供电需求。该电源采用推挽升压和全桥逆变两级变换,前后级之间完全隔离。在控制电路上,前级推挽升压电路采用SG3525芯片控制,采样变压器绕组电压做闭环反馈;逆变部分采用单片机数字化SPWM控制方式,采样直流母线电压做电压前馈控制,同时采样电流做反馈控制;在保护上,具有输入过、
[单片机]
一种基于<font color='red'>单片机</font>的正弦波输出逆变电源的设计
在8位单片机中使用Google Protobuf
前言 谷歌的Protobuf的网址: https://developers.google.com/protocol-buffers/?csw=1 按照国内情况最好翻墙出去看一下. 目前Protobuf的情况是主要支持Java, C++, or Python . 纯C的,最新的版本不支持,貌似有一个好久之前支持的版本但不再更新. 支持C的Protobuf地址是: https://github.com/protobuf-c/protobuf-c 这个版本貌似只能在linux下进行编译生产打包工具.windows没有看见有相应的编译工程. 使用方法,大家可以参考示例 https://code.google.com/p/protobu
[单片机]
STM32单片机的Usart2串口的调试方法
先是参考http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html调通了usart1 然后将程序进行修改,对Usart2进行配置,配置完了之后,程序还是没有正确,然后在voidGPIO_cfg();函数中添加一句 GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); 最后程序如下, #include“stm32f10x_lib.h” FlagStatusRX_status; FlagStatusTx_status; voidRCC_cfg(void); voidGPIO_cfg(void); voidUSART_cfg(void);
[单片机]
STM32<font color='red'>单片机</font>的Usart2串口的调试方法
51单片机控制3位共阴数码管
51单片机控制3位7段共阴数码管,P0口控制 abcdefg dp,P2.0-P2.3控制123位。 要使其间隔1s分别显示123,231, 321, 213...........无限循环 给我一个程序 最佳答案: //下列程序,经过仿真,符合要求。 #include #include reg52.h #define uchar unsigned char sbit bit1 = P2^0; sbit bit2 = P2^1; sbit bit3 = P2^2; uchar code dulatab = { //数字编码0-9 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07
[单片机]
一种用于单片机的红外串行通信接口
摘要:阐述红外通信的基本工作原理;结合在单相电度表抄表系统中的具体应用,介绍一种适合单片机系统的红外通信方案,设计具体的硬件接口电路,说明其工作原理,给出应用于红外通信的程序流程,并指出在实施过程中应注意的一些问题。 关键词:单片机 红外通信 串行接口 抄表系统 引言 在很多单片机应用系统中,常常利用非电信号(如光信号、超声波信号等)传送控制信息和数据信息,以实现遥控或遥测的功能。例如在单相电度表抄表系统中,就是使用手持抄表器通过遥控的方式,来完成电度表用电量的抄录、设置表底数、电度表校时等工作。红外通信具有控制简单、实施方便、传输可靠性高的特点,是一种较为常用的通信方式。实现单片机系统红外通信的关键在于红外接口电路的设计以
[单片机]
观点与探讨2:MCU和SoC如何协调发展
MCU和SoC如何协调发展 MCU与SoC都有广阔空间 SoC更多是理论方向 嵌入式系统架构分为三种。一种是SoC,将不同的IP集成在芯片上,是准嵌入式系统;另一种是SoB,把不同的芯片组合成硬制板,然后这个板成为系统,目前国内大部分企业做的主要是SoB,里面的芯片是通用的MCU,按照用户的需要进行配置,嵌入式系统本身就是量体裁衣;还有一种是SoM,也就是模块级系统,可以实现的应用更加广泛,适合在工控、仪表和仪器上使用。 从传统上来说,标准MCU已经为SoC和ASIC铺平了道路,这一点也将不会有所改变。SoC通常应用于手机、机顶盒等更为复杂和大批量的应用领域;MCU则用于这些系统的外围设备上,或者作为中央处理单位应用于空调或
[焦点新闻]
基于SPMC75单片机的LIN Bus系统
  1.1 引言   LIN 是低成本网络中的汽车通讯协议标准,LIN(Local Interconnect Network)是低成本的汽车网络,它是现有多种汽车网络在功能上的补充由于能够提高质量、降低成本,LIN 将是在汽车中使用汽车分级网络的启动因素。LIN 的标准化将简化多种现存的多点解决方案且将降低在汽车电子领域中的开发生产服务和后勤成本。   LIN 标准包括传输协议规范、传输媒体规范、开发工具接口规范和用于软件编程的接口LIN在硬件和软件上保证了网络节点的互操作性并有可预测EMC的功能。   1.2 芯片简介   SPMC75系列MCU是凌阳科技公司设计开发的高性能16位通用MCU,具有很强的抗
[单片机]
基于SPMC75<font color='red'>单片机</font>的LIN Bus系统
单片机C语言程序设计之T0控制LED实现二进制计数
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。 单片机C语言程序设计之T0控制LED实现二进制计数 T0控制LED实现二进制计数原理图 T0控制LED实现二进制计数程序设计 /* 名称:T0 控制 LED 实现二进制计数说明:本例对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在 T0 引脚的按键每次按
[单片机]
<font color='red'>单片机</font>C语言程序设计之T0控制LED实现二进制计数
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved