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