一.硬件方案
主要由STM32F103C8T6单片机最小系统板+OLED12864显示模块+二氧化碳传感器模块+温湿度传感器模块+光强检测电路+LED灯光+风扇电路+蜂鸣器电路+电源开关构成;
仿真图如下:
二.设计功能
- 采集环境温湿度、光照强度、二氧化碳浓度;
- OLED显示屏显示信息,按键设置温湿度、光照强度、二氧化碳监测阈值;
- 当触发阈值时,报警提醒;温度超过阈值时,启动风扇自动降温通风;光强强度低于阈值时,LED灯补光;
- 按键可设置阈值:按键1:模式切换;按键2:设置;按键3:自加1或控制风扇;按键4:自减1或控制灯光;
- 无线通信连接APP,远程显示数据信息。
- 连接蓝牙,APP可控制风扇、LED灯开关,获取系统数据;
三.软件设计
主程序源码
int main(void)
{
vu8 key=0;
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
KEY_Init(); //初始化与按键连接的硬件接口
uart_init(9600);
usart2_Init(9600);
TIM2_Int_Init(99,7199);//10Khz的计数频率,计数到5000为500ms
Adc_Init(); //光强采集ADC初始化
FAN_Init(); //风扇初始化
OLED_Init(); //显示屏初始化
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
display_refresh(); //刷新显示屏
Delay_ms(500);
while(1)
{
key=KEY_Scan(1); //得到键值
KEY_Handle(key);
APP_Handle();
if(W_100ms>=99)
{
W_100ms=0;
if(refresh>0)
APP_refresh();
}
if(T_100ms>=49)
{
T_100ms = 0;
//采集烟雾浓度值
light = Get_Adc_Average(9,10);
getDHT11Data(); //获取湿度数据
if(set==0) //set为0,说明现在不是设置状态
{
display_refresh(); //显示AD数值和报警值
if(mode==1)
{
if(light<setLight)
{
LEDR=0;
}
else
{
LEDR=1;
}
}
//报警阈值判断
if(Temp>setTemp)
{
warn_flag=1;
}
else if(Humi>setHumi)
{
warn_flag=2;
}
else if(light<setLight)
{
warn_flag=3;
}
else if(co2>setco2)
{
warn_flag=4;
}
else
{
warn_flag=0;
}
//蜂鸣器报警控制
if(warn_flag>0)
{
if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_15)==1)
{
BEEP=0;
}
else
BEEP=1;
}
else
BEEP=1;
if(mode==1)
{
if(warn_flag==1)
{
if(FAN_state==0)
printf("风扇已开启\r\n");
FAN=1;
}
else
{
FAN=0;
if(FAN_state==1)
printf("风扇已关闭\r\n");
}
}
}
}
}
}
链接:https://pan.baidu.com/s/1-Ar1mLe-1qtdt4VCcN3gBg 提取码: 6yfz