|
僅參考,文件中包括ppt,文檔和程序,有問題評論下工程文件可到本帖附件中下載)
軟件設(shè)計流程圖
51hei.png (19.47 KB, 下載次數(shù): 29)
下載附件
2022-5-24 03:55 上傳
3 系統(tǒng)硬件技術(shù)
系統(tǒng)硬件主要包括單片機(jī)主控模塊、溫度檢測模塊、舵機(jī)驅(qū)動模塊、蜂鳴器模塊、按鍵設(shè)置模塊、顯示模塊及電源模塊
51hei.png (6.74 KB, 下載次數(shù): 26)
下載附件
2022-5-24 03:56 上傳
主控模塊為單片機(jī) STC89C51最小系統(tǒng),在整個系統(tǒng)中負(fù)責(zé)連接并控制其它模塊,包括:按鍵設(shè)置模塊、電機(jī)驅(qū)動模塊、顯示模塊、語音模塊,溫度檢測模塊等模塊。
AT89C51單片機(jī)不僅擁有MCS-51系列單片機(jī)的優(yōu)點(diǎn),內(nèi)部還有8K在系統(tǒng)可編程FLASH存儲器,低功耗的電路設(shè)置和掉電模式極大降低電路功耗,還包含定時器、程序存儲器和數(shù)據(jù)存儲器等硬件,能滿足整個控制系統(tǒng)的要求,不需外接其它存儲器芯片和定時器件,方便構(gòu)成一個最小系統(tǒng)。整個系統(tǒng)結(jié)構(gòu)緊湊,抗干擾能力強(qiáng),性價比高[4] 。
單片機(jī)主控模塊。最小系統(tǒng)由單片機(jī)、時鐘電路、復(fù)位電路等組成。其中電容器C2.C3起到穩(wěn)定頻率、提高電路運(yùn)行速度、快速起振的作用。時鐘電路選用12MHz的晶振時鐘,作為單片機(jī)的時間基準(zhǔn)單元[5] [9] 。通過高電平使單片機(jī)復(fù)位,時鐘電路開始工作,當(dāng)高電平的時間超過大約2us時,可實現(xiàn)復(fù)位,使得CPU及系統(tǒng)各部件回初始狀態(tài)后立即開始工作。復(fù)位電路具備上電復(fù)位和手動復(fù)位的功能,開機(jī)加電時上電復(fù)位,由系統(tǒng)自動完成;當(dāng)程序運(yùn)行時,如遇到系統(tǒng)運(yùn)行異常情況,通過手動復(fù)位即可實現(xiàn)重新啟動[6] 。
3.2 LCD液晶顯示模塊
智能喂食系統(tǒng)通過LCD1602顯示模塊顯示定時時間、步進(jìn)電機(jī)旋轉(zhuǎn)角度、時間表、溫度。
LCD1602液晶模塊最多可以顯示32個字符,內(nèi)部有字符發(fā)生存儲器CGROM芯片,可存儲160個點(diǎn)陣字符圖形,顯示模塊通過指令編程控制讀寫的操作功能,實現(xiàn)屏幕文字及光標(biāo)的移動與顯示。
3.3 DS18B20溫度檢測模塊
DS18B20是常用的溫度傳感器,具有體積小,成本低、抗干擾能力強(qiáng)、電路連接簡單、精度高等特點(diǎn)。
DS18B20的溫度系數(shù)晶振會伴隨著溫度的變化使其振蕩頻率發(fā)生變化,產(chǎn)生的脈沖信號將通過計數(shù)器2輸入。計數(shù)器1以及溫度寄存器都被預(yù)置為-55℃基數(shù)值。計數(shù)器1把低溫度系數(shù)晶振產(chǎn)生的脈沖信號實行減法運(yùn)算,當(dāng)計數(shù)器1的預(yù)置值減至0時,溫度寄存器的值會加1,它的預(yù)置值將會被重新輸入。計數(shù)器1重新開始把低溫度系數(shù)晶振產(chǎn)生的脈沖信號實行計數(shù),如此循環(huán)直至計數(shù)器2計數(shù)為0,即停止對溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。
3.4 舵機(jī)驅(qū)動模塊
控制電路板接受來自信號線的控制信號(具體信號待會再講),控制電機(jī)轉(zhuǎn)動,電機(jī)帶動一系列齒輪組,減速后傳動至輸出舵盤。舵機(jī)的輸出軸和位置反饋電位計是相連的,舵盤轉(zhuǎn)動的同時,帶動位置反饋電位計,電位計將輸出一個電壓信號到控制電路板,進(jìn)行反饋,然后控制電路板根據(jù)所在位置決定電機(jī)的轉(zhuǎn)動方向和速度,從而達(dá)到目標(biāo)停止。
3.5 蜂鳴器模塊
蜂鳴器模塊可實現(xiàn)投食前蜂鳴提醒,提醒寵物喂食時間到,便于形成寵物及時進(jìn)餐的條件反射。
4 需求分析
4.1 發(fā)展現(xiàn)狀
寵物自動喂食器是一種非常具有實用價值的設(shè)備,它的應(yīng)用給寵物愛好者帶來了很大的便利。與市面上常見的傳統(tǒng)的一體式寵物飼料投放器不同,智能寵物投喂機(jī)改善了投放器一次性過多投放食料的缺點(diǎn),降低了寵物食料的浪費(fèi),更加滿足現(xiàn)代寵物飼養(yǎng)的需求。以步進(jìn)電機(jī)為執(zhí)行元件,其結(jié)構(gòu)簡單,價格便宜。具有安全、穩(wěn)定、可靠、簡單、實用特點(diǎn),實現(xiàn)了定時定量的投喂。
4.2 需求分析
現(xiàn)在年輕人特別是在一、二、三線城市的,工作節(jié)奏快、加班、出差、旅游成常態(tài),無法經(jīng)常在寵物身邊照看,寵物喂食器能夠解放寵物主人的雙手和解決不能長時間在處的無奈,很好地滿足了年輕寵物主照顧寵物的需求。寵物主人和寵物都需要陪伴的情況下,寵物喂食器就變得很好地實現(xiàn)了二者“即使彼此不在身邊”的強(qiáng)連接,隨時隨地滿足了愛寵人士們與“主子”互動交流的情感訴求。
近年來高顏值、用戶體驗好、智能化(自動化、物聯(lián)網(wǎng)化)的寵物智能用品明顯很受80后、90后、00后寵物主人的追捧。2020年雙十一期間,寵物智能用品銷量迎來暴漲,各大電商平臺銷售額均獲得大幅提升,整體增速超過1000%。天貓精靈發(fā)布的數(shù)據(jù)顯示,天貓精靈數(shù)據(jù)顯示,11月1日至8日,寵物智能家居產(chǎn)品銷量同比增長了58倍。
隨著寵物“擬人化”的消費(fèi)成為趨勢,寵物也開始用上屬于自已的“家電”。如今,寵物智能喂食器成為寵物智能家居的常用品。由此可見人們對寵物喂食系統(tǒng)的需求將不斷增加。
5 系統(tǒng)總體設(shè)計
5.1 總方案設(shè)計思路
1.1 本設(shè)計是以STC89C51單片機(jī)作為主控芯片,利用對舵機(jī)角度的控制實現(xiàn)喂食功能,用按鍵進(jìn)行設(shè)置喂食時間,LCD液晶顯示屏顯示當(dāng)前時間以及室內(nèi)溫度。該系統(tǒng)主要由單片機(jī)控制系統(tǒng)、舵機(jī)及驅(qū)動電路、LCD顯示器、按鍵控制和蜂鳴器控制電路組成。上電檢測后,通過按鍵設(shè)置鬧鐘時間也就是喂食時間,控制系統(tǒng)在工作中通過中斷程序不斷檢測時間,當(dāng)系統(tǒng)時間達(dá)到喂食時間時,語音芯片控制蜂鳴器發(fā)聲,吸引動物靠近,舵機(jī)同時會開始轉(zhuǎn)動,打開容器的瓶口,食物從瓶口漏出來,瓶口再次回到關(guān)閉狀態(tài)。
51hei.png (5.57 KB, 下載次數(shù): 22)
下載附件
2022-5-24 03:56 上傳
5.2 設(shè)計總體結(jié)構(gòu)
本設(shè)計主要包括STC89C51單片機(jī)構(gòu)成的主控芯片、液晶顯示電路、調(diào)節(jié)按鍵、語音播放,電機(jī)驅(qū)動等模塊組成。其結(jié)構(gòu)框架如圖 3所示。
5.2.1 主要元器件的選擇
系統(tǒng)硬件主要包括單片機(jī)主控模塊、溫度檢測模塊、電機(jī)驅(qū)動模塊、無線控制模塊、語音模塊、按鍵設(shè)置模塊、顯示模塊及電源模塊。
6 功能模塊
主控模塊:以單片機(jī)作為主控芯片,此為控制系統(tǒng)核心,用來處理采集到的數(shù)據(jù)并協(xié)調(diào)控制整個設(shè)計。
液晶顯示模塊:使用LCD1602,主要功能是顯示實時時間以及當(dāng)前溫度。
電機(jī)驅(qū)動模塊:使用舵機(jī)驅(qū)動原理拉動食物容器底蓋進(jìn)行食物投放。
按鍵模塊:實現(xiàn)對時間的調(diào)控,包括實時時間與預(yù)定時間。
時鐘模塊:使用時鐘芯片DS1302來顯示實時時間,另外通過外加電源對其進(jìn)行掉電保護(hù),以保證實時時間的準(zhǔn)確性。
蜂鳴器模塊:設(shè)定時間到,蜂鳴器工作給寵物造成條件反射。
溫度感應(yīng)模塊:使用DS18B20溫度傳感器,對室內(nèi)溫度進(jìn)行實時測量,通過液晶顯示屏顯示出來。
附錄寵物喂食系統(tǒng)代碼
篇幅原因只列舉了舵機(jī)模塊與蜂鳴器模塊相關(guān)代碼,其他代碼請參考相關(guān)文件。
蜂鳴器模塊代碼
#include "beep.h"
void beep_alarm(u16 time,u16 fre)
{
while(time--)
{
BEEP=!BEEP;
delay_10us(fre);
}
}
舵機(jī)驅(qū)動模塊代碼
#include "moto.h"
void zero(void) //45度 子程序
{
PWM=1;
delay_ms(1); //高電平 Delay(1)=1ms。因為周期為20ms,所以低電平就是19ms
PWM=0;
delay_ms(19); //低電平 Delay(19)=19ms
}
void one(void) //135度 子程序
{
PWM=1;
delay_ms(2); //Delay(2)=2ms
PWM=0;
delay_ms(18); //18ms
}
單片機(jī)源程序如下:
- #include "calendar.h"
- #include "ds1302.h"
- #include "ds18b20.h"
- #include "lcd1602.h"
- #include "key.h"
- #include "beep.h"
- #include "time.h"
- #include "moto.h"
- code u8 alarm_switch_str[]="Alarm: OFF";
- code u8 alarm_on_str[]="ON ";
- code u8 alarm_off_str[]="OFF";
- u8 i,b;
- _calendar g_calendar;
- u8 g_keyvalue=0;
- void time0() interrupt 1
- {
- static u8 cnt=0;
- static u8 oneflag=1;
- TH0=0xDC;
- TL0=0x00;
- cnt++;
-
-
- if(cnt==50)
- {
- cnt=0;
- if(g_calendar.mode==0)
- ds1302_read_time();
- if(oneflag==1)
- {
- oneflag=0;
- g_calendar.alarm_time[0]=g_calendar.sec;
- g_calendar.alarm_time[1]=g_calendar.min;
- g_calendar.alarm_time[2]=g_calendar.hour;//記錄初始鬧鐘時間
- g_calendar.alarm_time0[0]=g_calendar.sec;
- g_calendar.alarm_time0[1]=g_calendar.min;
- g_calendar.alarm_time0[2]=g_calendar.hour;
- }
- g_calendar.temperture=ds18b20_read_temperture();
- }
- }
- void alarm_compareproc(void)
- {
- if(g_calendar.alarm&&g_calendar.setok)
- {
- if(g_calendar.alarm_time[2]==g_calendar.hour)
- {
- if(g_calendar.alarm_time[1]==g_calendar.min)//對比鬧鐘設(shè)置時間和當(dāng)前時間,相同則鬧鈴 提醒寵物應(yīng)該吃飯了
- {
-
- beep_alarm(100,10);
- if(g_calendar.alarm_time[0]==g_calendar.sec)//投食開啟
- {
- one();
- }
- }
-
- }
- }
-
- }
- void alarm_compareproc0(void)
- {
- if(g_calendar.alarm&&g_calendar.setok)
- {
- if(g_calendar.alarm_time0[2]==g_calendar.hour)
- {
- if(g_calendar.alarm_time0[1]==g_calendar.min)
- {
- if(g_calendar.alarm_time0[0]==g_calendar.sec)
- {
- zero();
- }
- }
-
- }
- }
-
- }
- void calendar_test(void)
- {
- u8 key_temp=0;
- lcd1602_init();
- ds1302_init();
- ds18b20_init();
- time0_init();//定時器10ms
-
- while(1)
- {
-
- key_temp=key_scan(0);
- if(key_temp==KEY1_PRESS)//模式設(shè)置
- {
-
- g_calendar.mode++;
- if(g_calendar.mode==4)
- g_calendar.mode=1;
- g_calendar.setok=0;
- g_calendar.time_choice=0;
- if(g_calendar.mode==2)
- {
- lcd1602_clear();
- lcd1602_show_string(0,0,alarm_switch_str);
- }
- if(g_calendar.mode==3)
- {
- lcd1602_clear();
- lcd1602_show_string(0,0,alarm_switch_str);
- }
- beep_alarm(100,10);
- }
- else if(key_temp==KEY2_PRESS)//進(jìn)入設(shè)置模式時,對應(yīng)位選擇設(shè)置
- {
- g_calendar.time_choice++;
- if(g_calendar.time_choice==7)
- g_calendar.time_choice=0;
- beep_alarm(100,10);
-
- }
- else if(key_temp==KEY3_PRESS)//進(jìn)入設(shè)置模式時,進(jìn)行數(shù)據(jù)加操作
- {
- g_calendar.add=1;
- beep_alarm(100,10);
- }
- else if(key_temp==KEY4_PRESS)//設(shè)置完成,恢復(fù)正常顯示模式
- {
- g_calendar.setok=1;
- g_calendar.time_choice=0;
- g_calendar.mode=0;
- calendar_save_set_time();
- beep_alarm(100,10);
- }
- if(g_calendar.mode==1)//模擬光標(biāo)閃爍
- {
- if(g_calendar.time_choice<3)
- lcd1602_show_string(7-g_calendar.time_choice*3,1," ");
- else if(g_calendar.time_choice>=3&&g_calendar.time_choice<4)
- lcd1602_show_string(14,0," ");
- else if(g_calendar.time_choice>=4&&g_calendar.time_choice<7)
- lcd1602_show_string(21-g_calendar.time_choice*3,0," ");
- }
- else if(g_calendar.mode==2)//模擬光標(biāo)閃爍
- {
- if(g_calendar.time_choice<3)
- lcd1602_show_string(7-g_calendar.time_choice*3,1," ");
- else if(g_calendar.time_choice==3)
- lcd1602_show_string(9,0," ");
- else if(g_calendar.time_choice==4)
- lcd1602_show_string(7,1," ");
- }
- else if(g_calendar.mode==3)//模擬光標(biāo)閃爍
- {
- if(g_calendar.time_choice<3)
- lcd1602_show_string(7-g_calendar.time_choice*3,1," ");
- else if(g_calendar.time_choice==3)
- lcd1602_show_string(9,0," ");
- else if(g_calendar.time_choice==4)
- lcd1602_show_string(7,1," ");
- }
-
- calendar_set_time();
- calendar_set_alarm();
- calendar_show();
- alarm_compareproc();
- alarm_compareproc0();
- }
- }
復(fù)制代碼 本人初學(xué),僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
Keil代碼下載(僅供參考):
源代碼.7z
(886.11 KB, 下載次數(shù): 52)
2022-5-24 04:05 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|