【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式

news/2024/5/6 15:45:48/文章来源:https://blog.csdn.net/m0_71572576/article/details/126966888

文章目录

  • 0 前言
  • 1 简介
  • 2 主要器件
  • 3 实现效果
  • 4 硬件设计
    • SIM800L模块的工作原理
    • 基于物联网的森林火灾探测系统框图
    • Arduino火灾检测系统的电路图
  • 5 软件说明
    • 用于基于物联网的森林火灾检测的Arduino程序
    • 设置Thingspeak帐户
  • 6 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于PID控制的智能平衡车设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md


1 简介

森林火灾是森林中常见的危害,对野生动物和环境造成很大危害。如果可以在森林地区部署一个强大的系统来检测火灾并提醒消防部门立即采取行动,则可以避免这种情况。

本项目,主要是制作一个使用物联网的森林火灾检测系统,该系统将检测火灾并通过物联网向消防部门发送紧急警报。本文使用GSM/GPRS模块与物联网服务器通信,因为通常在林区网络带宽非常低或不可用。因此,最好使用2G网络与服务器进行通信。

2 主要器件

  • Arduino Nano开发板
  • SIM800L GPS/GPRS模块
  • 3.7V锂离子电池
  • 火焰传感器

3 实现效果

在这里插入图片描述

4 硬件设计

SIM800L模块的工作原理

SIM800L是一款小巧的模块,可以进行GPRS传输、发送/接收短信和拨打语音电话。 SIM800L模块内含两根天线。第一种是用于可以直接焊接在板上的环形天线,另一种是用于外部天线。

规格参数:

  • 输入电压:3.4V - 4.2V
  • 接口:UART和AT指令
  • 支持的频率:四频 (850/950/1800/1900 MHz)
  • SIM卡槽:微型SIM卡槽
  • 天线连接器:IPX
  • 工作温度范围:-40至+85℃

基于物联网的森林火灾探测系统框图

如下示意框图所示,该项目由火焰传感器、Arduino Nano开发&SIM800L GSM/GPRS模块作为其主要组件。火焰传感器可以检测到火灾,该传感器提供与火灾状态相对应的数字输出,并由 Arduino Nano接收。

在这里插入图片描述
Arduino比较信号并在发生火灾时触发SIM800L。 SIM800L通过AT指令与thingspeak服务器进行通信。

Arduino火灾检测系统的电路图

如电路图所示,火焰传感器连接到Arduino Nano的数字输入引脚。

在这里插入图片描述
SIM800L通过电阻分压连接到Arduino Nano,因为SIM800L工作在3.3v电平。 SIM800L模块电源为3.4-4.2V,单独使用5V外部电源向Arduino Nano供电,也可使用3.7-5 V升压转换器以避免使用两个电源。

5 软件说明

用于基于物联网的森林火灾检测的Arduino程序

根据电路图成功完成硬件连接后,现在可以编写代码了。首先第一步是在代码中包含所有必需的库,本文是“SoftwareSerial.h”和“String.h”。

#include <SoftwareSerial.h>
#include <String.h>

接下来定义连接SIM800L的Arduino的RX、TX Pin。

SoftwareSerial gprsSerial(10, 11);

在setup()函数中,对所有的组件进行了初始化,如串口初始化、SIM800L模块初始化和GPIO引脚声明。

void setup()
{pinMode(12, OUTPUT);pinMode(9, INPUT);gprsSerial.begin(9600);               // the GPRS baud rateSerial.begin(9600);    // the GPRS baud rateModule_Init();
}

SIM800L模块初始化函数中,调用了几个AT指令来初始化模块,以及获取模块的状态。各个AT命令的功能可以在SIM800L的AT指令集中找到。这里需要注意的是在语句“gprsSerial.println(" AT + CSTT = \ "www " ")”中定义了访问点。确保将正确的接入点名称替换“www”。

void Module_Init()
{gprsSerial.println("AT");delay(1000);gprsSerial.println("AT+CPIN?");delay(1000);gprsSerial.println("AT+CREG?");delay(1000);gprsSerial.println("AT+CGATT?");delay(1000);gprsSerial.println("AT+CIPSHUT");delay(1000);gprsSerial.println("AT+CIPSTATUS");delay(2000);gprsSerial.println("AT+CIPMUX=0");delay(2000);ShowSerialData();gprsSerial.println("AT+CSTT="www"");delay(1000);ShowSerialData();gprsSerial.println("AT+CIICR");delay(3000);ShowSerialData();gprsSerial.println("AT+CIFSR");delay(2000);ShowSerialData();gprsSerial.println("AT+CIPSPRT=0");delay(3000);ShowSerialData();
}

在loop()函数中,从引脚12读取数字值并将其存储在变量中。

int fire = digitalRead(12);

然后,当检测到火灾时,使用if-else循环来检测SIM800L的触发器以进行必要的操作。如下图,AT+CIPSTART用于连接Thingspeak服务器并启动连接。 AT+CIPSEND 用于向服务器发送数据。这里一件重要的事情是用之前记录的字符串中的实际密钥替换“Thingspeak write API Key”。

gprsSerial.println("AT+CIPSTART="TCP","api.thingspeak.com","80"");//start up the connection
delay(6000);
ShowSerialData();
gprsSerial.println("AT+CIPSEND");//begin send data to remote server
delay(4000);
ShowSerialData();
String str = "GET https://api.thingspeak.com/update?api_key=ER43PWXXXXXQF0I&field1=" + String(1);
Serial.println(str);
gprsSerial.println(str);//begin send data to remote server

数据传输完成后,使用 AT+CIPSHUT 关闭连接。

gprsSerial.println("AT+CIPSHUT");//close the connection
delay(100);

设置Thingspeak帐户

硬件按照上述电路图成功完成后,需要搭建物联网平台,接收实时数据。这里的Thingspeak用于存储参数并在GUI中显示它们。要在Thingspeak中创建帐户,请按照以下步骤操作:

第1步:注册Thingspeak

首先,如果您之前没有Mathworks帐户,请访问 https://thingspeak.com/ 并创建一个新的免费Mathworks帐户。

第2步:登录 Thingspeak

使用您的账号登录 Thingspeak,然后单击“New Channel”。现在填写项目的详细信息,如名称、字段名称等。然后单击“Save channel”。

在这里插入图片描述
第3步:记录凭证

选择创建的频道并记录以下凭据。

  • Channel ID,位于频道视图的顶部。
  • Write API key,可以在频道视图的API密钥选项卡上找到。

在这里插入图片描述
第4步:将小部件添加到GUI

单击“Add Widgets”并添加四个合适的小部件,如仪表、数字显示和指示器。本文选用了指示器。为每个小部件选择适当的字段名称。

在这里插入图片描述
在这里插入图片描述


6 最后

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【牛客 - 剑指offer】JZ7 重建二叉树 Java实现 两种方案(递归+非递归stack)

文章目录剑指offer题解汇总 Java实现本题链接题目方案一 递归方案二 非递归 用栈实现剑指offer题解汇总 Java实现 https://blog.csdn.net/guliguliguliguli/article/details/126089434 本题链接 知识分类篇 - 树 - JZ7 重建二叉树 题目 题目的主要信息 根据二叉树的前序和中…

计算机组成原理笔记(王道考研) 第一章:计算机系统概述

内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记。 感谢LY&#xff0c;他帮我做了一部分笔记。由于听的时间不一样&#xff0c;第四章前的内容看起来可能稍显啰嗦&#xff0c;后面会记得简略一些。 西电的计算机组织与体系结构课讲法和王道考研的课不太一样&…

Affinity Propagation (AP)近邻传播聚类

近邻传播聚类&#xff1a;根据 N 个数据点之间的相似度聚类&#xff0c;相似度可以是对称的&#xff0c;即两个数据点互相之间的相似度一样(如欧氏距离)&#xff1b;也可以是不对称的&#xff0c;即两个数据点互相之间的相似度不等。这些相似度组成 NN 的相似度矩阵 S (N代表N个…

IP静态路由

IP静态路由基础概述 为了实现数据的转发,路由器必须有能力建立、刷新路由表,并根据路由表转发数据包 定义 路由是数据通信网络中的最基本的要素。路由信息就是知道报文发送的路径信息,路由的过程就是报文中继转发的过程 目的 为了实现数据的转发,路由器、路由表和路由协议是…

selenium工具之find_element(by=By.xx, value=xxx) find_elements(by=By.xx, value=xxx)详解

前言 selenium是一款十分强大的Web应用自动化框架,我们可以通过它来自动操控浏览器。操控浏览器的实质是操控浏览器的界面元素,因此定位元素是使用selenium的关键,selenium中通过 find_element() 方法来完成定位。 用法 1、通过webdriver对象的 find_element(by="属性名…

【教程】在 visual studio 共享和重用项目属性

环境 os&#xff1a;windows 10IDE&#xff1a;visual studio 2015 前言 在 visual studio 下开发项目时&#xff0c;通常会配置项目的属性&#xff0c;比如引入外部头文件&#xff0c;引入外部库之类的 尤其是不同的开发模式&#xff0c;debug 和 release&#xff0c;不同…

PHP+经贸时间轴 毕业设计-附源码211617

基于php经贸时间轴小程序 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;经贸时间轴小程序被用户普遍使用…

Cache与内存映射

全相联 主存的某一Block可以映射到Cache中的任意一Block&#xff0c;多对多N<>M&#xff1b; 全相联地址格式&#xff1a; 高位为块地址与tag比较&#xff0c;offset负责取出Block内的字节 放一道例题把&#xff1a; 既然新开了一章写就写的细一点&#xff0c;Cache全…

深度学习入门:基于Python的理论与实现

1.Python入门 python中使用class关键字来定义类&#xff1a; class 类名&#xff1a;def __init__(self, 参数,...):#构造函数...def 方法1(self, 参数, ...): # 方法1...def 方法2(self, 参数, ...): # 方法2...这里有一股特殊的__init__方法&#xff0c;这是进行初始化的方…

合成/聚合复用原则

合成/聚合复用原则 很多情况继承会带来麻烦:对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常密切的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当需要复用子类时,如果继承下来的实现不适合解决新…

港科夜闻|香港科大为庆祝建校30周年举办慈善义卖,限量推出一批具有收藏价值的非同质化代币(NFT)艺术精品...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大为庆祝建校30周年举办慈善义卖&#xff0c;限量推出一批具有收藏价值的非同质化代币(NFT)艺术精品。这系列NFT艺术收藏品的亮点&#xff0c;就是26款按英文字母A至Z排列、重现香港科大生活点滴的原创数码图像&#…

【计算机网络】第五章 传输层

第五章 传输层 一、传输层概述 传输层功能 协议&#xff1a;TCP和UDP 是只有主机才有的层次 功能&#xff1a; 提供进程和进程之间的通信&#xff0c;网络层提供的是主机之间的通信复用和分用&#xff1a;将数个进程的信息复用起来&#xff0c;发送出去&#xff1b;收到信息…

安装 Windows Server 2019 VM虚拟机

目录&#xff08;1&#xff09;系统语言设置&#xff08;2&#xff09;点击【Install now】&#xff08;3&#xff09;激活Windows&#xff08;4&#xff09;选择安装版本&#xff08;5&#xff09;同意【license terms】&#xff08;6&#xff09;选择安装类型&#xff08;7&a…

新华三学习记录

文章目录前言计算机网络基础基本概念TCP/IP四层和OSI七层模型LAN/WAN冲突域基本组网基本协议总结前言 本博客仅做学习笔记&#xff0c;如有侵权&#xff0c;联系后即刻更改 科普&#xff1a; 计算机网络基础 参考文章 基本概念 计算机网络 分布各地的具有独立功能的计算机…

【云原生-Docker】Docker 安装 MySQL

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Docker学习专栏 ✨学习社区&#xff1a;&#x1f449;不会压弯的小飞侠 ✨知足上进&#xff0c;不负…

5.Eureka服务注册的源码分析(springcloud)

一、Eureka 概念的理解 1 服务的注册 当项目启动时&#xff08;eureka 的客户端&#xff09;&#xff0c;就会向 eureka-server 发送自己的元数据&#xff08;原始数据&#xff09;&#xff08;运行的 ip&#xff0c;端口 port&#xff0c;健康的状态监控等&#xff0c;因为使用…

P02 反射

P02 反射1.反射概述1.1 反射的基本作用1.2 反射的关键2.反射获取类对象2.1 forName(String className)2.2 类名.class2.3 对象.getClass()3.反射获取构造器对象![在这里插入图片描述](https://img-blog.csdnimg.cn/e234dd155af94a5c80223d64b112f4bf.png)3.1 Class 类中用于获取…

18.Composition API(四)高级语法补充

1.自定义指令 之前我们学习了各种指令&#xff1a;v-model、v-for、v-show等&#xff0c;除了这些指令外&#xff0c;Vue允许我们自定义指令。 什么时候使用自定义指令&#xff1f; 需要对DOM元素进行底层操作&#xff0c;这个时候就会用到自定义指令。 注意&#xff1a;在V…

第二章 ES数据操作与集群

一、回顾 1.介绍ES 2.ES原理 3.ES功能 4.ES使用场景 5.ES安装 1)ES配置文件(单点配置) [root@es01 ~]# grep ^[a-z] /etc/elasticsearch/elasticsearch.yml node.name: es-1 path.data: /data/es/data path.logs: /data/es/log bootstrap.memory_lock: true network.host: 1…

Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

因为另一台机器开发时,android studio提示更新什么东西,无脑点了。 导致原先的那台开发机器,无法build,报异常: Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8 有两个方法解决: 1、修改jdk从1.8改到11如果没有这个选项,可能需要安装…