硬件電路的設(shè)計
(下方附文件)
系統(tǒng)的功能分析及體系結(jié)構(gòu)設(shè)計
3.1.1系統(tǒng)功能分析
本系統(tǒng)分為主機和從機兩部分組成。
主機由STC89C52單片機電路+液位傳感器電路+WiFi模塊ESP8266電路+電源電路組成。
從機由STC89C52單片機電路+蜂鳴器報警電路+WiFi模塊ESP8266電路+電源電路組成。
1、主機通過液位傳感器檢測液位,檢測到最低液位和最高液位時,然后將信息通過主機WIFI模塊上傳給從機的WIFI模塊,從機收到后進行相應(yīng)的處理,當(dāng)液位處于最低和最高液位時,蜂鳴器報警;否則,蜂鳴器不報警。
2、從機接收到數(shù)據(jù)有,通過狀態(tài)指示燈顯示當(dāng)前液位情況,如果連接成功后,設(shè)備通訊中斷,所有指示燈熄滅,然后黃燈閃爍提醒。方便遠(yuǎn)程查看現(xiàn)成液位情況變化以及是否在線故障。
3、注意主從機模塊配置以及單片機程序都不相同,不可以相互調(diào)換位置。
3.1.2系統(tǒng)總體結(jié)構(gòu)
本系統(tǒng)具體框圖如下圖所示:
原理圖:
5V電源電路設(shè)計
本系統(tǒng)選擇5V直流電源作為系統(tǒng)總電源,為整個系統(tǒng)供電,電路簡單、穩(wěn)定。DC為電源的DC插座,可以直接接USB電源線,一端插在DC插座上,另外一端可以插在5V電源上,如電腦USB、充電寶、手機充電器等等。LED為紅色LED燈,作為系統(tǒng)是否有點的指示燈,電阻為1K電阻,起到限流作用,保護LED燈,以防電流過大燒壞LED燈。SW為自鎖開關(guān),開關(guān)按下后,紅燈亮,此時系統(tǒng)電源5V直流輸出。開關(guān)再次按下后,紅燈滅,此時系統(tǒng)電源無5V電源輸出。
ESP8266WIFI模塊電路設(shè)計電路設(shè)計
串口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ù),專為移動設(shè)備和互聯(lián)網(wǎng)的應(yīng)用設(shè)計,可將用戶的物理設(shè)備連接到WIFI無線網(wǎng)絡(luò)上,進行互聯(lián)網(wǎng)或局域網(wǎng)通信,實現(xiàn)聯(lián)網(wǎng)功能。
ESP8266可廣泛應(yīng)用于智能電網(wǎng)、智能交通、智能家具、手持設(shè)備、工業(yè)控制等領(lǐng)域。WiFi模塊電路圖如下圖所示。
5V轉(zhuǎn)3.3V電源電路設(shè)計
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)。
蜂鳴器報警電路(低電平有效)設(shè)計
有源蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。本系統(tǒng)所采用的報警模塊為5V有源蜂鳴器模塊,電路中采用三極管9012來驅(qū)動,只要單片機控制引腳為低電平,蜂鳴器就會鳴叫報警,反之則不鳴叫,可以通過控制單片機引腳方波輸出形式控制蜂鳴器的鳴叫方式。電阻為限流電阻,保護作用。
FC-37水滴傳感器模塊電路設(shè)計
本系統(tǒng)選擇FC-37傳感器來檢測水滴信號。傳感器采用高品質(zhì)FR-04雙面材料,超大面積5.0*4.0CM,并用鍍鎳處理表面,具有對抗氧化,導(dǎo)電性,及壽命方面更優(yōu)越的性能。
一、模塊參數(shù)
(1)比較器輸出,信號干凈,波形好,驅(qū)動能力強,超過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)板上沒有水滴時,DO輸出為高電平,開關(guān)指示燈滅 ,滴上一滴水,DO輸出為低電平,開關(guān)指示燈亮,刷掉上面的水滴,又恢復(fù)到,輸出高電平狀態(tài)。AO模擬輸出,可以連接單片機的AD口檢測滴在上面的雨量大小。DO TTL數(shù)字輸出也可以連接單片機檢測是否有雨。
FC-37水滴傳感器模塊內(nèi)部電路圖如下圖所示,其中R1電阻為分壓電阻,將水滴傳感器檢測到的水滴信息轉(zhuǎn)化為模擬電壓信號即AO,模擬量信號接入LM393比較器后,即可與LM393比較器芯片2號引腳所接的電位器分壓后的模擬電壓進行比較,進而得出DO數(shù)字信號(即高低電平信號)。C1、C2為濾波電容,C1電容對電源進行濾波,讓電源輸出更穩(wěn)定。C2電容對模擬信號進行濾波,保證模擬信號輸出的穩(wěn)定性。R2、R3均為限流電阻,來保護LED燈,防止LED燈燒壞,LED燈均為低電平有效。R4為上拉電阻,上拉就是將不確定的信號通過一個電阻鉗位在高電平,同時起限流作用。保證LM393比較器輸出的高低電平信號在與單片機引腳連接時電平信號的讀取更加穩(wěn)定。
系統(tǒng)軟件設(shè)計
程序流程圖
#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ù)
unsigned char i; //記錄是否已經(jīng)發(fā)送了短信
unsigned char buzzerlater=0; //蜂鳴器報警延時
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(); //定時器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++) //保留足夠時間去獲取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++) //實時去鏈接ap
{DelayMs(100);}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關(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ā)送出去 進行短暫延時
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++; //下一個++
}
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新賦值 20ms
TL0=(65536-20000)%256;
times_20ms++;
if(times_20ms%10==0) //定時到1s
{
if(buzzerlater>0) //延時打開蜂鳴器
{
buzzer=!buzzer;
buzzerlater--; //延時縮短
}
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; //蜂鳴器延時報警
led_red=0;led_yel=1;led_gre=1; //燈指示
}
else if(Rebuf=='n')
{
buzzerlater=0; //蜂鳴器延時報警
led_red=1;led_yel=0;led_gre=1; //燈指示
}
else if(Rebuf=='l')
{
buzzerlater=4; //蜂鳴器延時報警
led_red=1;led_yel=1;led_gre=0; //燈指示
}
else if(Rebuf=='e')
{
buzzerlater=4; //蜂鳴器延時報警
led_red=0;led_yel=0;led_gre=0; //燈指示
}
}
if(TI) //如果是發(fā)送標(biāo)志位,清零
TI=0;
}