历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2019年11月19日 | 51单片机蓝牙空气质量PM2.5检测设计

2019-11-19 来源:51hei

享一个很好的蓝牙+PM2.5空气质量+DHT11温湿度上下限报警的设计,主控芯片是51单片机.

实物图:
 

仿真原理图如下
 

元件列表:

Comment

Designator

LibRef

Quantity

蜂鸣器

BUUZER

BUZZER

1

电解电容

C1

10uF

1

电解电容

C2

220uF

1

瓷片电容

C3, C4

18pF

2

电解电容

C5

470uF

1

瓷片电容

C6

104

1

排针

DC 5V

Header 2

2P

触点开关

JIA, JIAN,RESET

SW-PB

3

液晶

LCD1602

LCD1602

1

发光二极管

LED1, POWER

SI3317-H

2

灰尘传感器

PM1

GP2Y1010AU

1

温湿度传感器

U3

dht11

1

三极管

Q1

S8550

1

排阻

R1

4.7K

1

电阻

R2, R4, R5, R6

2K

5

电阻

R10

150

1

电阻

R3

10K

1

自锁开关

SW1

SW-SPDT

1

单片机座

U1

DIP-40

1

单片机

U1

STC89C52

1

A/D模数转换芯片

U2

ADC0832

1

晶振

Y1

11.0592M

1



Altium Designer画的空气质量+dht11检测系统原理图和PCB图如下:(51hei附件中可下载工程文件)

单片机源程序如下:

#include"LCD1602.h"  //添加LCD1602头文件

#include"dht11.h"          //添加DHT11头文件

#include"adc0832.h"

#include

sbit BUZZER = P1^3;         //蜂鸣器驱动端口==P1^3

sbit Reduc  = P3^2;         //按键键输入端口==P1^7

sbit Add = P3^3;         //按键加输入端口==P3^1

sbit Mode = P3^4;         //按键加输入端口==P3^1

sbit LED1=P2^0;

sbit LED2=P2^1;

uchar Rx_buf[4],Rxnum=0;

uchar T1L=15,T1H=35,R1L=30,R1H=80;

void InitUART(void)                         //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。

{

    TMOD = 0x20;

    SCON = 0x50;

    TH1 = 0xFD;

    TL1 = TH1;

    PCON = 0x00;

    EA = 1;

    ES = 1;

    TR1 = 1;

}


/*

* UART 发送一字节

*/

void UART_send_byte(char dat)

{

        SBUF = dat;

        while (TI == 0);

        TI = 0;

}


/*

* UART 发送字符串

*/

void UART_send_string(unsigned char *buf)

{

        while (*buf != '')

        {

                UART_send_byte(*buf++);

        }

}

/************************************************

** 函数名称 : void main(void)

** 函数功能 : 主函数

** 输    入 : 无

** 输    出 : 无

** 说    明 :

************************************************/

void main(void)

{

        double PM,pm1,pm2;

        int PMVAL=0,HPM=200,PM_count=0,pm1_count=0;

        uchar T1_data=0,R1_data=0,T2_data=0,R2_data=0;//温度、湿度变量

        uchar shezhi_flag=1,Mode_flag=1,n=1;//设置变量

        uchar bueezr_flag=0,count=0,buzzer_time=9;//蜂鸣器报警变量

        uint Mode_count=0; 

        uchar disp[16]  ={"PM2.5:0000ug/m3 "};

        uchar disp1[16]= {"T :00C    RH:00%"}; 

        uchar Tx_Buf[15];

         InitUART();                        //初始化串口                                          

        LCD_Init();

    WriteChar(1,0,16,disp); //在第一行显示‘内容’

        WriteChar(2,0,16,disp1); //在第二行显示‘内容’

        while(1)

        {

                

                T1_data=Read_TRH(0,0);//温度

                disp1[3]=T1_data/10+0x30;//十位

                disp1[4]=T1_data%10+0x30;//个位


                R1_data=Read_TRH(1,0);//湿度

                disp1[13]=R1_data/10+0x30;//十位

                disp1[14]=R1_data%10+0x30;//个位

                                                                          

                pm1+=read_data(1);

                if(++PM_count>=20)

                {

                          PM_count=0;

                           pm1=pm1/20;

                        pm2+=pm1;

                        pm1=0;

                        if(++pm1_count>=5)

                        {

                                pm1_count=0;

                                PM=pm2/5;

                                PM=PM*50/255;

                                PM-=4;

                            PM/=5;

                                PM*=1000;

                                PMVAL=PM;

                                PMVAL+=235;        PMVAL=PMVAL/9;

                                if(PMVAL>=9999)PMVAL=9999;

                                WriteCOMDATA(0x86,0);

                                if(PMVAL<0)//PMVAL=0;

                                {WriteCOMDATA(0+0x30,1);PMVAL=abs(PMVAL);}

                                else WriteCOMDATA(PMVAL/1000+0x30,1);

                                WriteCOMDATA(PMVAL/100%10+0x30,1);

                                WriteCOMDATA(PMVAL/10%10+0x30,1);

                                WriteCOMDATA(PMVAL%10+0x30,1);

                                PM=pm1=pm2=0;

                        }

                }


                /*调用报警函数,温湿度是否在设定范围内*/

                //温度值与报警值比较

                if(T1_data                {

                        bueezr_flag=1;//报警标志位置1

                }

                else if(T1_data>T1H)

                {

                        bueezr_flag=1;//报警标志位置1

                } 

                //湿度值与报警值比较

                if(R1_data                {

                        bueezr_flag=1;//报警标志位置1

                }

                else if(R1_data>R1H)

                {

                        bueezr_flag=1;//报警标志位置1

                }

                //PM值与报警值比较

                if(PMVAL>HPM)

                {        

                        bueezr_flag=1;

                } 

                if(T1_data>T1L&&T1_dataR1L&&R1_data                {

                        bueezr_flag=0;

                        BUZZER=1;

                }

                /*******蜂鸣器报警********/

                count++;if(count>buzzer_time*10)count=buzzer_time+1;

                if(count%buzzer_time==0 && bueezr_flag)

                {

                        BUZZER=~BUZZER;//蜂鸣器取反  发出声音提示

                }

                

推荐阅读

史海拾趣

EM Microelectronic-Marin SA公司的发展小趣事

随着RFID技术的广泛应用,制定统一的国际标准变得尤为重要。EM Microelectronic-Marin积极参与了RFID标准制定机构的讨论,与其他企业一起提交了RFID标准建议。这一过程中,公司不断推动技术创新,力求在标准制定中占据有利地位。虽然最终的标准之争结果未知,但EM Microelectronic-Marin的技术实力和创新精神得到了业界的广泛认可。

Dawn Electronics Inc公司的发展小趣事

在技术创新的基础上,Dawn Electronics Inc公司开始积极拓展市场。公司加强了与国内外客户的合作,通过提供优质的产品和服务,赢得了客户的信任和支持。同时,公司还注重品牌建设,积极参与行业展会和交流活动,提高了品牌知名度和影响力。这些努力为公司赢得了更多的市场份额和合作机会。

Bridgelux公司的发展小趣事

Bridgelux在LED照明技术方面取得了重要突破。公司研发出了一种新型的LED芯片结构,提高了光效和稳定性,降低了成本。这一创新使得Bridgelux的产品在市场上更具竞争力,也为其赢得了众多客户的青睐。同时,公司还注重知识产权保护,积极申请专利,确保自身技术的领先地位。

福斯特(FIRST)公司的发展小趣事
对于微弱的传感器信号,可能需要进行放大处理以提高信号的信噪比。
Fine Products Microelectronics Corp公司的发展小趣事
测量车辆在纵向(前后方向)和侧向(左右方向)上的加速度。这些数据对于监测车辆的加速、减速和侧向受力情况非常关键。
Andigilog公司的发展小趣事
当车轮转动时,传感器内部的磁体或霍尔元件会检测到车轮转速的变化,并产生相应的电信号。这些信号与车轮转速成比例,用于计算车辆的行驶速度和轮胎打滑情况。

问答坊 | AI 解惑

1A线性车载蓝牙芯片方案

1A线性锂电池充电器芯片(CN3056) 概述: CN3056是可以对单节锂离子或者锂-聚合物可充电电池进行恒流/恒压充电的充电器电路.该器件内部包括功率晶体管,应用时不需要外部的电流 检测电阻和阻流二极管.CN3056只需要极少的外围元器件,并且符合USB总 ...…

查看全部问答>

无线收发模块 CDTF100和CDR03A 问题

最近买了一对无线收发模块 CDTF100和CDR03A。但是在网上的介绍都太简略了。比如CDR03A的资料就是“引脚从左至右依次为 +  OUT  -”这样一句话。但CDR03A是有4个引脚的啊。难道中间2个脚都是OUT。那这2个有什么区别或是分工啊 ...…

查看全部问答>

如何直接进入SD卡目录!

我想点一下一个按钮就直接进入SD卡的目录下,用程序该怎样实现呀?谢谢了!…

查看全部问答>

请教WinCE6 SDK生成

CE6 SDK需要把模拟器也打进SDK如何实现? 还有一些帮助文档、类说明什么的,如何打在一起呢?…

查看全部问答>

调试运行不了,报错:管道的另一端上无任何进程

一个DLL,一个exe工程,加载dll使用#pragma comment lib形式,在EVC下可以运行的; 但现在要移植到ce6下,使用vs2005编译通过,部署也成功,但运行不起来,调试发现连APP的构造函数也没运行,就报错提示:管道的另一端上无任何进程。网上搜索没有 ...…

查看全部问答>

称量电路开发

1\\采用指定称量传感器(即量程为0.1~0.5Kg,信号:0.5mv/v,类型单点悬臂式铝合金传感器); 2\\采用5位7段LED数码管显示,显示精度为0.01g; 3\\带3组设定值(即下下限\\下限\\上限,可在量程范围内任意设定),并对应有三个中间继电器输出(当达到设定值 ...…

查看全部问答>

EVC自绘菜单的问题

如何去掉边框还有弹出子菜单的一个小三角形…

查看全部问答>

protel 里 在原有的工程里面重新加一些东西,有些问题

 然后无法加载到原来的 PCB里面 ,为什么啊来自EEWORLD合作群:12425841…

查看全部问答>

stm32f105/107的usb例程那里有??

st网站看过了,有一个1。0的库文件STM32_OTG_LIB,um0721.zip , 但是没有发现能直接运行在105/107上的例程,我需要找一个虚拟串口或usb_host或Mass_Storage。。 我还发现一个文件里面有stm3210e_eval 和stm3210b_eval 就是没有我要找的stm321 ...…

查看全部问答>