Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Capteur d'humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Composants et fournitures

Module Helium Atom XBee × 1
Point d'accès Helium Element × 1
DFRobot Gravity : Capteur d'humidité du sol capacitif analogique × 1
Adaptateur Helium Arduino/mbed × 1
Arduino UNO × 1

Applications et services en ligne

À propos de ce projet

Donnez une voix à vos plantes avec un capteur d'humidité du sol sans fil

Admettons-le. Les plantes meurent tout le temps par manque d'arrosage. Vous êtes occupé et ces fougères ne lèveront pas la main quand elles ont soif. Alors, pour l'amateur de plantes en déplacement, cette sonde d'humidité du sol prototype est votre billet pour des fougères et des ficus heureux et en bonne santé.

Ce que nous allons couvrir

De bout en bout, ce guide complet devrait vous prendre environ 60 minutes. Voici ce que nous allons aborder :

Très bien. C'est parti. Nous avons des fougères à sauver.

Construction de votre sonde d'humidité du sol

D'abord, nous devons construire l'unité de détection. C'est rapide et facile. Quand vous avez fini, votre sonde complète devrait ressembler à ceci :

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Pour construire ceci :

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Déploiement de votre Helium Element

Maintenant, il est temps de construire votre propre réseau Helium. Cela prend environ 30 secondes. (Si vous voulez en savoir plus sur la façon dont une application de bout en bout est construite sur Helium et comment nous gérons le composant de mise en réseau sans fil, commencez par cet aperçu d'architecture.)

Pour déployer l'Element et créer une couverture réseau pour vos capteurs basés sur Atom, branchez-le simplement sur l'alimentation et un port Ethernet actif en utilisant les câbles fournis. (Note : Si vous avez un Element avec connexion cellulaire, l'utilisation de la connectivité Ethernet est optionnelle mais recommandée comme sauvegarde.) Une fois branché, vous verrez une activité LED. Votre Element sera connecté lorsque la LED frontale deviendra verte (signalant la connectivité Ethernet) ou bleue-verte (pour la connectivité cellulaire). Vous pouvez regarder une courte vidéo sur l'Element et comment le connecter ici.

Enregistrement de votre Helium Element et Atom dans Helium Dashboard

Maintenant que notre unité de détection est construite et que votre réseau Helium est déployé, il est temps d'enregistrer votre matériel dans le Helium Dashboard. Dashboard est l'interface utilisateur hébergée de Helium pour surveiller et gérer les déploiements de matériel connecté. Tout le matériel expédié par Helium est déjà enregistré dans notre système, mais nous devons savoir qui le déploie.

Vous pouvez vérifier que votre Element est en ligne en regardant son Statut & Signal dans Dashboard :

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Déploiement du canal HTTP Helium

Une caractéristique majeure de la plateforme Helium est les Canaux (Channels). Ce sont des connecteurs préconstruits vers des services web (comme AWS IoT, Google Cloud IoT et Azure IoT) et des protocoles (comme MQTT et HTTP). Avec les Canaux, Helium a fait tout le travail lourd pour vous en matière d'intégration avec l'un de ces services web ou protocoles. Pour Fern Saver, notre sonde d'humidité du sol, mettons en place un canal HTTP. Cela nous permettra d'acheminer les données vers n'importe quel service web qui accepte les données via HTTP. Par exemple, vous pourriez utiliser un canal HTTP pour envoyer ces données à IFTTT et, à son tour, recevoir un SMS chaque fois que Fern Saver signale une humidité en dessous d'un certain niveau.

Dans cet exemple, nous allons configurer un canal HTTP qui envoie les données vers requestb.in, un service web gratuit et pratique pour tester les services HTTP. Notez que ci-dessous, lorsque nous téléverserons le Sketch sur l'Arduino, nous ferons référence à ce nom de canal, HTTP, dans le code pour savoir où envoyer les données.

Voici à quel point il est rapide et facile de configurer ce canal :

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Configuration de votre Arduino IDE et téléversement du Sketch

Nous pouvons maintenant passer à la configuration de votre Arduino IDE et à l'importation des bibliothèques requises. Pour commencer :

Une fois cela fait, il est temps de faire de la vraie programmation Arduino. La source complète du Sketch que nous allons téléverser se trouve ici sur GitHub. Voici le sketch complet Soil_Humidity.ino.

/* 
 * Copyright 2017, Helium Systems, Inc.
 * All Rights Reserved. See LICENCE.txt for license information
 * 
 * Prise de relevés d'humidité en utilisant le capteur capacitif SEN0192.
 * Instructions de câblage :
 * https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
 * 
 * Installez les bibliothèques suivantes via Croquis -> Gérer les bibliothèques :
 * - ArduinoJson
 * - Helium
 */

#include "Board.h"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <Helium.h>
#include <Wire.h>

// Ce nom de canal doit correspondre au canal que vous avez déployé dans Helium
// Dashboard pour ingérer ces données.
#define CHANNEL_NAME "HTTP"

// Délai d'une seconde
#define CHANNEL_DELAY 5000

// Envoyer tous les 60 cycles (secondes)
#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("Réussi"));
    } else {
      Serial.print(F("Échec - "));
      Serial.println(result);
    }
  } else {
    Serial.println(F("Échec"));
  }
}

void connect() {
  while (!helium.connected()) {
    Serial.print(F("Connexion - "));
    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 {
    // S'assurer que nous sommes connectés
    connect();
    Serial.print(F("Création du canal - "));
    status = channel.begin(channel_name, &result);
    // Afficher le statut et le résultat
    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 {
    // Essayer d'envoyer
    Serial.print(F("Envoi - "));
    status = channel.send(data, len, &result);
    report_status(status, result);
    // Créer le canal si des erreurs de service sont retournées
    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("Démarrage"));
  helium.begin(HELIUM_BAUD_RATE);
  channel_create(CHANNEL_NAME);
  channel_counter = 0;
}

#define DRY_VALUE 536 // Mesuré dans l'air
#define WET_VALUE 303 // Mesuré dans l'eau
#define HUM_RANGE (DRY_VALUE - WET_VALUE)

void loop() {
  Serial.print(F("Lecture - "));
  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<JSON_OBJECT_SIZE(2) + 100> 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);
}

Avec les bibliothèques Helium et ArduinoJson installées, créez un nouveau sketch (Fichier -> Nouveau depuis l'Arduino IDE), et collez le code ci-dessus. Ensuite, avec votre sonde d'humidité du sol complète connectée à votre poste de travail via un câble USB, cliquez sur le bouton Téléverser.

Les LEDs sur votre module de prototypage Atom devraient commencer à clignoter après quelques instants. C'est l'Atom qui se connecte au réseau Helium (via l'Element que nous avons déployé plus tôt). Si l'Arduino IDE ne signale aucune erreur lors du téléversement, cela a réussi et la sonde d'humidité du sol génère maintenant des relevés.

Note sur les données d'humidité du sol

Comme indiqué ci-dessus, ce Sketch capturera les données d'humidité du sol et les encodera en JSON avant de les envoyer à la plateforme Helium. En utilisant le Sketch ci-dessus, un point de données ressemblera à quelque chose comme ceci (en JSON) :

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

Il convient de noter que le capteur capacitif d'humidité du sol DFRobot Gravity capture en fait ces relevés sous forme de lectures analogiques entre une lecture sèche et une lecture humide calibrées. Vous pouvez obtenir tous les détails sur la façon dont cela est implémenté et calibré ici. Vous pourriez vouloir ajuster un peu la calibration.

Vérification de la connectivité du capteur et des données dans Helium Dashboard

Maintenant que votre capteur est déployé, nous pouvons vérifier qu'il est en ligne et qu'il transmet des données. Dans Dashboard, nous pouvons faire cela de plusieurs façons, toutes via la vue Atom UI pour le capteur que vous venez de déployer.

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel
Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel
Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Prochaines étapes et aide

Félicitations ! C'est la fin de ce guide. Vous avez maintenant protégé votre fougère pour l'avenir avec une sonde d'humidité du sol sans fil. C'est important. Vos fougères vous remercient.

Capteur d humidité du sol sans fil avec Helium et DFRobot – Soin des plantes en temps réel

Si vous voulez en savoir plus sur Helium et comment vous pouvez prototyper vos propres capteurs en utilisant ce matériel et ce logiciel, commencez ici :

Code

Soil_Humidity.ino (C/C++)

Le sketch Arduino complet pour commencer à envoyer les données d'humidité du sol de votre capteur vers un canal Helium.

/* 
 * Copyright 2017, Helium Systems, Inc.
 * All Rights Reserved. See LICENCE.txt for license information
 * 
 * Prise de relevés d'humidité en utilisant le capteur capacitif SEN0192.
 * Instructions de câblage :
 * https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193
 * 
 * Installez les bibliothèques suivantes via Croquis -> Gérer les bibliothèques :
 * - ArduinoJson
 * - Helium
 */

#include "Board.h"
#include <Arduino.h>
#include <ArduinoJson.h>
#include <Helium.h>
#include <Wire.h>

#define CHANNEL_NAME "Helium MQTT"
// Délai d'une seconde
#define CHANNEL_DELAY 5000
// Envoyer tous les 60 cycles (secondes)
#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<JSON_OBJECT_SIZE(2) + 100> 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);
}

Processus de fabrication

  1. Capteurs d'humidité du sol : Fonctionnement et applications pratiques
  2. Système de contrôle d'accès intégré QR, RFID et vérification de température
  3. Construire un capteur d'humidité du sol Raspberry Pi low-cost pour irrigation intelligente
  4. Construire un système aéroponique automatisé avec Raspberry Pi et capteur d'humidité
  5. Construire un robot avec Raspberry Pi et Python : Guide complet
  6. Réussite durable : leçons de persévérance d'Abraham Lincoln et du leadership maintenance
  7. Intégration d'un capteur thermocouple avec l'Arduino Portenta H7 via le MAX6675
  8. Arduino et MPU6050 : Contrôle précis de servo-moteur avec SG90 et MG996R
  9. Caméras numériques améliorées par IA révolutionnent la surveillance de l'humidité du sol