項(xiàng)目成品圖片:
01
—
項(xiàng)目簡介
1.功能詳解
STM32智能魚缸/水族箱/水產(chǎn)養(yǎng)殖系統(tǒng)
功能如下:
可檢測溫度,水位,以及TDS水質(zhì),同時(shí)將數(shù)據(jù)顯示到OLED屏幕上
當(dāng)溫度過高時(shí),繼電器1吸合散熱,溫度過低時(shí)繼電器2吸合加熱。異常下蜂鳴器觸發(fā)報(bào)警
當(dāng)水位過低時(shí),繼電器3工作,模擬進(jìn)水操作。當(dāng)水位過高時(shí)繼電器4工作放水。
當(dāng)TDS水質(zhì)過高時(shí),繼電器3和4相繼工作模擬換水。
可計(jì)時(shí)喂食時(shí)間,倒計(jì)時(shí)結(jié)束后,舵機(jī)轉(zhuǎn)動(dòng)模擬喂食操作。
閾值可通過按鍵調(diào)節(jié)
連接手機(jī)APP,遠(yuǎn)程查看數(shù)據(jù)信息,控制LED開關(guān),閾值調(diào)節(jié)等
2.材料清單
STM32F103C8T6單片機(jī)
OLED 屏幕
DS18B20溫度傳感器
ESP8266-01S WiFi模塊
TDS電導(dǎo)率傳感器
超聲波傳感器
繼電器
舵機(jī)
大功率LED燈模塊
有源蜂鳴器
02
—
原理圖設(shè)計(jì)
03
—
PCB硬件設(shè)計(jì)
PCB圖
04
—
程序設(shè)計(jì)
#include"stm32f10x.h"
#include"sys.h"#include"led.h"#include"bmp.h"#include"oled.h"#include"adc.h"#include"ds18b20.h"#include"timer.h"#include"delay.h"#include"usart.h"#include"usart2.h"#include"cJSON.h"#include"sr04.h"
intLED_STATUS =0;intFAN_STATUS =0;
charWIFIName[] ="ESP8266-WIFI";charWIFIpwd[] ="12345678";
inttemp_up =35,temp_down =15; // 溫度上下限inttds_up =90,tds_down =0; // 水質(zhì)上下限intlevel_up =5,level_down =60; // 水位上下限
intmaxHighLevel =5; // 換水最高水位
intfeedTime =30; // 喂食時(shí)間intcacheFeedTime =30; // 緩存喂食時(shí)間 intsendDataTime =3; // 數(shù)據(jù)發(fā)送時(shí)間intcacheSendTime =3; // 緩存數(shù)據(jù)發(fā)送時(shí)間
#defineLED PAout(2) // LED#defineBUZZ PAout(4) // 蜂鳴器
#defineJD1PAout(8) // 繼電器1-抽水#defineJD2 PAout(5)// 繼電器2-放水#defineJD3 PAout(6)// 繼電器3-加熱#defineJD4 PAout(7) // 繼電器4-降溫
#defineKEY_EDIT PBin(13) // 設(shè)置按鈕#defineKEY_NEXT PBin(14) // 切換按鈕#defineKEY_SWIT PBin(15) // 下一頁按鈕#defineKEY_ADD PAin(11) // 加一按鈕#defineKEY_DEC PBin(12) // 減一按鈕
#defineTEST PCout(13)
#defineSG90_CLOSE 175 // 舵機(jī)關(guān)閉#defineSG90_OPEN 185 // 舵機(jī)打開
// 上位機(jī)數(shù)據(jù)處理intconnectFlag =0; // 連接成功標(biāo)志位inthandleFlag =0; // 判斷上位機(jī)發(fā)送的數(shù)據(jù)需要處理哪一個(gè)intsendFlag =0; // 定時(shí)器時(shí)間到了該位置一表示發(fā)送數(shù)據(jù)intinitFlag =0; // ESP8266初始化成功標(biāo)志位intparamFlag =1; // 是否開啟參數(shù)檢查intchangeWaterFlag =0; // 換水標(biāo)志位
intfeedFlag =0; // 是否喂食intfeedEndFlag =0; // 喂食結(jié)束
unsignedchartemp =0,level =0;// 溫度,濕度
voidparamCheck(void); // 檢查參數(shù)是否超過voidhandleData(void); // 上位機(jī)數(shù)據(jù)處理voidco2Process(void); // CO2數(shù)據(jù)處理voidDisplayUI(void); // 固定頁面UI渲染voidparamEdit(void); // 閾值參數(shù)設(shè)置voideditUiDisplay(intpageIndex );// 設(shè)置頁面UI初始化voidrunAlter(intcursor,intcount);// 執(zhí)行參數(shù)修改
externchar*USARTx_RX_BUF; // 串口數(shù)據(jù)緩存externfloatTDS_value;
intmain(void){inttime;delay_init();LED_Init(); OLED_Init();Adc_Init();DS18B20_Init(); // 溫度初始化HC_SR04Config(); // 超聲波初始化 uart_init(115200); timeInit(4999,7199); // 72M 0.1ms 500ms 串口數(shù)據(jù)初始化、timeSendInit(9999,7199); // 72m 0.1ms 1s 發(fā)送數(shù)據(jù)定時(shí) timePwmInit(199,7199); // PWM-> CH3->PA2 CH4->PA3 (調(diào)脈寬)TIM_SetCompare4(TIM2,100);TIM_SetCompare4(TIM2,SG90_CLOSE);// 關(guān)閉喂食OLED_ShowChLength(38,16,47,3); // 顯示啟動(dòng)中ESP8266Init(WIFIName,WIFIpwd);OLED_Clear();while(1){DisplayUI();if( time++ >5){time =0;temp = getTemperture(); // 獲取溫度delay_ms(1000);delay_ms(1000);temp = getTemperture(); // 獲取溫度TDS_Value_Conversion(); // 獲取TDS水質(zhì)值}level = Getlength(); // 獲取水位OLED_ShowNum(45,0,temp,2,16,1);OLED_ShowNum(45,16,level,3,16,1);OLED_ShowNum(45,32,TDS_value,3,16,1);OLED_ShowNum(76,48,cacheFeedTime,3,16,1);OLED_Refresh();
// 開始喂食 if( feedFlag ){TIM_SetCompare4(TIM2,SG90_OPEN);// 等待喂食結(jié)束if( feedEndFlag ){feedFlag =0;feedEndFlag =0; feedTime = cacheFeedTime;TIM_SetCompare4(TIM2,SG90_CLOSE);}}
// 進(jìn)入設(shè)置頁面if( !KEY_EDIT ){ while( !KEY_EDIT );// 防抖paramEdit(); // 進(jìn)入?yún)?shù)設(shè)置// 刷新參數(shù)提示按鈕(每次進(jìn)入設(shè)置以后出來這個(gè)按鈕沒有,需要更新一下)if( !paramFlag )OLED_ShowChLength(105,2,62,1);elseOLED_ShowString(105,2," ",16,1);}
// 切換參數(shù)提醒設(shè)置if( !KEY_NEXT ){ while( !KEY_NEXT );paramFlag = !paramFlag; if( !paramFlag ){ // 關(guān)閉提示JD2 =0;JD3 =0;JD4 =0;JD1 =0;BUZZ =0;OLED_ShowChLength(105,2,62,1);}else{OLED_ShowString(105,2," ",16,1);} OLED_Refresh();}
// 上位機(jī)更改數(shù)據(jù)if( handleFlag )handleData();
// 3s上傳一次數(shù)據(jù)if( sendFlag &&1){ ESP8266Pub(temp,level,TDS_value);sendFlag =0; // 重置標(biāo)志位sendDataTime = cacheSendTime;// 刷新發(fā)送時(shí)間}// 檢查參數(shù)是否超出范圍(開啟了參數(shù)檢查)if( paramFlag )paramCheck();
delay_ms(100);}}
05
—
實(shí)驗(yàn)效果
-
OLED
+關(guān)注
關(guān)注
120文章
6286瀏覽量
228128 -
STM32
+關(guān)注
關(guān)注
2294文章
11032瀏覽量
365203 -
養(yǎng)殖業(yè)
+關(guān)注
關(guān)注
0文章
90瀏覽量
1919
發(fā)布評(píng)論請先 登錄
基于STM32的智能水產(chǎn)養(yǎng)殖系統(tǒng)電路+代碼+論文實(shí)例打包下載
基于單片機(jī)的智能水族箱控制系統(tǒng)設(shè)計(jì)
【云智易申請】基于stm32的智能水族箱
UVC-LED在水族箱中的應(yīng)用
基于ARM的智能水產(chǎn)養(yǎng)殖系統(tǒng)設(shè)計(jì)
DIY水族箱控制器
它憑什么號(hào)稱“世界上最先進(jìn)的智能水族箱照明系統(tǒng)”?
自制簡易的水族箱溫控器

評(píng)論