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