首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于单片机的无线环境监控系统设计

基于单片机的无线环境监控系统设计

关键字:单片机   无线环境监测   温湿度传感器   继电器控制  
传统方式中,对大型仓库、博物馆等无人环境的数据采集费时费力、效率低下,且实时性差,随机性大。科学技术的进步促进了自动检测系统的发展,而利用无线通信技术实现对无人环境的监测更是未来电子技术应用的发展趋势。造价低廉、使用方便的单片机在小型控制系统中获得了广泛的应用。凌阳公司推出的16位单片机SPCE061A处理速度快,独具语音识别的特色功能,是用作系统控制核心的理想选择;而传输速率高、成本低、功耗小的nRF24L01无线模块也是实现系统无线通信的最佳选择。
1 系统设计方案

系统分为主控端与监测端,通过无线模块进行数据通信,核心部分是需要对数据进行处理的主控端。主控端以SPCE061A单片机为控制核心,通过nRF24L01模块进行数据的收集,以12864液晶模块作为数据显示的平台。监测端采用8位的AT89S52单片机作为控制核心。使用DHT11数字温湿度传感器采集温湿度数据。监测端还设计有继电器电路,可以模拟在温度超过警戒值时自动打开 房间空调制冷。图1为系统整体框架图。



图1 系统整体框架图



2 硬件电路设计

2.1 微处理模块设计

主控端微处理器选用凌阳公司推出的SPCE061A单片机。SPCE061A是一款16位的微处理器,运算速度快,非常适合处理复杂的数字信号。CPU工作电压VDD 为 2.4~3.6V,CPU 时钟频率范围为0.32~49.152MHz,内置2K字SRAM以及32K字FLASH;具有2 个 16 位可编程定时器/计数器(可自动预置初始计数值);2个10位DAC(数/模转换)输出通道;32 位通用可编程输入/输出端口;具备触键唤醒的功能;7通道10位电压模/数转换器(ADC)和单通道声音模/数转换器;声音模/数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;具备串行设备接口;具有低电压复位(LVR)功能和低电压监测(LVD)功能;内置在线仿真电路ICE(In-Circuit Emulator)接口;具有保密功能;具有看门狗功能。图2为SPCE061A内部结构图;图3为SPCE061A引脚图。



图2 SPCE061A内部结构图



图3 SPCE061A引脚图



监测端微处理器选用ATMEL公司的AT89S52单片机。AT89S52是一种低功耗、高性能的8位CMOS微控制器,具有8K 在系统可编程Flash 存储器,256字节RAM, 32 位I/O 口线,片内晶振及时钟电路,最高工作频率可达33MHZ;内部集成看门狗定时器,全双工UART串行口,6个中断源,3个16位定时器/计数器。图4为AT89S52单片机引脚及其最小系统图。



图4 AT89S52单片机引脚及其最小系统
3.2 监测端软件设计
3.2.1 监测端主程序

void main(void)
{
init_io();        // 初始化IO口
TX_Mode();        // 设置NRF24L01无线收发模块为发射方式
while(1)
{
RH();        //采集温湿度数据
delay2(100);
relay(); //控制继电器的状态
tx_buf[0]=str[0];        // 将检测到的数据保存到tx_buf[0]
tx_buf[1]=str[1];        // 将检测到的数据保存到tx_buf[1]
tx_buf[2]=str[2];        // 将检测到的数据保存到tx_buf[2]
tx_buf[3]=str[3];        // 将检测到的数据保存到tx_buf[3]
TX_Mode();        //设置NRF24L01无线收发模块为发射方式并开始发射
sta=SPI_Read(STATUS); // 调取状态寄存器的数值
SPI_RW_Reg(WRITE_REG+STATUS,sta); // 清除状态寄存器的中断标志位
delay_ms(1000);
}
}

3.2.2 Nrf24L01收发数据子程序

void TX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); /
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);
SPI_RW_Reg(WRITE_REG + RF_CH, 40);
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
CE=1;
}

3.2.3 温湿度检测子程序

void RH(void)
{
dht_data=0;
delay1(20); //主机拉低18ms
dht_data=1;
delay2(2); //总线由上拉电阻拉高 主机延时20us
dht_data=1; //主机设为输入 判断从机响应信号
if(!dht_data) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
{
U8FLAG=2;
while((!dht_data)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束
U8FLAG=2;
while((dht_data)&&U8FLAG++);
COM(); //开始进入数据接收状态
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
dht_data=1; //拉高为下一轮做好准备 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); //进行数据校验
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
str[0]=(U8T_data_H_temp/10)+0x30;
str[1]=(U8T_data_H_temp%10)+0x30;
str[2]=(U8RH_data_H_temp/10)+0x30;
str[3]=(U8RH_data_H_temp%10)+0x30;
}
}
}
3.2.4 继电器控制子程序
void relay()
{
if(str[0]>0x03)
relay_sta=0x01; //打开继电器
else if(str[0]==0x03)
{
if(str[1]>0x05)
relay_sta=0x01; //打开继电器
else
relay_sta=0x00; //关闭继电器
}
else
relay_sta=0x00; //关闭继电器
}

4 系统运行测试

按照以上方案设计出整个系统后上电运行,系统工作状态良好,能够满足生产生活中的要求,图15为系统整体运行情况,图16与图17为调整报警温度界面与系统报警界面。




5 结语

本系统使用处理速度快的16位单片机SPCE061A作为主控端核心,利用nRF24L01无线模块,设计完成了能够监控小型无人环境温湿度的人性化系统。经过测试,系统温湿度数据采集准确,nRF24L01模块传送数据稳定;当环境温度达到警戒值时,继电器闭合,可以模拟开启制冷空调的动作。本系统达到了预期设计目的,具有很高的实用价值。
返回列表