需要源碼及原理圖文件請(qǐng)私信?。。?!
1、引言
人們對(duì)智能化的生活越來(lái)越向往,隨著時(shí)代的快速發(fā)展單片機(jī)在我們?nèi)粘I钪袘?yīng)用的也越來(lái)越廣泛。單片機(jī)完成了由模擬電路和數(shù)字電路的傳統(tǒng)設(shè)計(jì)模式過(guò)渡到以軟件設(shè)計(jì)為主體的微控制技術(shù)時(shí)代。使得單片機(jī)在各種各樣的生活場(chǎng)景中得到了廣泛的應(yīng)用。所以催生了我利用單片機(jī),再結(jié)合移動(dòng)通信做出這款基于單片機(jī)的監(jiān)控電子?jì)雰捍蚕到y(tǒng)的想法。
該嬰兒床設(shè)計(jì)針對(duì)現(xiàn)階段獨(dú)生子女父母對(duì)保姆照顧嬰兒不周的擔(dān)憂,利用單片機(jī)的控制技術(shù),并結(jié)合wt588d語(yǔ)音播報(bào)和搖籃設(shè)計(jì)出具有監(jiān)控功能的電子?jì)雰捍蚕到y(tǒng)。當(dāng)出現(xiàn)父母擔(dān)憂的幾種情況時(shí),該系統(tǒng)在一定的時(shí)間自動(dòng)提醒監(jiān)護(hù)人,并且會(huì)實(shí)時(shí)反饋信息,從而讓監(jiān)護(hù)人實(shí)時(shí)了解孩子的情況,能夠安心工作。該嬰兒床系統(tǒng)具有價(jià)錢(qián)便宜、功能實(shí)用、工作穩(wěn)定可靠等優(yōu)點(diǎn)。
我設(shè)計(jì)的這款監(jiān)控嬰兒床,外觀上尚需潤(rùn)色不少,比如步進(jìn)電機(jī)實(shí)現(xiàn)搖床功能要怎么具體的實(shí)現(xiàn),此系統(tǒng)中只用步進(jìn)電機(jī)來(lái)模擬;還有具體的嬰兒床模型沒(méi)有做出來(lái);濕度傳感器放置在哪里效果最佳,并能實(shí)現(xiàn)所要求的功能。
2、功能設(shè)計(jì)
- 每次嬰兒在號(hào)哭時(shí)通過(guò)聲音控制電路控制電機(jī)自動(dòng)晃動(dòng),并且語(yǔ)音模塊會(huì)自動(dòng)播報(bào)小星星輕音樂(lè)安撫嬰兒的情緒;
- 聲控模塊可以實(shí)時(shí)采集當(dāng)前嬰兒是否哭鬧;
- 每次孩子撒尿?qū)е卤蛔訚窳藭r(shí),通過(guò)濕度感應(yīng)器的信號(hào)啟動(dòng)自動(dòng)報(bào)警,語(yǔ)音播報(bào)是否尿床,led指示燈亮;
- 步進(jìn)電機(jī)通過(guò)ULN2003進(jìn)行驅(qū)動(dòng),當(dāng)需要安撫嬰兒時(shí),控制電機(jī)左右旋轉(zhuǎn)來(lái)促使嬰兒安靜下來(lái)。
- 按鍵用來(lái)進(jìn)行設(shè)置3種不同的模式,方便對(duì)不同的情況及時(shí)做出處理
系統(tǒng)結(jié)構(gòu)框圖
3、系統(tǒng)硬件設(shè)計(jì)
3.1聲音電路的設(shè)計(jì)
聲控電路算是本系統(tǒng)中比較重要的一個(gè)子電路,該電路由主要由直插電容式駐極體話筒MIC1、雙電壓比較器集成電路LM393、發(fā)光二極管D2、1uf電容C1、三極管Q1、電阻R4-R10組成。LM393是常用的電壓比較器,每個(gè)LM393芯片中共有兩個(gè)電壓比較器[7]。發(fā)光二極管的亮度會(huì)隨著直插電容式駐極體話筒采集的聲音的大小產(chǎn)生明亮變化,聲音越大,發(fā)光二極管越亮。通過(guò)聲控電路與步進(jìn)電機(jī)驅(qū)動(dòng)電路連接起來(lái),即能實(shí)現(xiàn):
3.2語(yǔ)音播報(bào)電路的設(shè)計(jì)
本次設(shè)計(jì)的報(bào)警模塊采用wt588d語(yǔ)音芯片進(jìn)行語(yǔ)音播報(bào)和報(bào)警提示。當(dāng)超聲波檢測(cè)到距離后或者是低于安全距離STC89C52單片機(jī)控制語(yǔ)音芯片來(lái)播報(bào)當(dāng)前的內(nèi)容。
下圖為語(yǔ)言芯片電路引腳圖,揚(yáng)聲器就是喇叭用來(lái)進(jìn)行語(yǔ)音播報(bào),p02是復(fù)位引腳也可以不接,只有P03口是數(shù)據(jù)引腳,Wt588d語(yǔ)音芯片他是通過(guò)外部的minu下載器下載相應(yīng)的語(yǔ)音文件,比如播報(bào)歡迎光臨,那么我們就需要通過(guò)minu下載器編輯這段語(yǔ)音歡迎光臨。然后生成一個(gè)地址,當(dāng)單片機(jī)需要播報(bào)這端語(yǔ)音的時(shí)候,就會(huì)發(fā)送指令給wt588d,進(jìn)行語(yǔ)音播報(bào)。
點(diǎn)擊“操作”→“地址設(shè)置”,能設(shè)置各個(gè)按鍵(I/O口)直接觸發(fā)的地址。
3.3獨(dú)立按鍵電路的設(shè)計(jì)
系統(tǒng)中一共使用了三個(gè)獨(dú)立按鍵:K1、K2和K3。本次設(shè)計(jì)按鍵主要是用來(lái)進(jìn)行功能設(shè)置。當(dāng)我們按下K1按鍵時(shí),會(huì)進(jìn)入到模式1,按下K2時(shí),會(huì)進(jìn)入模式二。K3進(jìn)行模式三。單片機(jī)的按鍵電路其實(shí)就是一個(gè)對(duì)高低電平的檢測(cè)。我們當(dāng)按鍵被按下時(shí),單片機(jī)的IO口會(huì)檢測(cè)為低電平。單片機(jī)就會(huì)來(lái)根據(jù)電平特性判斷程序應(yīng)該要執(zhí)行的操作。但是在寫(xiě)按鍵函數(shù)的時(shí)候有幾點(diǎn)是需要我們注意的。當(dāng)按鍵被按下時(shí)會(huì)產(chǎn)生抖動(dòng),所以要寫(xiě)一個(gè)去抖的函數(shù)。還有就是要有短暫的延遲。按鍵和電路連接引腳:
3.4模擬搖床(步進(jìn)電機(jī)驅(qū)動(dòng)電路)的設(shè)計(jì)
本系統(tǒng)采用步進(jìn)電機(jī)驅(qū)動(dòng)電路來(lái)模擬搖床系統(tǒng),由聲控電路來(lái)觸發(fā)。如圖3-5步進(jìn)電機(jī)28BYJ48型四相八拍電機(jī),電壓為DC5V。當(dāng)對(duì)步進(jìn)電機(jī)施加一系列連續(xù)不斷的控制脈沖時(shí),它可以連續(xù)不斷地轉(zhuǎn)動(dòng)。因?yàn)閱纹瑱C(jī)的I/O口電流太小,無(wú)法驅(qū)動(dòng)步進(jìn)電機(jī)工作,因而要連接一個(gè)ULN2003實(shí)現(xiàn)電流的放大作用[8]。ULN2003的1B-4B端口分別連接單片機(jī)的P20-P23,端口1C-4C分別接到相對(duì)應(yīng)的電機(jī)接口B、C、D、V。
3.5液晶顯示電路設(shè)計(jì)
我選擇了LCD1602液晶顯示器。它是一款工業(yè)字符型液晶,可以顯示兩行數(shù)據(jù),每行可以顯示十六個(gè)符號(hào)、字母或者數(shù)字,剛好可以滿足設(shè)計(jì)的需要。它體積小巧,功耗較低,顯示效果良好,是一款非常實(shí)用的液晶顯示設(shè)備。
LCD1602液晶顯示在執(zhí)行程序指令之前要進(jìn)行模塊標(biāo)志位的忙信號(hào),只有當(dāng)它的忙標(biāo)志位為低電平時(shí)才表示可以執(zhí)行指令。
3.6尿液檢測(cè)電路設(shè)計(jì)
檢測(cè)嬰兒是否尿床我們主要是通過(guò)水位傳感器進(jìn)行采集然后通過(guò)LM393比較器進(jìn)行判斷主要特點(diǎn)如下:
(1)工作電源電壓范圍寬,單電源、雙電源均可工作,單電源:2~36V,雙電源:±1~±18V;
(2)消耗電流小,Icc=0.8mA;
(3)輸入失調(diào)電壓小,VIO=±2mV;
(4)共模輸入電壓范圍寬,Vic=0~Vcc-1.5V;
(5)輸出與TTL,DTL,MOS,CMOS 等兼容;
(6)輸出可以用開(kāi)路集電極連接“或”門(mén);
4、系統(tǒng)軟件設(shè)計(jì)
4.1 系統(tǒng)主流程圖
4.2按鍵程序流程圖設(shè)計(jì)
按鍵電路有四個(gè)引腳。其中兩兩相同。我們?cè)谶B接電路的時(shí)候只需要連接2個(gè)引腳就可以了。連接的方式就是上圖所示。工作遠(yuǎn)離其實(shí)就是一個(gè)對(duì)信號(hào)的高低電平檢測(cè)。在我們按鍵被按下時(shí),單片機(jī)引腳的IO口就會(huì)檢測(cè)為低電平。這些IO口電平特性的改變就會(huì)程執(zhí)行相應(yīng)的功能操作。判斷按鍵是否按下if(K10){while(K10)去抖;mode++;模式切換 if(mode3)數(shù)字減 mode=0模式切換; else if(K20){delay_key()延遲;然后while(K20);是否按下模式為加if(mode1) {Max++;到最大 if(Max》=3){Max=1;}。4個(gè)按鍵分別表示加、減、確定和手動(dòng)放水功能。在不同頁(yè)面表示不同的功能。分別用3個(gè)函數(shù)執(zhí)行不同的操作,注意進(jìn)行延時(shí)操作,防止誤差。
4.3步進(jìn)電機(jī)流程圖
控制電動(dòng)機(jī)正反轉(zhuǎn)為本次設(shè)計(jì)自動(dòng)翻蓋的部分。系統(tǒng)開(kāi)始工作后,判斷電機(jī)是否需要正轉(zhuǎn),若需要就依次給AB、BC、CD、DA通電實(shí)現(xiàn)正轉(zhuǎn),正轉(zhuǎn)結(jié)束后延時(shí)3m電機(jī)開(kāi)始反轉(zhuǎn),即依次給AB、AD、CD、CB充電。
4.4液晶屏幕流程圖設(shè)計(jì)
LCD 1602有16個(gè)引腳,其中RS、RW的值控制單片機(jī)對(duì)它的讀寫(xiě):
LCD1602液晶顯示在執(zhí)行程序指令之前要進(jìn)行模塊標(biāo)志位的忙信號(hào),只有當(dāng)它的忙標(biāo)志位為低電平時(shí)才表示可以執(zhí)行指令。
LCD1602要顯示字符時(shí),就要獲得該字符的現(xiàn)實(shí)的RAM地址。它內(nèi)部的控制寄存器有11條控制指令,包括清屏,光標(biāo)移位等指令。
實(shí)物圖及PCB
部分源碼
#include <reg52.h> //調(diào)用單片機(jī)頭文件
#include <intrins.h>
#include "lcd1602.h"
#include "StepMotor.h"
#define uchar unsigned char //無(wú)符號(hào)字符型 宏定義 變量范圍0~255
#define uint unsigned int //無(wú)符號(hào)整型 宏定義 變量范圍0~65535
#include "WT588D.h"
//按鍵引腳定義
sbit KEY1 = P3^5;
sbit KEY2 = P3^6;
sbit KEY3 = P3^7;
sbit ShiDu = P1^0;//濕度傳感器
sbit LED = P1^1;
sbit Voice = P1^2;//聲音傳感器
bit openFlag = 0;//電機(jī)開(kāi)啟標(biāo)志
bit Mode = 0;//0是自動(dòng)模式,1是手動(dòng)模式
uint DJ_TIME = 0;//電機(jī)開(kāi)啟時(shí)間
/*********************定時(shí)器1初始化******************/
void time_init()
{
TMOD |= 0X10;
TH1=0x4c;//50ms
TL1=0x00;
ET1 = 1;
TR1 = 1;//開(kāi)啟定時(shí)
EA = 1; //開(kāi)總中斷
}
void keyscan()
{
if(KEY1 == 0)//切換鍵按下
{
delay_ms(10);
if(KEY1 == 0)
{
while(!KEY1);//等待按鍵松開(kāi)
Mode = !Mode;
if(Mode==0)lcd_write_str(0, 1, "MODE: ZIDONG ");
else lcd_write_str(0, 1, "MODE: SHOUDONG ");
openFlag = 0;
}
}
if(Mode==1)//手動(dòng)模式
{
if(KEY2 == 0)//手動(dòng)開(kāi)關(guān)鍵按下
{
delay_ms(10);
if(KEY2 == 0)
{
while(!KEY2);
openFlag = 1;
}
}
if(KEY3 == 0)//手動(dòng)開(kāi)關(guān)鍵按下
{
delay_ms(10);
if(KEY3 == 0)
{
while(!KEY3);
openFlag = 0;
}
}
}
}
void motoRotate()//電機(jī)處理
{
static uint djcount=0;
static bit flag = 0;
if(flag == 0)
{
djcount++;
if(djcount < 30)
{
MotorCW();//正轉(zhuǎn)
}
else
{
if(djcount < 130)
{
MotorStop();//電機(jī)停止
}
else
{
flag = 1;
djcount = 130;
}
}
}
else
{
djcount--;
if(djcount > 100)
{
MotorCCW();//電機(jī)反轉(zhuǎn)
}
else
{
if(djcount<=0){flag = 0;djcount=0;}
MotorStop();//電機(jī)停止
}
}
}
void main()
{
uint sy_count1 = 0;
uint sy_count2 = 0;
uint yuyin = 0;
bit flag = 0;
time_init();//定時(shí)器初始化
lcd_init();//1602初始化
lcd_write_str(0, 0, "STATE: CLOSE ");
lcd_write_str(0, 1, "MODE: ZIDONG ");
while(1)
{
keyscan();
if(Mode == 0)//在自動(dòng)模式下
{
if(Voice == 0)//檢測(cè)到有聲音
{
if(sy_count1++ > 10)//檢測(cè)哭聲是否延續(xù)
{
DJ_TIME = 60;//電機(jī)開(kāi)啟時(shí)間1分鐘
openFlag = 1;//電機(jī)開(kāi)啟
sy_count1 = 0;
if(ShiDu==0)Line_1A(1);//播報(bào)歌曲
}
}
else
{
if(sy_count2++ > 200)
{
sy_count2 = 0;
sy_count1 = 0;
}
}
}
if(ShiDu==1)//檢測(cè)到尿不濕濕了
{
LED = 0;
if(flag == 0)//只播報(bào)一次
{
flag = 1;
Line_1A(0);//播報(bào)
yuyin = 0;
}
if(flag==1)
{
if(yuyin++ > 400)
{
yuyin = 0;
Line_1A(0);//播報(bào)
}
}
}
else
{
LED = 1;flag = 0;
}
if(openFlag==1)//電機(jī)開(kāi)啟
{
lcd_write_str(0, 0, "STATE: OPEN ");
motoRotate();
}else
{
lcd_write_str(0, 0, "STATE: CLOSE");
MotorStop();//電機(jī)關(guān)閉
}
delay_ms(1);
}
}
void zd1() interrupt 3
{
static uchar cnt1=0;
TH1=0x4c;//50ms
TL1=0x00;
if(cnt1++ >= 20)//1s
{
cnt1 = 0;
if(DJ_TIME > 0)
{
DJ_TIME--;
}
else
{
if(Mode == 0)openFlag=0;
}
}
}
博客主頁(yè):https://blog.csdn.net/weixin_51141489,需要源碼或相關(guān)資料實(shí)物的友友請(qǐng)關(guān)注、點(diǎn)贊,私信吧!