适合于盆景呵护或者大棚管理
制作出来的实物图如下:
引脚硬件连接
LED指示灯
LED1--->PC13
BH1750 光照
SDA----->PB5
SCL----->PB6
DS18B20 温度
DATA---->PA12
DHT11 温湿度
DATA---->PA11
土壤多要素传感器
EN------->PA1
RXD------>PA2
TXD------>PA3
二氧化碳传感器
RXD------>PB10
TXD------>PB11
CH340下载器
RXD------>PA9
TXD------>PB10
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "CO2.h"
- #include "sys.h"
- #include "usart.h"
- #include "ds18b20.h"
- #include "DTH117.h"
- #include "bh1750.h"
- #include "rs485.h"
- int main(void)
- {
- u8 i;
- u8 t=0,key;
- //u16 temp;//二氧化碳
- u8 tempera;
- short temperature;
- u8 humidity;
- u16 Light=0;//光强
- u8 USART3_buf[12];
- u8 rs485buf[30];
- u8 arr[8]={0X01,0X03,0X00,0X00,0X00,0X08,0X44,0X0C}; //土壤传感器问询帧
- u8 avr[8]={0X01,0X03,0X00,0X05,0X00,0X01,0X94,0X0B}; //二氧化碳问询帧
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- Usart1_Init(115200); //串口初始化为 115200
- // Usart3_Init(4800); //串口初始化为 4800
- RS485_Init(4800); //初始化RS485
- USART3_Init(4800); //初始化串口3
- LED_Init(); //初始化与LED连接的硬件接口
- bh1750_Init();
- DS18B20_Init();
- DHT11_Init();
- DHT11_Read_Data(&tempera,&humidity); //读取温湿度值
- //UsartPrintf(USART_DEBUG,"\r\n 温度:%d,湿度:%d,光照:%d",temp,humi,Light);
- UsartPrintf(USART_DEBUG,"\n\r\n 欢迎使用盆景生态监测系统");
- UsartPrintf(USART_DEBUG,"\r\n 本系统使用的传感器所能监测的环境因素有");
- UsartPrintf(USART_DEBUG,"\r\n 温度 空气温湿度 光强 氮磷钾 二氧化碳");
- while(1)
- {
- if(t%10==0) //每100ms读取一次
- {
- UsartPrintf(USART_DEBUG,"\r\n"); //换行
-
- /*----------------------*///温度采集
- temperature=DS18B20_Get_Temp();
- if(temperature==0)UsartPrintf(USART_DEBUG,"\r\n DS18B20 Error!"); //DS18B20报错
- else{
- if(temperature<0){
- UsartPrintf(USART_DEBUG,"-"); //负温度
- temperature=-temperature; //转为正数
- }else
- UsartPrintf(USART_DEBUG,"\r\n DS18B20:温度:%d.%d%s",temperature/10,temperature%10,"℃"); //显示温度
- }
-
- /*-----------------------------------*///空气温湿度采集
- DHT11_Read_Data(&tempera,&humidity); //读取温湿度值
- if(humidity>100||tempera>100||(humidity+tempera==0))UsartPrintf(USART_DEBUG,"\r\n DHT11 Error!"); //DHT11报错
- else {UsartPrintf(USART_DEBUG,"\r\n DHT11 :空气温度:%d%s",tempera,"℃"); //显示空气温湿度
- UsartPrintf(USART_DEBUG,"\r\n :空气湿度:%d%c",humidity,'%'); //显示空气温湿度
- humidity=0;
- tempera=0;
- }
-
-
- /*------------------------*///光照强度采集
- bh1750_ReadOneTime();
- bh1750_ReadContinuous1();
- Light=getValue();
- if(Light>1000)UsartPrintf(USART_DEBUG,"\r\n BH1750 Error!"); //BH1750报错
- else UsartPrintf(USART_DEBUG,"\r\n BH1750: 光照强度:%d",Light); //显示光照强度
- // /*----------------------------------------------*///二氧化碳
- USART3_Send_Data(avr,8);//发送问询帧
- for(i=0;i<10;i++){
- USART3_Receive_Data(USART3_buf,&key);//获取返回值及返回有效字节数
- if(key==7){
- UsartPrintf(USART_DEBUG,"\r\n 二氧化碳含量:%d ppm",USART3_buf[3]*256+USART3_buf[4]);
- for(i=0;i<12;i++)USART3_buf[i]=0;
- }
- }
- if(i==10)UsartPrintf(USART_DEBUG,"\r\n 二氧化碳监测 Error!:");
-
-
- /*-------------------------------------------*///土壤多要素传感器
- RS485_Send_Data(arr,8);//发送问询帧
- for(i=0;i<20;i++){
- RS485_Receive_Data(rs485buf,&key);//获取返回值及返回有效字节数
- if(key==21) //表示接收到有数据
- {
- if(rs485buf[3]<4){ //判断数据合理性
- UsartPrintf(USART_DEBUG,"\r\n 土壤多要素传感器");
- UsartPrintf(USART_DEBUG,"\r\n 水分: %d.%d%c",(rs485buf[3]*256+rs485buf[4])/10,(rs485buf[3]*256+rs485buf[4])%10,'%'); //显示土壤湿度
- UsartPrintf(USART_DEBUG,"\r\n 温度: %d.%d%s",(rs485buf[5]*256+rs485buf[6])/10,(rs485buf[5]*256+rs485buf[6])%10,"℃"); //显示土壤温度
- UsartPrintf(USART_DEBUG,"\r\n 电导率:%d.%d%s",(rs485buf[7]*256+rs485buf[8])/10,(rs485buf[7]*256+rs485buf[8])%10,"us/cm");//显示土壤电导率
- UsartPrintf(USART_DEBUG,"\r\n PH值: %d.%d",(rs485buf[9]*256+rs485buf[10])/10,(rs485buf[9]*256+rs485buf[10])%10); //显示土壤湿度
- UsartPrintf(USART_DEBUG,"\r\n 氮含量:%d.%d%c",(rs485buf[11]*256+rs485buf[12])/100,(rs485buf[11]*256+rs485buf[12])%100,'%'); //显示土壤湿度
- UsartPrintf(USART_DEBUG,"\r\n 磷含量:%d.%d%c",(rs485buf[13]*256+rs485buf[14])/100,(rs485buf[13]*256+rs485buf[14])%100,'%'); //显示土壤湿度
- UsartPrintf(USART_DEBUG,"\r\n 钾含量:%d.%d%c",(rs485buf[15]*256+rs485buf[16])/100,(rs485buf[15]*256+rs485buf[16])%100,'%'); //显示土壤湿度
- UsartPrintf(USART_DEBUG,"\r\n 盐度: %d.%d%c",(rs485buf[17]*256+rs485buf[18])/100,(rs485buf[17]*256+rs485buf[18])%100,'%'); //显示土壤湿度
- //i=21;
- } //else temp++; //UsartPrintf(USART_DEBUG,"\r\n 土壤多要素传感器 Error!"); //累计获取到错误数据
- for(i=0;i<30;i++)rs485buf[i]=0;
- } //else temp++; //UsartPrintf(USART_DEBUG,"\r\n 土壤多要素传感器 Error!"); //累计没有获取数据
-
- }
- if(i==20)UsartPrintf(USART_DEBUG,"\r\n 土壤多要素传感器 Error!"); //十次算作获取失败
-
-
- }
-
- delay_ms(10);
- t++;
- if(t==11)
- {
- t=0;
- LED1=!LED1;
-
- }
- }
- }
-
复制代码
所有代码51hei附件下载:
盆景生态环境监测改良版.7z
(260.84 KB, 下载次数: 209)
|