目錄
一、前言
二、項(xiàng)目簡介
1、功能詳解
2、主要器件
三、原理圖設(shè)計(jì)
1、PCB圖
2、PCB板打樣焊接圖
五、程序設(shè)計(jì)
六、實(shí)驗(yàn)效果
七、資料內(nèi)容
項(xiàng)目分享
一、前言
項(xiàng)目成品圖片:
項(xiàng)目簡介
1.功能詳解
STM32基于機(jī)智云的智能溫室大棚系統(tǒng)。功能如下:
1、溫濕度采集:使用DHT11溫濕度傳感器采集環(huán)境溫濕度土2、壤濕度采集:通過土壤濕度模塊采集土壤濕度
3、光照強(qiáng)度采集:通過光敏電阻采集環(huán)境光照強(qiáng)度
5、土壤溫度采集:通過DS18B20傳感器采集土壤溫度
6、風(fēng)扇控制:可自動模式下根據(jù)環(huán)境溫度觸發(fā)或手動模式下APP開閉
7、水泵控制:可自動模式下根據(jù)土壤濕度觸發(fā)或手動模式下APP開閉
8、LED照明燈控制:可自動模式下根據(jù)環(huán)境光強(qiáng)觸發(fā)或手動模式下按鍵開閉
9、通風(fēng)口:通過步進(jìn)電機(jī)模擬通風(fēng)口
10、OLED顯示:將檢測到的環(huán)境數(shù)據(jù)顯示在oled屏幕上。
11、蜂鳴器報(bào)警:危險(xiǎn)情況下本地蜂鳴器觸發(fā)報(bào)警
12、APP功能:使用機(jī)智云APP,包括功能有控制并顯示風(fēng)扇、水泵、通風(fēng)口和補(bǔ)光燈狀態(tài),選擇工作模式為手動或自動模式,顯示當(dāng)前環(huán)境溫濕度、土壤溫濕度以及光照強(qiáng)度和二氧化碳濃度信息
主要器件
■ STM32F103C8T6最小系統(tǒng)板
■ DHT11溫濕度傳感器
■ OLED顯示屏(4針I2C協(xié)議)
■ WiFi模塊(esp8266-01s)
■ 土壤濕度傳感器
■ 二氧化碳傳感器
■ DS18B20溫度傳感器
■ 28BYJ51步進(jìn)電機(jī)
■ 5V風(fēng)扇模塊
■ 5V水泵模塊
■ 蜂鳴器
■ LED燈
原理圖設(shè)計(jì)
PCB硬件設(shè)計(jì)
1、PCB圖
2、PCB板打樣焊接圖
程序設(shè)計(jì)
int main(void){ ADCX_Init(); Timer2_Init(9,14398); Uart2_Init(9600); Uart1_Init(115200); Uart3_Init(); IWDG_Init(); //初始化看門狗 LDR_Init(); YL69_Init(); OLED_Init(); DHT11_Init(); LED_Init(); Buzzer_Init(); Relay_Init(); MOTOR_Init(); Key_Init(); Sensorthreshold.CO2Value = FLASH_R(FLASH_START_ADDR); //從指定頁的地址讀FLASH Sensorthreshold.luxValue = FLASH_R(FLASH_START_ADDR+2); //從指定頁的地址讀FLASH Sensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR+4); //從指定頁的地址讀FLASH Sensorthreshold.humiValue = FLASH_R(FLASH_START_ADDR+6); //從指定頁的地址讀FLASH Sensorthreshold.soilTempValue = FLASH_R(FLASH_START_ADDR+8); //從指定頁的地址讀FLASH Sensorthreshold.soilHumiValue = FLASH_R(FLASH_START_ADDR+10); //從指定頁的地址讀FLASH GENERAL_TIM_Init(); userInit(); //完成機(jī)智云初始賦值 gizwitsInit(); //開辟一個(gè)環(huán)形緩沖區(qū) while (1) { IWDG_ReloadCounter(); //重新加載計(jì)數(shù)值 喂狗 SensorScan(); //獲取傳感器數(shù)據(jù) switch (menu) { case display_page1: SensorDataDisplay1(); //顯示傳感器1數(shù)據(jù) OLED_Menu1(); //顯示主頁面1固定信息 if (KeyNum == KEY_2) //是否按下按鍵2 { KeyNum = 0; OLED_Clear(); //清屏 menu = display_page2; //menu = 主頁面2 } MotorOperation(); break; case display_page2: SensorDataDisplay2(); //顯示傳感器2數(shù)據(jù) OLED_Menu2(); //顯示主頁面2固定信息 if (KeyNum == KEY_2) //是否按下按鍵2 { KeyNum = 0; OLED_Clear(); //清屏 menu = display_page1; //menu = 主頁面1 } MotorOperation(); break; case settingsPage: //從主頁面跳轉(zhuǎn)至設(shè)置頁面時(shí)進(jìn)行一次清屏 if (OLED_Clear_Flag) { OLED_Clear_Flag = 0; //清除清屏標(biāo)志位 OLED_Clear(); //清屏 } ThresholdModification(SetSelection()); //調(diào)節(jié)傳感器閾值 OLED_Option(SetSelection()); //獲取按鍵次數(shù),從而判斷“>”顯示位置 //按鍵次數(shù)小于等于4時(shí),顯示設(shè)置頁面1 if (SetSelection() <= 4) { settingsThresholdDisplay1(); //顯示傳感器閾值1數(shù)據(jù) OLED_settingsPage1(); //顯示閾值設(shè)置界面1固定信息 } else //否則顯示設(shè)置頁面2 { settingsThresholdDisplay2(); //顯示傳感器閾值2數(shù)據(jù) OLED_settingsPage2(); //顯示閾值設(shè)置界面2固定信息 } if (KeyNum == KEY_2) //判斷用戶是否按下退出按鍵 { KeyNum = 0; OLED_Clear(); //清屏 menu = display_page1; //回到主頁面1 //存儲修改的傳感器閾值至flash內(nèi) FLASH_W(FLASH_START_ADDR, Sensorthreshold.CO2Value, Sensorthreshold.luxValue, Sensorthreshold.tempValue, Sensorthreshold.humiValue, Sensorthreshold.soilTempValue, Sensorthreshold.soilHumiValue); } break; default: break; } userHandle(); //更新機(jī)智云數(shù)據(jù)點(diǎn)變量存儲的值 gizwitsHandle((dataPoint_t *)¤tDataPoint); //數(shù)據(jù)上傳至機(jī)智云 }}
實(shí)驗(yàn)效果
-
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354299 -
智慧農(nóng)業(yè)
+關(guān)注
關(guān)注
4文章
777瀏覽量
19791 -
機(jī)智云
+關(guān)注
關(guān)注
2文章
573瀏覽量
26361
發(fā)布評論請先 登錄
相關(guān)推薦
評論