风筝
发表于: 2020-6-15 21:33:55 | 显示全部楼层

在本篇文章中,我们将使用超声波传感器制作一款物联网智能水罐,可以检查罐体中水的高度,并且向用户发送警报电子邮件。罐体中水的高度也将显示在NodeMCU ESP8266托管的网页上。


该智能水罐可以使得我们能够跟踪库存,并且可以通过互联网轻松访问。在罐体其顶部包括一个超声波传感器,并使用超声波反射波确定罐体的水的高度以及瓶内剩余的空间。每当罐体中的容量发生变化时,NodeMCU就会感知到,并在Web服务器上对其进行更新。这有助于跟踪库存并从世界任何地方进行补货。


所需的组件

●    NodeMCU ESP8266开发板

●    超声波传感器HC-05

●    面包板

●    跳线


超声波传感器如何工作?

在进一步介绍项目之前,我们应该知道超声波传感器的工作原理,以便我们可以更好地理解本文。该项目中使用的超声波传感器如下所示。

Ultrasonic-Sensor-HC-SR04.jpg

如您所见,它有两个像投影一样的圆形眼睛和四个引脚。两眼状投影是超声波发射器和接收器。发射器以40Hz的频率发射超声波,该波在空中传播并在感应到物体时反射回去。接收器观察到返回的波。现在我们知道了该波被反射并返回所花费的时间,而超声波的速度也是固定的(3400cm / s)。使用此信息和以下公式,我们可以计算出距离。

距离=速度×时间


现在我们知道了超声波传感器的工作原理,下面让我们使用这四个引脚将其与MCU连接。这四个引脚分别是Vcc、Tri、Rcho和GND。该模块在+ 5V上工作,因此使用Vcc和GND引脚为模块供电。另外两个引脚是I / O引脚,通过它们我们可以与MCU进行通信。触发引脚应声明为输出引脚,并使其保持高电平10uS,这将在8个周期的声波突发中将超声波传送到空中。一旦观察到波形,回波引脚将在正确的时间间隔内变高,这就是超声波返回传感器模块所花费的时间。因此,此Echo引脚将被声明为输入,并且将使用计时器来测量该引脚为高电平的时间。这可以通过下面的时序图进一步理解。

Ultrasonic-Timing-Diagram.gif


电路原理图

物联网智能水罐的电路图如下-

IoT-Smart-Jar-Circuit-Diagram_0.png

该电路非常简单,因为我们仅使用超声传感器和NodeMCU。 HC-SR04超声波传感器可在5V电压下工作,如果将其连接至3.3V,它将无法正常工作。超声波传感器的VCC引脚连接到NodeMCU的VIN引脚。 Trig和Echo引脚连接到NodeMCU的D5和D6引脚,而传感器的GND引脚连接到NodeMCU的GND引脚。 使用5V电源为NodeMCU供电。

IoT-based-Smart-Jar.jpg


智能罐的IFTTT设置

IFTTT(If This Then That)是一项基于Web的服务,通过它我们可以创建条件语句链(称为小程序)。使用这些小程序Applet,我们可以发送电子邮件、Twitter、Facebook通知。在这里,我们使用IFTTT在罐体快充满时发送电子邮件通知。


首先登录IFTTT,然后搜索“ Webhooks”。

IFTTT-Webhooks_1.png


现在,要获取私钥,请单击“Documentation”。将此密钥复制到某个地方,将在代码中使用它。

IFTTT-Key.png

有了私钥,我们将使用Webhooks和Email服务创建一个applet。要创建小程序,请点击您的个人资料,然后从可用选项中点击“Create”。

Create-Applet-using-Webhook.png

现在,在下一个窗口中,选择“ If This Then That”。

IFTTT_1.png

在“This”字段中,我们将使用webhooks来获取来自NodeMCU的Web请求。

IFTTT-Setup_0.png

现在,选择“Receive a Web Request”触发器,然后将事件名称命名为jar_event,然后单击“Create Trigger”。

IFTTT-Trigger_0.png

之后,点击“Then That”,然后点击Email。

IFTTT-Action-Service_0.png

现在,在Email中,点击“send me an email”,然后输入电子邮件主题和正文,然后点击创建操作。

IFTTT-for-Smart-Jar.png

在最后一步中,单击“Finish”以完成小程序设置。


代码说明

我们使用Arduino IDE对NodeMCU进行编程。因此,请确保您已下载NodeMCU开发板文件。完整的代码在本文末尾给出。在这里,我们将逐步解释代码。


首先,我们包含所有必需的库文件。超声波传感器不需要库文件,因此我们只需要ESP8266WiFi.h库文件。

  1. #include <ESP8266WiFi.h>
复制代码

然后,定义连接Trig和Echo引脚的引脚,并定义两个用于计算距离和持续时间的变量。

  1. const int trigPin = D5;
  2. const int echoPin = D6;
  3. long duration;
  4. int distance;
复制代码

之后,为Wi-Fi名称、Wi-Fi密码、IFTTT主机名和私钥创建实例。

  1. const char* ssid = "Wi-Fi Name";
  2. const char* password = "Password";
  3. const char *host = "maker.ifttt.com";
  4. const char *privateKey = "Private key";
复制代码

为了访问WiFiServer,我们需要声明一个对象WifiServer库。 80是HTTP的默认端口。

  1. WiFiServer server(80);
复制代码

现在在loop函数内,计算触发信号和接收信号之间的时间间隔。该时间将用于计算距离。

  1. duration = pulseIn(echoPin, HIGH);
  2. distance = duration * 0.0340 / 2;
复制代码

之后,距离会转换为百分比以显示罐体的占用率。

  1. level =((14-distance)/14.0)*100;
复制代码

然后我们比较了罐体的占用情况,如果占用少于10,它将触发IFTTT事件发送警告电子邮件。

  1. if ( level <= 10) {
  2.         send_event("jar_event");
  3.         }
复制代码

测试智能罐体

准备好硬件和代码后,上传代码并将超声波传感器放在罐体的顶部,或者如图所示,可以将其粘贴到罐体的盖子上。现在,使用串口监视器上打印的IP地址检查网页。它应该显示罐体的占用水平。而且,如果Jar的占用率低于10,它将向您发送警告电子邮件。

Smart-Container.jpg


Testing-the-Smart-Container.jpg


代码

本文使用的完整代码如下: main.rar (1.58 KB, 下载次数: 70)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 54 | 回复: 107



手机版|

GMT+8, 2024-4-19 13:55 , Processed in 0.143409 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表