亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

带有氦气和 DFRobot 的无线土壤湿度探头

组件和用品

Helium Atom Xbee 模块
× 1
氦元素接入点
× 1
DFRobot Gravity:模拟电容式土壤湿度传感器
× 1
Helium Arduino/mbed 适配器
× 1
Arduino UNO
× 1

应用和在线服务

Arduino IDE
Helium Dashboard

关于这个项目

无线土壤湿度传感器让您的植物发出声音

面对现实吧。植物总是因缺乏浇水而死亡。你很忙,那些蕨类植物在感觉干渴时不会举手。因此,对于旅途中的植物爱好者来说,这款土壤湿度探头原型是您获得快乐和健康蕨类植物和榕树的门票。

我们将涵盖的内容

整个指南从头到尾大约需要 60 分钟。以下是我们将要讨论的内容:

  • 使用 DF Robot Gravity Capacitive Soil Moisture Sensor、Helium Atom Prototyping Module、Helium Arduino Adapter 和 Arduino 板(我们使用 UNO)构建完整的土壤湿度探测器;
  • 在氦仪表板中注册您的氦元素和氦原子原型模块;并构建您自己的低功耗、广域无线网络;
  • 通过 Arduino IDE 对土壤湿度探头进行编程。在此过程中,我们还将安装 Helium ArduinoJson Arduino 库;
  • 近乎实时地测量土壤水分数据并将其从您的工厂发送到 Helium 仪表板;并将其通过管道传输到 Helium HTTP 通道。

好吧。让我们开始吧。我们有蕨类植物要保存。

构建土壤水分探头

首先,我们需要构建传感单元。这既快速又简单。完成后,您的完整探针应如下所示:

要构建这个:

  • 首先,将您的 Helium Atom 原型设计模块固定到 Helium Arduino 适配器中,然后将此组合单元连接到您选择的 Arduino 板。确保配置 接收 发送 相应的跳线 取决于您使用的板。可以在此处找到有关如何将所有这些板固定在一起的完整详细信息以及正确的跳线配置。看一看,完成它,然后回来。
  • 接下来,我们需要使用 DF 机器人土壤湿度探头随附的三线跨接电缆将实际的土壤湿度探头连接到 Helium Arduino 适配器。三根线的颜色是黑色 , 红色 , 和 蓝色 .在氦 Arduino 适配器上,黑色 电线连接到GND; 红色 电线连接到5V;和蓝色 电线连接到 ADO 标题。 DFRobot 团队有一个很棒的图表,说明了这种连接是如何在这里工作的。正确接线后,我们的电路板看起来像这样:

  • 最后将跨接电缆上的白色接头连接到 DF Robot Soil Moisture Probe。虽然这可能有点棘手,但它应该能以最少的努力立即完成。

部署氦元素

现在是时候构建您自己的 Helium 网络了。这大约需要 30 秒。 (如果您想更多地了解如何在 Helium 上构建端到端应用程序以及我们如何处理无线网络组件,请从此架构概述开始。)

要部署 Element 并为基于 Atom 的传感器创建网络覆盖范围,只需使用提供的电线将其插入电源和实时以太网端口即可。 (注意:如果您有蜂窝支持的元素,使用以太网连接是可选的,但建议作为备份。 ) 插入后,您会看到一些 LED 活动。当前置 LED 变为绿色时,您的 Element 将被连接 (信令以太网连接 ) 或 蓝绿色用于蜂窝连接 )。您可以在此处观看有关 Element 的简短视频以及如何连接它。

在氦仪表板中注册您的氦元素和原子

现在,我们的传感单元已经构建完毕,您的 Helium 网络也已部署完毕,是时候在 Helium 仪表板中注册您的硬件了。仪表板是 Helium 的托管用户界面,用于监控和管理连接的硬件部署。 Helium 运送的所有硬件都已经在我们的系统中注册,但我们需要知道谁在部署它。

  • 首先,如果您还没有创建一个 Helium Dashboard 帐户。
  • 要注册您的 Atom,请先选择 New Atom .在 UI 中,添加一个名称(例如 Fern Saver ) 然后输入它的 MAC 地址 的最后四个 及其四位HVV代码 .点击保存 你就完成了。
  • 元素注册完成的方式完全相同。选择新元素, 然后提供一个名称,它的 MAC 地址 的最后四个 及其四位HVV代码 .还要确保为您的元素输入一个位置,以便仪表板可以在地图上显示它。

您可以通过查看 状态和信号来验证您的 Element 是否在线 在仪表板中:

部署 Helium HTTP 通道

Helium 平台的一个主要特点是通道。这些是 Web 服务(例如 AWS IoT、Google Cloud IoT 和 Azure IoT)和协议(例如 MQTTHTTP )。在与这些 Web 服务或协议之一集成时,Helium 为您完成了 Channels 的所有繁重工作。对于 Fern Saver,我们的土壤湿度探测器,让我们启动一个 HTTP 通道。这将使我们能够将数据通过管道传输到任何通过 HTTP 接受数据的 Web 服务。例如,您可以使用 HTTP 通道将此数据发送到 IFTTT,然后每次 Fern Saver 报告湿度低于特定水平时接收文本。

在此示例中,我们将设置一个 HTTP 通道,将数据发送到 requestb.in,这是一个用于测试 HTTP 服务的方便、免费的 Web 服务。请注意,下面,当我们将 Sketch 上传到 Arduino 时,我们将引用此频道名称,HTTP , 在代码中,所以我们知道将数据发送到哪里。

以下是设置此频道的快捷方式:

配置您的 Arduino IDE 并上传草图

我们现在可以继续配置您的 Arduino IDE 并导入所需的库。开始:

  • 确保您下载了最新的 Arduino IDE。如果需要,请在此处获取。
  • 然后我们需要添加两个库:HeliumArduinoJson .您可以通过转到 Sketch 从 IDE 中添加库 <代码>-> 包含库 <代码>-> 管理库。 搜索“氦”,选择它,然后点击安装 .对“ArduinoJson”库执行相同的安装过程。 (我们需要这个库,因为我们将记录的土壤湿度数据格式为 JSON。)

完成此操作后,就该进行一些实际的 Arduino 编程了。我们将上传的 Sketch 的完整源代码可以在 GitHub 上找到。以下是完整的Soil_Humidity.ino 草图。

/* * 版权所有 2017,Helium Systems, Inc. * 保留所有权利。有关许可证信息,请参阅 LICENCE.txt * * 使用 SEN0192 电容式湿度 * 传感器获取湿度读数。接线说明:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * 通过 Sketch->Manage Libraries 安装以下库:* - ArduinoJson * - Helium */ #include "Board.h " #include  #include  #include  #include  // 此通道名称应对应于您在 Helium 中部署的通道 // 仪表板以摄取此数据。 #define CHANNEL_NAME "HTTP" // 延迟一秒 #define CHANNEL_DELAY 5000 // 发送非常 60 个周期(秒) #define CHANNEL_SEND_CYCLE 12 Helium helium(&atom_serial);通道通道(&helium); int channel_counter;void report_status(int status, int result =0) { if (helium_status_OK ==status) { if (result ==0) { Serial.println(F("Succeeded")); } else { Serial.print(F("失败 - ")); Serial.println(结果); } } else { Serial.println(F("失败")); } } void connect() { while (!helium.connected()) { Serial.print(F("Connecting - ")); int status =helium.connect();报告状态(状态);如果(氦_状态_OK!=状态){延迟(1000); } } } void channel_create(const char * channel_name){ int8_t 结果;内部状态; do { // 确保我们已连接 connect(); Serial.print(F("创建频道 - ")); status =channel.begin(channel_name, &result); // 打印状态和结果 report_status(status, result);如果(氦_状态_OK!=状态){延迟(1000); } } while (helium_status_OK !=status || result !=0); } void channel_send(const char * channel_name, void const * data, size_t len) { int status; int8_t 结果; do { // 尝试发送 Serial.print(F("Sending - ")); status =channel.send(data, len, &result);报告状态(状态,结果); // 如果返回任何服务错误,则创建通道 if (status ==helium_status_OK &&result !=0) { channel_create(channel_name); } else if (status !=helium_status_OK) { delay(1000); } } while (helium_status_OK !=status || result !=0); } void setup() { Serial.begin(9600); Serial.println(F("开始"));氦气。开始(HELIUM_BAUD_RATE);频道创建(频道名称);通道计数器 =0; } #define DRY_VALUE 536 // 在空气中 #define WET_VALUE 303 // 在水中 #define HUM_RANGE (DRY_VALUE - WET_VALUE) void loop() { Serial.print(F("Reading - "));浮点读数 =模拟读取(A0);浮动百分比 =100 * (1 - (读数 - WET_VALUE) / HUM_RANGE); Serial.print(阅读); Serial.print(" - "); Serial.println(百分比); if (--channel_counter <=0) { StaticJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject(); root[F("value")] =阅读;根 [F("百分比")] =百分比;字符缓冲区[HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer, HELIUM_MAX_DATA_SIZE);通道发送(通道名称,缓冲区,使用); channel_counter =CHANNEL_SEND_CYCLE; } 延迟(CHANNEL_DELAY); } 

使用 氦气ArduinoJson 已安装库,创建一个新草图(文件 -> 新建 从 Arduino IDE 中),然后粘贴上面的代码。然后,将完整的土壤湿度探头硬件包通过 USB 电缆连接到您的工作站,点击上传 按钮。

Atom 原型模块上的 LED 应该会在片刻后开始闪烁。这是连接到 Helium 网络的 Atom(通过我们之前部署的 Element)。如果 Arduino IDE 在上传代码时没有抛出任何错误,则说明成功,土壤湿度探头现在正在生成读数。

土壤水分数据的注意事项

如上所述,此 Sketch 将捕获土壤水分数据并将其编码为 JSON <代码> 在发送到 Helium 平台之前。使用上面的 Sketch,一个数据点看起来像这样(作为 JSON ):

{ "value":433, "percent":55.5 } 

值得注意的是,DFRobot 重力电容式土壤湿度传感器实际上是将这些读数作为校准干湿读数之间的模拟读数捕获。您可以在此处获得有关如何实施和校准的完整详细信息。您可能想要稍微调整校准。

验证 Helium 仪表板中的传感器连接和数据

现在您的传感器已部署,我们可以验证它是否在线并正在传输数据。在仪表板中,我们可以通过多种方式完成此操作,均通过 Atom UI 您刚刚部署的传感器的视图。

  • 如果您的 Atom 在线,仪表板将显示其状态和信号 ,以及有关其状态的各种其他元数据。它看起来像这样:
  • 在同一个 Atom 界面的更深处,我们还显示了一个事件日志 显示来自传感器的每个数据点以及它是否成功传输到氦通道。正如我们上面提到的,这些是连接到 Web 服务或原始协议的预构建连接器。早些时候,我们为您的 Helium 组织部署了一个 HTTP 通道。而上面的 Sketch 告诉 Soil Moisture 探针将数据发送到这个通道 - 称为 HTTP .但是,在下图中的这个示例中,我们将数据发送到 Helium HTTP 通道:
  • 我们还提供调试 每个 Atom 的界面将显示您的读数(一旦您启用了此选项)。以下是仪表板调试查看器中的一些土壤水分数据:

后续步骤和帮助

恭喜!本指南到此结束。您现在已经使用无线土壤湿度探头为您的蕨类植物提供了未来证明。这是一个大问题。你的蕨类植物谢谢你。

如果您想了解有关 Helium 的更多信息以及如何使用此硬件和软件制作自己的传感器原型,请从这里开始:

  • Helium 开发者文档
  • Helium 开发人员 Slack
  • Helium 开发者论坛

代码

  • Soil_Humidity.ino
Soil_Humidity.inoC/C++
开始将土壤湿度数据从传感器发送到氦通道的完整 Arduino 草图。
/* * 版权所有 2017,Helium Systems, Inc. * 保留所有权利。有关许可证信息,请参阅 LICENCE.txt * * 使用 SEN0192 电容式湿度 * 传感器获取湿度读数。接线说明:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * 通过 Sketch->Manage Libraries 安装以下库:* - ArduinoJson * - Helium */#include "Board.h "#include #include #include #include #define CHANNEL_NAME "Helium MQTT"//延迟一秒#define CHANNEL_DELAY 5000//发送非常60 个周期(秒)#define CHANNEL_SEND_CYCLE 12Helium helium(&atom_serial);Channel channel(&helium);int channel_counter;voidreport_status(int status, int result =0){ if (helium_status_OK ==status) { if (result ==0) { Serial.println(F("成功")); } else { Serial.print(F("失败 - ")); Serial.println(结果); } } else { Serial.println(F("失败")); }}voidconnect(){ while (!helium.connected()) { Serial.print(F("Connecting - ")); int status =helium.connect();报告状态(状态);如果(氦_状态_OK!=状态){延迟(1000); } }}voidchannel_create(const char * channel_name){ int8_t 结果;内部状态; do { // 确保我们已连接 connect(); Serial.print(F("创建频道 - ")); status =channel.begin(channel_name, &result); // 打印状态和结果 report_status(status, result);如果(氦_状态_OK!=状态){延迟(1000); } } while (helium_status_OK !=status || result !=0);}voidchannel_send(const char * channel_name, void const * data, size_t len){ int status; int8_t 结果; do { // 尝试发送 Serial.print(F("Sending - ")); status =channel.send(data, len, &result);报告状态(状态,结果); // 如果返回任何服务错误,则创建通道 if (status ==helium_status_OK &&result !=0) { channel_create(channel_name); } else if (status !=helium_status_OK) { delay(1000); } } while (helium_status_OK !=status || result !=0);}voidsetup(){ Serial.begin(9600); Serial.println(F("开始"));氦气。开始(HELIUM_BAUD_RATE);频道创建(频道名称); channel_counter =0;}#define DRY_VALUE 536 // 在空气中#define WET_VALUE 303 // 在水中#define HUM_RANGE (DRY_VALUE - WET_VALUE)voidloop(){ Serial.print(F("Reading - "));浮点读数 =模拟读取(A0);浮动百分比 =100 * (1 - (读数 - WET_VALUE) / HUM_RANGE); Serial.print(阅读); Serial.print(" - "); Serial.println(百分比); if (--channel_counter <=0) { StaticJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject(); root[F("value")] =阅读;根 [F("百分比")] =百分比;字符缓冲区[HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer, HELIUM_MAX_DATA_SIZE);通道发送(通道名称,缓冲区,使用); channel_counter =CHANNEL_SEND_CYCLE; }延迟(CHANNEL_DELAY);}

制造工艺

  1. 土壤水分传感器的工作和应用
  2. 带二维码、RFID 和温度验证的访问控制
  3. Raspberry Pi 土壤湿度传感器
  4. 带有 Raspberry Pi 和湿度传感器的 Aeroponics
  5. 使用 Raspberry Pi 和 Python 构建机器人
  6. 坚持不懈地领导
  7. Portenta 和热电偶传感器(带 MAX6675)
  8. 使用 Arduino 和 MPU6050 控制伺服电机
  9. u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
  10. 使用 Arduino 进行语音识别和合成
  11. 带警报、LCD 和温度的超声波传感器
  12. 标准数码相机和人工智能监测土壤水分