背景知识视频教程
Arduino分步指南:完整指南 - 国外课栈viadean.com
Arduino微控制器:学习Arduino制作项目 - 国外课栈viadean.com
通过构建实际应用程序来掌握Arduino - 国外课栈viadean.com
空气污染是当今世界上最大的环境和公共卫生挑战之一。 空气污染会对我们的健康,气候和生态系统产生不利影响。 监测空气质量对于了解和预防空气污染以及评估排放源以保持更健康的空气状况并有助于对抗温室效应至关重要。
该项目旨在创建两个能够通过LoRa无线通信相互通信的设备。 有很多传感器可以用来监测空气质量,但是在这个项目中,我们将重点介绍两个DSM501A灰尘传感器和MQ131臭氧气体传感器。 这些传感器将通过Ra-02 LoRa模块作为客户端收发器连接到第一台设备。 第二个设备将具有LoRa屏蔽作为服务器收发器,并将SIM800L作为ThingSpeak的网关连接。
硬件
软件
库文件
介绍
Ra-02 SX1278 LoRa模块
Ra-02 LoRa模块可与兼容的FSK(频移键控)远程调制和解调一起用于超长距离扩频通信。 这为距离覆盖范围,抗干扰和功耗低的传统无线设计提供了解决方案。 Ra-02可广泛用于各种联网场合,例如自动抄表,房屋自动化,安全系统和远程灌溉系统。
Dragino LoRa板
Dragino LoRa Shield是基于Arduino屏蔽形式并基于开源库的远程收发器。 LoRa Shield允许用户发送数据并以低数据速率到达极长的范围。 它提供超远距离扩频通信和高抗干扰性,同时将电流消耗降至最低。
它们如何工作
他们使用一种称为扩频通信的技术。 信息在比必要的宽得多的带宽上传输。 这样,增加了抵抗外部窄带干扰的强度。 由于任何发射信号的带宽越宽,干扰在带宽的一小部分上的相对影响就越小。 扩频技术允许在同一带宽中同时复用多个传输。 由于多个用户可以共享相同的扩频带宽而不会互相干扰,因此可以将它们称为多址技术。
SIM800L GSM / GPRS模块
SIM800L是一个蜂窝模块,可用于GPRS数据传输,发送和接收SMS以及拨打和接听语音电话。 该板尺寸紧凑,电流消耗低。 它甚至具有省电技术,可在不使用时将电流消耗限制为低至1 mA。 最重要的是,该模块支持四频GSM / GPRS网络,这意味着它可以在世界上的任何地方工作。
它是如何工作
该模块旨在类似于带有SIM卡的蜂窝电话的操作。 上电后,模块启动,搜索最近的蜂窝网络并自动连接到该网络。 板上的LED显示屏指示连接状态。 没有网络覆盖时,它会快速闪烁,但在连接时会缓慢闪烁。
DSM501A灰尘传感器
DSM501A灰尘传感器模块是一种低成本,紧凑的颗粒密度传感器。它能够定量测量小至1微米的微粒
它是如何工作
红外发光二极管和光电晶体管被对角地布置在设备内部。 这样可以检测周围空气中灰尘的反射光。 它在检测非常细小的颗粒(如香烟烟雾)中特别有效,通常用于空气净化器系统。
MQ131臭氧气体传感器
顾名思义,MQ131臭氧气体传感器可以感应臭氧气体(O3)。 它对臭氧具有很高的敏感性,同时也对诸如CL2和NO2之类的强氧化物敏感。 无论是家用还是工业用,它们都广泛用于空气质量监测应用中。
它是如何工作
臭氧气体传感器的黑色胶木内部是一种相当敏感的材料,称为三氧化钨(WO3)。 在干净的空气中,其电导率很高,但是当周围存在臭氧气体时,电导率会降低。 用户可以将电导率的变化转换为与检测到的气体浓度对应的输出信号。
硬件设置
客户端(带有传感器的Ra-02 LoRa模块)
Ra-02 LoRa模块连接
DSM501A灰尘传感器连接
MQ131臭氧气体传感器连接
服务器(带SIM800L模块的Dragino LoRa Shield)
ThingSpeak设置
要设置ThingSpeak,首先您必须在其网站https://thingspeak.com上注册。如果您已经有一个帐户,请登录并单击“Channel”。
这样做时,应将您定向到您的频道页面。点击“新频道”创建一个新频道。
加载后,将显示频道设置。填写所需的内容,然后检查2个字段,每个传感器读数显示一个字段。您只需要给它一个名称和描述即可;其余的都是不必要的。
完成后,只需滚动到页面底部,然后点击“保存频道”即可。之后,您可以通过单击顶部的“私人视图”选项卡来私密查看显示内容。您可以通过单击铅笔图标来自定义字段图。
您还需要获取Arduino代码的API密钥,以便SIM800L将数据传输到ThingSpeak。要检查您的API密钥,请单击顶部的“ API密钥”标签。
代码
客户端(带有传感器的Ra-02 LoRa模块)
AQM_Client.ino代码
</>
服务器(带SIM800L模块的Dragino LoRa Shield)
AQM_Server.ino代码
</>
代码分解
客户端
预初始化
</>
在开始之前,我们必须包括要在项目中使用的库。 RHReliableDatagram用于发送寻址,确认和重传的数据报,并且在RH_RF95库中。 这两个库的功能取决于SPI(串行外围接口),因此也包括其中一个。
</>
之后,我们定义客户端地址和服务器地址。 重要的是要确保与LoRa防护罩进行一对一通信,而不要与附近的其他任何通信。 接下来,我们以驱动程序和客户端地址作为参数来创建RF95驱动程序对象和数据报管理器。
</>
接下来,我们将引脚分配给传感器。 对于DSM501,第一个参数用于分配给引脚6的PM1.0。第二个参数用于PM2.5。 对于MQ131,第一个参数用于加热器,该加热器已经集成到模块中,因此您可以将其分配给尚未使用的任何引脚。
Void Setup()
</>
在setup()函数中,我们将串行波特率设置为9600 bps,这是串行通信的默认值。 然后,我们放置一条if语句,以通过在失败时打印一条消息来检查可靠的数据报管理器是否已初始化。
Void Loop()
</>
在loop()函数内部,我们使用dsm501.update()获取灰尘传感器的读数,然后使用dsm501.getParticleWeight(1)获得2.5 µm以上颗粒的颗粒物密度。 然后,我们必须将此浮点值转换为字符串,并使用dtostrf()同时将其存储在变量中。
</>
然后可以使用manager.sendtoWait()将这些数据发送到服务器端。 这将发送消息(并重试)并等待确认。 如果收到确认,则返回true,从而允许它使用manager.recvfromAckTimeout()打印确认答复。
</>
接下来,我们使用o3sensor.begin()获取臭氧气体传感器的读数,然后使用o3sensor.getO3(UG_M3)获得以µg / m3为单位的值。 如果要获取在全球统计数据报告中更常用的十亿分之一,则可以使用o3sensor.getO3(PBB)代替。 类似于上面的灰尘传感器读数,然后我们必须将float值转换为字符串,并使用dtostrf()同时将其存储在变量中。
这一部分与上面的部分类似,我们将传感器的读数发送到服务器端,但是这次是针对臭氧气体传感器的。
服务器
预初始化
</>
同样,我们必须包括要在项目中使用的库。 SoftwareSerial库允许在Arduino的其他数字引脚上进行串行通信,这使我们可以将引脚2和3分别用作接收器和发送器。 这也使我们可以将其用作调试序列,并打印出以后收到的消息。
</>
之后,我们定义客户端地址和服务器地址。 同样,这一点很重要,以确保您与Ra-02进行一对一交流,而不是与附近的其他任何人进行交流,因此请确保它们与客户端代码中的内容相同。 接下来,我们以驱动程序和服务器地址为参数创建RF95驱动程序对象和数据报管理器。
</>
在这里,我们创建要在服务器端收到消息时发送给客户端的消息,并初始化变量buf来存储传入的传感器读取数据。 稍后将使用索引来区分接收到的两个数据值。
Void Setup()
</>
在setup()函数内部,我们将串行波特率设置为9600 bps,这是串行通信的默认值,而GSM串行波特率设置为4800 bps。 之后,我们放置一条if语句,通过在失败时打印一条消息来检查可靠的数据报管理器是否已初始化。
SIM800L AT命令用于将数据发送到ThingSpeak
</>
AT(ATtention)命令是用于控制调制解调器的指令。 首先,AT + CIPMODE = 0将TCPIP应用模式设置为正常模式,因为这对于控制SIM800L与Internet的连接是必需的。 其次,AT + CIPMUX = 0启动单个IP连接,AT + CGATT = 1将我们附加到GPRS服务。 第三,AT + CSTT =“ APN”启动任务并将访问点名称设置为指定的URL,然后AT + CIICR建立与GPRS的无线连接。 您可以找到用于在线拥有的SIM卡的APN。
Void Loop()
</>
在loop()函数中,我们检查是否通过manager.available()收到了一条消息,并且如果index为1,则表示它是第一个传感器的数据。 recvfromAck()将从缓冲区中获取数据并在串行监视器中打印。 完成后,它将调用gsmSend()函数,该函数包含所有AT命令,以将数据发送到ThingSpeak,然后将索引设置为2,以便知道第二个传感器的数据即将到来。
</>
这部分与上面的部分类似,我们将数据发送到ThingSpeak,但是这次是第二个接收到的数据,该数据来自第二个传感器。
参阅
构建Arduino的LoRa远程智能空气质量监测系统 - 国外课栈viadean.com