1 簡(jiǎn)介
Hi,大家好,今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目, 大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì)
基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
?? 項(xiàng)目分享與指導(dǎo):https://gitee.com/sinonfin/sharing
1 課題背景意義
近年以來,隨著我國綜合實(shí)力飛速飆升,人們對(duì)物質(zhì)和精神生活質(zhì)量的要求也不斷提升,各式各樣的智能家居不斷問世并得到消費(fèi)者的喜愛。因而各樣的智能魚缸作為裝飾品和智能家居的合體應(yīng)景入駐家庭、辦公室、商場(chǎng)等場(chǎng)所。它不僅可以作為裝飾品給我們帶來視覺享受,緩解精神疲勞,而且將中國傳統(tǒng)水文化引入日常生活,極大的豐富了人們的生活。但目前市面上各式魚缸魚龍混雜,格式各異,大多為非智能,需要手動(dòng)操作實(shí)現(xiàn)溫控,換水,充氧,投食等。這將造成諸多不便,浪費(fèi)使用者的大量時(shí)間精力,且影響魚缸的美觀性。但現(xiàn)代社會(huì)生活節(jié)奏較快,人們沒有足夠的時(shí)間動(dòng)手照顧魚缸,導(dǎo)致魚缸生物成活率低。因而,現(xiàn)階段智能魚缸具有一定的市場(chǎng)需求。
本課題設(shè)計(jì)的目的為實(shí)現(xiàn)魚缸溫控、換水、充氧、投食的一體化和智能化。 該設(shè)計(jì)具有科研和實(shí)用兩重價(jià)值。
2 課題研究方法
本課題設(shè)計(jì)主要是利用單片機(jī)為主控芯片,結(jié)合嵌入式技術(shù)、傳感器技術(shù)、C語言編程等技術(shù)設(shè)計(jì)出滿足功能的智能魚缸系統(tǒng)。總體上,我們首先要根據(jù)智能魚缸的使用場(chǎng)合和工作環(huán)境明確我們所設(shè)計(jì)系統(tǒng)所需的總體功能。其次,我們構(gòu)思出系統(tǒng)的總體框架,繪出硬件和軟件流程框圖,然后根據(jù)流程圖著手設(shè)計(jì)。硬件方面考慮到市場(chǎng)現(xiàn)有的芯片、元器件種類繁多,我們需要斟酌選用滿足系統(tǒng)功能且穩(wěn)定實(shí)惠的元器件。系統(tǒng)軟件編程我們采用模塊化程序設(shè)計(jì),先根據(jù)系統(tǒng)功能要求構(gòu)思出出程序框圖,再利用C語言對(duì)各個(gè)模塊進(jìn)行編程設(shè)計(jì)。最后利用KeiluVision5對(duì)源程序進(jìn)行調(diào)試、查錯(cuò)和修改,最后導(dǎo)入硬件設(shè)備,總體運(yùn)行系統(tǒng),確保系統(tǒng)滿足功能要求且能穩(wěn)定的運(yùn)行。
3 智能魚缸系統(tǒng)功能要求
該智能魚缸系統(tǒng)的設(shè)計(jì)是以日常生活中魚缸的養(yǎng)護(hù)為背景, 根據(jù)當(dāng)前市場(chǎng)上的需求, 智能魚缸系統(tǒng)需要自動(dòng)實(shí)現(xiàn)自動(dòng)溫控、 換水、 充氧、 投食等功能。
系統(tǒng)需要穩(wěn)定運(yùn)行盡可能避免發(fā)生故障, 且需要盡可能的降低成本, 具有實(shí)用價(jià)值。系統(tǒng)需要對(duì)魚缸內(nèi)部環(huán)境進(jìn)行檢測(cè), 并保持環(huán)境參數(shù)保持在適宜魚類生存的范圍內(nèi)。 首先是溫度, 根據(jù)了解, 魚類的適宜的生存環(huán)境一般都在 22~28℃, 當(dāng)溫度傳感器檢測(cè)到水溫低于 22℃時(shí), 系統(tǒng)啟動(dòng)加熱器加熱, 當(dāng)溫度達(dá)到 28℃時(shí)系統(tǒng)停止加熱, 使溫度在適宜魚類生存的范圍內(nèi)波動(dòng)。
其次是充氧, 目前生活中人們無法對(duì)充氧做到很好的把控, 長(zhǎng)時(shí)間不充氧容易導(dǎo)致魚類缺氧死亡, 而一直開啟氧泵無疑是對(duì)資源的浪費(fèi), 因而, 利用定時(shí)控制氧泵開關(guān),保證水中的一定的溶氧量將一定程度上解決上述問題。
魚類的投食頻率一般是 12 小時(shí)或者 24 小時(shí), 最佳時(shí)間一般在中午這個(gè)時(shí)間段, 因而可以利用系統(tǒng)的時(shí)鐘模塊定時(shí)控制投食器。
水循環(huán)主要是為了除去水中的雜質(zhì), 改良水質(zhì), 可以利用利用系統(tǒng)定時(shí)模塊定時(shí)開關(guān)水泵, 將水通過活性炭海綿等過濾完成凈化, 為魚類提供適宜生存的環(huán)境。
4 系統(tǒng)結(jié)構(gòu)
魚類生存的環(huán)境要素包含很多, 如光照、 水的溫度、 營養(yǎng)物、雜質(zhì)含量、 溶氧量、 PH 等等。 在此設(shè)計(jì)中, 我們主要考慮到魚類生存的四大環(huán)境要素:水溫、 水溶氧量、 水雜質(zhì)含量、 營養(yǎng)物。 而各個(gè)要素對(duì)應(yīng)的系統(tǒng)處理功能如下表所示
學(xué)長(zhǎng)設(shè)計(jì)的智能魚缸控制系統(tǒng)主要實(shí)現(xiàn)自動(dòng)加熱、 自動(dòng)水循環(huán)、 自動(dòng)充氧、 自動(dòng)投食四個(gè)功能, 選用 STC89C52 單片機(jī)作為系統(tǒng)核心芯片, 控制溫控模塊、 時(shí)鐘模塊和其他一些模塊。 溫度控制模塊中 DS18B20 溫度傳感器負(fù)責(zé)采集溫度參數(shù)傳送至主控芯片,利用繼電器控制加熱器以實(shí)現(xiàn)恒溫。 時(shí)鐘模塊通過繼電器控制氧泵、 水泵的開關(guān), 實(shí)現(xiàn)定時(shí)充氧、 定時(shí)水循環(huán)。 而自動(dòng)投食功能利用時(shí)鐘模塊控制步進(jìn)電機(jī)來模擬。 系統(tǒng)結(jié)構(gòu)框圖如下圖所示。
5 硬件模塊
5.1 單片機(jī)最小系統(tǒng)
本設(shè)計(jì)采用的是STC89C52單片機(jī)芯片,…單片機(jī)最小系統(tǒng)電路如圖所示。
(1)復(fù)位電路:復(fù)位電路的作用就是在程…。
(2)晶振電路:晶振電路為單片…
5.2 溫度檢測(cè)模塊
此溫度模塊為DS18B20,主要組成部分由一個(gè)…。
該芯片通過引腳2同單片機(jī)P1.7口進(jìn)行對(duì)接?!瓬囟葯z測(cè)模塊如圖3-3所示。
5.3 繼電器模塊
在排水或者進(jìn)行投食時(shí)均要啟用電機(jī)裝置,…繼電器模塊如圖
繼電器一共有6個(gè)引腳,…引腳功能如下
5.4 顯示模塊
電路中采用了LCD1602顯示器?!璍CD1602顯示器如圖所示。
6 實(shí)現(xiàn)效果
將各個(gè)硬件部分組裝后得到最終實(shí)物圖
其中, 1 是 USB 電源接口, 為系統(tǒng)提供 5V 的電源。 2 是按鈕控制開關(guān), 是系統(tǒng)的主開關(guān)。 3 是 LCD1602 顯示器, 用于顯示相關(guān)數(shù)據(jù)。 4 是 DS1302 時(shí)鐘芯片。 5 是 24C02存儲(chǔ)芯片。 6 是四個(gè)控制按鍵, 用于設(shè)置系統(tǒng)參數(shù)。 7 是 DS18B20 溫度傳感器, 與用于采集實(shí)時(shí)溫度值。 8、 9、 10 依次是控制加熱、 充氧、 水循環(huán)的三個(gè)繼電器。 11 為用于模擬投食的步進(jìn)電機(jī)。 12 為步進(jìn)電機(jī)電源輸入接口。
自動(dòng)溫控
學(xué)長(zhǎng)在演示中用手握住溫度傳感器來模擬加熱器工作水溫上升, 溫度上升超過上限值 31℃時(shí), 繼電器 1 燈滅, 表示模擬加熱器斷電, 加熱結(jié)束, 如圖所示。 加熱結(jié)束后溫度逐漸降低, 直至溫度再次低于下限溫度值時(shí), 繼電器再次通電, 啟動(dòng)加熱, 以維持魚缸溫度在一定范圍內(nèi)波動(dòng)。
自動(dòng)投食
根據(jù)系統(tǒng)的需求, 投食頻率大致為 24 小時(shí)一次, 通過定時(shí)開啟投食器來實(shí)現(xiàn)。 但為了方便演示, 我們通過按鍵將 Feed Time 設(shè)置為系統(tǒng)時(shí)間的下一分鐘, 當(dāng)系統(tǒng)時(shí)間達(dá)到設(shè)定時(shí)間, 步進(jìn)電機(jī)轉(zhuǎn)動(dòng), 用于模擬投食。
自動(dòng)充氧
自動(dòng)充氧與投食相似, 我們可以設(shè)置固定的時(shí)間, 為了演示方便, 我們也可以設(shè)置在系統(tǒng)時(shí)間的下一分鐘, 當(dāng)系統(tǒng)時(shí)間達(dá)到設(shè)定時(shí)間后, 繼電器 2 亮燈開啟, 進(jìn)行模擬充氧。
文章來源:http://www.zghlxwxcb.cn/news/detail-759169.html
7 關(guān)鍵代碼
#include"reg52.h"
#include "delay.h"
#include "typedef.h"
#include "1602.h"
#include "key.h"
#include "set.h"
#include "18b20.h"
#include "24c02.h"
#include "ds1302.h"
uchar PageNum=0; //0顯示溫濕度 1顯示溫度和報(bào)警數(shù)值2顯示濕度和報(bào)警數(shù)值
float Temp_Data=0;
uchar AlarmTemp[]={32,20}; //高低溫度
unsigned char FeedTime[3]={0}; //喂食時(shí)間
unsigned char O2Time[3]={0}; //充氧氣時(shí)間
unsigned char LoopTime[3]={0}; //水循環(huán)時(shí)間
sbit RELAY1 = P2^2; //加水繼電器
sbit RELAY2 = P2^1; //加熱繼電器
sbit RELAY3 = P2^0; //放水繼電器
sbit ENA=P3^2;
sbit ENB=P3^3;
void TimerInit(void);
void GetTemp(void);
void PageInit(void);
void PageDisplay(void);
void DataLoad(void); //數(shù)據(jù)加載
void TempInit(void); //
void HeatControl(void); //加熱自動(dòng)控制
void Timer1_Init(void); //50毫秒@11.0592MHz
void IncO2Control(void);
void FeedControl(void);
void LoopControl(void);
unsigned char FeedSecond=0;
unsigned char O2Second=0;
unsigned int LoopSecond=0;
unsigned char CountTime[3]={0}; //水循環(huán)時(shí)間計(jì)時(shí)
void main(void)
{
Delay_1ms(100);
LCD_Init();
TimerInit();
PageInit();
DataLoad();
TempInit();
Timer1_Init();
while(1)
{
GetTemp();
DS1302_Read();
FeedControl();
HeatControl();
IncO2Control();
PageDisplay();
LoopControl();
Delay_1ms(50);
}
}
void Timer0_Serve(void) interrupt 1
{
TH0 = (65535-20000)/256; //20MS定時(shí)
TL0 = (65535-20000)%256;
LCD_Refresh(); //LCD刷新
KEY_Scan();
}
void Timer1_Serve(void) interrupt 3 //50ms定時(shí)
{
static unsigned char T50MS=0;
TL1 = 0x00; //設(shè)置定時(shí)初值
TH1 = 0x4C; //設(shè)置定時(shí)初值
T50MS++;
if(T50MS>=20)
{
T50MS=0;
CountTime[2]++;
if(CountTime[2]>=60)
{
CountTime[2]=0;
CountTime[1]++;
if(CountTime[1]>=60)
{
CountTime[1]=0;
CountTime[0]++;
if(CountTime[0]>23)
CountTime[0]=0;
}
}
if(FeedSecond>0)
FeedSecond--;
if(O2Second>0)
O2Second--;
if(LoopSecond>0)
{
LoopSecond--;
}
}
}
void HeatControl(void) //加熱控制
{
/*------------------低于下限開始加熱---------------------*/
if(Temp_Data<AlarmTemp[1])
{
RELAY1=0;
}
/*------------------高于上限停止加熱---------------------*/
if(Temp_Data>AlarmTemp[0])
{
RELAY1=1;
}
}
void TimerInit(void)
{
TMOD &= 0xF0;
TMOD |= 0X01; //T1工作在定時(shí)模式, T0 工作在8位自動(dòng)重載計(jì)數(shù)
TL0 = (65535-20000) % 256; //T0工作在定時(shí)模式 50ms定時(shí)
TH0 = (65535-20000) / 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
void PageDisplay(void)
{
/*---------------------------------------------------------*/
if(KeyVal=='E')
{
KeyVal=0;
PageNum++;
if(PageNum>4)
{
PageNum=0;
}
PageInit();
}
/*-------------------------------------------------------*/
switch(PageNum)
{
/*-------------------------------------------------------*/
case 0: //顯示和設(shè)置實(shí)時(shí)時(shí)間
{
LCD_DisplayDate(0,Date);
LCD_DisplayTime(16,Time);
if(KeyVal=='S')
{
KeyVal = 0;
SetRTC();
}
}break;
/*-------------------------------------------------------*/
case 1: //顯示實(shí)時(shí)溫度和上下限值
{
TempDisplay(5,Temp_Data);
DisplayU8(18,AlarmTemp[0]); //
DisplayU8(26,AlarmTemp[1]); //
if(KeyVal=='S')
{
KeyVal=0;
SetTempHigLow(AlarmTemp);
WrToROM(AlarmTemp,5,2); //溫度存儲(chǔ)地址0
}
}break;
/*-------------------------------------------------------*/
case 2:
{
LCD_DisplayTime(16,FeedTime);
if(KeyVal=='S')
{
KeyVal=0;
SetClockTime(FeedTime);
WrToROM(FeedTime,20,3);
}
}break;
/*-------------------------------------------------------*/
case 3:
{
LCD_DisplayTime(16,O2Time);
if(KeyVal=='S')
{
KeyVal=0;
SetClockTime(O2Time);
WrToROM(O2Time,25,3);
}
}break;
/*-------------------------------------------------------*/
case 4:
{
LCD_DisplayTime(16,LoopTime);
if(KeyVal=='S')
{
KeyVal=0;
SetClockTime(LoopTime);
WrToROM(LoopTime,30,3);
}
}break;
default: { PageNum=0; PageInit(); }break;
}
/*-------------------------------------------------------*/
}
void IncO2Control(void)
{
if(1==CompareClock(O2Time,Time))
{
O2Second=60;
}
if(O2Second>0)
RELAY2=0;
else
RELAY2=1;
}
void FeedControl(void)
{
if(1==CompareClock(FeedTime,Time))
{
FeedSecond=10;
}
if(FeedSecond>0)
{
ENA=0;
ENB=1;
}
else
{
ENA=1;
ENB=1;
}
}
void LoopControl(void)
{
if(1==CompareClock(LoopTime,CountTime))
{
CountTime[0]=CountTime[1]=CountTime[2]=0;
LoopSecond=60;
}
if(LoopSecond>0)
{
RELAY3=0;
}
else
{
RELAY3=1;
}
}
8 最后
?? 項(xiàng)目分享與指導(dǎo):https://gitee.com/sinonfin/sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-759169.html
到了這里,關(guān)于【畢業(yè)設(shè)計(jì)】基于單片機(jī)的智能魚缸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) - 嵌入式 物聯(lián)網(wǎng) stm32 51單片機(jī) 智能魚缸的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!