基于Arduino的多功能温控风扇系统设计
2022-10-10陈梨芳
陈梨芳
基于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℃。该温度传感器输出电压与摄氏温度值呈线性变化趋势,线性相关系数为10.0mV/℃,即温度每上升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电源供电,具有两种接线方式,即4位数据线接法和8位数据线接法,常见的1602 LCD有16个引脚,具体各引脚与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<—digitalRead(pin);
for counter:=0 to debounceDelayTime do
begin
delay(1);
state<—digitalRead(pin);
if state!=previousState then
begin
counter<—0; △如果开关状态发生变化,计数器复位
previousState<—state;
end;
end;
if state=LOW then
return true;
else
return false;
end;
去抖动时间用debounceDelayTime变量定义,该变量值应根据按键机械弹性大小进行相应的调整。按键在被按下时将调用keyDebounce函数,keyDebounce函数的功能为在去抖动时间范围内反复检测按键的状态,如果在去抖周期内按键保持稳定,函数返回真;如果在去抖周期内按键状态发生改变,计算器将复位,按键状态检查重新开始,直到按键状态在去抖时间内不再发生改变为止,按键没有被按下或尚未稳定,函数返回假[9]。
3.3.2 根据所选挡位进行调速
结合风扇日常使用习惯,当系统进入手动按键调速模式后,设置风扇电机中速运转;当S2按下时,风扇电机低速运转;当S3按下时,风扇电机高速运转。根据所选的手动按键挡位进行风扇电机转速调节的程序如下:
function manualmode():void
begin
if keyDebounce(S2)=true then
begin
analogWrite(motorpin,180);
end;
else if keyDebounce(S3)=true then
begin
analogWrite(motorpin,255);
end;
else
begin
analogWrite(motorpin,210);
end;
end;
4 结论
本文设计的多功能温控风扇系统以Arduino UNO控制器为主控芯片,利用LM35DZ模拟温度传感器检测环境温度数据,HC-SR501人体热释电红外传感器判断周围空间人员活动情况,并根据环境温度的变化或人工按键挡位的选择,通过PWM引脚输出可调电压使风扇电机驱动电路获得不同的输入电流以实现风扇不同的转速,通过液晶显示器实时显示环境温度,实现了对风扇手动调速、智能温控的多重使用需求。经过系统调试发现,基于Arduino的多功能风扇系统既可以在受人为控制的人工按键调速模式下工作,也可以在红外检测距离4m之内、温度25~40℃之内伴随周围环境变化而自我调节的温控自动调速模式下工作,多种工作模式满足了人们的多样化需求。
[1] 赵苗慧,杨兵,张仪.基于单片机的感应式温控风扇设计[J].无线互联科技,2021,18(8):40–41+59.
[2] 杨秀秀,晏菁.基于STM32的多功能温控风扇设计[J].电子测试,2021(19):35–37.
[3]鲍梦.智能温控风扇的设计研究[J].南方农机,2021,52(16):150–152.
[4] 梁娟.基于单片机的智能温控风扇系统[J].软件,2019,40(12):146–149.
[5] 陈吕洲. Arduino程序设计基础(第2版)[M].北京:北京航空航天大学出版社,2015:12–14.
[6] 赖紫烨,冯媛媛,关智仁, 等.基于热释电红外传感器的人体检测报警系统的研究与设计[J].科学技术创新,2021(3):169–170.
[7] Michael Margolis著. Arduino权威指南(第2版)[M].杨昆云, 译.北京:人民邮电出版社,2015:264–268.
[8] 张兴,张崇巍. PWM整流器及其控制[M].北京:机械工业出版社,2017:120–124.
[9] 郭星辰.机械按键的四种软件消抖处理方法分析[J].集成电路应用,2021,38(11):70–71.
Design of Multi-functional Temperature Control Fan System Based on Arduino
CHEN Li-fang
(Department of Electronic Engineering, Fujian Economic School, Fuzhou Fujian 350003, China)
In order to meet people’s multiple needs for fans, according to the actual conditions of inflexible operation, high energy consumption and inability of automatic adjustment of wind speed with temperature change in the current use of fans, the traditional button-position adjustment function of wind speed is retained, and Arduino controller and peripheral circuit are configured to realize the design requirements of multi-functional control of fans. The multi-functional temperature control fan system has two working modes. The default is the temperature control automatic speed regulation mode. In this mode, the Arduino controller controls the PWM pin to output different pulse widths according to the ambient temperature and the activities of surrounding personnel to drive different speeds of the fan. The system debugging shows that the fan system can automatically and accurately adjust the wind speed within the infrared detection distance of 4 meters and the temperature of 25 ℃ - 40 ℃, which meets the design requirements. The modified multi-functional temperature control fan system has low cost and flexible operation. It has positive application value to meet diversified living needs and the social requirements of energy conservation as well as emission reduction.
Arduino; human body induction; temperature control and speed regulation; PWM pulse width modulation
2022-03-17
2021年度福建省职业技术教育中心职业教育教学改革研究课题(ZB2021073)
陈梨芳(1981—),女,福建莆田人,讲师,硕士,研究方向:电子信息工程。
TP273.2
A
2095-9249(2022)03-0041-05
〔责任编校:陈楠楠〕