硬件電路的設(shè)計(jì)
(下方附文件)
系統(tǒng)的功能分析及體系結(jié)構(gòu)設(shè)計(jì)
3.1.1系統(tǒng)功能分析
本系統(tǒng)分為主機(jī)和從機(jī)兩部分組成。
主機(jī)由STC89C52單片機(jī)電路+液位傳感器電路+WiFi模塊ESP8266電路+電源電路組成。
從機(jī)由STC89C52單片機(jī)電路+蜂鳴器報(bào)警電路+WiFi模塊ESP8266電路+電源電路組成。
1、主機(jī)通過液位傳感器檢測液位,檢測到最低液位和最高液位時(shí),然后將信息通過主機(jī)WIFI模塊上傳給從機(jī)的WIFI模塊,從機(jī)收到后進(jìn)行相應(yīng)的處理,當(dāng)液位處于最低和最高液位時(shí),蜂鳴器報(bào)警;否則,蜂鳴器不報(bào)警。
2、從機(jī)接收到數(shù)據(jù)有,通過狀態(tài)指示燈顯示當(dāng)前液位情況,如果連接成功后,設(shè)備通訊中斷,所有指示燈熄滅,然后黃燈閃爍提醒。方便遠(yuǎn)程查看現(xiàn)成液位情況變化以及是否在線故障。
3、注意主從機(jī)模塊配置以及單片機(jī)程序都不相同,不可以相互調(diào)換位置。
3.1.2系統(tǒng)總體結(jié)構(gòu)
本系統(tǒng)具體框圖如下圖所示:
原理圖:
5V電源電路設(shè)計(jì)
本系統(tǒng)選擇5V直流電源作為系統(tǒng)總電源,為整個(gè)系統(tǒng)供電,電路簡單、穩(wěn)定。DC為電源的DC插座,可以直接接USB電源線,一端插在DC插座上,另外一端可以插在5V電源上,如電腦USB、充電寶、手機(jī)充電器等等。LED為紅色LED燈,作為系統(tǒng)是否有點(diǎn)的指示燈,電阻為1K電阻,起到限流作用,保護(hù)LED燈,以防電流過大燒壞LED燈。SW為自鎖開關(guān),開關(guān)按下后,紅燈亮,此時(shí)系統(tǒng)電源5V直流輸出。開關(guān)再次按下后,紅燈滅,此時(shí)系統(tǒng)電源無5V電源輸出。
ESP8266WIFI模塊電路設(shè)計(jì)電路設(shè)計(jì)
串口WIFI模塊是新一代嵌入式WiFi模塊,體積小,功耗低。采用UART接口。串口wifi模塊是基于通用串行接口特性,符合IEEE802.11 協(xié)議棧網(wǎng)絡(luò)標(biāo)準(zhǔn),內(nèi)置TCP/IP協(xié)議棧,使傳統(tǒng)串口設(shè)備更好的加入無線網(wǎng)絡(luò)。
ESP8266是一款超低功耗的模塊,擁有業(yè)內(nèi)極富競爭力的封裝尺寸和超低能耗技術(shù),專為移動(dòng)設(shè)備和互聯(lián)網(wǎng)的應(yīng)用設(shè)計(jì),可將用戶的物理設(shè)備連接到WIFI無線網(wǎng)絡(luò)上,進(jìn)行互聯(lián)網(wǎng)或局域網(wǎng)通信,實(shí)現(xiàn)聯(lián)網(wǎng)功能。
ESP8266可廣泛應(yīng)用于智能電網(wǎng)、智能交通、智能家具、手持設(shè)備、工業(yè)控制等領(lǐng)域。WiFi模塊電路圖如下圖所示。
5V轉(zhuǎn)3.3V電源電路設(shè)計(jì)
AMS1117-3.3是一種輸出電壓為3.3V的正向低壓降穩(wěn)壓器,適用于高效率線性開關(guān)電源穩(wěn)壓器。其輸出電流為1A,系統(tǒng)電路簡單,工作穩(wěn)定。本電路中,通過AMS1117-3.3芯片將5V直流電壓降為3.3V,給系統(tǒng)的特定模塊電路供電。
一、基本參數(shù)
(1)工作結(jié)溫范圍:-40~125°C
(2)最大輸入電壓:15V
(3)焊接溫度(25秒):265°C
(4)存儲溫度:- 65~150°C
(5)輸出電壓:3.267~3.333V
(6)紋波抑制(最小):60dB
其電路原理圖如下圖所示。電容為電解電容,起到濾波作用,濾除電源中的低頻參量,讓電壓輸出更加平穩(wěn)。
蜂鳴器報(bào)警電路(低電平有效)設(shè)計(jì)
有源蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。本系統(tǒng)所采用的報(bào)警模塊為5V有源蜂鳴器模塊,電路中采用三極管9012來驅(qū)動(dòng),只要單片機(jī)控制引腳為低電平,蜂鳴器就會鳴叫報(bào)警,反之則不鳴叫,可以通過控制單片機(jī)引腳方波輸出形式控制蜂鳴器的鳴叫方式。電阻為限流電阻,保護(hù)作用。
FC-37水滴傳感器模塊電路設(shè)計(jì)
本系統(tǒng)選擇FC-37傳感器來檢測水滴信號。傳感器采用高品質(zhì)FR-04雙面材料,超大面積5.0*4.0CM,并用鍍鎳處理表面,具有對抗氧化,導(dǎo)電性,及壽命方面更優(yōu)越的性能。
一、模塊參數(shù)
(1)比較器輸出,信號干凈,波形好,驅(qū)動(dòng)能力強(qiáng),超過15mA;
(2)配電位器調(diào)節(jié)靈敏度;
(3)工作電壓3.3V-5V
(4)輸出形式 :數(shù)字開關(guān)量輸出(0和1)和模擬量AO電壓輸出;
(5)使用寬電壓LM393比較器
二、接線方式:
(1)VCC:接電源正極(3-5V)
(2)GND:接電源負(fù)極
(3)DO:TTL開關(guān)信號輸出()
(4)AO:模擬信號輸出
三、功能介紹:
接上5V電源,電源指示燈亮,感應(yīng)板上沒有水滴時(shí),DO輸出為高電平,開關(guān)指示燈滅 ,滴上一滴水,DO輸出為低電平,開關(guān)指示燈亮,刷掉上面的水滴,又恢復(fù)到,輸出高電平狀態(tài)。AO模擬輸出,可以連接單片機(jī)的AD口檢測滴在上面的雨量大小。DO TTL數(shù)字輸出也可以連接單片機(jī)檢測是否有雨。
FC-37水滴傳感器模塊內(nèi)部電路圖如下圖所示,其中R1電阻為分壓電阻,將水滴傳感器檢測到的水滴信息轉(zhuǎn)化為模擬電壓信號即AO,模擬量信號接入LM393比較器后,即可與LM393比較器芯片2號引腳所接的電位器分壓后的模擬電壓進(jìn)行比較,進(jìn)而得出DO數(shù)字信號(即高低電平信號)。C1、C2為濾波電容,C1電容對電源進(jìn)行濾波,讓電源輸出更穩(wěn)定。C2電容對模擬信號進(jìn)行濾波,保證模擬信號輸出的穩(wěn)定性。R2、R3均為限流電阻,來保護(hù)LED燈,防止LED燈燒壞,LED燈均為低電平有效。R4為上拉電阻,上拉就是將不確定的信號通過一個(gè)電阻鉗位在高電平,同時(shí)起限流作用。保證LM393比較器輸出的高低電平信號在與單片機(jī)引腳連接時(shí)電平信號的讀取更加穩(wěn)定。
系統(tǒng)軟件設(shè)計(jì)
程序流程圖
#include
#include
#include
#include "delay.h"
sbit buzzer=P2^3; //引腳定義
sbit led_red=P2^4;
sbit led_yel=P2^5;
sbit led_gre=P2^6;
unsigned long times_20ms=0; //定時(shí)器計(jì)數(shù)
unsigned char i; //記錄是否已經(jīng)發(fā)送了短信
unsigned char buzzerlater=0; //蜂鳴器報(bào)警延時(shí)
unsigned char busyNum =0;//串口判忙
void Init_Timer0(void); //函數(shù)聲明
void UART_Init(void);
void uartSendByte(unsigned char dat);
void uartSendStr(unsigned char *s,unsigned char length);
void main (void)
{
Init_Timer0(); //定時(shí)器0初始化
UART_Init();
led_red=0;led_yel=0;led_gre=0; //燈指示
buzzerlater=2;
DelayMs(100);
led_red=1;led_yel=1;led_gre=1;
for(i=0;i<40;i++)
{DelayMs(100);}
uartSendStr("AT+CWMODE=1\r\n",13); //打開多連接
for(i=0;i<5;i++)
{DelayMs(100);}
uartSendStr("AT+CWJAP=\"AUAISOUT000\",\"\"\r\n",27); //建立服務(wù) 端口號為8080
for(i=0;i<40;i++) //保留足夠時(shí)間去獲取ip
{DelayMs(100);}
while(1) //主循環(huán)
{
uartSendStr("AT+CIPSTART=\"TCP\",\"10.10.10.11\",8080\r\n",38); //打開多連接
for(i=0;i<25;i++) //實(shí)時(shí)去鏈接ap
{DelayMs(100);}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;
EA=1; //總中斷打開
ET0=1; //定時(shí)器中斷打開
TR0=1; //定時(shí)器開關(guān)打開
}
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝
TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打開
EA = 1; //打開總中斷
ES = 1; //打開串口中斷
}
void uartSendByte(unsigned char dat)//串口發(fā)送單字節(jié)數(shù)據(jù)
{
unsigned char time_out;
time_out=0x00;
SBUF = dat; //將數(shù)據(jù)放入SBUF中
while((!TI)&&(time_out<100)) //檢測是否發(fā)送出去
{time_out++;DelayUs2x(10);} //未發(fā)送出去 進(jìn)行短暫延時(shí)
TI = 0; //清除ti標(biāo)志
}
void uartSendStr(unsigned char *s,unsigned char length) //發(fā)送定長度字符串
{
unsigned char NUM;
NUM=0x00;
while(NUM
{
uartSendByte(*s); //放松單字節(jié)數(shù)據(jù)
s++; //指針++
NUM++; //下一個(gè)++
}
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;
times_20ms++;
if(times_20ms%10==0) //定時(shí)到1s
{
if(buzzerlater>0) //延時(shí)打開蜂鳴器
{
buzzer=!buzzer;
buzzerlater--; //延時(shí)縮短
}
else
{buzzer =1;} //關(guān)閉蜂鳴器
if(busyNum>0)busyNum--; //接收數(shù)據(jù)過程中
else //接收不到數(shù)據(jù)
{led_red=1;led_yel=1;led_gre=1; }
}
}
void UART_SER (void) interrupt 4 //串行中斷服務(wù)程序
{
unsigned char Rebuf;
if(RI) //判斷是接收中斷產(chǎn)生
{
RI=0; //標(biāo)志位清零
Rebuf=SBUF;
busyNum = 4;
if(Rebuf=='h')
{
buzzerlater=4; //蜂鳴器延時(shí)報(bào)警
led_red=0;led_yel=1;led_gre=1; //燈指示
}
else if(Rebuf=='n')
{
buzzerlater=0; //蜂鳴器延時(shí)報(bào)警
led_red=1;led_yel=0;led_gre=1; //燈指示
}
else if(Rebuf=='l')
{
buzzerlater=4; //蜂鳴器延時(shí)報(bào)警
led_red=1;led_yel=1;led_gre=0; //燈指示
}
else if(Rebuf=='e')
{
buzzerlater=4; //蜂鳴器延時(shí)報(bào)警
led_red=0;led_yel=0;led_gre=0; //燈指示
}
}
if(TI) //如果是發(fā)送標(biāo)志位,清零
TI=0;
}