適合于盆景呵護或者大棚管理
制作出來的實物圖如下:
實物圖.jpg (5.21 MB, 下載次數: 57)
下載附件
硬件電路連接
2021-10-13 20:40 上傳
測試圖.png (45.8 KB, 下載次數: 56)
下載附件
串口監視效果
2021-10-13 20:40 上傳
引腳硬件連接
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)
2021-10-14 04:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|