一:功能介绍:
1、系统组成:采用stm32f103c8t6核心板+DHT11温湿度+DS1302时钟模块+LCD1602显示屏+光敏传感器++继电器+风扇+按键+LED
2、通过DHT11传感器采集温湿度,显示到LCD1602上面;
3、通过DS1302时钟模块读取当前时间,显示到LCD1602上面;
4、通过按键设置消毒灯关闭时间,显示到LCD1602上面;
5、当光照检测低于50(阈值程序可调),代表衣柜关闭,自动打开消毒灯进行消毒;
6、当光照检测大于等于50(阈值程序可调),代表衣柜打开,自动关闭消毒灯;
7、当定时的时间到达,自动关闭消毒灯;
8、当湿度大于70(阈值程序可调),自动打开继电器开启风扇换气;
二:实物演示视频
250-基于stm32单片机多功能智能消毒衣柜
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)
void DHT1DelayNms(uchar ms)
{
int i;
while(ms--)
{
i=2000;
while(i--);
}
}
/***延时10us***/
void DHT1DelayNms10us()
{
int i=20;
while(i--);
}
/***延时30us***/
void DHT11Delay30us() //@11.0592MHz
{
int i=60;
while(i--);
}
int mm=200;
/********主机发出开始信号*******/
uchar DHT11_Start() //请结合时序图分析
{
unsigned char i;
DHT11_IO_1;
DHT1DelayNms10us();
DHT11_IO_0;
DHT1DelayNms(20); //保持电平时间大于18ms
DHT11_IO_1;
for(i = 0;i<250;i++)
{
if( DHT11_ReadBit() == 0 )
{
//判断从机是否发出 80us 的低电平响应信号是否结束
mm=200;
while( DHT11_ReadBit() == 0 && mm--);
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
mm=200;
while(DHT11_ReadBit() == 1&& mm--);
return 1;
}
}
return 0;
}
/********DHT11接收一个字节数据*******/
uchar receive_data()
{
uchar i;
data_byte=0;
for(i=0;i<8;i++)
{
data_byte<<=1;
mm=200;
while((!DHT11_ReadBit()&& mm--));//等待50us低电平结束
DHT11Delay30us();
if(DHT11_ReadBit()==1)
{
data_byte|=0x1;
mm=200;
while((DHT11_ReadBit()&& mm--));
}
else
{
}
}
return data_byte;
}
/********DHT11 receive data*******/
void DHT11_receive( int *h, int *t)
{
uchar temp;
uchar Tem_Z,Tem_X,Hum_Z,Hum_X,Check;
if(DHT11_Start())
{
DHT11_IO_1; //Pulled wait DHT11 response
//Determine whether to issue a slave 80us high level, if you begin collecting data issued
Hum_Z = receive_data(); //采集温度整数部分
Hum_X = receive_data(); //采集温度小数部分
Tem_Z = receive_data(); //采集湿度整数部分
Tem_X = receive_data(); //采集湿度小数部分
Check = receive_data(); //Collection parity bit
DHT11_IO_1;
//校验
temp = Hum_Z;
temp +=Hum_X;
temp +=Tem_Z;
temp +=Tem_X;
//校验通过
if( temp == Check )
{
*h = Hum_Z;
*t = Tem_Z;
}
四:原理图文件展示(采用AD(Altium Designer)打开)
五:实物图展示:
六: 资料清单展示: