系统功能:
系统分为手动和自动模式,上电默认为自动模式,自动模式下系统根据采集到的传感器值
自动控制,温度过低后自动开启加热,湿度过高后自动开启通风,光照过低后自动开启补
光,土壤湿度过低后自动开启水泵补水。手动模式下可以手动控制加热/除湿/补光/补水。
如果采集到的二氧化碳值高于设定的二氧化碳值则蜂鸣器报警。
上电后OLED显示 “欢迎使用大棚控制系统请稍后”,两秒后显示Connecting...表示
正在连接阿里云,正常连接阿里云后显示第一页面,如长时间显示Connecting...请
检查WiFi网络是否正确。
第一页面第一行显示系统状态信息,第二行显示获取到的温湿度和二氧化碳值,第三行显示
获取到的光照和土壤湿度值,第四行显示系统模式(手动或自动模式)。
短按B3按键切换到第二页面
短按B6按键切换手动/自动模式
第二页面第一行显示温度阈值设定,第二行显示获取到的温度值,第三行显示设定的温度值
第四行显示加热器状态(ON或OFF)。
短按B3按键切换到第三页面
短按B4按键增加温度设定阈值
短按B5按键减小温度设定阈值
手动状态下短按B6按键开关加热继电器
第三页面第一行显示湿度阈值设定,第二行显示获取到的湿度值,第三行显示设置的湿度
阈值,第四行显示风扇状态。
短按B3按键切换到第四页面
短按B4按键增加湿度设定阈值
短按B5按键减小湿度设定阈值
手动状态下短按B6按键开关风扇
第四页面第一行显示光照阈值设定,第二行显示获取到的光照值,第三行显示设置的
光照阈值,第四行显示补光灯状态。
短按B3按键切换到第五页面
短按B4按键增加光照设定阈值
短按B5按键减小光照设定阈值
手动模式下短按B6按键开关补光灯
第五页面第一行显示土壤湿度设定,第二行显示获取到的土壤湿度值,第三行
显示设置的土壤湿度阈值,第四行显示水泵状态。
短按B3按键切换到第六页面
短按B4按键增加土壤湿度设定阈值
短按B5按键减小土壤湿度设定阈值
手动模式下短按B6按键开关水泵
第六页面第一行显示二氧化碳设定,第二行显示获取到的二氧化碳值,第三行
显示设置的二氧化碳阈值,第四行显示蜂鸣器状态。
短按B3按键切换到第一页面
短按B4按键增加二氧化碳设定阈值
短按B5按键减小二氧化碳设定阈值
主要功能模块原理图:
电源时钟烧录接口:
单片机和按键输入电路:
传感器采集电路:
继电器输出电路:
系统主要功能模块代码
初始化代码:
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ InitVar(); /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ //在HAL库初始化串口1后调用 HAL_Delay(100); SetUart1RxToInput(); HAL_Delay(50); //uart1打开接收中断 HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1); //uart2打开接收中断 HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1); //uart3打开接收中断 HAL_UART_Receive_IT(&huart3, (uint8_t*)&uart3RecBuff, 1); InitOled(); InitOledDisp(); ResetDHT11(); //初始化ESP8266 ESP8266_Init(); /* USER CODE END 2 */ 系统控制代码; //系统信息更新 void SystemControl(void) { static uint8_t updateCnt = 0; updateCnt++; if(updateCnt>=SYSTEM_UPDATE_INTER) { updateCnt = 0; if(DHT11ReadData()==0) //DHT11温湿度读取OK { ; } Aliyun_SendData(); } ReadSensorVal(); }
系统显示:
//处理OLED显示内容 void SystemDisplay(void) { static uint8_t dispCnt = 0; dispCnt++; if(dispCnt>=DISP_UPDATE_INTER) { dispCnt = 0; //显示不同页面 if(dispPageIndex==DISP_PAGE_1) { OledDispPage1(); } else if(dispPageIndex==DISP_PAGE_2) { OledDispPage2(); } else if(dispPageIndex==DISP_PAGE_3) { OledDispPage3(); } else if(dispPageIndex==DISP_PAGE_4) { OledDispPage4(); } else if(dispPageIndex==DISP_PAGE_5) { OledDispPage5(); } else if(dispPageIndex==DISP_PAGE_6) { OledDispPage6(); } } }
此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。