基于51單片機的煙霧檢測+溫度檢測+蜂鳴器報警+光耦+風扇+LCD4602液晶顯示(含仿真/原理圖/PCB/代碼/模塊資料)
講在前面:
51單片機是大多數(shù)電子愛好者的入門級單片機,這款設計是一個比較綜合的單片機設計。本文介紹了一個典型的51單片機設計,希望對各位有幫助。
本人也在其他平臺開源了一些項目和分享:
點擊進入B站傳送門
概述
1)產(chǎn)品功能:
使用51單片機作為控制器,與ADC0832(ADC芯片)經(jīng)行I2C通信,
采集煙霧檢測模塊和溫度傳感器模塊的電壓信號,實現(xiàn)煙霧濃度,鍋具溫度檢測。
(鍋具檢測)檢測鍋具是否放置,人員暫離保護,鍋具加減火控制(四檔),排氣扇控制,蜂鳴器提醒。
具體功能:
2)使用元器件:
電源降壓芯片:L7805
單片機型號:STC89C52
ADC芯片:ADC0832
三極管:S8050直插
LCD1602顯示屏
按鍵:直插6*6輕觸開關
直插3mmLED
3)實物電路:
電源電路:
D1為防反接二極管,CE1和C2為輸入濾波電容,CE2和C1為輸出濾波電容。后接LED做電源指示燈。
單片機最小系統(tǒng):
ADC:
煙霧傳感器和溫度傳感器:
人員檢測和鍋具檢測的紅外對管模塊:
風扇和蜂鳴器:
LCD1602顯示屏:
6個按鍵:
指示燈:
PCB效果圖:
實物:
4)Proteus實物電路:
由于Proteus沒有傳感器模塊,所以用滑動變阻器模擬傳感器模塊輸出的電壓,紅外對管模塊用自鎖開關來模擬
5)程序:
變量聲明:
//****************************** 基于 51 單片機的簡易廚房安全檢測控制系統(tǒng) *******************************
#include <reg52.h>
#include <intrins.h>
/*已知數(shù)據(jù)類型重新定義*/
#define uchar unsigned char
#define uint unsigned int
/*引腳定義*/
//LCD1602
#define LCD1602_DB P0 //LCD1602數(shù)據(jù)總線
//sbit LCD1602_RS = P2^0; //RS端
//sbit LCD1602_RW = P2^1; //RW端
//sbit LCD1602_EN = P2^2; //EN端
sbit LCD1602_RS = P2^4; //RS端
sbit LCD1602_RW = P2^5; //RW端
sbit LCD1602_EN = P2^6; //EN端
//ADC0832
sbit cs = P1^0;//片選使能,低電平有效
sbit clk = P1^1;//芯片時鐘輸入
sbit dio = P1^2;//數(shù)據(jù)輸入DI與輸出DO
//四個按鍵輸入
sbit key_temth_r = P3^0; //增加溫度閾值的按鍵
sbit key_temth_f = P3^1; //減小溫度閾值的按鍵
sbit key_gasth_r = P3^2; //增加氣體濃度閾值的按鍵
sbit key_gasth_f = P3^3; //減小氣體濃度閾值的按鍵
sbit key_fir_r = P3^4; //加火按鍵
sbit key_fir_f = P3^5; //減火按鍵
sbit Beep = P3^7; //蜂鳴器
sbit FAN = P3^6; //風扇
sbit GuangOu_Guo = P2^5; //光耦檢測鍋具
sbit GuangOu_People = P2^6; //光耦檢測人
sbit Guo = P2^7; //控制鍋具燒火的引腳
//擋位指示的4個燈
sbit Guo1 = P1^4;
sbit Guo2 = P1^5;
sbit Guo3 = P1^6;
sbit Guo4 = P1^7;
uchar adc = 0; //ADC讀取的原始值
uint voltage = 0; //ADC讀取的原始值轉換得到的電壓值
uint gas = 0; //創(chuàng)建氣體濃度值
uint gas_th = 70; //創(chuàng)建氣體濃度閾值
uint tem = 0; //創(chuàng)建溫度值
uint tem_th = 270; //創(chuàng)建溫度閾值
uint fir = 0; // fir = 1,允許鍋具使用,fir = 0,禁止鍋具使用
uchar LED_buffer1[16] = {"Gas: "};//ADC顯示緩沖
uchar LED_buffer2[16] = {"Tem: "};//電壓顯示緩沖
uint num = 0; //延時計數(shù)值
uint GuangOu_Guo_falg = 1; //鍋具檢測光耦標志位
uint GuangOu_People_falg = 1; //人員檢測光耦標志位
主程序:(挺簡單的,沒用定時器,全程用if else…)
void main()
{
//初值設定
Beep = 0; //蜂鳴器
FAN = 0; //風扇
Guo = 0; //鍋具使能
Guo1 = 1; Guo2 = 1; Guo3 = 1; Guo4 = 1; //初始擋位全為0, 1:擋位燈不亮,0:擋位燈亮
Init_LCD1602();//1602初始化
LCD1602_Dis_Str(0, 0, " System Init "); //顯示字符串
LCD1602_Dis_Str(0, 1, " Please Wait "); //顯示字符串
DelayMS(1000); //顯示初始化字符串1s
while(1) // 一直循環(huán)
{
LCD1602Display(); //一直循環(huán)讀取電壓和顯示數(shù)值
GuangOu_Guo_falg = GuangOu_Guo; //將光耦值賦值給標志位
GuangOu_People_falg = GuangOu_People; //將光耦值賦值給標志位
if(GuangOu_Guo == 0) //有鍋
{
if(GuangOu_People == 0) //有人
{
if(tem <= tem_th) //溫度未超過閾值,即沒有燒鍋
{
Guo = 1; Beep = 0; //滿足以上3個條件才開啟鍋具使能
}
}
}
if(GuangOu_Guo_falg == 1) //無鍋
{
//等待一段時間后
num ++; //num自加
if(num >= 1000) //進行多次實驗,一個while循環(huán)大約是10ms,1000就是10s
{
num = 0; //記得清零,方便下次使用
Beep = 1; //蜂鳴器報警
Guo = 0;
}
}
if(GuangOu_People_falg == 1) //無人
{
//等待一段時間后
num ++;
if(num >= 1000)
{
num = 0;
Beep = 1;
Guo = 0;
}
}
if(gas >= gas_th){ FAN = 1; }else if(gas <= gas_th){ FAN = 0; } //氣體濃度超標反應和正常反應
if(tem >= tem_th){ Guo = 0; } //溫度過高,燒鍋反應
//6個按鍵
if(key_temth_r == 0)
{
DelayMS(10); //消抖
if(key_temth_r == 0)
{
while(key_temth_r == 0); //按下按鍵,松開后才算數(shù)
tem_th += 10; //溫度閾值 +10
if(tem_th >= 500){ tem_th = 500; } //溫度閾值限幅
}
}
if(key_temth_f == 0)
{
DelayMS(10);
if(key_temth_f == 0)
{
while(key_temth_f == 0);
tem_th -= 10;
if(tem_th <= 0){ tem_th = 0; }
}
}
if(key_gasth_r == 0)
{
DelayMS(10);
if(key_gasth_r == 0)
{
while(key_gasth_r == 0);
gas_th += 10;
if(gas_th >= 500){ gas_th = 500; }
}
}
if(key_gasth_f == 0)
{
DelayMS(10);
if(key_gasth_f == 0)
{
while(key_gasth_f == 0);
gas_th -= 10;
if(gas_th <= 0){ gas_th = 0; }
}
}
// 加火減火
if(key_fir_r == 0)
{
DelayMS(10);
if(key_fir_r == 0)
{
while(key_fir_r == 0);
fir += 1;
if(fir >= 4){ fir = 4; }
}
}
if(key_fir_f == 0)
{
DelayMS(10);
if(key_fir_f == 0)
{
while(key_fir_f == 0);
fir -= 1;
if(fir <= 0){ fir = 0; }
}
}
if(Guo == 1) //如果鍋具使能,才能進行加減火控制
{
if(fir ==0)
{ Guo1 = 1; Guo2 = 1; Guo3 = 1; Guo4 = 1; }
if(fir ==1)
{ Guo1 = 0; Guo2 = 1; Guo3 = 1; Guo4 = 1; }
if(fir ==2)
{ Guo1 = 0; Guo2 = 0; Guo3 = 1; Guo4 = 1; }
if(fir ==3)
{ Guo1 = 0; Guo2 = 0; Guo3 = 0; Guo4 = 1; }
if(fir ==4)
{ Guo1 = 0; Guo2 = 0; Guo3 = 0; Guo4 = 0; }
}
else if(Guo == 0) //如果鍋具沒有被使能,則所有擋位關閉
{
Guo1 = 1; Guo2 = 1; Guo3 = 1; Guo4 = 1;
}
}
}
演示視頻:
待發(fā)布文章來源:http://www.zghlxwxcb.cn/news/detail-814352.html
主要內(nèi)容差不多都在上面了,相信大家可以根據(jù)此文設計制作出屬于自己的51單片機設計。
全部文件:文章來源地址http://www.zghlxwxcb.cn/news/detail-814352.html
到了這里,關于基于51單片機的煙霧檢測+溫度檢測+蜂鳴器報警+光耦+風扇+LCD4602液晶顯示(含原理圖/PCB/代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!