这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
基于单片机的森林远程智能火灾监控系统
学长这里给一个题目综合评分(每项满分5分)
选题指导, 项目分享:
https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md
森林火灾是森林中常见的危害,对野生动物和环境造成很大危害。如果可以在森林地区部署一个强大的系统来检测火灾并提醒消防部门立即采取行动,则可以避免这种情况。
本项目,主要是制作一个使用物联网的森林火灾检测系统,该系统将检测火灾并通过物联网向消防部门发送紧急警报。本文使用GSM/GPRS模块与物联网服务器通信,因为通常在林区网络带宽非常低或不可用。因此,最好使用2G网络与服务器进行通信。
SIM800L是一款小巧的模块,可以进行GPRS传输、发送/接收短信和拨打语音电话。 SIM800L模块内含两根天线。第一种是用于可以直接焊接在板上的环形天线,另一种是用于外部天线。
规格参数:
如下示意框图所示,该项目由火焰传感器、Arduino Nano开发&SIM800L GSM/GPRS模块作为其主要组件。火焰传感器可以检测到火灾,该传感器提供与火灾状态相对应的数字输出,并由 Arduino Nano接收。
Arduino比较信号并在发生火灾时触发SIM800L。 SIM800L通过AT指令与thingspeak服务器进行通信。
如电路图所示,火焰传感器连接到Arduino Nano的数字输入引脚。
SIM800L通过电阻分压连接到Arduino Nano,因为SIM800L工作在3.3v电平。 SIM800L模块电源为3.4-4.2V,单独使用5V外部电源向Arduino Nano供电,也可使用3.7-5 V升压转换器以避免使用两个电源。
根据电路图成功完成硬件连接后,现在可以编写代码了。首先第一步是在代码中包含所有必需的库,本文是“SoftwareSerial.h”和“String.h”。
#include
#include
接下来定义连接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 rate
Serial.begin(9600); // the GPRS baud rate
Module_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用于存储参数并在GUI中显示它们。要在Thingspeak中创建帐户,请按照以下步骤操作:
第1步:注册Thingspeak
首先,如果您之前没有Mathworks帐户,请访问 https://thingspeak.com/ 并创建一个新的免费Mathworks帐户。
第2步:登录 Thingspeak
使用您的账号登录 Thingspeak,然后单击“New Channel”。现在填写项目的详细信息,如名称、字段名称等。然后单击“Save channel”。
第3步:记录凭证
选择创建的频道并记录以下凭据。
第4步:将小部件添加到GUI
单击“Add Widgets”并添加四个合适的小部件,如仪表、数字显示和指示器。本文选用了指示器。为每个小部件选择适当的字段名称。