Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real
Componentes e Materiais
| Módulo Helium Atom Xbee | 1 |
| Ponto de Acesso Helium Element | 1 |
| Sensor de Umidade do Solo Capacitivo Analógico DFRobot Gravity | 1 |
| Adaptador Helium Arduino/mbed | 1 |
| Arduino UNO | 1 |
Aplicativos e Serviços Online
- Arduino IDE
- Helium Dashboard
Sobre o Projeto
Dê Voz às Suas Plantas com um Sensor Sem Fio de Umidade do Solo
Vamos ser honestos. Plantas morrem o tempo todo por falta de rega. Você está ocupado e aqueles fetos não vão levantar a mão quando estiverem com sede. Então, para o entusiasta de plantas em movimento, esta sonda protótipo de umidade do solo é seu ingresso para fetos e ficus felizes e saudáveis.
O que Cobriremos
De ponta a ponta, este guia completo deve levar cerca de 60 minutos. Aqui está o que abordaremos:
- Construir sua sonda completa de umidade do solo usando o Sensor Capacitivo de Umidade do Solo Gravity DF Robot, um Módulo de Prototipagem Helium Atom, um Adaptador Helium Arduino e uma placa Arduino (usamos a UNO);
- Registrar seu Helium Element e Módulo de Prototipagem Helium Atom no Helium Dashboard; e construir sua própria rede sem fio de longa distância e baixa potência;
- Programar sua sonda de umidade do solo via Arduino IDE. No caminho, também instalaremos as bibliotecas Arduino Helium e ArduinoJson;
- Medir e Enviar Dados de Umidade do Solo em tempo quase real da sua planta para o Helium Dashboard; e encaminhá-los para um Canal HTTP Helium.
Certo. Vamos lá. Temos fetos para salvar.
Construindo sua Sonda de Umidade do Solo
Primeiro, precisamos construir a unidade de sensoriamento. É rápido e fácil. Quando terminar, sua sonda completa deve parecer com isto:

Para construir isto:
- Primeiro, encaixe seu Módulo de Prototipagem Helium Atom no Adaptador Helium Arduino e depois conecte esta unidade combinada à sua placa Arduino escolhida. Certifique-se de configurar os jumpers
RXeTXadequadamente dependendo da placa que você está usando. Detalhes completos sobre como conectar todas estas placas, junto com as configurações corretas dos jumpers, podem ser encontrados aqui. Dê uma olhada, complete isso e volte. - Em seguida, precisamos conectar a sonda de umidade do solo real ao Adaptador Helium Arduino usando o cabo jumper de três fios fornecido com a Sonda de Umidade do Solo DF Robot. As três cores dos fios são preto, vermelho e azul. No Adaptador Helium Arduino, o fio preto conecta ao
GND; o fio vermelho conecta ao5V; e o fio azul conecta ao headerADO. Há um ótimo diagrama da equipe DFRobot sobre como esta conexão funciona aqui. Nossa placa fica assim quando a fiação está feita corretamente:

- Por fim, conecte o header branco no cabo jumper à Sonda de Umidade do Solo DF Robot. Embora possa ser um pouco complicado, deve encaixar direto com esforço mínimo.
Implantando seu Helium Element
Agora é hora de construir sua própria Rede Helium. Isso leva cerca de 30 segundos. (Se quiser saber mais sobre como uma aplicação ponta a ponta é construída no Helium e como lidamos com o componente de rede sem fio, comece com esta visão geral da arquitetura.)
Para implantar o Element e criar cobertura de rede para seu(s) sensor(es) baseados em Atom, simplesmente conecte-o à energia e a uma porta Ethernet ativa usando os cabos fornecidos. (Nota: Se você tem um Element com backup Celular, usar a conectividade Ethernet é opcional, mas recomendado como backup.) Uma vez conectado, você verá alguma atividade nos LEDs. Seu Element estará conectado quando o LED frontal ficar verde (sinalizando conectividade Ethernet) ou azul-esverdeado (para conectividade Celular). Você pode assistir a um vídeo curto sobre o Element e como conectá-lo aqui.
Registrando seu Helium Element e Atom no Helium Dashboard
Agora que nossa unidade de sensoriamento está construída e sua rede Helium está implantada, é hora de registrar seu hardware no Helium Dashboard. O Dashboard é a interface de usuário hospedada do Helium para monitorar e gerenciar implantações de hardware conectado. Todo hardware que o Helium envia já está registrado em nosso sistema, mas precisamos saber quem está implantando.
- Primeiro, crie uma conta no Helium Dashboard se ainda não o fez.
- Para registrar seu Atom, comece selecionando New Atom. Na UI, adicione um nome (ex: Fern Saver), depois insira os últimos quatro dígitos do seu
MAC Addresse seu códigoHVVde quatro dígitos. Clique em Save e pronto. - O registro do Element é feito exatamente da mesma forma. Selecione New Element, forneça um nome, os últimos quatro dígitos do seu
MAC Addresse seu códigoHVVde quatro dígitos. Também certifique-se de inserir uma localização para seu Element para que o Dashboard possa exibi-lo no mapa.
Você pode verificar se seu Element está online olhando seu Status & Signal no Dashboard:

Implantando o Canal HTTP Helium
Uma característica principal da Plataforma Helium são os Canais. Estes são conectores pré-construídos para serviços web (como AWS IoT, Google Cloud IoT e Azure IoT) e protocolos (como MQTT e HTTP). Com Canais, o Helium fez todo o trabalho pesado para você quando se trata de integrar com um desses serviços web ou protocolos. Para o Fern Saver, nossa Sonda de Umidade do Solo, vamos criar um Canal HTTP. Isso nos permitirá enviar dados para qualquer serviço web que aceite dados via HTTP. Por exemplo, você poderia usar um Canal HTTP para enviar estes dados ao IFTTT e, por sua vez, receber um SMS toda vez que o Fern Saver reportar umidade abaixo de certo nível.
Neste exemplo, configuraremos um Canal HTTP que envia dados para requestb.in, um serviço web gratuito e útil para testar serviços HTTP. Note que abaixo, quando carregarmos o Sketch no Arduino, estaremos referenciando este nome de Canal, HTTP, no código para saber para onde enviar os dados.
Veja como é rápido e fácil configurar este Canal:

Configurando seu Arduino IDE e Carregando o Sketch
Agora podemos passar para configurar seu Arduino IDE e importar as bibliotecas necessárias. Para começar:
- Certifique-se de ter o Arduino IDE mais recente baixado. Baixe aqui se necessário.
- Precisaremos adicionar duas bibliotecas:
HeliumeArduinoJson. Você pode adicionar bibliotecas dentro da IDE indo em Sketch → Include Library → Manage Libraries. Procure por "helium", selecione e clique em Install. Siga o mesmo processo de instalação para a biblioteca "ArduinoJson". (Precisamos desta biblioteca porque os dados de umidade do solo que registraremos são formatados como JSON.)
Feito isso, é hora de fazer programação Arduino de verdade. A fonte completa do Sketch que carregaremos pode ser encontrada aqui no GitHub. O seguinte é o sketch completo Soil_Humidity.ino.
/*
* Copyright 2017, Helium Systems, Inc.
* All Rights Reserved. See LICENCE.txt for license information
*
* Leituras de umidade usando o sensor capacitivo SEN0192.
* Instruções de fiação:
* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
*
* Instale as seguintes bibliotecas via Sketch->Manage Libraries:
* - ArduinoJson
* - Helium
*/
#include "Board.h"
#include
#include
#include
#include
// Este Nome do Canal deve corresponder ao Canal que você implantou no Helium
// Dashboard para ingerir estes dados.
#define CHANNEL_NAME "HTTP"
// Atraso de um segundo
#define CHANNEL_DELAY 5000
// Envia a cada 60 ciclos (segundos)
#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 {
// Garante que estamos conectados
connect();
Serial.print(F("Creating Channel - "));
status = channel.begin(channel_name, &result);
// Imprime status e resultado
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 {
// Tenta enviar
Serial.print(F("Sending - "));
status = channel.send(data, len, &result);
report_status(status, result);
// Cria o canal se erros de serviço forem retornados
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 // Medido no ar
#define WET_VALUE 303 // Medido na água
#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);
}
Com as bibliotecas Helium e ArduinoJson instaladas, crie um novo sketch (File → New dentro do Arduino IDE) e cole o código acima. Então, com seu hardware completo de sonda de umidade do solo conectado à sua estação de trabalho via cabo USB, clique no botão Upload.
Os LEDs no seu Módulo de Prototipagem Atom devem começar a piscar após alguns momentos. Este é o Atom conectando à rede Helium (via o Element que implantamos anteriormente). Se o Arduino IDE não lançar erros ao carregar o código, isso foi bem-sucedido e a sonda de umidade do solo agora está gerando leituras.
Uma Nota sobre os Dados de Umidade do Solo
Conforme observado acima, este Sketch capturará dados de umidade do solo e os codificará como JSON antes de enviar à plataforma Helium. Usando o Sketch acima, um ponto de dados será algo assim (como JSON):
{ "value": 433, "percent": 55.5 }
Vale notar que o Sensor Capacitivo de Umidade do Solo Gravity DFRobot está capturando estas leituras como leituras analógicas entre uma leitura seca e úmida calibradas. Você pode obter detalhes completos sobre como isso é implementado e calibrado aqui. Você pode querer ajustar a calibração um pouco.
Verificando Conectividade do Sensor e Dados no Helium Dashboard
Agora que seu sensor está implantado, podemos verificar se está online e transmitindo dados. Dentro do Dashboard, podemos fazer isso de algumas formas, ambas via visualização Atom UI para o sensor que você acabou de implantar.
- Se seu Atom estiver online, o Dashboard mostrará seu Status & Signal, junto com vários outros metadados sobre seu status. Ficará algo assim:

- Mais abaixo na mesma interface do Atom, também exibimos um Event Log mostrando cada ponto de dados do sensor e se foi transmitido com sucesso para um Canal Helium. Como notamos acima, estes são conectores pré-construídos para serviços web ou protocolos brutos. Anteriormente implantamos um Canal HTTP para sua organização Helium. E o Sketch acima diz à Sonda de Umidade do Solo para enviar dados a este canal - chamado
HTTP. No exemplo abaixo, porém, estamos enviando nossos dados para o Canal HTTP Helium:

- Também fornecemos uma interface Debug para cada Atom que exibirá suas leituras conforme chegam (uma vez que você habilitou esta opção). Aqui estão alguns Dados de Umidade do Solo no visualizador Debug do Dashboard:

Próximos Passos e Ajuda
Parabéns! Este é o fim deste guia. Você agora protegeu seu feto para o futuro com uma sonda sem fio de umidade do solo. Isso é um grande negócio. Seus fetos agradecem.

Se quiser saber mais sobre Helium e como pode prototipar seus próprios sensores usando este hardware e software, comece aqui:
Código
Soil_Humidity.ino
/*
* Copyright 2017, Helium Systems, Inc.
* All Rights Reserved. See LICENCE.txt for license information
*
* Leituras de umidade usando o sensor capacitivo SEN0192.
* Instruções de fiação:
* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
*
* Instale as seguintes bibliotecas via Sketch->Manage Libraries:
* - ArduinoJson
* - Helium
*/
#include "Board.h"
#include
#include
#include
#include
#define CHANNEL_NAME "Helium MQTT"
// Atraso de um segundo
#define CHANNEL_DELAY 5000
// Envia a cada 60 ciclos (segundos)
#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 {
// Garante que estamos conectados
connect();
Serial.print(F("Creating Channel - "));
status = channel.begin(channel_name, &result);
// Imprime status e resultado
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 {
// Tenta enviar
Serial.print(F("Sending - "));
status = channel.send(data, len, &result);
report_status(status, result);
// Cria o canal se erros de serviço forem retornados
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 // Medido no ar
#define WET_VALUE 303 // Medido na água
#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);
}
Processo de manufatura
- Como Funcionam Sensores de Umidade do Solo e Suas Aplicações Práticas
- Sistema Integrado de Controle de Acesso com QR, RFID e Verificação de Temperatura
- Construa um Sensor de Umidade do Solo de Baixo Custo para Irrigação Inteligente com Raspberry Pi
- Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
- Construa um Robô com Raspberry Pi e Python: Guia Completo
- Sucesso Duradouro: Lições de Persistência de Abraham Lincoln e Liderança em Manutenção
- Integrando Sensor Termopar com Arduino Portenta H7 usando CI MAX6675
- Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
- Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
- Câmeras Digitais Aprimoradas por IA Revolucionam Monitoramento de Umidade do Solo