聚丰项目 > 基于zigbee技术的空气质量监控系统
空气质量监控系统基于IDT气体流量传感器ZMOD4410模块而设计。主控芯片采用高性能意法半导体公司Cortex-M4系列微控制器STM32F407ZET6,并采用CC2650模块无线2.4GHz作为zigbee无线传输功能,并根据气体传感器监测数据做出预警。 zigbee技术是一种低功耗、短距离、低成本的无线通信技术,其PHY层和MAC层协议为802.15.4标准协议,网络层由zigbee技术联盟制订,可以提供灵活的组网方式。 本项目采用模块化方案设计,主要构成系统的模块有STM32F407ZET6主控、CC2650模块、底板、传感器模块等。便于扩展各类传感器模块,实现家庭燃气、水、温湿度、空气质量等的实时在线监测功能。软件采用开源嵌入式实时操作系统RT-Thread,具有组件丰富、可靠性高等诸多优点。
大雨淅淅
分享大雨淅淅
团队成员
严敏 软件工程师
张影影 队长
1、电源模块
通过分析,此项目所需功耗约为2W,电源模块采用宽输入电压,低噪声,总共有3个稳压芯片:U15/U16/U18,DC_IN用于外部直流电源输入,经过U15DC-DC芯片转换为5V电源输出,其中D4是防反接二极管,避免外部直流电源极性搞错的时候,烧坏开发板。K1为开发板的总电源开关,F1为1000ma自恢复保险丝,用于保护USB。
2、STM32F407ZET6主控模块
本项目选择的是STM32F407ZGT6作为MCU,该芯片是STM32F407里面配置非常强大的了,它拥有的资源包括:集成FPU和DSP指令,并具有192KB SRAM、1024KB FLASH、12个16位定时器、2个32位定时器、2个DMA控制器(共16个通道)、3个SPI、2个全双工I2S、3个IIC、6个串口、2个USB(支持HOST /SLAVE)、2个CAN、3个12位ADC、2个12位DAC、1个RTC(带日历功能)、1个SDIO接口、1个FSMC接口、1个10/100M以太网MAC控制器、1个摄像头接口、1个硬件随机数生成器、以及112个通用IO口等。该芯片的配置十分强悍,很多功能相对STM32F1来说进行了重大改进,比如FSMC的速度,F4刷屏速度可达3300W像素/秒,而F1的速度则只有500W左右。
STM32F407ZGT6主控模块外接LCD模块、电源模块、3G模块、CC2650模块等,作为整个系统核心处理部分,通过UART外接CC2650模块,将收集到的数据做进一步处理,将收到的实时数据处理后显示在LCD显示屏上,根据eco2、IAQ的值的变化,如果超过预警值将进行报警,提醒用户做出反应,并可以通过3G模块将告警信息传输到手机上。
3、CC2650模块
4、LCD模块
LCD接口连接在STM32F407ZGT6的FSMC总线上面,可以显著提高LCD的刷屏速度。LCD模块主要用于显示气体传感器传输过来的eco2数值和IAQ,便于直观反映。
5、ZMOD4410模块
气体传感器模块采用IDT 公司高性能ZMOD4410模块,实现对气体流量的采样,工作电流仅为30mA(5V 电压),其精度达到2%,具有数字I2C 接口和模拟输出接口,是实现气体流量检测的最佳选择。本项目采用排线外接CC2650模块的IIC接口,将监测数据传给cc2650,然后通过无线方式传输到与STM32连接的CC2650模块上,从而达到远程监控的功能
本项目用到的模块比较多,软件功能主要集中在是STM32407处理模块、CC2650无线传输模块、ZMOD4410气体监测模块上。其中ZMOD4410气体监测模块由IDT厂家给出了API开发包,将给出的.a文件加入到STM32407处理模块程序的编译中,多收到的气体传感器数据进行处理,经过转换获取可显示ECO2、IAQ值,若使用裸机程序编写,将花费大量时间安排各模块工作流程,以保证各模块之间无缝配合。因此本项目采用嵌入式RTOS 进行程序设计,各个软件功能采用模块化、多任务设计。
1、 软件整体设计方案
设计采用开源嵌入式系统RT-Thread 作为运行基本系统。在此基础上增加各模块使用的驱动和线程函数,系统每10ms 进行一次进行线程调度,保证系统实时性。软件整体设计流程如下图。
2、 CC2650无线传输模块软件设计方案
// 初始化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);
}
//连续读出GAS内部数据
void Multiple_read_GAS(void)
{
char BUF[12]; //接收数据缓存区
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终端设备软件方案
3、 系统初始化
board_init(); //开发板初始化
uart_init(115200); //初始化串口波特率115200
LCD_Init(); //LCD显示初始化
alarm_init();//警报初始化
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>=' '))//ÅжÏÊDz»ÊÇ·Ç·¨×Ö·û!
{
if(x>=width){x=x0;y+=size;}
if(y>=height)break;//Í˳ö
LCD_ShowChar(x,y,*p,size,0);
x+=size/2;
p++;
}
}
5、 预警模块
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);
}
由于条件限制,没能将风机等加上去,只是通过板子上的蜂鸣器报警达到预警效果,如果室内环境变差,可以通过打开风机进行环境空气流转,达到M2M的效果
气体传感器收集数据通过IIC上传到zigbee终端模块,zigbee终端模块将数据通过2.4G发送到zigebee协调器,zigbee协调器通过UART将数据上传到主控模块,主控将数据进行转换,通过LCD显示ECO2、IAQ值,如果值不正常说明空气质量问题,通过蜂鸣器发出警报,并通过3G模块将数据发送到个人手机上
(0.75 MB)下载