標(biāo)題:
stm32f103單片機(jī)的智能家用空氣質(zhì)量監(jiān)測系統(tǒng)源程序
[打印本頁]
作者:
yangze123
時(shí)間:
2020-7-13 15:14
標(biāo)題:
stm32f103單片機(jī)的智能家用空氣質(zhì)量監(jiān)測系統(tǒng)源程序
系統(tǒng)包括溫濕度監(jiān)測模塊、煙霧監(jiān)測模塊、PM2.5監(jiān)測模塊、甲醛監(jiān)測模塊及顯示報(bào)警模塊,主要實(shí)現(xiàn)了對(duì)溫濕度、PM2.5、甲醛和煙霧的實(shí)時(shí)監(jiān)測。系統(tǒng)采用LCD液晶屏將各個(gè)傳感器監(jiān)測到的數(shù)據(jù)分別進(jìn)行實(shí)時(shí)顯示。當(dāng)傳感器監(jiān)測值超出設(shè)定值范圍時(shí)進(jìn)行聲光報(bào)警,并通過控制繼電器來模擬加濕器、風(fēng)扇、滅火裝置的開關(guān),對(duì)室內(nèi)環(huán)境進(jìn)行調(diào)節(jié)。注釋有點(diǎn)亂碼查看工程文件即可
單片機(jī)源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "dht11.h"
#include "adc.h"
#include "beep.h"
#include "jdq.h"
#include "math.h"
int main(void)
{
u8 t=0;
int b;
u8 temperature;
u8 humidity;
u16 adcx1;
u16 adcx;
u16 pm;
u16 ms;
float msk;
float temp;
double x,y;
delay_init(); //延時(shí)函數(shù)初始化
uart_init(115200); //串口初始化為115200
LED_Init(); //初始化與LED連接的硬件接口
LCD_Init(); //初始化LCD
Adc_Init1();
Adc_Init2();
Adc_Init3();
BEEP_Init();
JDQ1_Init();
JDQ2_Init();
JDQ3_Init();
JDQ4_Init();
POINT_COLOR=RED; //設(shè)置字體為紅色
LCD_ShowString(30,50,200,16,16,"DHT11");
LCD_ShowString(30,130,200,16,16,"MQ2");
LCD_ShowString(30,220,200,16,16,"JQ: ");
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
LCD_ShowString(30,150,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(30,170,200,16,16,"ADC_CH0_VOL:0.000V");
while(DHT11_Init()) //DHT11初始化
{
LCD_ShowString(30,70,200,16,16,"DHT11 Error");
delay_ms(200);
LCD_Fill(30,70,239,130+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,70,200,16,16,"DHT11 OK");
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
LCD_ShowString(30,90,200,16,16,"Temp: C");
LCD_ShowString(30,110,200,16,16,"Humi: %");
while(1)
{
if(t%10==0) //每100ms讀取一次
{
DHT11_Read_Data(&temperature,&humidity); //讀取溫濕度值
temperature=temperature*0.9;
humidity=humidity*0.9;
LCD_ShowNum(30+40,90,temperature,2,16); //顯示溫度
LCD_ShowNum(30+40,110,humidity,2,16); //顯示濕度
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
}
adcx1=Get_Adc1_Average(ADC_Channel_10,10);
adcx1=adcx1*0.75;
LCD_ShowxNum(126,150,adcx1,4,16,0);//顯示ADC的值
temp=(float)adcx1*(3.3/4096);
adcx=temp;
LCD_ShowxNum(126,170,adcx,1,16,0);//顯示電壓值
temp-=adcx;
temp*=1000;
LCD_ShowxNum(142,170,temp,3,16,0X80); //減去整數(shù)部分,放大一千倍。顯示小數(shù)部分
delay_ms(250);
pm=Get_GP2Y_Average(20);
LCD_ShowString(30,200,200,16,16,"PM2.5:");
LCD_ShowxNum(80,200,pm,4,16,0);//顯示ADC的值
delay_ms(250);
LCD_ShowString(70,220,200,16,16,"0.000V");
ms=Get_Adc3_Average(ADC_Channel_13,5);
//LCD_ShowxNum(80,220,ms,4,16,0);
msk=(float)ms*(3.3/4096);
ms=msk;
x=(2.852*msk)-(0.210*msk*msk)-7.071;
LCD_ShowxNum(70,220,ms,1,16,0);//顯示電壓值
msk-=ms;
msk*=1000;
LCD_ShowxNum(86,220,msk,3,16,0X80);
y=exp(x);
y=0.76*y;
LCD_ShowString(80,240,200,16,16,"0.000");
ms=y;
LCD_ShowxNum(80,240,ms,1,16,0);
y-=ms;
y*=1000;
LCD_ShowxNum(96,240,y,3,16,0X80);
for (b=0;b<3;b++)
{
if (pm>125)
{
BEEP=0;
LED0=!LED0;
delay_ms(300);//延時(shí)300ms
BEEP=1;
LED0=!LED0;
delay_ms(300);
}
}
for (b=0;b<3;b++)
{
if (adcx1>1200)
{
BEEP=0;
LED0=!LED0;
delay_ms(200);//延時(shí)300ms
BEEP=1;
LED0=!LED0;
delay_ms(200);
}
}
if (adcx1>=1200)
{
JDQ1=1;
}
if (adcx1<1200)
{
JDQ1=0;
}
if (temperature>26||ms>2000)
{
JDQ2=1;
}
if (temperature<= 26&&ms<2000)
{
JDQ2=0;
}
if (humidity<40)
{
JDQ3=1;
}
if (humidity>50)
{
JDQ3=0;
}
if (pm>125)
{
JDQ4=1;
}
if (pm<100)
{
JDQ4=0;
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
基于單片機(jī)的智能家用空氣質(zhì)量監(jiān)測系統(tǒng).7z
(241.62 KB, 下載次數(shù): 55)
2020-7-13 22:50 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2020-7-13 22:57
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
DISP
時(shí)間:
2021-11-26 14:37
請(qǐng)問能夠把仿真圖發(fā)出來嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1