Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块

该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器达到不同的阈值的时候,LED灯会通过不同的颜色来进行警示。烟雾浓度增大,LED灯依次显示绿、蓝、红,且步进电机会驱动风扇进行不同挡位转速旋转,蜂鸣器会进行警报提示。烟雾浓度超过最大的阈值,或者检测到有火焰产生,红灯亮起,蜂鸣器鸣响,步进电机以最大的转速驱动风扇旋转,SIM900A会给指定用户拨打电话。
因为该模块有WiFi模块,也可以通过连接WiFi通过APP进行控制步进电机的转速驱动,也可以实现手动的控制风扇转速。

一、设备准备

Arduino UNO R3Arduino UNO R3开发板+MQ-2烟雾浓度传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成。MQ-2烟雾浓度传感器实时检测室内烟雾浓度数值,若超过阈值,风扇进行转动
在这里插入图片描述
WIFI模块
在这里插入图片描述
MQ-2烟雾浓度传感器
在这里插入图片描述
火焰传感器模块
在这里插入图片描述

舵机
在这里插入图片描述
无源蜂鸣器
在这里插入图片描述
风扇
在这里插入图片描述
RGB三色LED灯
在这里插入图片描述

步进电机
在这里插入图片描述
SIM900A
在这里插入图片描述

二、设备连接

烟雾浓度传感器

烟雾浓度传感器Arduino UNO R3
VCC5V
GNDGND
DOP7
AOA0

火焰传感器

火焰传感器Arduino UNO R3
DOP2
GNDGND
VCC5V

无源蜂鸣器

无源蜂鸣器Arduino UNO R3
GNDGND
I/OP8
VCC5V

三色LED灯

三色LED灯Arduino UNO R3
RP11
GP12
BP13
GNDGND

步进电机

步进电机Arduino UNO R3
IN3P9
IN4P4
+5V
-GND

风扇

风扇步进电机
红线B灯处
黑线C灯处

WIFI模块(局域模式)

WIFI模块Arduino UNO R3
RXTX
TXRX
GNDGND
5V5V

SIM900A模块

SIM900AArduino UNO R3
5VRTX
5VTRX
GNDGND
VCC55V
GNDGND

舵机模块

舵机Arduino UNO R3
黄线P6
灰线GND
红线5V

三、配置网络

将代码下载到Arduino UNO R3开发板上
WIFI模块需要调节到局域模式,此时打开手机wifi热点,即可检测到WiFi模块所组成的网络,在这里插入图片描述,进行连接。
APP下载路径,打开下载安装好的手机APP
在这里插入图片描述
之后,点击右上角的连接在这里插入图片描述
连接成功之后,即可点击 开锁(49)、加速、减速、蜂鸣器开(50)、蜂鸣器关(51)、一档、二档、三档 可以对舵机、蜂鸣器以及风扇进行控制。

四、完整代码

/******************************************************* connection:* MQ-2 gas sensor            Uno R3* D0                            7* A0                            A0* GND                           GND* VCC                            5V* * * Dual-color LED    Arduin Uno R3* R                  11* G                  12* B                  13* GND                GND* * * buzzerPin                      8* GND                           GND* VCC                            5V* * * motorIn1 = 9;* motorIn2 = 10;* *******************************************************/
#include <Servo.h>  //Arduino IDE自带的舵机库文件
const int Servo_Pin = 6;      //模拟开门
Servo myservo;      //定义舵机对象myservoconst int digitalInPin = 2; //D0 attach to digital 2const int analogPin=A0; //the DO on the Module attach to Pin7 on the SunFounder 
const int digitalPin=7;  //the D0 attach to pin7
int Astate=0;
boolean  Dstate=0;int redPin = 11;    // select the pin for the red LED
int greenPin = 12; 
int bluePin = 13; int buzzerPin = 8;//the pin of the active buzzer attach to pin8
int comdata;
const int motorIn1 = 9;
const int motorIn2 = 4;
#define rank1 150
#define rank2 200
#define rank3 250void set_tele(void)
{Serial.begin(115200);                  //波特率为115200delay(1000);Serial.println("AT\r\n");                  //判断模块是否正常delay(1000);
}
void tele(void)
{Serial.println("AT+CPIN?\r\n");         delay(1000);Serial.println("AT+CSQ\r\n");              delay(3000);Serial.print("AT+CREG?\r\n");          delay(3000);Serial.println("AT+CGATT?\r\n");  delay(1000);Serial.println("ATD15336551683;\r\n");      delay(30000);
}void setup() 
{pinMode(digitalInPin,INPUT);//set the pins state pinMode (digitalPin,INPUT);pinMode(redPin, OUTPUT); //set redPin as OUTPUTpinMode(greenPin, OUTPUT);pinMode(bluePin, OUTPUT);pinMode(buzzerPin,OUTPUT);//set the buzzer as as OUTPUTdigitalWrite(buzzerPin,LOW);//initialize the buzzerPin as LOW levelpinMode(motorIn1,OUTPUT);pinMode(motorIn2,OUTPUT);pinMode(Servo_Pin, OUTPUT);  //初始化舵机为输出模式myservo.attach(Servo_Pin);    //设置舵机控制引脚为6myservo.write(0);    //初始化舵机位置0set_tele();Serial.begin(9600);
} 
void loop()
{  boolean stat = digitalRead(digitalInPin);Serial.print("D0: "); Serial.println(stat); // print to serial monitor Serial.println(" ");Astate=analogRead(analogPin);//read the value of A0Serial.println(Astate); //peint if( stat == LOW){analogWrite(motorIn1,0);analogWrite(motorIn2,rank3);analogWrite(redPin, 255); //redanalogWrite(greenPin, 0);analogWrite(bluePin, 0);//digitalWrite(buzzerPin,LOW);myservo.write(90); //舵机旋转至90度delay(5000);      // 延时3000msmyservo.write(0);//舵机旋转至0度delay(1000);      // 延时3000msfor(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800{tone(8,i);   //in pin7 generate a tone,it frequence is idelay(2);    //wait for 5 milliseconds   }delay(1000);   //wait for 4 seconds on highest frequencefor(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200{tone(8,i);  //in pin7 generate a tone,it frequence is idelay(2);  //delay 10ms}tele();}if((Astate>120 && Astate<150)){analogWrite(motorIn1,0);analogWrite(motorIn2,rank1);analogWrite(redPin, 0); //redanalogWrite(greenPin, 255);analogWrite(bluePin, 0);//digitalWrite(buzzerPin,LOW);myservo.write(90); //舵机旋转至90度delay(5000);      // 延时3000msmyservo.write(0);//舵机旋转至0度delay(1000);      // 延时3000msfor(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800{tone(8,i);   //in pin7 generate a tone,it frequence is idelay(10);    //wait for 5 milliseconds   }delay(4000);   //wait for 4 seconds on highest frequencefor(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200{tone(8,i);  //in pin7 generate a tone,it frequence is idelay(10);  //delay 10ms}}else if((Astate>=150 && Astate<200)){analogWrite(motorIn1,0);analogWrite(motorIn2,rank2);analogWrite(redPin, 0); //redanalogWrite(greenPin, 0);analogWrite(bluePin, 255);//digitalWrite(buzzerPin,LOW);myservo.write(90); //舵机旋转至90度delay(5000);      // 延时3000msmyservo.write(0);//舵机旋转至0度delay(1000);      // 延时3000msfor(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800{tone(8,i);   //in pin7 generate a tone,it frequence is idelay(5);    //wait for 5 milliseconds   }delay(2000);   //wait for 4 seconds on highest frequencefor(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200{tone(8,i);  //in pin7 generate a tone,it frequence is idelay(5);  //delay 10ms}}else if((Astate>=200)){analogWrite(motorIn1,0);analogWrite(motorIn2,rank3);analogWrite(redPin, 255); //redanalogWrite(greenPin, 0);analogWrite(bluePin, 0);//digitalWrite(buzzerPin,LOW);myservo.write(90); //舵机旋转至90度delay(5000);      // 延时3000msmyservo.write(0);//舵机旋转至0度delay(1000);      // 延时3000msfor(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800{tone(8,i);   //in pin7 generate a tone,it frequence is idelay(2);    //wait for 5 milliseconds   }delay(1000);   //wait for 4 seconds on highest frequencefor(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200{tone(8,i);  //in pin7 generate a tone,it frequence is idelay(2);  //delay 10ms}tele();
/*      Serial.print("AT+CMGD=1");Serial.print("\r\n");Serial.print("AT");Serial.print("\r\n");Serial.print("AT+CPIN?");Serial.print("\r\n");Serial.print("AT+CSQ");Serial.print("\r\n");Serial.print("AT+CREG?");Serial.print("\r\n");Serial.print("AT+CGATT?");Serial.print("\r\n");Serial.print("ATD15336551683;");Serial.print("\r\n");
*/    }else{analogWrite(redPin, 0); //redanalogWrite(greenPin, 0);analogWrite(bluePin, 0);//digitalWrite(buzzerPin,HIGH);pinMode(buzzerPin,INPUT);pinMode(motorIn1,0);pinMode(motorIn2,0);}delay(200);//delay 200mswhile (Serial.available()){comdata= Serial.read();if(comdata==49){Serial.print("open the door\n");myservo.write(90); //舵机旋转至90度delay(1000);      // 延时3000msmyservo.write(0);//舵机旋转至0度delay(1000);      // 延时3000ms}if(comdata==50){Serial.print("open fmq\n");for(int i = 200;i <= 500;i++)   //frequence loop from 200 to 800{tone(8,i);   //in pin7 generate a tone,it frequence is idelay(5);    //wait for 5 milliseconds   }delay(4000);   //wait for 4 seconds on highest frequencefor(int i = 500;i >= 200;i--)  //frequence loop from 800 downto 200{tone(8,i);  //in pin7 generate a tone,it frequence is idelay(10);  //delay 10ms}delay(100);}if(comdata==51){Serial.print("close fmq\n");pinMode(buzzerPin,INPUT);delay(100);}if(comdata==52){Serial.print("111\n");analogWrite(motorIn1,0);analogWrite(motorIn2,rank1);delay(100);}if(comdata==74){Serial.print("222\n");analogWrite(motorIn1,0);analogWrite(motorIn2,rank2);delay(100);}if(comdata==54){Serial.print("333\n");analogWrite(motorIn1,0);analogWrite(motorIn2,rank3);delay(100);}}
}

五、演示视频

B站演示视频
CSDN演示视频

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

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

相关文章

可编程ic卡 通用吗_8255可编程IC

可编程ic卡 通用吗Introduction 介绍 An 8255 programmable integrated circuit (IC) is an IC used for interfacing the microprocessor with the peripheral devices. It is a 40 pin IC which was introduced by INTEL to use with its 8085 and 8086 microprocessors. 82…

九、逻辑回归多分类和softmax多分类

一、逻辑回归多分类 假设激活函数使用的是sigmoid函数 逻辑回归多分类其实是多个二分类而已&#xff0c;若求三分类问题需要对训练的数据样本进行适当的修改调整即可&#xff0c;如何修改样本数据可以参考逻辑回归二分类和多分类本质区别&#xff0c;内容都一样&#xff0c…

十、评估指标

我看过很多课程&#xff0c;不过内容都大差不差&#xff0c;也可以参考这篇模型评估方法 一、K折交叉验证 一般情况&#xff0c;我们得到一份数据集&#xff0c;会分为两类&#xff0c;一类是trainset训练集&#xff0c;另一类十testset测试集。通俗一点也就是训练集相当于平…

leetcode 47. 全排列 II 思考分析

题目 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思考分析以及代码 这一题和前面的做过的两个题目有所关联&#xff1a; leetcode 46. 全排列 思考分析 再加上leetcode 491. 递增子序列 思考分析类似的去重操作。 先画出解空间树…

hdu 4472 Count(递推即dp)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4472 代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> #include <queue> #include <vector> …

十一、决策树和随机森林

这门课和另一门课内容都差不多&#xff0c;可以参考七、决策树算法和集成算法该篇博文。 一、决策树相关概念 逻辑回归本质 逻辑回归&#xff1a;线性有监督分类模型。常用求解二分类问题&#xff0c;要么是A类别要么是B类别&#xff0c;一般会以0.5作为划分阈值&#xff0c…

【C++grammar】继承与构造

目录1.继承1、Inheritance (继承)2、避免一个类被继承&#xff08; C11 &#xff09;3、继承实例4、完整代码5、继承的优缺点是什么?2.继承中的构造函数1、 派生类继承的成员2、调用基类构造函数3.继承中的默认构造函数1、基类的无参构造函数2、由编译器自动生成的基类构造函数…

(转)将cocos2dx项目从VS移植到Eclipse

本文转自:http://www.cnblogs.com/Z-XML/p/3349518.html 引言&#xff1a;我们使用cocos2d-x引擎制作了一款飞行射击游戏&#xff0c;其中创新性地融入了手势识别功能。但是我们在移植过程中遇到了很多的问题&#xff0c;同时也发现网上的资料少而不全。所以在项目行将结束的时…

十二、聚类算法——相似度测量

两套学习资料都类似&#xff0c;可参考聚类算法实战 一、聚类 聚类&#xff1a;物以类聚&#xff0c;人以群分&#xff0c;是无监督学习中的一种。 没有y&#xff0c;只有x&#xff0c;把不同的x根据相似度自动的聚成好多堆儿 本质上&#xff0c;N个样本&#xff0c;映射到K个…

leetcode 344. 反转字符串 541. 反转字符串 II 双指针解

目录leetcode 344.反转字符串1、题目2、思考leetcode 541. 反转字符串 II1、题目2、思考leetcode 344.反转字符串 1、题目 2、思考 典型的双指针解法&#xff1a; 一个从前往后&#xff0c;一个从后往前&#xff0c;指针对应的交换即可。 class Solution { public:void reve…

十三、聚类算法

六、聚类算法实战 一、聚类 聚类是一种无监督的机器学习任务&#xff0c;可以自动将数据划分为类cluster&#xff0c;因此聚类分组不需要提前被告知所划分的组应该是什么样子的。因为我们甚至可能都不知道我们在寻找什么&#xff0c;所以聚类是用于知识发现而不是预测。 聚类…

pl/sql中的赋值运算符_如何在SQL中使用AND / OR运算符?

pl/sql中的赋值运算符Basically, AND / OR operator is used to retrieving the record from the database. If we give more than one conditions by using AND Operator, then it retrieves the data from the database when both the conditions are true. And if we use OR…

【C++grammar】名字隐藏与重定义

目录1、继承中的名字隐藏1.基类同名函数被隐藏的现象描述2.问题理解3.避免现象2、重定义1.现象描述2.重定义与重载的区别3.能否使用 using 将基类成员引入到派生类定义中1、继承中的名字隐藏 1.基类同名函数被隐藏的现象描述 在学习变量作用域的时候知道&#xff0c;全局变量…

十四、聚类实战——图片压缩

对同一像素点值的像素点归为一类&#xff0c;通过平均值进行取代&#xff0c;从而将图像进行压缩并且保证图像尽可能不失真&#xff0c;关键信息仍保留。 from PIL import Image import numpy as np from sklearn.cluster import KMeans import matplotlib import matplotlib.…

步骤菜单使用css3实现

代码库&#xff1a;http://thecodeplayer.com/walkthrough/css3-breadcrumb-navigation 有兴趣的可以看一下&#xff0c;看完绝对让你大饱眼福。首先截图&#xff0c;看效果看着很酷吧&#xff0c;其实实现起来也不是很难&#xff0c;里边需要用的技术有:box-shadow,计数器&…

【嵌入式系统】STM32串口通信的四种方法(基于RTOS)

目录1、串行通信的基本参数2、轮询方式代码效果3、中断方式代码效果4、中断加上时间戳方式代码及效果5、DMA空闲中断方式接收数据1、串行通信的基本参数 串行端口的通信方式是将字节拆分成一个接一个的位再传输出去&#xff0c;接收方再将此一个一个的位组合成原来的字符&…

十五、聚类的评估

一、Given Label 均一性homogeneity&#xff1a;一个簇中只包含一个类别样本&#xff0c;Precision 完整性completeness&#xff1a;同类别样本被归到同一个簇中&#xff0c;Recall 将均一性h和完整性c进行结合(二者加权平均)得到V-Measure&#xff0c;&#xff0c;β为权重 …

SQL SERVER作业的Schedules浅析

SQL SERVER作业的计划&#xff08;Schedules&#xff09;&#xff0c;如果你没仔细研究过或没有应用一些复杂的计划&#xff08;Schedules&#xff09;&#xff0c;那么你觉得SQL SERVER作业的计划(Schedules)非常好用&#xff0c;也没啥问题&#xff0c;但是我要告诉你一个“残…

leetcode 51. N 皇后 思考分析

目录题目思考AC代码题目 n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 思考 首先以N4为例&#xff0c;画出解空间树的一部分&#xff1a; 根据模板&#xff1a; void backtracking(参数) {if(终止条件){存放结果…

No module named ‘tensorflow.examples‘解决方案

想从tensorflow中导入mnist手写数字数据集&#xff0c;结果报错 from tensorflow.examples.tutorials.mnist import input_data import tensorflow.compat.v1 as tf tf.disable_v2_behavior()my_mnist input_data.read_data_sets("MNIST_data_bak/", one_hotTrue)&…