聚豐項(xiàng)目 > 基于zigbee技術(shù)的空氣質(zhì)量監(jiān)控系統(tǒng)
空氣質(zhì)量監(jiān)控系統(tǒng)基于IDT氣體流量傳感器ZMOD4410模塊而設(shè)計(jì)。主控芯片采用高性能意法半導(dǎo)體公司Cortex-M4系列微控制器STM32F407ZET6,并采用CC2650模塊無(wú)線2.4GHz作為zigbee無(wú)線傳輸功能,并根據(jù)氣體傳感器監(jiān)測(cè)數(shù)據(jù)做出預(yù)警。 zigbee技術(shù)是一種低功耗、短距離、低成本的無(wú)線通信技術(shù),其PHY層和MAC層協(xié)議為802.15.4標(biāo)準(zhǔn)協(xié)議,網(wǎng)絡(luò)層由zigbee技術(shù)聯(lián)盟制訂,可以提供靈活的組網(wǎng)方式。 本項(xiàng)目采用模塊化方案設(shè)計(jì),主要構(gòu)成系統(tǒng)的模塊有STM32F407ZET6主控、CC2650模塊、底板、傳感器模塊等。便于擴(kuò)展各類傳感器模塊,實(shí)現(xiàn)家庭燃?xì)?、水、溫濕度、空氣質(zhì)量等的實(shí)時(shí)在線監(jiān)測(cè)功能。軟件采用開(kāi)源嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread,具有組件豐富、可靠性高等諸多優(yōu)點(diǎn)。
大雨淅淅
大雨淅淅
團(tuán)隊(duì)成員
嚴(yán)敏 軟件工程師
張影影 隊(duì)長(zhǎng)
1、電源模塊
通過(guò)分析,此項(xiàng)目所需功耗約為2W,電源模塊采用寬輸入電壓,低噪聲,總共有3個(gè)穩(wěn)壓芯片:U15/U16/U18,DC_IN用于外部直流電源輸入,經(jīng)過(guò)U15DC-DC芯片轉(zhuǎn)換為5V電源輸出,其中D4是防反接二極管,避免外部直流電源極性搞錯(cuò)的時(shí)候,燒壞開(kāi)發(fā)板。K1為開(kāi)發(fā)板的總電源開(kāi)關(guān),F1為1000ma自恢復(fù)保險(xiǎn)絲,用于保護(hù)USB。
2、STM32F407ZET6主控模塊
本項(xiàng)目選擇的是STM32F407ZGT6作為MCU,該芯片是STM32F407里面配置非常強(qiáng)大的了,它擁有的資源包括:集成FPU和DSP指令,并具有192KB SRAM、1024KB FLASH、12個(gè)16位定時(shí)器、2個(gè)32位定時(shí)器、2個(gè)DMA控制器(共16個(gè)通道)、3個(gè)SPI、2個(gè)全雙工I2S、3個(gè)IIC、6個(gè)串口、2個(gè)USB(支持HOST /SLAVE)、2個(gè)CAN、3個(gè)12位ADC、2個(gè)12位DAC、1個(gè)RTC(帶日歷功能)、1個(gè)SDIO接口、1個(gè)FSMC接口、1個(gè)10/100M以太網(wǎng)MAC控制器、1個(gè)攝像頭接口、1個(gè)硬件隨機(jī)數(shù)生成器、以及112個(gè)通用IO口等。該芯片的配置十分強(qiáng)悍,很多功能相對(duì)STM32F1來(lái)說(shuō)進(jìn)行了重大改進(jìn),比如FSMC的速度,F4刷屏速度可達(dá)3300W像素/秒,而F1的速度則只有500W左右。
STM32F407ZGT6主控模塊外接LCD模塊、電源模塊、3G模塊、CC2650模塊等,作為整個(gè)系統(tǒng)核心處理部分,通過(guò)UART外接CC2650模塊,將收集到的數(shù)據(jù)做進(jìn)一步處理,將收到的實(shí)時(shí)數(shù)據(jù)處理后顯示在LCD顯示屏上,根據(jù)eco2、IAQ的值的變化,如果超過(guò)預(yù)警值將進(jìn)行報(bào)警,提醒用戶做出反應(yīng),并可以通過(guò)3G模塊將告警信息傳輸?shù)绞謾C(jī)上。
3、CC2650模塊
4、LCD模塊
LCD接口連接在STM32F407ZGT6的FSMC總線上面,可以顯著提高LCD的刷屏速度。LCD模塊主要用于顯示氣體傳感器傳輸過(guò)來(lái)的eco2數(shù)值和IAQ,便于直觀反映。
5、ZMOD4410模塊
氣體傳感器模塊采用IDT 公司高性能ZMOD4410模塊,實(shí)現(xiàn)對(duì)氣體流量的采樣,工作電流僅為30mA(5V 電壓),其精度達(dá)到2%,具有數(shù)字I2C 接口和模擬輸出接口,是實(shí)現(xiàn)氣體流量檢測(cè)的最佳選擇。本項(xiàng)目采用排線外接CC2650模塊的IIC接口,將監(jiān)測(cè)數(shù)據(jù)傳給cc2650,然后通過(guò)無(wú)線方式傳輸?shù)脚cSTM32連接的CC2650模塊上,從而達(dá)到遠(yuǎn)程監(jiān)控的功能
本項(xiàng)目用到的模塊比較多,軟件功能主要集中在是STM32407處理模塊、CC2650無(wú)線傳輸模塊、ZMOD4410氣體監(jiān)測(cè)模塊上。其中ZMOD4410氣體監(jiān)測(cè)模塊由IDT廠家給出了API開(kāi)發(fā)包,將給出的.a文件加入到STM32407處理模塊程序的編譯中,多收到的氣體傳感器數(shù)據(jù)進(jìn)行處理,經(jīng)過(guò)轉(zhuǎn)換獲取可顯示ECO2、IAQ值,若使用裸機(jī)程序編寫(xiě),將花費(fèi)大量時(shí)間安排各模塊工作流程,以保證各模塊之間無(wú)縫配合。因此本項(xiàng)目采用嵌入式RTOS 進(jìn)行程序設(shè)計(jì),各個(gè)軟件功能采用模塊化、多任務(wù)設(shè)計(jì)。
1、 軟件整體設(shè)計(jì)方案
設(shè)計(jì)采用開(kāi)源嵌入式系統(tǒng)RT-Thread 作為運(yùn)行基本系統(tǒng)。在此基礎(chǔ)上增加各模塊使用的驅(qū)動(dòng)和線程函數(shù),系統(tǒng)每10ms 進(jìn)行一次進(jìn)行線程調(diào)度,保證系統(tǒng)實(shí)時(shí)性。軟件整體設(shè)計(jì)流程如下圖。
2、 CC2650無(wú)線傳輸模塊軟件設(shè)計(jì)方案
// 初始化GAS
void Init_GAS(void)
{
P1SEL &= ~0xc0; //作為普通 IO 口
SDA_OUT();
SCL_OUT();
Write_GAS(PWR_MGMT_1, 0x00);//電源管理,典型值:0x00(正常啟用)
Write_GAS (SMPLRT_DIV, 0x07);
Write_GAS (CONFIG, 0x06);
Write_GAS (GYRO_CONFIG, 0x18);
Write_GAS (ACCEL_CONFIG, 0x01);
}
//連續(xù)讀出GAS內(nèi)部數(shù)據(jù)
void Multiple_read_GAS(void)
{
char BUF[12]; //接收數(shù)據(jù)緩存區(qū)
BUF[0]= ead_GAS(ACCEL_XOUT_H);
BUF[1]= Read_GAS (ACCEL_XOUT_L);
BUF[2]= Read_GAS (ACCEL_YOUT_H);
BUF[3]= Read_GAS (ACCEL_YOUT_L);
BUF[4]= Read_GAS (ACCEL_ZOUT_H);
BUF[5]= Read_GAS (ACCEL_ZOUT_L);
BUF[6]= Read_GAS (GYRO_XOUT_H);
BUF[7]= Read_GAS (GYRO_XOUT_L);
BUF[8]= Read_GAS (GYRO_YOUT_H);
BUF[9]= Read_GAS (GYRO_YOUT_L);
BUF[10]= Read_GAS (GYRO_ZOUT_H);
BUF[11]= Read_GAS (GYRO_ZOUT_L);
accX=(BUF[0]<<8)|BUF[1];
accY=(BUF[2]<<8)|BUF[3];
accZ=(BUF[4]<<8)|BUF[5];
graX=(BUF[6]<<8)|BUF[7];
graY=(BUF[8]<<8)|BUF[9];
graZ=(BUF[10]<<8)|BUF[11];
}
zigbee終端設(shè)備軟件方案
3、 系統(tǒng)初始化
board_init(); //開(kāi)發(fā)板初始化
uart_init(115200); //初始化串口波特率115200
LCD_Init(); //LCD顯示初始化
alarm_init();//警報(bào)初始化
4、 LCD顯示
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{
u8 x0=x;
width+=x;
height+=y;
while((*p<='~')&&(*p>=' '))//?D??ê?2?ê?·?·¨×?·?!
{
if(x>=width){x=x0;y+=size;}
if(y>=height)break;//í?3?
LCD_ShowChar(x,y,*p,size,0);
x+=size/2;
p++;
}
}
5、 預(yù)警模塊
void alarm(void)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_ms(300);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_ms(300);
}
由于條件限制,沒(méi)能將風(fēng)機(jī)等加上去,只是通過(guò)板子上的蜂鳴器報(bào)警達(dá)到預(yù)警效果,如果室內(nèi)環(huán)境變差,可以通過(guò)打開(kāi)風(fēng)機(jī)進(jìn)行環(huán)境空氣流轉(zhuǎn),達(dá)到M2M的效果
氣體傳感器收集數(shù)據(jù)通過(guò)IIC上傳到zigbee終端模塊,zigbee終端模塊將數(shù)據(jù)通過(guò)2.4G發(fā)送到zigebee協(xié)調(diào)器,zigbee協(xié)調(diào)器通過(guò)UART將數(shù)據(jù)上傳到主控模塊,主控將數(shù)據(jù)進(jìn)行轉(zhuǎn)換,通過(guò)LCD顯示ECO2、IAQ值,如果值不正常說(shuō)明空氣質(zhì)量問(wèn)題,通過(guò)蜂鳴器發(fā)出警報(bào),并通過(guò)3G模塊將數(shù)據(jù)發(fā)送到個(gè)人手機(jī)上
(0.75 MB)下載