0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用Helium構(gòu)建土壤濕度探頭

科技觀察員 ? 來源:Peter Main ? 作者:Peter Main ? 2022-07-29 15:51 ? 次閱讀

你是否需要一種快速的方法來監(jiān)測您最喜歡的蕨類植物的土壤水分含量?正巧,這篇文章里就有答案。

本文涵蓋的內(nèi)容

以下是我們將要討論的內(nèi)容:

使用DF Robot重力電容式土壤濕度傳感器、氦原子原型模塊、氦 Arduino 適配器和 Arduino 板構(gòu)建完整的土壤濕度探頭;

在氦儀表板中注冊您的氦元素和氦原子原型模塊;建立自己的低功耗廣域無線網(wǎng)絡(luò);

通過 Arduino IDE 對土壤濕度探頭進(jìn)行編程

近乎實(shí)時(shí)地測量土壤水分?jǐn)?shù)據(jù)并將其發(fā)送到氦儀表板;并將其通過管道傳輸?shù)?Helium HTTP 通道。

讓我們開始吧。

構(gòu)建土壤濕度探頭

首先,我們需要構(gòu)建傳感單元。這是快速和容易的。完成后,您的完整探測應(yīng)如下所示:

pYYBAGLjkQaAbBJPAAX8QwonHy4979.png

要構(gòu)建這個(gè),首先,將您的 Helium Atom 原型模塊固定到 Helium Arduino 適配器中,然后將此組合單元連接到您選擇的 Arduino 板。確保根據(jù)您使用的板相應(yīng)地配置和跳線。

接下來,我們需要使用 DF Robot Soil Moisture Probe 隨附的三線跨接電纜將實(shí)際的土壤濕度探頭連接到 Helium Arduino 適配器。三種電線顏色是黑色、紅色和藍(lán)色。在 Helium Arduino 適配器上,黑線連接到GND; 紅線連接到5V;藍(lán)線連接到接頭。正確接線后,我們的電路板如下所示:

poYBAGLjkQKAYrvZAAV3QvSHb20217.png

最后將跨接電纜上的白色接頭連接到 DF 機(jī)器人土壤濕度探頭。

部署 Helium 網(wǎng)絡(luò)

現(xiàn)在是時(shí)候建立您自己的 Helium 網(wǎng)絡(luò)了。這大約需要 30 秒。

要部署Element并為基于 Atom 的傳感器創(chuàng)建網(wǎng)絡(luò)覆蓋范圍,只需使用提供的電源線將其插入電源和帶電以太網(wǎng)端口即可。

注意:如果您有支持蜂窩網(wǎng)絡(luò)的元素,則使用以太網(wǎng)連接是可選的,但建議作為備份。

一旦插入,您將看到一些 LED 活動(dòng)。當(dāng)前置 LED 變?yōu)榫G色(表示以太網(wǎng)連接)或藍(lán)綠色(表示蜂窩連接)時(shí),您的 Element 將被連接。

在 Helium Dashboard 中注冊

現(xiàn)在我們的傳感單元已經(jīng)構(gòu)建并且您的 Helium 網(wǎng)絡(luò)已經(jīng)部署,是時(shí)候在Helium Dashboard 中注冊您的硬件了。Dashboard 是 Helium 的托管用戶界面,用于監(jiān)控和管理連接的硬件部署。Helium 發(fā)布的所有硬件都已在我們的系統(tǒng)中注冊,但我們需要知道是誰在部署它。

首先,創(chuàng)建一個(gè) Helium Dashboard 帳戶。

要注冊您的 Atom,首先選擇New Atom 。在 UI 中,添加一個(gè)名稱(例如Fern Saver ),然后輸入其最后四個(gè)MAC Address及其四個(gè) digit HVV Code。點(diǎn)擊保存,你就完成了。

元素注冊的完成方式完全相同。選擇新元素,然后提供名稱、其最后四個(gè)MAC Address及其四位數(shù)字HVV Code。還要確保為您的元素輸入一個(gè)位置,以便儀表板可以在地圖上顯示它。

您可以通過查看儀表板中的狀態(tài)和信號來驗(yàn)證您的元素是否在線:

poYBAGLjkP2AVdQYAAEPmVZAeBs923.png

部署 Helium HTTP 通道

Helium 平臺(tái)的一個(gè)主要特點(diǎn)是通道。這些是 Web 服務(wù)(如 AWS IoT、Google Cloud IoT 和 Azure IoT)和協(xié)議(如MQTT和HTTP)的預(yù)構(gòu)建連接器。借助 Channels,Helium 為您完成了與這些 Web 服務(wù)或協(xié)議之一集成的所有繁重工作。對于 Fern Saver,我們的土壤水分探測器,讓我們啟動(dòng)一個(gè)HTTP 通道。這將使我們能夠通過管道將數(shù)據(jù)傳送到任何通過 HTTP 接受數(shù)據(jù)的 Web 服務(wù)。例如,您可以使用 HTTP 通道將此數(shù)據(jù)發(fā)送到IFTTT ,然后在每次 Fern Saver 報(bào)告濕度低于特定水平時(shí)接收文本。

在此示例中,我們將設(shè)置一個(gè) HTTP 通道,將數(shù)據(jù)發(fā)送到requestb.in,這是一個(gè)方便、免費(fèi)的 Web 服務(wù),用于測試 HTTP 服務(wù)。請注意,在下面,當(dāng)我們將 Sketch 上傳到 Arduino 時(shí),我們將HTTP在代碼中引用此通道名稱 , 以便我們知道將數(shù)據(jù)發(fā)送到哪里。

配置您的 Arduino IDE 并上傳 Sketch

我們現(xiàn)在可以繼續(xù)配置您的 Arduino IDE 并導(dǎo)入所需的庫。開始:

確保您已下載最新的 Arduino IDE。

然后我們需要添加兩個(gè)庫:Helium和ArduinoJson. 您可以通過轉(zhuǎn)到Sketch Include Library Manage Libraries 從 IDE 中添加庫。搜索“helium”,選擇它,然后點(diǎn)擊Install 。為“ArduinoJson”庫遵循相同的安裝過程。(我們需要這個(gè)庫,因?yàn)槲覀儗⒂涗浀耐寥浪秩掌诟袷綖?JSON。)-》-》

一旦完成,就該進(jìn)行一些實(shí)際的 Arduino 編程了。以下是完整的Soil_Humidity.ino 草圖。

/*

* Copyright 2017, Helium Systems, Inc.
* All Rights Reserved. See LICENCE.txt for license information
*
* Taking humidity readings using the SEN0192 capacitive humidity
* sensor. Wiring instructions:
* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
*
* Install the following libraries through Sketch->Manage Libraries:
* - ArduinoJson
* - Helium
*/
#include "Board.h"
#include
#include
#include
#include
// This Channel Name should correspond the Channel you've deployed in Helium
// Dashboard to ingest this data.
#define CHANNEL_NAME "HTTP"
// Delay for one second #define CHANNEL_DELAY 5000
// Send very 60 cycles (seconds)
#define CHANNEL_SEND_CYCLE 12
Helium helium(&atom_serial);
Channel channel(&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("Failed - "));
Serial.println(result);
}
}
else
{
Serial.println(F("Failed"));
}
}
void
connect()
{
while (!helium.connected())
{
Serial.print(F("Connecting - "));
int status = helium.connect();
report_status(status);
if (helium_status_OK != status)
{
delay(1000);
}
}
}
void
channel_create(const char * channel_name)
{
int8_t result;
int status;
do
{
// Ensure we're connected
connect();
Serial.print(F("Creating Channel - "));
status = channel.begin(channel_name, &result);
// Print status and result
report_status(status, result);
if (helium_status_OK != status)
{
delay(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 result;
do
{
// Try to send
Serial.print(F("Sending - "));
status = channel.send(data, len, &result);
report_status(status, result);
// Create the channel if any service errors are returned
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("Starting"));

helium.begin(HELIUM_BAUD_RATE);
channel_create(CHANNEL_NAME);
channel_counter = 0; }
#define DRY_VALUE 536 // Taken in air
#define WET_VALUE 303 // Taken in water
#define HUM_RANGE (DRY_VALUE - WET_VALUE)
void
loop()
{
Serial.print(F("Reading - "));
float reading = analogRead(A0);
float percent = 100 * (1 - (reading - WET_VALUE) / HUM_RANGE);
Serial.print(reading);
Serial.print(" - ");
Serial.println(percent);
if (--channel_counter <= 0) ? ??
{
StaticJsonBuffer jsonBuffer;
JsonObject & root = jsonBuffer.createObject();

root[F("value")] = reading;
root[F("percent")] = percent;
char buffer[HELIUM_MAX_DATA_SIZE];
size_t used = root.printTo(buffer, HELIUM_MAX_DATA_SIZE);
channel_send(CHANNEL_NAME, buffer, used);
channel_counter = CHANNEL_SEND_CYCLE;
}
delay(CHANNEL_DELAY);
}

安裝Helium 和ArduinoJson 庫后,創(chuàng)建一個(gè)新草圖(從 Arduino IDE 中的File -》 New ),然后粘貼上面的代碼。然后,將完整的土壤濕度探頭硬件包通過 USB 電纜連接到您的工作站,點(diǎn)擊上傳按鈕。

Atom Prototyping Module 上的 LED 應(yīng)在片刻后開始閃爍。這是連接到 Helium 網(wǎng)絡(luò)的 Atom(通過我們之前部署的 Element)。如果 Arduino IDE 在上傳代碼時(shí)沒有拋出任何錯(cuò)誤,則說明這是成功的,土壤濕度探頭現(xiàn)在正在生成讀數(shù)。

關(guān)于土壤水分?jǐn)?shù)據(jù)的注釋

如上所述,此 Sketch 將捕獲土壤水分?jǐn)?shù)據(jù)并對其進(jìn)行編碼,就像在發(fā)送到 Helium 平臺(tái)之前一樣。使用上面的 Sketch,一個(gè)數(shù)據(jù)點(diǎn)看起來像這樣(as ):JSON JSON

{

“value”: 433,

“percent”: 55.5

}

值得注意的是,DFRobot 重力電容式土壤濕度傳感器實(shí)際上將這些讀數(shù)捕獲為校準(zhǔn)的干濕讀數(shù)之間的模擬讀數(shù)。

在 Helium Dashboard 中驗(yàn)證傳感器連接性和數(shù)據(jù)

現(xiàn)在您的傳感器已部署,我們可以驗(yàn)證它是否在線并正在傳輸數(shù)據(jù)。在 Dashboard 中,我們可以通過幾種方式執(zhí)行此操作,都可以通過您剛剛部署的傳感器的Atom UI視圖。

如果您的 Atom 在線,儀表板將顯示其狀態(tài)和信號,以及有關(guān)其狀態(tài)的各種其他元數(shù)據(jù)。它看起來像這樣:

pYYBAGLjkPSANi3CAACJeAJkgMY783.png

在同一個(gè) Atom 界面的下方,我們還顯示了一個(gè)事件日志,顯示來自傳感器的每個(gè)數(shù)據(jù)點(diǎn)以及它是否成功傳輸?shù)胶ねǖ馈H缟纤?,這些是 Web 服務(wù)或原始協(xié)議的預(yù)構(gòu)建連接器。之前我們?yōu)槟?Helium 組織部署了一個(gè)HTTP 通道。而上面的 Sketch 告訴 Soil Moisture probe 將數(shù)據(jù)發(fā)送到這個(gè)通道 - 稱為HTTP。然而,在下圖的示例中,我們將數(shù)據(jù)發(fā)送到 Helium HTTP 通道:

poYBAGLjkPCAOGkEAAC0ynlOmKM556.png

我們還為每個(gè) Atom 提供了一個(gè)Debug界面,它將在您的讀數(shù)進(jìn)入時(shí)顯示您的讀數(shù)(一旦您啟用了此選項(xiàng))。這是儀表板的調(diào)試查看器中的一些土壤水分?jǐn)?shù)據(jù):

pYYBAGLjkOyAFL2ZAAB_AUyUfZg337.png

恭喜!本文到此結(jié)束。您現(xiàn)在已經(jīng)使用無線土壤濕度探頭為您的蕨類植物提供了面向未來的保障。

pYYBAGLjkOiAWcYrAAYhefyNQoY288.png

土壤濕度相關(guān)代碼:

/*

* Copyright 2017, Helium Systems, Inc.
* All Rights Reserved. See LICENCE.txt for license information
*
* Taking humidity readings using the SEN0192 capacitive humidity
* sensor. Wiring instructions:
* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
*
* Install the following libraries through Sketch->Manage Libraries:
* - ArduinoJson
* - Helium
*/


#include "Board.h"
#include
#include
#include
#include


#define CHANNEL_NAME "Helium MQTT"
// Delay for one second
#define CHANNEL_DELAY 5000
// Send very 60 cycles (seconds)
#define CHANNEL_SEND_CYCLE 12

Helium helium(&atom_serial);
Channel channel(&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("Failed - "));
Serial.println(result);
}
}
else
{
Serial.println(F("Failed"));
}
}

void
connect()
{
while (!helium.connected())
{
Serial.print(F("Connecting - "));
int status = helium.connect();
report_status(status);
if (helium_status_OK != status)
{
delay(1000);
}
}
}

void
channel_create(const char * channel_name)
{
int8_t result;
int status;
do
{
// Ensure we're connected
connect();
Serial.print(F("Creating Channel - "));
status = channel.begin(channel_name, &result);
// Print status and result
report_status(status, result);
if (helium_status_OK != status)
{
delay(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 result;

do
{
// Try to send
Serial.print(F("Sending - "));
status = channel.send(data, len, &result);
report_status(status, result);
// Create the channel if any service errors are returned
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("Starting"));

helium.begin(HELIUM_BAUD_RATE);
channel_create(CHANNEL_NAME);
channel_counter = 0;
}


#define DRY_VALUE 536 // Taken in air
#define WET_VALUE 303 // Taken in water

#define HUM_RANGE (DRY_VALUE - WET_VALUE)

void
loop()
{
Serial.print(F("Reading - "));

float reading = analogRead(A0);
float percent = 100 * (1 - (reading - WET_VALUE) / HUM_RANGE);
Serial.print(reading);
Serial.print(" - ");
Serial.println(percent);

if (--channel_counter <= 0)
{
StaticJsonBuffer jsonBuffer;
JsonObject & root = jsonBuffer.createObject();

root[F("value")] = reading;
root[F("percent")] = percent;

char buffer[HELIUM_MAX_DATA_SIZE];
size_t used = root.printTo(buffer, HELIUM_MAX_DATA_SIZE);

channel_send(CHANNEL_NAME, buffer, used);

channel_counter = CHANNEL_SEND_CYCLE;
}

delay(CHANNEL_DELAY);
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 探頭
    +關(guān)注

    關(guān)注

    0

    文章

    1190

    瀏覽量

    41486
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186372
  • Helium
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    4798
收藏 人收藏

    評論

    相關(guān)推薦

    構(gòu)建一個(gè)基于晶體管的簡單土壤濕度檢測器電路

    在這個(gè)項(xiàng)目中,我們將構(gòu)建一個(gè)基于晶體管的簡單土壤濕度檢測器電路。在本電路中,我們使用NPN晶體管來檢測土壤濕度。對于電子愛好者來說,這是非常簡單和有趣的電路。該土壤濕度傳感器電路可用于
    的頭像 發(fā)表于 11-22 17:22 ?3544次閱讀
    <b class='flag-5'>構(gòu)建</b>一個(gè)基于晶體管的簡單<b class='flag-5'>土壤濕度</b>檢測器電路

    土壤濕度檢測代碼怎么寫?

    單片機(jī)的顯示屏要顯示土壤濕度檢測的結(jié)果,代碼怎么寫?引腳要怎么接?
    發(fā)表于 05-02 11:13

    請問土壤濕度傳感器原理是什么?

    土壤濕度傳感器原理是什么?怎么制作
    發(fā)表于 11-05 09:05

    請問有土壤濕度測量的案例嗎

    Dear 工程師: ADI有無關(guān)于土壤濕度測量的案例。
    發(fā)表于 01-10 14:29

    InfraredReflectiveSensor如何檢測土壤濕度

    InfraredReflectiveSensor如何檢測土壤濕度
    發(fā)表于 11-09 06:14

    土壤濕度傳感器模塊+Stduino Nano&UNO相關(guān)資料推薦

    37種傳感器(二十五)土壤濕度傳感器模塊+Stduino Nano&UNO本文轉(zhuǎn)載自:關(guān)鍵詞:51、stm32、arduino、stduino單片機(jī)、stduino UNO&Nano
    發(fā)表于 01-05 08:32

    關(guān)于土壤濕度檢測模塊的使用

    博文intro網(wǎng)上關(guān)于土壤濕度檢測模塊的使用大多都是通過其DO數(shù)字信號輸出引腳來判斷檢測到的濕度是否超過閾值(超過輸出低電平,否則輸出高電平),而對于其AO模擬信號輸出引腳的使用卻鮮有人提及。本文
    發(fā)表于 02-16 06:51

    土壤濕度測量怎么校準(zhǔn)?

    土壤濕度測量怎么校準(zhǔn)
    發(fā)表于 10-30 08:13

    土壤濕度程序

    51單片機(jī),用土壤濕度傳感器檢測控制土壤濕度
    發(fā)表于 03-16 17:15 ?8次下載

    土壤濕度傳感器怎么用_土壤濕度傳感器種類

    本文介紹了土壤溫度傳感器的輸出方式與土壤濕度傳感器使用方法,其次介紹了土壤濕度傳感器液位傳感器的常用類型,最后介紹了土壤濕度傳感器分類以及它們之間的比較。
    發(fā)表于 01-22 09:01 ?3.6w次閱讀

    土壤濕度傳感器的原理介紹

    本文開始介紹了說明是土壤濕度傳感器,其次介紹了土壤濕度傳感器的特點(diǎn)和土壤濕度傳感器技術(shù)參數(shù),最后介紹了土壤濕度傳感器原理與土壤濕度傳感器工作
    發(fā)表于 01-22 09:26 ?7.7w次閱讀

    土壤濕度傳感器yl69如何使用

    土壤濕度傳感器又名土壤水分傳感器,土壤含水量傳感器。本文介紹了土壤濕度傳感器YL69使用方法,介紹了土壤濕度傳感器YL69的原理圖。
    發(fā)表于 01-22 10:05 ?6.4w次閱讀

    自制土壤濕度傳感電路圖_土壤濕度檢測原理圖

    土壤濕度傳感器又名:土壤水分傳感器、土壤墑情傳感器、土壤含水量傳感器。主要用來測量土壤容積含水量,做土壤
    發(fā)表于 01-22 10:17 ?3.4w次閱讀
    自制<b class='flag-5'>土壤濕度</b>傳感電路圖_<b class='flag-5'>土壤濕度</b>檢測原理圖

    如何使用土壤濕度傳感器

    電子發(fā)燒友網(wǎng)站提供《如何使用土壤濕度傳感器.zip》資料免費(fèi)下載
    發(fā)表于 11-17 10:32 ?8次下載
    如何使用<b class='flag-5'>土壤濕度</b>傳感器

    土壤濕度檢測電路的基本原理

      科學(xué)種田,需要實(shí)時(shí)監(jiān)測土壤濕度。土壤濕度測試電路,可粗略測量出土壤濕度。采用LED七色發(fā)光二極管來顯示對應(yīng)
    的頭像 發(fā)表于 03-13 14:20 ?2287次閱讀
    <b class='flag-5'>土壤濕度</b>檢測電路的基本原理