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

Slimme Plantencommunicator: Arduino MKR IoT Bundle voor Geautomatiseerde Tuinieren

Onderdelen en Benodigdheden

Arduino MKR IoT Bundle 1

Apps en Online Diensten

  • Zapier
  • ThingSpeak API

Over dit Project

Let op: Deze tutorial kan verouderd zijn, ga hier voor een actuele versie.

Inleiding

Als de Engelse dichter William Wordsworth ooit zei: "Je geest is de tuin, je gedachten zijn de zaden, de oogst kan bloemen of onkruiden zijn."

Planten levend houden is een uitdaging, want ze zijn slecht in communiceren. Een manier is ze overal mee te nemen, maar misschien wil je niet met die grote cactus of varen in je winterjas lopen. Ook houden de meeste planten niet van kou.

Na maanden te hebben geprobeerd met onze Spinnenplant te communiceren, gaven we op en gebruikten de MKR IoT Bundle-componenten om een apparaat te maken dat het welzijn van elke plant op afstand monitort.

In een Notendop

In dit experiment leer je je planten te beschermen en te zorgen dat ze overleven met Arduino-magie. Door vochtigheid, temperatuur en licht te monitoren, zorg je dat je planten gelukkig zijn. Het kan dagelijks e-mails en grafieken sturen en je waarschuwen bij behoefte.

Componenten

  • TMP36 temperatuursensor
  • Fototransistor
  • DIY vochtigheidssensor

Leerdoelen

  • Zapier internetdienst kennen
  • HTTP-verzoeken versturen
  • Real Time Clock en alarmbeheer
  • DIY vochtigheidssensor bouwen
  • Waarden plotten met ThingSpeak #ProTips
  • E-mail opmaken met HTML en CSS #ProTips
  • API's testen met PostMan #ProTips

Wil Je Meer Weten?

Deze tutorial is onderdeel van een reeks experimenten die je vertrouwd maken met de MKR1000 en IoT. Alle experimenten zijn te bouwen met de componenten uit de MKR IoT Bundle:

  • Love You Pillow
  • Puzzle Box
  • Pavlov's Cat
  • The Nerd
  • Plant Communicator

Zapier Instellen

Zapier is een online automatiseringstool die API's van andere apps voor ons beheert. Het is ideaal om taken te combineren of als een app een te complexe API heeft voor Arduino.

We gebruiken het om een e-mail te sturen met data van de Arduino.

Volg deze stappen om je eigen zap te maken:

  1. Maak een nieuwe Zap
  2. Kies "Webhooks by Zapier" als trigger → "Catch Hook"
  3. Kopieer de gegenereerde URL
  4. Test de hook: voeg parameters toe aan de URL: custom_webhook_URL?temperatuur=0&vochtigheid=0&licht=0&waarschuwing=0
  5. Plak de URL in een browser – je zou een succesrespons moeten zien
  6. Ga verder met "Do This..." → kies Gmail → "Send Email"
  7. Configureer je Gmail-account, vul ontvanger, onderwerp en body in (gebruik de query-string waarden)
  8. Test en activeer de Zap

Controleer je mailbox voor de gegenereerde e-mail van Zapier.

Het Bord Instellen

We gebruiken de bibliotheken:

  • WiFi101 – voor internetverbinding en netwerkscanning
  • RTCZero – voor tijdsgetriggerde gebeurtenissen

Download via Library Manager.

Om Zapier's API te gebruiken, moeten we certificaten uploaden naar de MKR1000. Dit geldt voor meeste online diensten en API's!

Upload het Firmware Updater-voorbeeld uit de WiFi101-bibliotheek en voeg hooks.zapier.com toe aan de domeinen.

> examples > WiFi101 > FirmwareUpdater

Als je de Arduino Web Editor gebruikt, is deze functie nog niet geïmplementeer – gebruik de Arduino Desktop Applicatie.

HTTP-verzoek Versturen

Nu kunnen we het HTTP-verzoek vanuit de Arduino sturen. Voorlopig stellen we willekeurige waarden in die later vervangen worden door echte sensorwaarden.

float temperatuur = 22;
int vochtigheid = 150;
int licht = 40;
String waarschuwing = "Dit is een waarschuwingsbericht";
waarschuwing.replace(" ", "%20"); // URL-encoding: spaties → %20

De send_email() functie converteert alles naar Strings en herbouwt de URL om naar de Zapier-server te posten.

Vul in deze sketch je WiFi-gegevens en het deel van de URL die je van Zapier kreeg in en upload.

#include <WiFi101.h>
#include <WiFiSSLClient.h>

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
String httpsRequest = SECRET_REQUEST; // Jouw Zapier URL
const char* host = "hooks.zapier.com";
WiFiSSLClient client;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  delay(2000);
  Serial.print("Verbinden met WiFi: ");
  Serial.println(ssid);
  while (WiFi.begin(ssid, password) != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi verbonden");
}

void loop() {
  float temperatuur = 22;
  int vochtigheid = 150;
  int licht = 40;
  String waarschuwing = "Dit is een waarschuwingsbericht";
  waarschuwing.replace(" ", "%20");
  send_email(temperatuur, vochtigheid, licht, waarschuwing);
  delay(20000);
}

void send_email(float temperatuur, int vochtigheid, int licht, String waarschuwing) {
  String _temperatuur = String(temperatuur);
  String _vochtigheid = String(vochtigheid);
  String _licht = String(licht);
  String _waarschuwing = waarschuwing;

  if (client.connect(host, 443)) {
    client.println("POST " + httpsRequest + "?temperatuur=" + _temperatuur + "&vochtigheid=" + _vochtigheid + "&licht=" + _licht + "&waarschuwing=" + _waarschuwing + " HTTP/1.1");
    client.println("Host: " + String(host));
    client.println("Connection: close");
    client.println();
    delay(1000);
    while (client.available()) {
      char c = client.read();
      Serial.write(c);
    }
    client.stop();
  } else {
    Serial.println("Verbinding met client mislukt");
  }
}

Dit stuurt elke 20 seconden een e-mail. Let op: Zapier staat maar 100 gratis verzoeken per maand toe.

RTC en Alarmen

We gebruiken de Real Time Clock van de MKR1000 om elke dag op een vast uur een e-mail te sturen.

Deze sketch stelt tijd en datum in op 16:00 op 4 december 2017 en triggert een alarm elke dag om 16:01.

Omdat het alarm gekoppeld is aan een interrupt-functie, kunnen we geen delays gebruiken, maar wel een boolean-variabele om acties in loop() te triggeren.

#include <RTCZero.h>
RTCZero rtc;

const byte seconden = 0;
const byte minuten = 0;
const byte uren = 16;
const byte dag = 4;
const byte maand = 12;
const byte jaar = 17;

bool email_already_sent = false;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  delay(2000);
  rtc.begin();
  rtc.setTime(uren, minuten, seconden);
  rtc.setDate(dag, maand, jaar);
  rtc.setAlarmTime(16, 1, 0);
  rtc.enableAlarm(rtc.MATCH_HHMMSS);
  rtc.attachInterrupt(alarmMatch);
}

void loop() {
  if (!email_already_sent) {
    // send_email();
    email_already_sent = true;
  }
}

void alarmMatch() {
  Serial.println("Alarm Match!");
  email_already_sent = false;
}

DIY Grondvochtigheidssensor

Twee draden in de aarde vormen een variabele weerstand, wiens weerstand varieert afhankelijk van de grondvochtigheid.

Deze variabele weerstand is in een spanningsdeler-configuratie aangesloten, en de Arduino meet een spanning evenredig aan de weerstand tussen de 2 draden.

Betekent: hoe vochtiger de grond, des te minder spanning de Arduino meet.

Met een 1 Mega Ohm weerstand en twee draden maken we onze DIY vochtigheidssensor!

Upload de onderstaande sketch om sensorwaarden te lezen. Test eerst in droge grond en noteer de waarde. Die waarde stel je in als drempelwaarde zodat de Arduino weet wanneer je planten water nodig hebben en een nood-e-mail stuurt.

int vochtigheidPin = A2;
int drempel = 800; // Pas aan op basis van je weerstand

void setup() {
  Serial.begin(9600);
  while (!Serial);
  delay(2000);
}

void loop() {
  Serial.println(get_average_moisture());
  delay(5000);
}

int get_average_moisture() {
  int tempValue = 0;
  for (int a = 0; a < 10; a++) {
    tempValue += analogRead(vochtigheidPin);
    delay(100);
  }
  return tempValue / 10;
}

Temperatuur- en Lichtsensor Toevoegen

Zie het schema voor de bedrading. Twee functies voor het uitlezen:


float get_temperatuur() {
  int reading = analogRead(A1);
  float voltage = reading * 3.3;
  voltage /= 1024.0;
  float temperatuurC = (voltage - 0.5) * 100; // 10mV/°C met 500mV offset
  return temperatuurC;
}

int get_licht() {
  int licht_waarde = analogRead(A0);
  return licht_waarde;
}

Je kunt Fahrenheit gebruiken door temperatuurF te returnen in plaats van temperatuurC.

#ProTip: Waarden Plotten met ThingSpeak

Voor de controlefreaks: instructies om alle verzamelde data in een mooie grafiek te plotten.

We gebruiken ThingSpeak. Volg deze stappen:

  1. Maak een ThingSpeak-account en kanaal aan
  2. Noteer je Write API Key
  3. Download de ThingSpeak-bibliotheek

De onderstaande sketch uploadt sensorwaarden elke minuut naar de cloud. Vul je WiFi-gegevens en API-keys in en upload.


#include <WiFi101.h>
#include <WiFiSSLClient.h>
#include "ThingSpeak.h"

const char* ssid = SECRET_SSID;
const char* password = SECRET_PSWD;
WiFiClient ThingSpeakClient;
unsigned long myChannelNumber = 356392;
const char * myWriteAPIKey = SECRET_WRITE_API;

int lichtPin = A0;
int tempPin = A1;
int vochtigheidPin = A2;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  delay(2000);
  Serial.print("Verbinden met WiFi: ");
  Serial.println(ssid);
  while (WiFi.begin(ssid, password) != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("");
  Serial.println("WiFi verbonden");
  ThingSpeak.begin(ThingSpeakClient);
}

void loop() {
  ThingSpeak.setField(1, get_licht());
  ThingSpeak.setField(2, get_temperatuur());
  ThingSpeak.setField(3, get_average_moisture());
  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
  Serial.println("Bericht naar cloud verstuurd");
  delay(60000); // elke minuut
}

// get_temperatuur(), get_average_moisture(), get_licht() functies zoals hierboven

In de complete Pro-sketch zie je hoe je dit koppelt aan een RTC-alarm dat elke minuut triggert.

Helaas laat Gmail geen grafieken of iframes toe in de e-mailbody, maar we kunnen de link via een mooie knop sturen.

Alternatieven: Dweet.io, freeboard.io.

#ProTip: Je E-mail Stijlen

Zapier laat ons HTML en CSS in de e-mailbody insluiten. Zo kun je mooie gestijlde e-mails sturen.

Zet in Zapier de body-type op HTML en voeg je custom HTML/CSS toe.

Kopieer en plak deze sjabloon:


<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container{ margin-left:10%; margin-right:10%; background-color:#ECF1F1; min-height:100%; padding-top:5%; padding-bottom:10%; font-family:monospace; letter-spacing:2px; }
.title{ text-align:center; color:#0CA1A6; font-size:1.5em; padding-top:0.2vh; }
.subtitle{ text-align:center; color:#0CA1A6; font-size:1.1em; padding-bottom:4%; padding-left:4%; padding-right:4%; }
.data{ padding-bottom:2%; padding-top:2%; padding-left:5%; margin-left:15%; margin-right:15%; background-color:#F7F9F9; text-align:left; color:#4E5B61; font-size:1em; font-weight:bold; }
.bttn{ padding-bottom:3%; padding-top:3%; margin-left:25%; margin-right:25%; margin-top:10%; background-color:#00979D; text-align:center; color:#F7F9F9; font-size:1.4em; }
.disclaimer{ text-align:center; color:#DA5B4A; font-size:1.1em; font-weight:bold; margin-top:10%; }
.bttn:hover{ background-color:#008184; }
a{ text-decoration:none; }
</style>
</head>
<body>
<div class="container">
<h2 class="title">HALLO !</h2>
<h4 class="subtitle">Hier is je dagelijkse update over je tuin ☘</h4>
<div class="data"> ♨ Temperatuur: {{querystring__temperatuur}} C </div>
<div id="vochtigheid" class="data"> ☔ Vochtigheid: {{querystring__vochtigheid}}</div>
<div class="data"> ☀ Licht: {{querystring__licht}}</div>
<div class="disclaimer">{{querystring__waarschuwing}}</div>
<a href="jouw_link_naar_thingSpeak">
<div class="bttn">BEKIJK DE GRAFIEK</div>
</a>
</div>
</body>
</html>

#ProTip: API Testen met PostMan

Werken met HTTP-verzoeken kan lastig zijn. Postman is een geweldig hulpmiddel: plak de initiële URL van Zapier, voeg parameters toe en verstuur. Het print de serverrespons en stelt de URL voor je samen.

Code

Complete Sketch

De complete sketch met alle #ProTips gecombineerd is beschikbaar in de originele tutorial.

Schema's

Slimme Plantencommunicator: Arduino MKR IoT Bundle voor Geautomatiseerde Tuinieren

Productieproces

  1. Lancering van Reliable Plant: Uw Betrouwbare Gids voor Onderhoudsexcellentie
  2. Fabriekonderhoud Ontmaskerd: Best Practices Voor Moderne Industrieën
  3. Meststof: Wetenschap, Productie en Duurzame Toekomsten
  4. Geïntegreerde Schakelingen (IC's): Compacte, Krachtige Chips die Moderne Elektronica Aandrijven
  5. MOSMusic Project Kit: MOSFET, Arduino en meer
  6. Essentiële Onderdelen van een Boormachine: Een Uitgebreid Overzicht
  7. Installatieonderhoud Beheersen: Bewezen Praktijken voor Betrouwbare Energieproductie
  8. Belangrijkste Componenten van een Interne Verbrandingsmotor
  9. Waarde ontgrendelen in bulkchemische planten: strategieën voor groei
  10. SPICE Netlist Syntaxis Beheersen: Componentnamen, Passieve & Actieve Elementen, en Brondefinities
  11. Industrial IoT Voorspelling 2018: Hoe slimme fabrieken de productie transformeren