目录
DS18B20智能温控风扇
一、项目简介
1、介绍
本项目基于51单片机DS18B20温度传感器和直流电机,设计一款智能温控风扇,根据外界温度值来自动控制风扇风速,也可以手动调节风扇风速,实现人机交互,智能控制,应用场景非常广泛,可用于给机器散热、智能家居系统、温室大棚等领域,通过该系统监测环境温度来自动控制风扇的开关和风速。
2、实现过程
基于51单片机DS18B20温度传感器来实时监测外界温度,在LCD1602小屏幕上实时显示温度、显示风速、显示设定的温度阈值。可以通过独立按键K1、K2(按下K1阈值加1℃、按下K2阈值减1℃)来调节温度阈值,当温度高于阈值时,则自动驱动直流电机开启风扇风速为1档,当大于额定阈值2℃时,风速自动加到2档,大于额度阈值4℃时,风速自动加到3档;若人为控制风速,通过独立按键K3、K4(按下K3风速加1档、按下K4风速减1档),温控风速这会取消,防止因外界环境变化,而影响人为的体验。
3、材料准备
AT89C52芯片,直流电机,扇叶,LCD1602屏幕,供电源(充电宝)。
二、主要代码实现
-
这里我只显示该项目中的主要代码实现过程,LCD1602模块实现代码这里没有显示,整个项目代码我放在github上面,需要自取。
1、DS18B20模块(温度监测)
-
通过单总线协议(OneWire)与 DS18B20 进行通信,获取当前环境温度。
(1)、OneWire.c
#include <REGX52.H>
sbit OneWire_DQ=P3^7;
/**
*@brief OneWire初始化
*@param 无
*@retval 返回DQ总线的值
*/
unsigned char OneWire_Init()
{
unsigned char i;
unsigned char AckBit;
EA=0; //关闭定时器全部中断
OneWire_DQ=1; //先把总线拉高
OneWire_DQ=0; //再把总线拉低
i = 247;while (--i); //Delay500us
OneWire_DQ=1; //释放总线
i = 32;while (--i); //Delay70us
AckBit=OneWire_DQ;
i = 247;while (--i); //Delay500us
EA=1; //打开定时器中断
return AckBit;
}
/**
*@brief OneWire发送一位
*@param 一位
*@retval 无
*/
void OneWire_SendBit(unsigned char Bit)
{
unsigned char i;
EA=0; //关闭定时器全部中断
OneWire_DQ=0; //把总线拉低
i = 4;while (--i); //Delay10us
OneWire_DQ=Bit; //发送一位数据
i = 24;while (--i); //Delay50us
OneWire_DQ=1; //释放总线
EA=1; //打开定时器中断
}
/**
*@brief OneWire接收一位
*@param 无
*@retval 返回一位
*/
unsigned char ReceiveBit()
{
unsigned char i;
unsigned char AckBit;
EA=0; //关闭定时器全部中断
OneWire_DQ=0; //把总线拉低
i = 2;while (--i); //Delay5us
OneWire_DQ=1; //释放总线需要时间,所以释放完刚好到15us未尾
i = 2;while (--i); //Delay5us
AckBit=OneWire_DQ;
i = 24;while (--i); //Delay50us
EA=1; //打开定时器中断
return AckBit;
}