毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

news2024/11/14 6:34:40

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

  • 1、项目简介
    • 1.1 系统构成
    • 1.2 系统功能
  • 2、部分电路设计
    • 2.1 STC89C52单片机核心系统电路设计
    • 2.2 dht11温湿度检测电路设计
    • 2.3 NRF24L01无线通信电路设计
  • 3、部分代码展示
    • 3.1 NRF24L01初始化
    • 3.2 NRF24L01的SPI写时序
    • 3.3 读取BH1750光照数据
    • 3.3 串口初始化
  • 实物图

1、项目简介

  • 选题指导,项目分享: https://gitee.com/lighter-z/embedded-base/tree/master
  • 点击查看详细资料

1.1 系统构成

本设计共两块电路板,无线环境参数采集板将各项信息通过2.4G无线模块传给显示板,显示板完成显示及报警功能
接收板电路:由NRF24L01无线模块电路+LCD12864屏幕显示电路+按键电路+ds1302实时时钟电路+报警电路+STC89C52单片机最小系统电路构成
发送板电路:STC89C52单片机最小系统电路+PM2.5检测电路+dht11温湿度传感器电路+bh1750光照传感器电路+NRF24L01无线模块电路构成

1.2 系统功能

  • 1.设计采用2.4G的NRF24L01无线模块实现无线通信。
  • 2.设计采用温湿度传感器DHT11完成温湿度的采集。
  • 3.设计采用PM2.5传感器GP2Y1050AU0F(或可互换型号)粉尘参数的采集。
  • 4.光强传感器BH1750FVI(或可互换型号)完成环境光照强度参数的采集。
  • 5.按键可设置温湿度上下限报警值、PM2.5上限报警值,蜂鸣器报警、LED报警提示。
  • 6.按键可设置日期时间参数。
  • 7.按设置键进入设置功能,再按加减按键设置对应参数,按设置按键切换设置项。
  • 8.设计采用LCD12864液晶中文显示,各项监测值均在液晶上直观显示。

2、部分电路设计

2.1 STC89C52单片机核心系统电路设计

STC89C52单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。

单片机最小系统原理图如下图所示:

实物图:

2.2 dht11温湿度检测电路设计

DHT11 是一款湿温度一体化的数字传感器。

该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。

传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。

其具体电路原理图如下图所示:

实物图如下图所示:

2.3 NRF24L01无线通信电路设计

NRF24L01是NORDIC公司生产的一款无线通信通信芯片,采用FSK 调制,集成NORDIC自家的Enhanced Short Burst协议。可以实现点对点或是1对6的无线通信。无线通信速度最高可达到2Mbps。

NRF24L01采用SPI通信,可以很方便的连接到MCU上面。

特点:

  • 2.4G全球开放的ISM频段,免许可证使用。
  • 126个可选的频道,满足多点通信和调频通信的需要。
  • 最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。
  • 内置CRC检错和点对多点的通信地址控制。
  • 可设置自动应答,确保数据可靠传输。

其具体电路原理图如下图所示:
在这里插入图片描述

实物图如下:

3、部分代码展示

3.1 NRF24L01初始化

由于需要对模拟信号进行处理,所以使用到STM32中的ADC

void init_NRF24L01(void)
{
    inerDelay_us(100);
 	CE=0;    // chip enable
 	CSN=1;   // Spi disable 
 	SCK=0;   // Spi clock line init high
	SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址	
	SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
	SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动	ACK应答允许	
	SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
	SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
	SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
	SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   		//设置发射速率为1MHZ,发射功率为最大值0dB	
	SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断响应,16位CRC,主发送
}	

3.2 NRF24L01的SPI写时序

uint SPI_RW(unsigned char uchar)
{
	unsigned char  bit_ctr;
   	for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
   	{
		MOSI = (uchar & 0x80);         // output 'uchar', MSB to MOSI
		uchar = (uchar << 1);           // shift next bit into MSB..
		SCK = 1;                      // Set SCK high..
		uchar |= MISO;       		  // capture current MISO bit
		SCK = 0;            		  // ..then set SCK low again
   	}
    return(uchar);           		  // return read uchar
}

3.3 读取BH1750光照数据

void Read_BH1750(void)
{   
  uchar i;	
  BH1750_Start();                          //起始信号
  BH1750_SendByte(SlaveAddress+1);         //发送设备地址+读信号
	
 for (i=0; i<3; i++)                      //连续读取6个地址数据,存储中BUF
  {
      BUF[i] = BH1750_RecvByte();          //BUF[0]存储0x32地址中的数据
      if (i == 3)
      {

         BH1750_SendACK(1);                //最后一个数据需要回NOACK
      }
      else
      {		
        BH1750_SendACK(0);                //回应ACK
     }
 }
  BH1750_Stop();                          //停止信号
  Delay5ms();
}

3.3 串口初始化

void UartInit(void)		//2400bps@11.0592MHz
{
  SCON = 0x50;            //8-bit variable UART
  PCON=0X00;
  TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode
  TH1 = TL1 = 0XF4; //Set auto-reload vaule
  TR1 = 1;                //Timer1 start run

  ES = 0;                 //Enable UART interrupt
  EA = 0;                 //Open master interrupt switch
} 

实物图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H264基本原理

前言H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛&#xff0c;最流行的。随着 x264/openh264以及ffmpeg等开源库的推出&#xff0c;大多数使用者无需再对H264的细节做过多的研究&#xff0c;这大降低了人们使用H264的成本。但为了用好H264&#xff0c;我们还是要对…

决策树在sklearn中的实现

目录 一.模块sklearn.tree 二.建模基本流程 三.DecisionTreeClassifier重要参数 1.criterion 2.random_state & splitter 3.剪枝参数max_depth 4.剪枝参数min_samples_leaf & min_samples_split 5.max_features & min_impurity_decrease 6.class_weight …

Java奠基】掌握Java基础知识

目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式&#xff0c;字面量的分类如下&#xff1a; 字面量类型说明举例整数类型不带小数点的数字12&#xff0c;25小数类型带小数点的数字3.14&#xff0c;-5&#xff0c;20…

【设计模式】7.适配器模式

概述 如果去欧洲国家去旅游的话&#xff0c;他们的插座如下图最左边&#xff0c;是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑&#xff0c;手机在当地不能直接充电。所以就需要一个插座转换器&#xff0c;转换器第1面插入当地的插座&#xff0c;第2面供…

易基因|独家分享:高通量测序后的下游实验验证方法——DNA甲基化篇

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。此前&#xff0c;我们分享了DNA甲基化研究的测序数据挖掘思路&#xff08;点击查看详情&#xff09;&#xff0c;进而鉴定出研究的目的基因或目标区域的DNA甲基化。做完测序后&#xff0c;…

华为OD机试题,用 Java 解【租车骑绿岛】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

电商(强一致性系统)的场景设计

领域拆分&#xff1a;如何合理地拆分系统&#xff1f; 一般来说&#xff0c;强一致性的系统都会牵扯到“锁争抢”等技术点&#xff0c;有较大的性能瓶颈&#xff0c;而电商时常做秒杀活动&#xff0c;这对系统的要求更高。业内在对电商系统做改造时&#xff0c;通常会从三个方面…

OM | 具有弹性需求的广义随机共乘(拼车)用户均衡问题

编者按&#xff1a; 通过扩展确定性共乘用户均衡问题&#xff0c;提出了具有弹性需求的广义随机共乘用户均衡问题&#xff0c;用于具有共乘出行活动的城市交通网络分析。 1、引言​ 共乘&#xff08;ridesharing&#xff09;&#xff0c; 即生活中的“拼车”、“顺风车”&am…

华为OD机试题,用 Java 解【斗地主】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

巧用 ChatGPT,让开发者的学习和工作更轻松

引言 随着人工智能技术的快速发展和广泛应用&#xff0c;ChatGPT 作为一种新兴的自然语言处理模型&#xff0c;近期备受瞩目&#xff0c;引发了广泛讨论。 ChatGPT 具有多种应用场景&#xff0c;既可以用作聊天机器人&#xff0c;实现智能问答和自然语言交互&#xff0c;也可…

2.27自动化测试

第零步 根据脑图写测试用例第一步.创建共同类防止每次进行测试不同界面的时候都重新创建驱动浪费时间注意要用static 否则后续无法直接使用getdriver方法第二步 对登录界面写测试用例先在test下创建一个登录类.每个界面用不同的类,防止混在一起并让其继承common包下的commonDri…

让马斯克反悔的毫米波雷达,被国产雷达头部厂商木牛科技迭代到了5D时代

近日&#xff0c;特斯拉或将在其HW4.0硬件系统配置一枚高精度4D毫米波雷达的消息在外网刷屏。据分析&#xff0c;“纯视觉”信仰者马斯克之所以做出这样的决定&#xff0c;一方面是减配了雷达的特斯拉自动驾驶&#xff0c;表现不尽如人意&#xff1b;另一方面也跟毫米波雷达的技…

第13天-仓储服务(仓库管理,采购管理 ,SPU规格维护)

1.仓储服务开发配置 1.1.加入到Nacos注册中心 spring:application:name: gmall-warecloud:nacos:discovery:server-addr: 192.168.139.10:8848namespace: 36854647-e68c-409b-9233-708a2d41702c1.2.配置网关路由 spring:cloud:gateway:routes:- id: ware_routeuri: lb://gmal…

CDH 6.3.2启用YARN高可用

升级原因 CDH平台即将被切换成生产环境&#xff0c;而生产环境几乎都是HA&#xff0c;所以需要将YARN升级成HA。 升级准备 CDH已经成功安装并正常使用CMS的管理员账号正常登陆 CDH启用YARN HA 登陆CMS系统->选择YARN服务->点击进入到YARN服务详情页面&#xff0c;再…

【Yolov5】保姆级别源码讲解之-模型训练部分train.py文件

本次讲解yolov5训练类train.py1.主函数2.main函数2.1 第一部分 进行校验2.2 第二部分 配置resume参数用于中断之后进行训练2.3第三部分 DDP mode2.4 第四部分3.训练结果1.主函数 opt参数部分和main方法 weights&#xff1a;权重文件路径 – cfg&#xff1a;存储模型结构的配置…

解决AAC音频编码时间戳的计算问题

1.主题音频是流式数据&#xff0c;并不像视频一样有P帧和B帧的概念。就像砌墙一样&#xff0c;咔咔往上摞就行了。一般来说&#xff0c;AAC编码中生成文件这一步&#xff0c;如果使用的是OutputStream流写入文件的话&#xff0c;就完全不需要计算时间。但在音视频同步或者使用A…

pytorch入门3--线性回归以及许多python,pytorch函数的用法

先补充一些知识点&#xff0c;这里不一定用得到&#xff0c;后面的学习过程中可能用得到。 1.batch表示批量&#xff0c;就是一批数据集的意思&#xff1b; 2.batch_size表示数据集&#xff08;样本集、训练集&#xff09;的大小&#xff08;数据的个数&#xff09;&#xff1b…

进程与线程的区别

进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间&#xff0c;一个进程可以有多个线程&#xff0c;比如在Windows系统中&#xff0c;一个运行的xx.exe就是一个进程。 线程 进程中的一个执行任务&#xff08;控制单元&#xff09;&#xf…

深入理解跳表及其在Redis中的应用

前言跳表可以达到和红黑树一样的时间复杂度 O(logN)&#xff0c;且实现简单&#xff0c;Redis 中的有序集合对象的底层数据结构就使用了跳表。其作者威廉普评价&#xff1a;跳跃链表是在很多应用中有可能替代平衡树的一种数据结构。本篇文章将对跳表的实现及在Redis中的应用进行…

蓝桥杯:染色时间

蓝桥杯&#xff1a;染色时间https://www.lanqiao.cn/problems/2386/learning/?contest_id80 问题描述 输入格式 输出格式 样例输入输出 样例输入 样例输出 评测用例规模与约定 解题思路&#xff1a;优先队列 AC代码(Java)&#xff1a; 问题描述 小蓝有一个 n 行 m 列…