×

通过粒子云进行通信的智能狗水碗

消耗积分:0 | 格式:zip | 大小:0.12 MB | 2022-12-01

李静

分享资料个

描述

本文是迪肯大学 IT 学院为主题 SIT210 - 嵌入式系统开发提交的作业组合的一部分。

关于该项目

以下项目适用于智能狗水碗,当水碗变干时,它会根据电容式土壤湿度传感器的读数自动补充水。每当重新装满水碗时,都会通过 IFTTT 通过电子邮件提醒用户。

这个项目的灵感

我拥有两只名叫吉米和利奥的骑士国王查尔斯猎犬。有时,当我作为救济教师下班回家时,他们的水碗是干的,而在澳大利亚经常发生的非常炎热的日子里,当这种情况发生时,我会感到内疚。话虽如此,即使在不热的日子里,这两个男孩也有用他们小狗的眼睛让我感到内疚的习惯。

这个怎么运作

粒子氩和粒子光子通过粒子云进行通信。Particle Argon 测量水分并根据其读数以及该状态是否发生变化来发布“干燥”或“充满”事件。此事件由 Particle Photon 订阅,如果干燥,它将打开,通过连接到软管的电磁阀重新填充碗。当碗重新装满时,将发布一个事件,该事件将导致 IFTTT 向狗主人发送电子邮件。

水分水平通过api.ThingSpeak的 webhook 可视化,它会生成折线图和水位计。

如何设置

第 1 步:修改宠物饮水机

首先,我们修改了宠物饮水机以容纳电容式土壤湿度传感器,方法是使用无绳电钻在背面钻一个 12 毫米的孔,然后用钢锯切掉剩余部分。然后,我们用圆锉磨平了传感器所在的凹口。修改的图片如下所示。

之前计划通过钻一个孔来容纳防水湿度传感器的接线和一个更大的孔作为软管的入口来修改大型水容器,然后在软管和传感器的电线进入后用密封剂密封这些孔,但在用 Selley's All Clear 密封后,瓶子在一夜之间淹没了碗,所以这个想法被废弃了。

第 2 步:设置继电器和电磁阀

要设置继电器,首先将您的 Particle Photon 插入 Particle Relay Shield for Photon 的接头。接下来将接线连接到您将使用的继电器的 COM 和 NO 触点端子(注意:NC 触点端子应该为空) 。在下面的例子中,我们选择在代码中使用引脚 D6 作为我们的 RELAY_PIN,该代码对应于继电器屏蔽上的 5 V 继电器 RELAY 4。

poYBAGNsXVuAdOI1AANR8HxWfS4108.jpg
光子粒子继电器屏蔽,光子插入并接线连接到继电器 4 的 COM 和 NO 接触端子
 

接下来将绝缘的 1/4" 母铲形接触端子压接到每根电线。这些将连接到 12V 电磁阀上的两个公连接器。然后通过加热将 2 段软管连接到 2 个母 1/2" 软管连接器用沸水冲洗软管,将其滑到每个适配器上,并用 O 形圈夹固定软管。这个设置可以在下面看到。

12 V 电磁阀通过 O 形圈和 1/2
12 V 电磁阀通过 O 形圈和 1/2" 软管连接固定到软管的长度上,并通过接触端子连接。
 

应该注意的是,螺线管是 12 V,但继电器只有 5 V。因此其中一根电线被切成两半,并添加了一个母 DC 筒形插孔适配器,以提供为电磁阀供电所需的电压。对于大多数电磁阀来说,哪根电线的极性无关紧要。

pYYBAGOIIuCAAIr9AAMMZs4Wckw977.jpg
连接到其中一根电线的母 DC 筒形插孔适配器
 

在将连接到水龙头的软管末端,连接一个 12 毫米软管接头,如下所示。

pYYBAGOIIueAck7sAAnciSqNOps013.jpg
连接到软管的 12 毫米软管接头将连接到水龙头接头上。
 

由于南澳大利亚的天气非常潮湿,因此使用室内水龙头适配器将狗水碗设置在室内。

第 3 步:设置电容式土壤湿度传感器

将粒子设备连接到红色和绿色 LED 以及电容式土壤湿度传感器,如下面的面包板的 Fritzing 图中所示。

pYYBAGOIIuyAXxYDAAHxnpSkvt0999.jpg
连接到电容式土壤湿度传感器的粒子设备设置的fritzing面包板图
 

下面的接线图将匹配下面 Github 链接上提供的代码。

第 4 步:编码

设置继电器和传感器的接线后,将提供的 C++ 代码复制并保存到 Particle Web IDE 上的新应用程序文件中,验证并将其闪存到您的 Particle 设备。

poYBAGOIIu6ADFfCAAHQM_X24eQ083.png
发布传感器数据的代码。验证和闪烁按钮的位置在左上角突出显示。
 

在创建的项目中,从传感器发布的代码被写入粒子氩,订阅和控制继电器的代码被写入粒子光子。

现在需要校准电容式土壤湿度传感器读数。为此,将传感器放置在水碗中,并在水碗半满和水碗满时读取空气中的读数。在将 Particle Argon 插入笔记本电脑时,通过串行监视器查看读数。这些读数是从循环中的以下代码行打印的:

// Take the reading
    int moistureValue = analogRead(SENSOR_PIN);
    // Print to serial so you can keep track, particularly when determining 
    // moisture values from sensor when dry and when water bowl is full.
    Serial.print("Moisture Level: ");
    Serial.println(moistureValue);
    Serial.print(Time.hourFormat12());
    Serial.print(":");
    Serial.print(Time.minute());
    Serial.print(":");
    Serial.print(Time.second());

要查看这些读数,请打开 Arduino IDE(作为 Particle 和 Arduino use.ino 文件)并选择工具 -> 端口 -> /dev/cu.usbmodem..... 如下图所示。

poYBAGOIIvGASwVcAAEBcs3jOqg904.png
在 Arduino IDE 中选择连接到 Particle 设备的端口以查看串行监视器。
 

然后选择 Tools -> Serial Monitor 查看读数。

pYYBAGOIIvmAeshuAADd7AmwTZk714.png
选择工具 -> 串行监视器以查看读数。
 

从这些读数中,我确定水分读数在充满时为 2190,在干燥时为 3220。然后,我使用以下代码行将这些值分别映射到 100 % 和 0 %,以便于阅读碗的装满程度。

// Map these values to a percentage of how full. In this case when water bowl // was full moisture reading was 2190 and when dry it was 3220.
    int moisturePercentage = map(moistureValue, 2190, 3220, 100, 0);

获得这些读数后,可以尝试进行试运行。两个 Particle 设备都已经在运行,因此将螺线管连接到水龙头并相应地调节水流,然后测试螺线管是否打开并且当湿度传感器干燥并且螺线管关闭时红色 LED 是否打开,绿色 LED 是否打开当湿度传感器暴露在水中时,红色 LED 熄灭。

第 5 步:设置 IFTTT

在进行测试运行时,通过检查粒子控制台并选择事件日志或我的设备来检查粒子设备正在发布的事件。

poYBAGOIIvuAH5YNAAHndbKP7JI455.png
我的设备和事件在粒子控制台上的位置。
 

我们可以从上面的事件日志中看到粒子 Argon 已启动两次都已发布“完整”。

连接到继电器的 Particle Photon 的“开启”事件是我们将设置为通过 IFTTT 向用户发送电子邮件的事件。

如果您尚未在此处设置 IFTTT 帐户

设置好帐户后,单击右上角的“创建”创建一个新的小程序,如下所示。

poYBAGOIIv6AR_tWAAFkNIrh3ic434.png
创建在右上角
 

在下一页上,单击“如果这样”按钮。

pYYBAGOIIwGAQeewAAB-r-x3L9U234.png
点击“如果这样”按钮
 

在下一页上搜索粒子并单击粒子图标。

pYYBAGOIIwaAIxFSAABk24Osx7g297.png
在选择服务页面上搜索粒子,然后单击粒子图标。
 

在下一页上选择“新事件发布”。如果您还没有,请按照提示连接您的 Particle 帐户。

poYBAGOIIwqASdc9AAJbc4fLax4554.png
选择屏幕左侧的“新事件发布”。
 

在“发布的新事件”页面上,输入如下所示的详细信息,然后单击“创建触发器”。

poYBAGOIIw6AI2f2AAFrYgtI2v8952.png
如图所示输入详细信息,然后选择“创建触发器”。
 

这将带您返回 If This Then That 页面,您将在其中单击“The Then That”按钮。

pYYBAGOIIxCADQ1BAACUxjpCN38822.png
点击“然后那个”按钮
 

在下一页上搜索 gMail 并单击 gMail 图标。

pYYBAGOIIxWAEbrpAABm724vI9c808.png
在选择服务页面上搜索 gMail,然后单击 gMail 图标。
 

在下一页上选择“给自己发送电子邮件”。如果您还没有,请按照提示连接您的 gMail 帐户。

pYYBAGOIIxiAShncAADz_QEEGB0546.png
选择屏幕右侧的“给自己发送电子邮件”。
 

在“给自己发送电子邮件”页面上,输入下面显示的详细信息,然后单击“创建操作”。

pYYBAGOIIxuAGlSRAAEnhXbcsGc206.png
如图所示输入详细信息,然后选择“创建操作”。
 

单击“创建操作”后,您将进入以下页面。单击“完成”按钮。

poYBAGOIIx6AU-BVAAD0tM30qS8149.png
在“查看并完成”页面上,单击“完成”按钮。
 

第 6 步:设置 Webhook

我们现在将创建一个 webhook,以便在 ThingSpeak 上绘制水分百分比值。为此,我们首先将以下代码行插入smartdogwaterbowlpublish.ino应用程序:

// ThingSpeak
const char * eventName = "thingSpeakMoisturePercentageReading_";
// ThingSpeak Channel information
unsigned long myChannelNumber =XXXXXXX;
const char * myWriteAPIKey = "XXXXXXXXXXXXXXXX";
Particle.publish(eventName, "{\"Moisture Percentage\": \"" + String(moisture) + "\", \"key\": \"" + myWriteAPIKey + "\" }", PRIVATE, NO_ACK);
delay(PUBLISH_INTERVAL);    // Moisture level read every minute

对于我的 Channel Number 和 myWriteAPIKey,您将能够在 ThingSpeak 页面的以下屏幕上找到要输入的字符,黄色圆圈所在的位置。

pYYBAGOIIyOALSaqAALkZ2NKmMQ825.png
将通道 ID 和写入 API 密钥记录到您的代码中
 

代码行:

Particle.publish(eventName, "{\"Moisture Percentage\": \"" + String(moisture) + "\", \"key\": \"" + myWriteAPIKey + "\" }", PRIVATE, NO_ACK);

将解析为分配给事件名称“thingSpeakMoisturePercentageReading_”的 JSON 块:

{
"Moisture Percentage":"97"
"key":"XXXXXXXXXXXXXXXX"
}

接下来在 Particle Photon Cloud 界面中,通过输入以下数据来构建“WebHook”类型的新“Integration”:

pYYBAGOIIyiAUCTiAAD2c92S4vs230.png
基本 WebHook 集成设置
 

单击“高级设置”并输入以下内容作为 JSON 块,将每个参数附加为字段编号以显示在 ThingSpeak 频道上:

{
    "event": "thingSpeakMoisturePercentageReading_",
    "url": "https://api.thingspeak.com/update",
    "requestType": "POST",
    "api_key": "XXXXXXXXXXXXXXXX",
    "field1": "{{{Moisture Percentage}}}"
}

单击“保存”并启动集成。

如果您还没有,请创建一个ThingSpeak帐户来接收和处理数据。现在创建一个新的“Channel”,给它一个名字和定义的字段来接收与上面的 JSON 块匹配的数据,如下所示:

pYYBAGOIIyyAHSUhAANm7hLWuVg032.png
ThingSpeak 上的频道设置
 

将“元数据”设置为“JSON”并保存频道。现在可以将数据可视化为图形和仪表。

poYBAGOINhyACqKTAAI7LP-SWsI785.png
ThingSpeak 上的可视化
 

在左侧,我们在“15 分钟”时间尺度上创建了一个设置为“样条曲线”的折线图,显示了最后 480 个结果(过去 8 小时的结果)。将“Y 轴最小值”设置为“0”,将“Y 轴最大值”设置为略大于 100,例如 110。这表明狗从水碗中喝水的时间急剧下降。

在右侧,我们创建了一个仪表小部件,它显示了碗的当前水分百分比水平。该仪表的设置如下所示。

pYYBAGOINiGANddLAACmKzKagDQ627.png
仪表小部件的设置
 

 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !