Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Draadloze bodemvochtsonde met helium en DFRobot

Componenten en benodigdheden

Helium Atom Xbee-module
× 1
Helium Element Access Point
× 1
DFRobot Zwaartekracht:analoge capacitieve bodemvochtsensor
× 1
Helium Arduino/mbed-adapter
× 1
Arduino UNO
× 1

Apps en online services

Arduino IDE
Helium-dashboard

Over dit project

Geef uw planten een stem met een draadloze bodemvochtsensor

Laten we eerlijk zijn. Planten sterven de hele tijd door gebrek aan water. Je hebt het druk en die varens zullen hun hand niet opsteken als ze zich uitgedroogd voelen. Dus voor de plantenliefhebber die onderweg is, is deze prototype bodemvochtsonde jouw ticket naar gelukkige en gezonde varens en ficus.

Wat we behandelen

Van begin tot eind duurt deze hele gids ongeveer 60 minuten. Dit is wat we gaan bespreken:

  • Het construeren van uw complete bodemvochtsonde met behulp van de DF Robot Gravity Capacitive Soil Moisture Sensor, een Helium Atom Prototyping Module, een Helium Arduino-adapter en een Arduino-bord (we gingen met de UNO);
  • Het registreren van uw Helium Element en Helium Atom Prototyping Module in het Helium Dashboard; en het bouwen van uw eigen low-power, wide area draadloos netwerk;
  • Je bodemvochtsonde programmeren via de Arduino IDE. Onderweg zullen we ook de Helium . installeren en ArduinoJson Arduino-bibliotheken;
  • Het meten en verzenden van bodemvochtgegevens in bijna realtime van uw plant naar het Helium Dashboard; en het doorsluizen naar een Helium HTTP-kanaal.

Akkoord. Laten we ernaartoe gaan. We hebben varens te redden.

Uw bodemvochtsonde construeren

Eerst moeten we de sensoreenheid bouwen. Dit is snel en gemakkelijk. Als u klaar bent, ziet uw volledige sonde er als volgt uit:

Om dit te bouwen:

  • Plaats eerst uw Helium Atom Prototyping-module in de Helium Arduino-adapter en sluit vervolgens deze gecombineerde eenheid aan op het door u gekozen Arduino-bord. Zorg ervoor dat u de . configureert RX en TX springt dienovereenkomstig afhankelijk van welk bord je gebruikt. Volledige details over hoe u al deze boards aan elkaar vastmaakt, samen met de juiste jumperconfiguraties, vindt u hier. Kijk, vul dat in en kom terug.
  • Vervolgens moeten we de eigenlijke bodemvochtsonde aansluiten op de Helium Arduino-adapter met behulp van de driedraads jumperkabel die is meegeleverd met de DF Robot Bodemvochtsonde. De drie draadkleuren zijn zwart , rood , en blauw . Op de Helium Arduino Adapter, de zwarte draad wordt aangesloten op GND; de rode draad wordt aangesloten op 5V; en de blauwe draad wordt aangesloten op de ADO kop. Er is een geweldig diagram van het DFRobot-team over hoe deze verbinding hier werkt. Ons bord ziet er zo uit als de bedrading correct is gedaan:

  • Sluit ten slotte de witte kop op de startkabel aan op de DF Robot Bodemvochtsonde. Hoewel dit een beetje lastig kan zijn, zou het met minimale inspanning meteen moeten klikken.

Uw heliumelement inzetten

Nu is het tijd om uw eigen Helium-netwerk te bouwen. Dit duurt ongeveer 30 seconden. (Als je meer wilt weten over hoe een end-to-end applicatie op Helium wordt gebouwd en hoe we omgaan met de draadloze netwerkcomponent, begin dan met dit architectuuroverzicht.)

Om de Element te implementeren en netwerkdekking te creëren voor uw Atom-gebaseerde sensor(en), sluit u hem eenvoudig aan op de voeding en een actieve Ethernet-poort met behulp van de meegeleverde snoeren. (Opmerking:als je een mobiel-ondersteund element hebt, is het gebruik van de Ethernet-connectiviteit optioneel, maar wordt aanbevolen als back-up. ) Eenmaal aangesloten, ziet u wat LED-activiteit. Je Element is verbonden wanneer de LED aan de voorzijde groen wordt (signalering Ethernet-connectiviteit ) of blauwgroen (voor mobiele connectiviteit ). U kunt hier een korte video bekijken over het Element en hoe u deze aansluit.

Uw Helium Element en Atom registreren in Helium Dashboard

Nu onze detectie-eenheid is gebouwd en uw Helium-netwerk is geïmplementeerd, is het tijd om uw hardware te registreren in het Helium Dashboard. Dashboard is de gehoste gebruikersinterface van Helium voor het bewaken en beheren van aangesloten hardware-implementaties. Alle hardware die Helium verzendt, is al geregistreerd in ons systeem, maar we moeten weten wie het gebruikt.

  • Maak eerst een Helium Dashboard-account aan als je dat nog niet hebt gedaan.
  • Om je Atom te registreren, selecteer je eerst Nieuw Atom . Voeg in de gebruikersinterface een naam toe (bijv. Fern Saver ) voer vervolgens de laatste vier van zijn MAC-adres in en de viercijferige HVV-code . Druk op Opslaan en je bent klaar.
  • De Element-registratie gaat op precies dezelfde manier. Selecteer Nieuw element, geef dan een naam op, de laatste vier van het MAC-adres en de viercijferige HVV-code . Zorg er ook voor dat u een locatie voor uw Element invoert, zodat Dashboard deze op een kaart kan weergeven.

U kunt controleren of uw Element online is door ernaar te kijken Status en signaal in dashboard:

Het Helium HTTP-kanaal implementeren

Een belangrijk kenmerk van het Helium Platform zijn kanalen. Dit zijn vooraf gebouwde connectoren voor webservices (zoals AWS IoT, Google Cloud IoT en Azure IoT) en protocollen (zoals MQTT en HTTP ). Met Channels heeft Helium al het zware werk voor je gedaan als het gaat om integratie met een van deze webservices of protocollen. Laten we voor Fern Saver, onze bodemvochtsonde, een HTTP-kanaal opzetten. Hierdoor kunnen we gegevens doorsluizen naar elke webservice die gegevens via HTTP accepteert. U kunt bijvoorbeeld een HTTP-kanaal gebruiken om deze gegevens naar IFTTT te sturen en op zijn beurt een sms ontvangen telkens wanneer Fern Saver vocht onder een bepaald niveau meldt.

In dit voorbeeld zullen we een HTTP-kanaal opzetten dat gegevens naar requestb.in verzendt, een handige, gratis webservice voor het testen van HTTP-services. Merk op dat hieronder, wanneer we de Sketch uploaden naar de Arduino, we zullen verwijzen naar deze kanaalnaam, HTTP , in de code, zodat we weten waar we de gegevens naartoe moeten sturen.

Zo snel en eenvoudig is het om dit kanaal in te stellen:

Uw Arduino IDE configureren en de schets uploaden

We kunnen nu verder gaan met het configureren van uw Arduino IDE en het importeren van de vereiste bibliotheken. Om te beginnen:

  • Zorg ervoor dat je de nieuwste Arduino IDE hebt gedownload. Haal het hier indien nodig.
  • We moeten dan twee bibliotheken toevoegen:Helium en ArduinoJson . U kunt bibliotheken toevoegen vanuit de IDE door naar Sketch . te gaan -> Bibliotheek opnemen -> Bibliotheken beheren. Zoek naar "helium", selecteer het en druk op Installeren . Volg hetzelfde installatieproces voor de "ArduinoJson" -bibliotheek. (We hebben deze bibliotheek nodig omdat de bodemvochtigheidsdatum die we opnemen is geformatteerd als JSON.)

Zodra dit is gebeurd, is het tijd om wat echte Arduino-programmering te doen. De volledige bron voor de Sketch die we gaan uploaden is hier op GitHub te vinden. Het volgende is de volledige Soil_Humidity.ino schetsen.

/* * Copyright 2017, Helium Systems, Inc. * Alle rechten voorbehouden. Zie LICENCE.txt voor licentie-informatie * * Vochtmetingen uitvoeren met behulp van de SEN0192 capacitieve vochtigheid * -sensor. Bedradingsinstructies:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Installeer de volgende bibliotheken via Sketch->Bibliotheken beheren:* - ArduinoJson * - Helium */ #include "Board.h " #include  #include  #include  #include  // Deze kanaalnaam moet overeenkomen met het kanaal dat u in Helium// Dashboard hebt geïmplementeerd om dit op te nemen gegevens. #define CHANNEL_NAME "HTTP" // Vertraging voor één seconde #define CHANNEL_DELAY 5000 // Stuur zeer 60 cycli (seconden) #define CHANNEL_SEND_CYCLE 12 Helium helium(&atom_serial); Kanaalkanaal (&helium); int channel_counter; void report_status (int status, int resultaat =0) {if (helium_status_OK ==status) {if (resultaat ==0) { Serial.println(F("Geslaagd")); } else { Serial.print(F("Mislukt - ")); Serial.println(resultaat); } } else { Serial.println(F("Mislukt")); } } void connect() { while (!helium.connected()) { Serial.print(F("Verbinden - ")); int-status =helium.connect(); report_status(status); if (helium_status_OK! =status) {vertraging (1000); } } } void channel_create(const char * channel_name){ int8_t resultaat; int-status; do { // Zorg ervoor dat we verbonden zijn connect(); Serial.print(F("Kanaal maken - ")); status =kanaal.begin(kanaalnaam, &resultaat); // Afdrukstatus en resultaat report_status (status, resultaat); if (helium_status_OK! =status) {vertraging (1000); } } while (helium_status_OK !=status || resultaat !=0); } void channel_send (const char * channel_name, void const * data, size_t len) {int status; int8_t resultaat; doen { // Probeer Serial.print (F ("Verzenden - ")); status =kanaal.verzenden(data, len, &resultaat); report_status(status, resultaat); // Maak het kanaal als er servicefouten worden geretourneerd if (status ==helium_status_OK &&resultaat!=0) { channel_create(channel_name); } else if (status!=helium_status_OK) { delay(1000); } } while (helium_status_OK !=status || resultaat !=0); } void setup() { Serial.begin(9600); Serial.println(F("Begin")); helium.begin(HELIUM_BAUD_RATE); channel_create(CHANNEL_NAME); kanaal_teller =0; } #define DRY_VALUE 536 // Opgenomen in de lucht #define WET_VALUE 303 // Opgenomen in het water #define HUM_RANGE (DRY_VALUE - WET_VALUE) void loop() { Serial.print(F("Reading - ")); vlotter lezen =analoog lezen (A0); float procent =100 * (1 - (lezing - WET_VALUE) / HUM_RANGE); Serial.print (lezen); Serieel.print(" - "); Serial.println (procent); if (--channel_counter <=0) { StaticJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject(); root[F("waarde")] =lezen; root[F("procent")] =procent; char-buffer [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer, HELIUM_MAX_DATA_SIZE); channel_send(CHANNEL_NAME, buffer, gebruikt); channel_counter =CHANNEL_SEND_CYCLE; } vertraging (CHANNEL_DELAY); } 

Met de Helium en ArduinoJson bibliotheken geïnstalleerd, maak een nieuwe schets (Bestand -> Nieuw vanuit de Arduino IDE) en plak de bovenstaande code in. Vervolgens, met uw complete hardwarepakket voor bodemvochtsondes aangesloten op uw werkstation via een USB-kabel, drukt u op Uploaden knop.

De LED's op uw Atom Prototyping Module zouden na enkele ogenblikken moeten beginnen te knipperen. Dit is de Atom die verbinding maakt met het Helium-netwerk (via het Element dat we eerder hebben ingezet). Als de Arduino IDE geen fouten geeft bij het uploaden van de code, is dit gelukt en genereert de bodemvochtsonde nu metingen.

Een opmerking over de bodemvochtgegevens

Zoals hierboven vermeld, zal deze schets bodemvochtgegevens vastleggen en coderen als JSON voordat u het naar het Helium-platform verzendt. Als u de bovenstaande schets gebruikt, ziet één gegevenspunt er ongeveer zo uit (als JSON ):

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

Het is vermeldenswaard dat de DFRobot Gravity Capacitive Soil Moisture Sensor deze metingen feitelijk vastlegt als analoge metingen tussen een gekalibreerde droge en natte meting. U kunt hier volledige details krijgen over hoe dit wordt geïmplementeerd en gekalibreerd. Misschien wilt u de kalibratie een beetje aanpassen.

Sensorconnectiviteit en gegevens verifiëren in Helium Dashboard

Nu uw sensor is geïmplementeerd, kunnen we controleren of deze online is en gegevens verzendt. Binnen Dashboard kunnen we dit op een aantal manieren doen, beide via de Atom UI weergave voor de sensor die u zojuist hebt ingezet.

  • Als je Atom online is, toont Dashboard zijn Status &Signaal , samen met verschillende andere metagegevens over de status ervan. Het ziet er ongeveer zo uit:
  • Verder in dezelfde Atom-interface geven we ook een Gebeurtenislogboek weer toont elk datapunt van de sensor en of het al dan niet met succes is verzonden naar een heliumkanaal. Zoals we hierboven hebben opgemerkt, zijn dit kant-en-klare connectoren voor webservices of onbewerkte protocollen. Eerder hebben we een HTTP-kanaal geïmplementeerd voor uw Helium-organisatie. En de bovenstaande schets vertelt de bodemvochtsonde om gegevens naar dit kanaal te sturen - genaamd HTTP . In het onderstaande voorbeeld sturen we onze gegevens echter naar het Helium HTTP-kanaal:
  • We bieden ook een Debug interface voor elke Atom die uw metingen zal weergeven zodra ze binnenkomen (als u deze optie eenmaal hebt ingeschakeld). Hier zijn wat bodemvochtgegevens in de foutopsporingsviewer van Dashboard:

Volgende stappen en hulp

Gefeliciteerd! Dat is het einde van deze gids. Je hebt je varen nu toekomstbestendig gemaakt met een draadloze bodemvochtmeter. Dit is een groot probleem. Je varens zijn je dankbaar.

Als je meer wilt weten over Helium en hoe je je eigen sensoren kunt prototypen met deze hardware en software, begin dan hier:

  • Documentatie voor Helium-ontwikkelaars
  • Helium-ontwikkelaar Slack
  • Forum voor Helium-ontwikkelaars

Code

  • Soil_Humidity.ino
Soil_Humidity.inoC/C++
De complete Arduino Sketch om bodemvochtgegevens van je sensor naar een Helium Channel te sturen.
/* * Copyright 2017, Helium Systems, Inc. * Alle rechten voorbehouden. Zie LICENCE.txt voor licentie-informatie * * Vochtmetingen uitvoeren met behulp van de SEN0192 capacitieve vochtigheid * -sensor. Bedradingsinstructies:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Installeer de volgende bibliotheken via Sketch->Beheer bibliotheken:* - ArduinoJson * - Helium */#include "Board.h "#include #include #include #include #define CHANNEL_NAME "Helium MQTT"// Vertraging van één seconde#define CHANNEL_DELAY 5000// Zend zeer 60 cycli (seconden)#define CHANNEL_SEND_CYCLE 12Helium helium(&atom_serial);Kanaalkanaal(&helium);int channel_counter;voidreport_status(int status, int resultaat =0){ if (helium_status_OK ==status) { if (resultaat ==0) { Serial.println(F("Geslaagd")); } else { Serial.print(F("Mislukt - ")); Serial.println(resultaat); } } else { Serial.println(F("Mislukt")); }}voidconnect(){ while (!helium.connected()) { Serial.print(F("Verbinden - ")); int-status =helium.connect(); report_status(status); if (helium_status_OK! =status) {vertraging (1000); } }}voidchannel_create(const char * channel_name){ int8_t resultaat; int-status; do { // Zorg ervoor dat we verbonden zijn connect(); Serial.print(F("Kanaal maken - ")); status =kanaal.begin(kanaalnaam, &resultaat); // Afdrukstatus en resultaat report_status (status, resultaat); if (helium_status_OK! =status) {vertraging (1000); } } while (helium_status_OK !=status || resultaat !=0);}voidchannel_send(const char * channel_name, void const * data, size_t len){ int status; int8_t resultaat; doen { // Probeer Serial.print (F ("Verzenden - ")); status =kanaal.verzenden(data, len, &resultaat); report_status(status, resultaat); // Maak het kanaal als er servicefouten worden geretourneerd if (status ==helium_status_OK &&resultaat!=0) { channel_create(channel_name); } else if (status!=helium_status_OK) { delay(1000); } } while (helium_status_OK !=status || resultaat !=0);}voidsetup(){ Serial.begin(9600); Serial.println(F("Begin")); helium.begin(HELIUM_BAUD_RATE); channel_create(CHANNEL_NAME); channel_counter =0;}#define DRY_VALUE 536 // Opgenomen in de lucht#define WET_VALUE 303 // Opgenomen in het water#define HUM_RANGE (DRY_VALUE - WET_VALUE)voidloop(){ Serial.print(F("Reading - ")); vlotter lezen =analoog lezen (A0); float procent =100 * (1 - (lezing - WET_VALUE) / HUM_RANGE); Serial.print (lezen); Serieel.print(" - "); Serial.println (procent); if (--channel_counter <=0) { StaticJsonBuffer jsonBuffer; JsonObject &root =jsonBuffer.createObject(); root[F("waarde")] =lezen; root[F("procent")] =procent; char-buffer [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer, HELIUM_MAX_DATA_SIZE); channel_send(CHANNEL_NAME, buffer, gebruikt); channel_counter =CHANNEL_SEND_CYCLE; } vertraging (CHANNEL_DELAY);}

Productieproces

  1. Werking en toepassingen van de bodemvochtsensor
  2. Toegangscontrole met QR, RFID en temperatuurverificatie
  3. Raspberry Pi Bodemvochtsensor
  4. Aerocultuur met Raspberry Pi en vochtigheidssensor
  5. Botten bouwen met Raspberry Pi en Python
  6. Leidinggevend met volharding en doorzettingsvermogen
  7. Portenta- en thermokoppelsensor (met MAX6675)
  8. Besturing van servomotor met Arduino en MPU6050
  9. u-blox LEA-6H 02 GPS-module met Arduino en Python
  10. Spraakherkenning en synthese met Arduino
  11. Standaard digitale camera en AI om bodemvocht te bewaken