|
在本篇文章中,我们将使用超声波传感器制作一款物联网智能水罐,可以检查罐体中水的高度,并且向用户发送警报电子邮件。罐体中水的高度也将显示在NodeMCU ESP8266托管的网页上。
该智能水罐可以使得我们能够跟踪库存,并且可以通过互联网轻松访问。在罐体其顶部包括一个超声波传感器,并使用超声波反射波确定罐体的水的高度以及瓶内剩余的空间。每当罐体中的容量发生变化时,NodeMCU就会感知到,并在Web服务器上对其进行更新。这有助于跟踪库存并从世界任何地方进行补货。
所需的组件 ● NodeMCU ESP8266开发板 ● 超声波传感器HC-05 ● 面包板 ● 跳线
超声波传感器如何工作? 在进一步介绍项目之前,我们应该知道超声波传感器的工作原理,以便我们可以更好地理解本文。该项目中使用的超声波传感器如下所示。
如您所见,它有两个像投影一样的圆形眼睛和四个引脚。两眼状投影是超声波发射器和接收器。发射器以40Hz的频率发射超声波,该波在空中传播并在感应到物体时反射回去。接收器观察到返回的波。现在我们知道了该波被反射并返回所花费的时间,而超声波的速度也是固定的(3400cm / s)。使用此信息和以下公式,我们可以计算出距离。 距离=速度×时间
现在我们知道了超声波传感器的工作原理,下面让我们使用这四个引脚将其与MCU连接。这四个引脚分别是Vcc、Tri、Rcho和GND。该模块在+ 5V上工作,因此使用Vcc和GND引脚为模块供电。另外两个引脚是I / O引脚,通过它们我们可以与MCU进行通信。触发引脚应声明为输出引脚,并使其保持高电平10uS,这将在8个周期的声波突发中将超声波传送到空中。一旦观察到波形,回波引脚将在正确的时间间隔内变高,这就是超声波返回传感器模块所花费的时间。因此,此Echo引脚将被声明为输入,并且将使用计时器来测量该引脚为高电平的时间。这可以通过下面的时序图进一步理解。
电路原理图 物联网智能水罐的电路图如下-
该电路非常简单,因为我们仅使用超声传感器和NodeMCU。 HC-SR04超声波传感器可在5V电压下工作,如果将其连接至3.3V,它将无法正常工作。超声波传感器的VCC引脚连接到NodeMCU的VIN引脚。 Trig和Echo引脚连接到NodeMCU的D5和D6引脚,而传感器的GND引脚连接到NodeMCU的GND引脚。 使用5V电源为NodeMCU供电。
智能罐的IFTTT设置 IFTTT(If This Then That)是一项基于Web的服务,通过它我们可以创建条件语句链(称为小程序)。使用这些小程序Applet,我们可以发送电子邮件、Twitter、Facebook通知。在这里,我们使用IFTTT在罐体快充满时发送电子邮件通知。
首先登录IFTTT,然后搜索“ Webhooks”。
现在,要获取私钥,请单击“Documentation”。将此密钥复制到某个地方,将在代码中使用它。
有了私钥,我们将使用Webhooks和Email服务创建一个applet。要创建小程序,请点击您的个人资料,然后从可用选项中点击“Create”。
现在,在下一个窗口中,选择“ If This Then That”。
在“This”字段中,我们将使用webhooks来获取来自NodeMCU的Web请求。
现在,选择“Receive a Web Request”触发器,然后将事件名称命名为jar_event,然后单击“Create Trigger”。
之后,点击“Then That”,然后点击Email。
现在,在Email中,点击“send me an email”,然后输入电子邮件主题和正文,然后点击创建操作。
在最后一步中,单击“Finish”以完成小程序设置。
代码说明 我们使用Arduino IDE对NodeMCU进行编程。因此,请确保您已下载NodeMCU开发板文件。完整的代码在本文末尾给出。在这里,我们将逐步解释代码。
首先,我们包含所有必需的库文件。超声波传感器不需要库文件,因此我们只需要ESP8266WiFi.h库文件。 然后,定义连接Trig和Echo引脚的引脚,并定义两个用于计算距离和持续时间的变量。 - const int trigPin = D5;
- const int echoPin = D6;
- long duration;
- int distance;
复制代码之后,为Wi-Fi名称、Wi-Fi密码、IFTTT主机名和私钥创建实例。 - const char* ssid = "Wi-Fi Name";
- const char* password = "Password";
- const char *host = "maker.ifttt.com";
- const char *privateKey = "Private key";
复制代码为了访问WiFiServer,我们需要声明一个对象WifiServer库。 80是HTTP的默认端口。
现在在loop函数内,计算触发信号和接收信号之间的时间间隔。该时间将用于计算距离。 - duration = pulseIn(echoPin, HIGH);
- distance = duration * 0.0340 / 2;
复制代码之后,距离会转换为百分比以显示罐体的占用率。 - level =((14-distance)/14.0)*100;
复制代码然后我们比较了罐体的占用情况,如果占用少于10,它将触发IFTTT事件发送警告电子邮件。 - if ( level <= 10) {
- send_event("jar_event");
- }
复制代码
测试智能罐体 准备好硬件和代码后,上传代码并将超声波传感器放在罐体的顶部,或者如图所示,可以将其粘贴到罐体的盖子上。现在,使用串口监视器上打印的IP地址检查网页。它应该显示罐体的占用水平。而且,如果Jar的占用率低于10,它将向您发送警告电子邮件。
代码 本文使用的完整代码如下:
main.rar
(1.58 KB, 下载次数: 70)
|