基于Arduino的多功能温控风扇系统设 计 陈梨芳 基于Arduino的多功能温控风扇系统设计 陈梨芳 (福建经济学校 电子工程教研组,福建 福州 350003) 为满足人们对风扇的多重使用需求,根据目前风扇在使用过程中出现的操作 不灵活、耗能大、风速无法随温度变化自动调节等实际情况,保留传统风扇按 键挡位调节风速功能,增加配置Arduino控制器及外围电路,实现风扇多功能 控制设计要求。多功能温控风扇系统有两种工作模式,默认为温控自动调速模 式,该模式下Arduino控制器根据环境温度及周围人员活动情况控制PWM引脚 输出不同的脉冲宽度以驱动风扇不同的转速。系统调试表明,该风扇系统可在 红外检测距离4m之内、温度25~40℃之内自动准确调节风速,满足设计要求。 经过改造后的多功能温控风扇系统造价成本低、操作灵活,对于满足大家多样 化生活需求和节能减排社会要求具有积极的应用价值。 . Arduino;人体感应;温控调速;PWM脉冲宽度调制 随着电子技术的飞速发展和人们生活水平的不断提高,城市以及大部分乡镇地 区都已经用上空调了,而农村地区特别是有老人的家庭还在大面积使用风扇。 在科技的带动下,家用电器功能越来越智能化,而传统的风扇虽然也在不断地 经历着技术革新,但仍然无法满足人们现代化生活需求。目前,市面上常见的 风扇操作模式主要有两种类型:纯手动按键选择风速的人工操作模式,以及遥 控器遥控加手动按键选择风速的智能操作模式。用户在使用这两种风扇过程中 都有一些共同的感受:风扇的风速无法随着周围环境温度的变化而自我调节, 引发诸如在炎热的夏季上半夜因风扇风速较小而无法很好地入睡,而在气温较 低的下半夜因风扇风速过大容易着凉感冒等问题[1];经常忘记关闭风扇,使风 扇长时间开着,既不安全也造成电能资源的浪费。 已有关于温控风扇系统的研究主要集中在基于STM、STC或51系列单片机开发 设计。如杨秀秀和晏菁[2]选用STM系列单片机,配合温度检测传感器、液晶显 示器、按键、供电电源等外围设备,研究开发出多功能温控风扇系统。鲍梦[3] 在分析传统风扇的噪声大、耗能高、手工操作不灵活等缺陷的基础上,结合人 工智能技术,以STC单片机为微控制器,将温度采集模块采集到的温度及人体 感应模块检测到的人员活动情况信息反馈给微控制器,以实现对风扇开启及温 度的自动调控。 在借鉴各种风扇技术的基础上,针对目前风扇在使用的过程中出现的功能简单、 耗能过大以及不够灵活等诸多问题,本文提出了新的风扇设计思路——基于 Arduino的多功能温控风扇系统。该设计保留传统风扇手动按键调节风速的需 求,增加环境和温度检测及风扇智能调控功能,可根据用户自身体感温度需求, 便捷智能地设置温度阈值,既让用户处于最舒适的状态也符合当前社会环保节 能的要求。 . 1 系统整体设计 在设计多功能温控风扇系统时,鉴于老年人是构成风扇用户的庞大群体,结合 老年人生活习惯,传统的按键挡位调节风扇风速加于保留。增加配置Arduino 控制器及外围电路的多功能温控风扇系统,根据周围环境和温度的不同,由 Arduino控制器调控PWM引脚输出不同脉冲宽度,实现对风扇电机转速的控制; 较传统风扇增加了风扇转速智能控制功能,实现了对风扇手动调速、智能温控 的多重使用需求。 图1是基于Arduino的多功能温控风扇系统架构图。其主要由Arduino控制器、 温度检测模块、液晶显示模块、人体热释电红外感应模块、风扇电机驱动模块 和按键模块组成。该风扇有两种工作模式,即手动按键调速模式及温控自动调 速模式。手动按键调速模式下,风扇有三个风速挡位,用户可根据自己的需求 选择相应的按键挡位固定风速。温控自动调速模式下,系统首先探测有效距离 范围内是否有人员活动,其次检测实时环境和温度,从而控制风扇的自动开启或 关闭,且风扇电机的转速按照程序预先设定好的温度区间自动调节[4]。默认情 况下,系统处于温控自动调速模式,用户可以通过手动按键使系统进入手动按 键调速模式,手动按键调速模式工作一段时间后,系统将自动切换到自动调速 模式,避免了因人为忘记关闭风扇而造成的电能资源浪费。 图1 基于Arduino的多功能温控风扇系统架构图 2 系统硬件设计 . 多功能温控风扇系统采用Arduino UNO作为主控制器。首先,通过LM35DZ温度 传感器实时检测当前环境和温度,并将检测到的温度数据显示在1602 LCD液晶显 示器上。然后,检测手动按键是否被按下。如果按键被按下,则风扇启动手动 按键调速模式,在手动按键调速模式下设置三个按键供用户选择三个不同的风 速挡位;如果按键没有被按下,则风扇启动温控自动调速模式,并通过HC- SR501人体热释电红外传感器检测风扇的有效距离范围内人员活动情况以实现 电路的自动通断,当检测到有人员活动时,再根据当前环境和温度匹配不同的温 度区间输出4个不同的PWM脉冲宽度以驱动风扇直流电机不同的转速。最后, 无论风扇是处于手动按键调速模式还是温控自动调速模式,经过一段时间后都 将切换到温控自动调速模式。 2.1 主控制器模块 Arduino硬件发展至今,已推出多种型号控制器,根据多功能温控风扇系统设 计需求,选择目前使用最广泛的Arduino UNO为系统控制器。此控制器采用 Atmel 公司的ATmega328处理器作为主控单元,可通过USB接口、DC电源输入 接口以及电源接口三种方式供电,1个复位按键,14个数字输入/输出端口,6 个模拟输入端口,容量分别为32KB、2KB、1KB的Flash、SRAM、EEPROM三种存 储空间,采用串口、SPI以及IIC三种常见的通信方式连接外部设备形成相应的 串行通信模式[5]。图2是Arduino UNO控制器及外围电路连接示意图,通过 USB接口给Arduino UNO控制器提供+5V直流电源,由Arduino UNO统一管理外 围功能模块,以实现环境和温度采集及显示、有效距离范围内人员活动情况检测、 风扇转速控制以及工作模式切换等功能。 图2 系统连接示意图 . 2.2 人体热释电红外感应模块 人体热释电红外传感器是一种对人体发射出的红外线高度敏感的传感器,本设 计采用HC-SR501人体热释电红外传感器来检测周围环境是否有人员活动。该传 感器为全自动感应模式,工作电压在4.5~20V,静态电流不超过50 uA,输出 3.3V的高电平或0V的低电平,通过跳线可选择重复触发方式和不可重复触发方 式两种之一,感应角度达100°,检测范围在3~7m[6]。当有人员在检测范围 内活动时,模块一直输出高电平脉冲信号,当无人员在检测范围内活动时,模 块保持输出低电平。在电路中,Arduino控制器的2号引脚与HC-SR501的OUT 引脚相连,接收人体热释电红外传感器输出的脉冲信号。 2.3 温度检测模块 温度检测模块采用LM35DZ 传感器,其检测范围为0℃~100℃,工作电压在4~ 30V,工作电流为133 uA,检测精度可达±0.5℃。该温度传感器输出电压与摄 氏温度值呈线性变化趋势,线mV/℃,即温度每上升1℃,输 出电压上升10mV,使用式(1)可以将从Arduino 模拟输入口读取的LM35DZ 传感 器输出的模拟电压值换算为当前环境对应的摄氏温度值。 Temp=(5.0´analogRead(LM35DZ)´100.0)/1024 (1) LM35DZ 有3 个引脚,分别为VCC、OUT 和GND,其中VCC 引脚与Arduino 的5V 电 源引脚相连,GND 引脚与Arduino 的地引脚相连,OUT 引脚与Arduino 的模拟输 入I/O 口A0 相连,将检测到的温度转换成模拟电压值传递给Arduino 控制器。 2.4 液晶显示模块 . 显示模块选用并口液晶显示器1602 LCD 进行温度显示,该显示器显示屏幕分两 行,每行最多可以呈现16 个字符。1602 LCD 液晶显示器通过LiquidCrystal 类 库提供的API 可以很方便地显示英文字母和一些符号,采用5V 电源供电,具有 两种接线 位数据线 位数据线 个 引脚,具体各引脚与Arduino 控制器的连接情况见表1。 表1 1602 LCD 液晶显示器引脚说明 2.5 风扇电机驱动模块 多功能温控风扇系统中风扇电机驱动电路运用PWM 脉冲宽度调制原理,由 Arduino 控制器输出不同的PWM 脉冲宽度实现对电机速度的控制。由于Arduino 引脚输出的电流不足以驱动风扇电机的转动,所以需要一个三极管放大 Arduino 引脚输出的电流信号,以驱动风扇电机。风扇电机驱动电路如图3 所示, 三极管9013 的基极通过1kΩ电阻连接到Arduino 具有PWM 功能的3 号引脚,二 极管吸收电机线圈产生的反向电压,防止三极管受到反向电压冲击而损坏;同 时电容吸收电机电刷接通和关闭时产生的反向电压,进一步保护三极管[7]。 图3 风扇电机驱动模块电路图 2.6 按键模块 本系统设有3 个独立按键S1、S2、S3,3 个按键的一端分别连接到Arduino 控 制器的4、5、6 引脚,另一端接地。3 个独立按键均未接上拉电阻,而是将与之 . 相连的Arduino 控制器I/O 口设置为输入上拉模式,使用该引脚内部的上拉电 阻,等效于在电源与该引脚之间接入一个阻值为20kΩ~50kΩ的电阻,以简化 硬件电路设计。当S1 按下时,系统进入手动按键调速模式,同时风扇电机中速 运转;当S2 按下时,风扇电机低速运转;当S3 按下时,风扇电机高速运转。 3 系统软件设计 系统软件设计使用Arduino IDE 集成开发环境,代码编写使用C/C++语言。系统 程序流程图(图4),包括系统初始化、温度检测、液晶显示、按键扫描、人 体感应以及风扇电机转速控制等部分。 图4 系统程序流程图 3.1 温度采集及显示程序 温度采集及显示设计包含温度检测传感器、Arduino 控制器以及液晶显示器。 首先,通过温度传感器LM35DZ 检测当前环境和温度;接着,Arduino 控制器通过 模拟输入端口A0 读取LM35DZ 传感器输出的模拟电压值,并通过相应的转换公 式换算为对应的当前温度;最后,将当前温度输出到液晶显示器1602 LCD 进行 显示。温度采集及显示程序如下: //读取温度传感器模拟值,并计算出当前温度 float temp=(5.0*analogRead(A0)*100.0)/1024; //串口输出温度 . Serial.print(Tempeature: ); Serial.print(temp); Serial.println(c); //在LCD 上显示温度 lcd.setCursor(0,0); lcd.print(Tempeature:); lcd.print(temp); 3.2 温控自动调速程序 在手动按键调速模式启动开关S1 没有被按下情况下,系统默认进入温控自动调 速模式。 3.2.1 PWM 脉冲宽度调制 生活中接触的大部分信号都是模拟信号,如语音、温度、压力以及电流的变化 等。在Arduino 中,用0~5V 的电压表示模拟信号。对于模拟输入功能, Arduino 控制器通过A0,A1,…,A5 这6 个模拟输入引脚使用 analogRead(pin)函数进行处理;对于模拟输出功能,由 analogWrite(pin,value)函数进行处理,函数中参数pin 表示PWM 引脚,参数 value 表示PWM 脉冲宽度,取值范围为0~255。analogWrite(pin,value)函数 输出的值并不是真正意义上的模拟值,而是采用PWM(Pulse Width Modulation)脉冲宽度调制方式来达到输出模拟值的效果。 . PWM 是对模拟电路采用数字技术加以控制从而输出模拟量的脉冲宽度调制技术。 通过数字技术控制逆变电路中开关通断的时间,使PWM 引脚输出一个个高低电 平不断转换的周期固定而高低电平持续时间不等的方波信号。通过改变高电平 (开关闭合)与低电平(开关断开)在一个方波周期内所持续时间的比例即占 空比,就得到一个0~5V 的近似模拟电压值[8]。 图5 PWM 输出波形及对应电压示意图 结合图5,可以直观地看出PWM 输出的波形图与输出电压值之间的对应关系。T 表示方波的周期,在一个方波周期内,当占空比为25%时,analogWrite (pin,value)函数中的value 参数为64,对应的输出电压值为1.25V;当占空比 为50%时,value 参数为127,对应的输出电压值为2.5V;当占空比为75%时, value 参数为191,对应的输出电压值为3.75V;当占空比为100%时,value 参 数为255,对应的输出电压值为5V。 3.2.2 温控自动调速程序设计 当系统进入温控自动调速模式后,首先通过人体热释电红外感应模块判断检测 范围内是否有人员出没,如果没有感应到人员活动,则处于等待状态;如果感 应到有人员活动,则进一步判断周围环境和温度是否处于设定区间,最后根据周 围实时环境和温度进行风扇电机调速。根据当前环境温度进行风扇电机调速程序 流程如图6 所示。 图6 温控自动调速流程图 . 3.3 手动按键调速程序 系统是通过扫描手动按键调速模式启动开关S1 来选择工作模式,如果手动按钮 S1 被按下,系统将进入手动按键调速模式,手动按键调速模式运行5 分钟后, 系统将自动切换到自动模式,避免使用者在手动模式下忘记关闭风扇而引起诸 多安全风险隐患及电能浪费现象。手动按键调速程序分为两部分,即按键去抖检测 和根据所选按键挡位调节风扇电机转速。 3.3.1 按键去抖检测 在按键被按下或松开的瞬间,由于按键接触点反弹产生杂散信号,使按键输出 信号不会马上由高电平变低电平或由低电平变高电平,会伴随短暂的抖动过程, 这种因按键机械抖动现象而产生的错误读数将通过运用相关软件去解决。软件 解决按键机械抖动问题程序如下: function keyDebounce(pin:integer):boolean var state:boolean; var previousState:boolean; begin previousState
中国鼠疫、霍乱、轮状疫苗等其他疫苗行业市场占有率及投资前景预测分析报告:市场调查与研究在线网
中国高压斜盘式轴向柱塞泵行业市场占有率及投资前景预测分析报告:市场调查与研究在线网