網(wǎng)站開發(fā)與維修是什么意思網(wǎng)絡(luò)營銷方案例文
實物演示效果:
https://www.bilibili.com/video/BV1bh4y1A7ZW/?vd_source=6ff7cd03af95cd504b60511ef9373a1d
????????51單片機是否適合做多功能智能家居控制系統(tǒng)?51單片機的芯片是否具有與WiFi通信的能力?如果有的話,具體有哪些芯片啊?做起來復(fù)不復(fù)雜?新手可以做嗎?51比32好不好做啊?想做的話,哪里可以看51做多功能智能家居的教程啊?
接下來博主帶大家做一個基于51單片機的智能家居終端
?以下我大概說明我制作的過程以及用到的資料方便同行能夠獲取使用。
? ?????1,通過ESP8266-01S來進行一個信號的傳輸,就是手機與單片機來連接的一個橋梁。通過這個可以實現(xiàn)手機APP上實時顯示單片機獲取的數(shù)據(jù),包括LED燈的狀態(tài),DHT11獲取的溫濕度當然我們也可以控制單片機做出相應(yīng)的動作,通過手機APP的按鍵來操作。
? ?? ?? 2,但是隨著技術(shù)的日益進步,通常使用的洞洞板完全可以實現(xiàn)我所說的功能,但是不斷地通過原理圖焊接連線不僅復(fù)雜而且需要的時間非常多。那么繪制PCB是非常好的一個思路。它的好處(1)可以批量生產(chǎn)(2)大大減少工作量(3)我們只需做一遍就可以了。按照這個思路首先是我們需要繪制PCB的資料第一步:制作或是收集每個原件的原理圖(其實大多數(shù)網(wǎng)上都是有的,但是多且雜亂無章。最后我會提供給大家非常齊全且整理好的的原理圖庫和封裝還有3D庫)。第二步:就是給每一個原理圖添加封裝(這里的封裝是PCB封裝和3D庫,按照我的理解就是能看到原件本來的模樣這個對你后期購買元器件是非常重要的)。
一、設(shè)計完成主要功能? ? ? ??
????????本設(shè)計可分為溫濕度檢測與煙霧檢測和人體檢測部分。溫濕度檢測部分,是通過利用單總線型數(shù)字式溫濕度傳感器DHT11,實現(xiàn)系統(tǒng)具有測溫濕度誤差小、分辨率高、抗干擾能力強等特點。煙霧檢測電路,利用氣體傳感器MQ-2與ADC0832模數(shù)轉(zhuǎn)換器實現(xiàn)基本功能。通過這些傳感器和芯片,當環(huán)境中可燃氣體濃度或有毒氣體等發(fā)生變化時系統(tǒng)會發(fā)出相應(yīng)的燈光報警信號和聲音報警信號,以此來實現(xiàn)火災(zāi)報警,智能化提示。人體檢測部分,是通過HC-SR501模塊實現(xiàn),模塊主要功能就是熱釋電紅外傳感器感應(yīng)到入侵者的紅外熱輻射,將其轉(zhuǎn)換成超低頻信號,經(jīng)電路放大、輸出。檢測器是利用紅外人體檢測探頭檢測預(yù)先設(shè)定好的范圍內(nèi)的情況,一旦有危險便向單片機發(fā)出信號,再經(jīng)單片機處理,然后控制蜂鳴器和LED點亮發(fā)出警告,本設(shè)計還可以應(yīng)用于家居防盜、倉庫防盜等多種防盜場合,具有很強的實用價值和良好的市場前景。溫濕度、煙霧和人體防盜檢測是三種最基本的環(huán)境參數(shù),其測量方法和裝置對現(xiàn)在的生活、生產(chǎn)具有重要的意義。本課題基本完成預(yù)期設(shè)想,設(shè)計并實現(xiàn)了系統(tǒng)的硬件電路,完成了系統(tǒng)軟件的編寫和調(diào)試。測試結(jié)果證明,達到了設(shè)計要求
二、課題背景
????????當今世界,隨著科技的不斷發(fā)展,智能環(huán)境監(jiān)測成了人類關(guān)注的話題。智能家居通過物聯(lián)網(wǎng)技術(shù)將家中的各種設(shè)備(如照明系統(tǒng)、火災(zāi)檢測系統(tǒng)、空調(diào)控制、安防系統(tǒng),報警控制等)連接到一起,提供家電控制、照明控制、智能溫濕度調(diào)節(jié)、室內(nèi)外遙控、防盜報警以及環(huán)境監(jiān)測等多種功能和手段。與普通家居相比,智能家居不僅具有傳統(tǒng)的居住功能,兼?zhèn)浣ㄖ?、信息家電、設(shè)備自動化,集系統(tǒng)、結(jié)構(gòu)、服務(wù)、管理為一體的高效、舒適、安全、便利、環(huán)保的居住環(huán)境,而且提供全方位的信息交互功能,幫助家庭與外部保持信息交流暢通,優(yōu)化人們的生活方式,幫助人們有效安排時間,增強家居生活的安全性,甚至為各種能源費用節(jié)約資金。
本文首先介紹了智能家居的發(fā)展前景,接著介紹了該課題設(shè)計構(gòu)想,各模塊電路的選擇及其電路工作原理,最后對該課題的設(shè)計過程進行了總結(jié)與展望并附帶各個模塊的電路原理圖,和本設(shè)計仿真圖,以及C語言思想。智能家居實驗是為智能家居系統(tǒng)實驗做準備的,是實驗的基礎(chǔ),智能家居是為了提高學(xué)生的動手能力,配合各類電子設(shè)計大賽,科技活動等而開發(fā)的設(shè)計模型。在此模型上我們可以進行多種實驗,如測量,感應(yīng),報警等等。為了能更好的控制模擬家居,實現(xiàn)手動與自動控制相結(jié)合,進行各種功能實現(xiàn),并且這個實驗對現(xiàn)實生活也有一定的意義,所以我們就需要對這個實驗進行一定的研究
?1.21概述及功能介紹
????????本次設(shè)計主要分五個個功能,分別為測溫濕度,煙霧及紅外感應(yīng)和報警,顯示信息和報警信息。將這幾個個功能巧妙的與家居結(jié)合,我們已經(jīng)知道五個單獨功能如何實現(xiàn),現(xiàn)在要將五個功能通過單片機系統(tǒng)化反饋,以達到能實現(xiàn)綜合五種功能的智能家居。
設(shè)計涉及主硬件為:STC89C52RC單片機,DHT11溫濕度傳感器,人體紅外感應(yīng)器,MQ-2煙霧傳感器,按鍵設(shè)置與LCD1602液晶顯示模塊,蜂鳴器報警電路,以及超標指示顯示模塊組成。
?1.2.2 功能介紹
????????(1)通過DHT11溫濕度采集數(shù)據(jù)將信息顯示于LCD1602上面,如果溫濕度超出設(shè)定的預(yù)警值,指示燈有提示并蜂鳴器報警;待到壞境溫濕度降到低于預(yù)警值的時候,報警自動關(guān)閉。
????????(2)采用煙霧探頭傳感器來檢測我們周圍環(huán)境的煙霧,可對煤氣甲烷,以及我們周圍著火的煙霧,或是抽煙的濃度等實時監(jiān)測,如有超標,蜂鳴器報警,并有指示燈動作來提醒你解決當前的問題,解決之后,這些顯示和指示指標自動關(guān)閉,所以能給您帶來一定的安全感。
????????(3)人體紅外檢測電路能夠根據(jù)外界移動人體進行判斷,如果在布防狀態(tài)并且有人時,指示燈有提示并蜂鳴器報警,來警告入侵者,直至手動撤防才可以解除報警。而且具有掉電保存的功能,即使人為關(guān)閉電源再開機也能繼續(xù)報警,這樣更加智能。
三、論文目錄
四、項目子仿真圖
????????1).開機顯示界面
? ? ? ? 2).燈具關(guān)閉失敗顯示界面
? ? ? ? 3).溫度檢測顯示界面
五、部分源碼程序
#include<reg52.h>
#include <I2C.H>#define ADDR 0x90 //PCF8591 地址// 此表為 LED 的字模 // 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20)
unsigned char code Disp_Tab[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff, 0xf7 };
unsigned char TABLEW[8] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char AD_CHANNEL;
unsigned char LedOut[8];
unsigned int D[32];sbit KEY1 = P3^2;
sbit KEY2 = P3^3;/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數(shù))
* 輸出 : 無
***********************************************************************/
void Delay_1ms(unsigned char i)//1ms延時
{unsigned char x,j;for(j=0;j<i;j++)for(x=0;x<=148;x++);
}
/*******************************************************************
DAC 變換, 轉(zhuǎn)化函數(shù)
*******************************************************************/
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val)
{Start_I2c(); //啟動總線SendByte(sla); //發(fā)送器件地址if(ack==0)return(0);SendByte(c); //發(fā)送控制字節(jié)if(ack==0)return(0);SendByte(Val); //發(fā)送DAC的數(shù)值if(ack==0)return(0);Stop_I2c(); //結(jié)束總線return(1);
}/*******************************************************************
ADC發(fā)送字節(jié)[命令]數(shù)據(jù)函數(shù)
*******************************************************************/
bit ISendByte(unsigned char sla,unsigned char c)
{Start_I2c(); //啟動總線SendByte(sla); //發(fā)送器件地址if(ack==0)return(0);SendByte(c); //發(fā)送數(shù)據(jù)if(ack==0)return(0);Stop_I2c(); //結(jié)束總線return(1);
}/*******************************************************************
ADC讀字節(jié)數(shù)據(jù)函數(shù)
*******************************************************************/
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;Start_I2c(); //啟動總線SendByte(sla+1); //發(fā)送器件地址if(ack==0)return(0);c=RcvByte(); //讀取數(shù)據(jù)0Ack_I2c(1); //發(fā)送非就答位Stop_I2c(); //結(jié)束總線return(c);
}//******************************************************************/
main()
{
unsigned char i,temp=1;
while(1)
{/********以下AD-DA處理*************/switch(AD_CHANNEL){case 0: ISendByte(ADDR,0x41);D[0]=IRcvByte(ADDR)*2; //ADC0 模數(shù)轉(zhuǎn)換1break;case 1: ISendByte(ADDR,0x42);D[1]=IRcvByte(ADDR)*2; //ADC1 模數(shù)轉(zhuǎn)換2break;case 2: ISendByte(ADDR,0x43);D[2]=IRcvByte(ADDR)*2; //ADC2 模數(shù)轉(zhuǎn)換3break;case 3: ISendByte(ADDR,0x40);D[3]=IRcvByte(ADDR)*2; //ADC3 模數(shù)轉(zhuǎn)換4break;case 4: DACconversion(ADDR,0x40, D[4]/4); //DAC 數(shù)模轉(zhuǎn)換break;}if(++AD_CHANNEL>4) AD_CHANNEL=0;if(KEY1==0 || KEY2==0 ) {Delay_1ms(20); //20毫秒軟件防抖if(KEY1 == 0){temp =1;}else if(KEY2 == 0){temp=2; }}if(temp ==1){LedOut[0]=Disp_Tab[D[0]%10000/1000];LedOut[1]=Disp_Tab[D[0]%1000/100];LedOut[2]=Disp_Tab[D[0]%100/10]&0x7f;LedOut[3]=Disp_Tab[D[0]%10];LedOut[4]=Disp_Tab[D[1]%10000/1000];LedOut[5]=Disp_Tab[D[1]%1000/100]&0x7f;LedOut[6]=Disp_Tab[D[1]%100/10];LedOut[7]=Disp_Tab[D[1]%10]; }if(temp ==2){LedOut[0]=Disp_Tab[D[2]%10000/1000];LedOut[1]=Disp_Tab[D[2]%1000/100];LedOut[2]=Disp_Tab[D[2]%100/10]&0x7f;LedOut[3]=Disp_Tab[D[2]%10];LedOut[4]=Disp_Tab[D[3]%10000/1000];LedOut[5]=Disp_Tab[D[3]%1000/100]&0x7f;LedOut[6]=Disp_Tab[D[3]%100/10];LedOut[7]=Disp_Tab[D[3]%10]; }for(i=0;i<8;i++){P0 = LedOut[7-i];P2 = 7-i;Delay_1ms(2); }}
}