Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

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

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:

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:

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

Para construir isto:

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

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.

Você pode verificar se seu Element está online olhando seu Status & Signal no Dashboard:

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

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:

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

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:

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.

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real
Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real
Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

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.

Sistema Sem Fio de Umidade do Solo com Helium e DFRobot – Cuidado de Plantas em Tempo Real

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

  1. Como Funcionam Sensores de Umidade do Solo e Suas Aplicações Práticas
  2. Sistema Integrado de Controle de Acesso com QR, RFID e Verificação de Temperatura
  3. Construa um Sensor de Umidade do Solo de Baixo Custo para Irrigação Inteligente com Raspberry Pi
  4. Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
  5. Construa um Robô com Raspberry Pi e Python: Guia Completo
  6. Sucesso Duradouro: Lições de Persistência de Abraham Lincoln e Liderança em Manutenção
  7. Integrando Sensor Termopar com Arduino Portenta H7 usando CI MAX6675
  8. Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
  9. Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
  10. Câmeras Digitais Aprimoradas por IA Revolucionam Monitoramento de Umidade do Solo