Arduino实验项目:温控电风扇

这个实验是用Arduino控制电风扇的工作,当气温达到某一设定值它打开风扇为你送来凉风;气温下降以后就停止工作,避免你受凉。在实验中我们可以学会读取模拟量输入值的函数analogRead()使用方法。

1
实验电路图

Arduino实验项目:温控电风扇

图1-1  实验项目2电路图

温控电风扇就是根据温度大小控制电风扇的开关,温度高于某一预设值打开电风扇,低于这个值时关闭电风扇。因为本实验对温度的精度要求不高,也不需要传感器有很好的线性,所以选择普通的热敏电阻作温度传感器。热敏电阻属于半导体器件,按照温度系数不同分为正温度系数热敏电阻(PTC)和负温度系数热敏电阻(NTC)。热敏电阻对温度敏感,其电阻值随着温度的改变而改变。 正温度系数的热敏电阻在温度越高时电阻值越大, 负温度系数的热敏电阻在温度越高时电阻值越小。图1-1中RT采用的是负温度系数的热敏电阻,和R1一起组成电压分压电路,温度越高时分压电路输出到A0端的电压越小,Arduino根据模数转换后的数值判断是否要开启电风扇。

电风扇使用USB风扇,它的工作电压5V,工作电流约500mA,因此Arduino的输出端口无法直接驱动,要用晶体管VT作开关,当D10输出高电平时,因电阻R2阻值较小,VT的基极电流比较大,经VT放大后使其导通饱和,集电极和发射板之间的电压降只有0.4左右,相当于一个开关,当VT导通饱和时风扇开始转动。晶体管基极接的电阻R2是起限流作用的,因为晶体管有放大能力,不需要太大的基极电流,另一方面,如果不接限流电阻,晶体管的基极就把Arduino的输出引脚对地短路,容易造成其损坏。风扇最好使用一个单独的电源,以免在调试时加重对计算机USB接口的供电负担。

2
实验器材

本实验所需的器材见表1-1。

Arduino实验项目:温控电风扇

热敏电阻没有严格的要求,只要是NTC型的就行,参数不同可能通过改变R1的阻值和在程序中调整参数解决。

3
实验接线图

接线图见图1-2,接好的实物见图1-3。

Arduino实验项目:温控电风扇

图1-2  实验项目面包板布局

Arduino实验项目:温控电风扇

图1-3  实验项目实物接线图

4
程序设计

程序代码如下:

Arduino实验项目:温控电风扇

程序中500是对应我们设定的温度对应的模数转换值,可以在试验过程中确定,读者可能会问:为什么还要用一个525作参数呢?将loop()函数写成下面的形式不行吗?

Arduino实验项目:温控电风扇

假如温度为25º时的模数转换值为500,微小的温度变化都会引起模数转换值的变化,即使不变,也不能保证每次的模数转换值完全一致,这将造成风扇在临界温度点频繁动作,怎么解决这一问题呢?我们可以在温度达到25º时打开风扇,但是在温度低于25º时不关闭风扇,而是等到温度低于24.5º(25×98%)再关闭风扇。这里设置了一个2%的回差,可以避免频繁动作。因为热敏电阻在小范围内的线性还是比较好的,所以我们可以根据25º对对应的模数转换值为500,算出24.5对应的模数转换值为500(1+2%)=510。

5
下载与试验

在下载程序前我们先说程序中的参数是如何得到的,当然我们可以用不同的参数代进去看实际效果,但这样要花长的时间。我们可以用一台万用表,最好是数字万用表,在预设温度点测量R1、RT分压输出点对地的电压,例如测量电压为2.45V,则可计算得对应程序中的参数为2.45/5×1023≈501,再计算得关闭的参数为501×1.02≈511。等下一节学了串口通信后我们可能通过串口来获取这一参数。

把实际测量计算出的数据代入程序,再将程序下载到Arduino中,设法升高和降低温度就可以看到风扇的运行效果了。