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

Plant Communicator

Componenten en benodigdheden

Arduino MKR IoT-bundel
× 1

Apps en online services

Zapier
ThingSpeak-API

Over dit project

Opmerking:deze tutorial kan verouderd zijn, ga naar hier voor een meer actuele versie.

Inleiding

Zoals de Engelse dichter William Wordsworth ooit zei:

"Je geest is de tuin, je gedachten zijn de zaden, de oogst kan bloemen of onkruid zijn."

Je planten in leven houden kan een hele uitdaging zijn, omdat ze erg slecht zijn in communicatie.

Een manier om ze tevreden te houden is door je planten mee te nemen, maar misschien wil je niet rondsjouwen met die grote ole-cactus of varen die uit je winterjaszakken steekt. Bovendien houden de meeste planten niet van kou.

Na maandenlang geprobeerd te hebben om met onze Spider Plant te communiceren, gaven we het op en gebruikten de componenten van de MKR IoT-bundel om een ​​apparaat te maken dat op afstand het welzijn van elke fabriek inspecteert.

In een notendop:

In dit experiment leer je hoe je je planten kunt beschermen en ervoor kunt zorgen dat ze overleven, en hoe je Arduino-magie gebruikt.

Door vocht, temperatuur en licht te monitoren, kun je ervoor zorgen dat je planten gelukkig zijn. Het kan dagelijks e-mails en grafieken verzenden en u op de hoogte stellen van zijn behoeften.

Componenten

  • TMP36 temperatuursensor
  • Fototransistor
  • DIY vochtsensor

Leerdoelen

  • Introductie van Zapier-internetservice
  • HTTP-verzoeken verzenden
  • Real-time klok en alarmen beheren
  • Een doe-het-zelf vochtsensor bouwen
  • Waarden plotten met thingSpeak #ProTips
  • Stijl uw e-mail op met HTML en CSS #ProTips
  • Test API's met PostMan #ProTips

Meer weten?

Deze tutorial maakt deel uit van een reeks experimenten die je vertrouwd maken met de MKR1000 en IoT. Alle experimenten kunnen worden gebouwd met behulp van de componenten in de MKR IoT-bundel.

  • Ik hou van je kussen
  • Puzzeldoos
  • Pavlovs kat
  • De nerd
  • Plantencommunicator

Zapier instellen

Zapier is een online automatiseringstool die eenvoudig de API's van andere apps voor ons kan beheren. Het is een geweldig hulpmiddel om meerdere taken te combineren of als de app die we willen gebruiken een complexe API heeft die niet door een Arduino kan worden beheerd.

In ons geval zullen we het gebruiken om een ​​e-mail te sturen met de gegevens die zijn opgehaald uit de Arduino.

Volg deze paar eenvoudige stappen om je eigen zap te maken!

Om verder te gaan, moeten we onze hook testen door eerst de gegeven URL te kopiëren en vervolgens de Test and Review-knop te selecteren die verschijnt wanneer u op Doorgaan drukt. Voeg deze parameters toe aan de URL:

custom_webhook_URL?temperature=0&moisture=0&light=0&warning=0

Kopieer en plak deze URL nu op een nieuwe browserpagina.

Je zou een reactie als deze moeten zien:

Gefeliciteerd! Je hebt zojuist een http-verzoek gestuurd!

Dit is precies wat we gaan doen met ons Arduino-bord. Maar in plaats van die URL in een browserpagina te plakken, sturen we deze rechtstreeks naar de Zapier-server. We zullen ook de waarden wijzigen van de parameters die nu op nul zijn ingesteld met onze sensorwaarden.

Voor een meer geavanceerde manier om API te testen en ermee te werken, bekijk de #ProTip onderaan de pagina.

Nadat je je verzoek hebt getest, kun je doorgaan met het maken van de Zap.

Ga verder in de bewerking met de Doe dit...

Controleer je mailbox om de gegenereerde e-mail van Zapier te zien. Het komt van het account dat u in de eerste stap van de Gmail-configuratie hebt gebruikt.

Zet het bord op

Om alle functionaliteiten te implementeren gaan we de volgende bibliotheken gebruiken:

  • WiFi101 // om verbinding te maken met internet en de netwerken te scannen
  • RTCZero // om door tijd geactiveerde gebeurtenissen te beheren

Je kunt ze downloaden van de bibliotheekbeheerder zoals uitgelegd in deze handleiding.

Om de API van Zapier te gebruiken, moeten we eerst de certificaten uploaden op de MKR1000. Dit is van toepassing op de meeste online services en API's!

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

> voorbeelden> WiFi101> FirmwareUpdater  

Als je de Arduino Web Editor gebruikt, is deze functie nog niet geïmplementeerd en moet je dit doen via de Arduino Desktop-applicatie.

HTTP-verzoek verzenden

We zijn nu klaar om het HTTP-verzoek vanaf het Arduino-bord te verzenden.

Voor nu zullen we een willekeurige waarde voor onze parameter instellen die later zal worden vervangen door echte sensorwaarden.

 vlottertemperatuur =22; int. vocht =150; int licht =40; String warning ="Dit is een waarschuwingsbericht"; waarschuwing.replace(" ", "%20");  

Merk op dat de string moet worden gecodeerd , aangezien er geen lege spaties kunnen worden verzonden in een HTTP-verzoek. Alle lege spaties worden vervangen door het gecodeerde equivalent %20

Na het instellen van onze parameters zullen we de send_email() . aanroepen functie, die ze allemaal naar Strings zal converteren en dezelfde URL zal herbouwen die we eerder gebruikten om het vervolgens op de Zapier-server te plaatsen.

Vul deze schets in met je wifi-referentie en het stukje URL dat je van Zapier hebt ontvangen en upload.

#include  #include const char* ssid =SECRET_SSID; // uw netwerk SSID (naam) const char* wachtwoord =SECRET_PSWD; // uw netwerkwachtwoord String httpsRequest =SECRET_REQUEST; // uw Zapier-URL const char* host ="hooks.zapier.com"; WiFiSSLClient-client; void setup() { Serial.begin(9600); terwijl (!Serial); vertraging (2000); Serial.print ("Verbinden met wifi:"); Serieel.println(ssid); while (WiFi.begin(ssid, wachtwoord) !=WL_CONNECTED) { Serial.print("."); vertraging (500); } Serieel.println(""); Serial.println("WiFi verbonden"); } void loop () { float-temperatuur =22; int. vocht =150; int licht =40; String warning ="Dit is een waarschuwingsbericht"; waarschuwing.replace(" ", "%20"); send_email (temperatuur, vocht, licht, waarschuwing); vertraging (20000) } void send_email (float-temperatuur, int-vocht, int-licht, String-waarschuwing) {// converteer waarden naar String String _temperature =String (temperatuur); String _moisture =String (vocht); String _light =String (licht); String _warning =waarschuwing; if (client.connect(host, 443)) { client.println("POST" + httpsRequest + "?temperature=" + _temperature + "&moisture=" + _moisture + "&light=" + _light + "&warning=" + _warning + "HTTP/1.1"); client.println("Host:" + String(host)); client.println("Verbinding:sluiten"); klant.println(); vertraging (1000); while (client.available()) { // Print op de console het antwoord van de server char c =client.read(); Serieel.schrijven(c); } cliënt.stop(); // Verbinding met de server verbreken } else { Serial.println ("Kan geen verbinding maken met client"); } }  

Het stuurt elke 20 seconden een e-mail naar het adres dat u kiest.

Wees voorzichtig met de verzoeken, Zapier staat je slechts 100 gratis verzoeken per maand toe.

RTC en alarmen

We kunnen de Real Time klok van de MKR1000 gebruiken om elke dag op een bepaald uur een e-mail te sturen.

Deze schets stelt de tijd en datum in op 4 december 2017 om 16:00 uur en activeert vervolgens elke dag om 16:01 een alarm.

Merk op dat aangezien het alarm is gekoppeld aan een interrupt functie we kunnen geen vertragingen meerekenen , maar we kunnen een booleaanse variabele gebruiken om acties te activeren in de loop()

#include  RTCZero rtc; // maak RTC-object /* Wijzig deze waarden om de huidige initiële tijd in te stellen */ const byte seconden =0; const byte minuten =0; const byte-uren =16; /* Wijzig deze waarden om de huidige begindatum in te stellen */ const byte day =4; const byte maand =12; const byte jaar =17; bool email_already_sent =false; void setup() { Serial.begin(9600); terwijl (!Serial); vertraging (2000); rtc.begin(); // initialiseer RTC 24H-formaat rtc.setTime (uren, minuten, seconden); rtc.setDate(dag, maand, jaar); rtc.setAlarmTime (16, 1, 0); // Stel de tijd in waarop de Arduino de e-mail rtc.enableAlarm (rtc.MATCH_HHMMSS) moet verzenden; rtc.attachInterrupt(alarmMatch); } void loop() { if (!email_already_sent) { // send_email(); email_already_sent =waar; } } void alarmMatch() { // geactiveerd wanneer het alarm afgaat Serial.println("Alarm Match!"); email_already_sent =false; }  

DIY Bodemvochtsensor

Twee in de potgrond geplaatste draden vormen een variabele weerstand, waarvan de weerstand varieert afhankelijk van de bodemvochtigheid .

Deze variabele weerstand is aangesloten in een spanningsdelerconfiguratie en Arduino verzamelt een spanning die evenredig is aan de weerstand tussen de 2 draden.

Dit betekent dat hoe vochtiger de grond is, hoe minder spanning er wordt gemeten vanaf de Arduino.

Met behulp van de 1 Mega Ohm weerstand en twee draden, kunnen we onze doe-het-zelf bodemvochtsensor maken!

Als u de volgende schets uploadt, kunt u beginnen met het aflezen van de waarden van de sensor. We raden u aan eerst te testen in een droge grond en en noteer de waarde die u leest.

Die waarde wordt gebruikt om een ​​drempel in te stellen zodat de Arduino weet wanneer je planten water nodig hebben en je een e-mail voor noodgevallen stuurt.

int vochtPin =A2; // Stel deze threeshold in op de weerstand die je hebt gebruikt // De eenvoudigste manier om deze waarde te kalibreren is door de sensor in zowel droge als natte grond te testen int threeshold =800; void setup() { Serial.begin(9600); terwijl (!Serial); vertraging (2000); } void loop() { Serial.println(get_average_moisture()); vertraging (5000); } int get_average_moisture() {// maak een gemiddelde van 10 waarden om nauwkeuriger te zijn int tempValue =0; // variabele om de vochtwaarde tijdelijk op te slaan voor (int a =0; a <10; a++) {tempValue +=analogRead(moisturePin); vertraging (100); } retourneer tempValue / 10; }  

Temperatuur- en lichtsensor toevoegen

Zie het onderstaande schema om de twee sensoren aan te sluiten. We zullen deze twee functies gebruiken om waarden van de sensoren te lezen:

float get_temperature(){ int reading =analogRead(A1); vlotterspanning =aflezing * 3,3; spanning /=1024,0; // Afdruktemperatuur in Celsius vlottertemperatuur C =(voltage - 0,5) * 100; //omzetten van 10 mv per graad met 500 mV offset // Converteren naar Fahrenheit vlottertemperatuurF =(temperatuurC * 9,0 / 5,0) + 32,0; retourtemperatuurC; } int get_light(){ int light_value=analogRead(A0); lichtwaarde teruggeven; }  

Merk op dat u de Fahrenheit-eenheden kunt gebruiken door temperatureF . te retourneren in plaats van temperatuurC

#ProTip:Waarden plotten met ThingSpeak

Voor jullie allemaal control freaks, hier zijn de instructies om alle verzamelde gegevens in een mooie grafiek als deze te plotten:

We zullen het ThingSpeak-platform gebruiken om grafieken te plotten, volg deze stappen om aan de slag te gaan.

Download de ThingSpeak-bibliotheek en laten we beginnen. Deze schets hieronder zal elke minuut sensorwaarden naar de cloud uploaden, vul gewoon je wifi-inloggegevens en de API-sleutels van je kanaal in en upload.

#include  #include #include "ThingSpeak.h" const char* ssid =SECRET_SSID; // uw netwerk SSID (naam) const char* wachtwoord =SECRET_PSWD; // uw netwerkwachtwoord WiFiClient ThingSpeakClient; niet-ondertekend lang myChannelNumber =356392; const char * myWriteAPIKey =SECRET_WRITE_API; int lichtPin =A0; // de analoge pin waarop de lichtsensor is aangesloten int tempPin =A1; // de analoge pin De Vout (sense) pin van de TMP36 is verbonden met int vochtPin =A2; void setup() { Serial.begin(9600); terwijl (!Serial); vertraging (2000); Serial.print ("Verbinden met wifi:"); Serieel.println(ssid); while (WiFi.begin(ssid, wachtwoord) !=WL_CONNECTED) { Serial.print("."); vertraging (500); } Serieel.println(""); Serial.println("WiFi verbonden"); ThingSpeak.begin(ThingSpeakClient);} void loop() { ThingSpeak.setField(1, get_light()); ThingSpeak.setField(2, get_temperature()); ThingSpeak.setField (3, get_average_moisture()); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); Serial.println("bericht verzonden naar cloud"); vertraging (60.000); // verzend elke minuut waarden} float get_temperature () {int reading =analogRead (tempPin); vlotterspanning =aflezing * 3,3; spanning /=1024,0; // Afdruktemperatuur in Celsius vlottertemperatuur C =(voltage - 0,5) * 100; //omzetten van 10 mv per graad met 500 mV offset // Converteren naar Fahrenheit vlottertemperatuurF =(temperatuurC * 9,0 / 5,0) + 32,0; retourtemperatuurC; }int get_average_moisture() { // maak een gemiddelde van 10 waarden om nauwkeuriger te zijn int tempValue =0; // variabele om de vochtwaarde tijdelijk op te slaan voor (int a =0; a <10; a++) {tempValue +=analogRead(moisturePin); vertraging(10); } retourneer tempValue / 10; } int get_light() {int light_value =analogRead(A0); lichtwaarde teruggeven; }  

In de complete Pro-schets hieronder je kunt zien hoe je deze upload kunt koppelen aan een RTC-alarm dat elke minuut wordt geactiveerd.

Helaas laat Gmail ons niet insluiten grafieken en iframes in de hoofdtekst van de e-mail, maar we kunnen de link via e-mail verzenden in een mooie knop, zie de tip hieronder.

We kozen voor ThingSpeak, maar er zijn talloze alternatieven! Kijk bijvoorbeeld eens naar Dweet.io en freeboard.io.

#ProTip:Stijl je e-mail

Zapier staat ons toe om wat html- en css-code in de body in te sluiten van de e-mail. We kunnen dat gebruiken om behoorlijk gestileerde e-mail als volgt te verzenden:

Om dit resultaat te bereiken, verandert u gewoon het body-type in html op de Zapier-interface en voeg uw aangepaste HTML en CSS toe.

Kopieer en plak deze sjabloon:

       

HALLO !

Hier is uw dagelijkse update over uw tuin ☘

♨ Temperatuur:{{querystring__temperature}} C
☔ Vocht:{{_querystring__moisture}}
☀ Licht:{{querystring__light}}
{{querystring__warning}}
ZIE DE GRAFIEK

#ProTip:Test API met PostMan

Werken met HTTP-verzoeken kan moeilijk zijn, gelukkig zijn er veel tools die ons kunnen helpen bij het bouwen van de URL die we nodig hebben.

Postbode is een goed voorbeeld:

Plak gewoon de oorspronkelijke URL die door Zapier is gegeven, voeg parameters toe en verzend deze. Het zal het antwoord van de server afdrukken en de URL voor u samenstellen.

Code

Volledige schets
#ProTips complete schets

Schema's


Productieproces

  1. Circuitcomponenten
  2. Meststof
  3. Geïntegreerd circuit
  4. IoT-voorspellingen voor planten in 2018
  5. Introductie van een betrouwbare installatie
  6. MOSMusic
  7. Wat is plantenonderhoud?
  8. Het meeste halen uit chemische bulkfabrieken
  9. Onderdelen van boormachine:
  10. Plantonderhoud begrijpen
  11. Onderdelen van verbrandingsmotor