Startseite>Mit Teamviewer IoT eine Indoor-Farm überwachen
Aus Raspberry Pi Geek 06/2018

Mit Teamviewer IoT eine Indoor-Farm überwachen (Seite 3)

Indoor-Farming

Als Basis für die kleine Indoor-Farm im Test dient ein altes Aquarium. Das hat mehrere Vorteile: Zum einen ist es absolut wasserdicht, zum anderen fasst es mehr Wasser als der Vorratstank, eine Mineralwasserflasche, aufnimmt. So haben Sie keine Probleme, wenn die Pumpe einmal zu viel Wasser fördert.

Als Deckel für das Aquarium dient eine Platte aus Sperrholz. Sie sollte einen kleinen Abstand zum Aquarium aufweisen, um einen Luftaustausch zu ermöglichen. Die einfachste Lösung: Sie legen zwei Bretter zwischen Platte und Aquarium.

Damit die Pflanzen gut gedeihen, kommen spezielle Pflanzenlicht-LEDs (3 Watt, volles Spektrum [9]) zum Einsatz (Abbildung 5). Diese Lampen heizen sich bei der Nennleistung so weit auf, dass man sie kühlen muss. Daher liefen sie im Test weit unterhalb der maximalen Leuchtkraft, was den Kühlkörper überflüssig machte. Um den Verlust insgesamt zu kompensieren, bauen Sie bei Bedarf einfach mehr LEDs in die Indoor-Farm ein.

Abbildung 5: Damit die Pflanzen im Gewächshaus gut gedeihen, liefern moderne LEDs mit vollem Spektrum das entsprechende Licht.

Abbildung 5: Damit die Pflanzen im Gewächshaus gut gedeihen, liefern moderne LEDs mit vollem Spektrum das entsprechende Licht.

Die LEDs schalten Sie über den GPIO-Port 0 des Raspberry Pi ein. Dabei verbinden Sie die Elemente nicht direkt mit der GPIO, sondern schalten sie über einen Leistungstransistor (Q1 im Schaltplan in Abbildung 6). Die LEDs benötigen eine Spannung von 3,3 Volt. Achten Sie bei der Montage darauf, die LEDs gut belüftet und mit etwas Abstand zum Deckel einzubauen: Sie erwärmen sich selbst unterhalb der Nennleistung.

Abbildung 6: Da der Bodenfeuchte-Sensor SMT50 seine Werte lediglich analog liefert, ist es notwendig, einen Analog/Digital-Wandler in das Setup zu integrieren. Diese Aufgabe übernimmt der MCP3088.

Abbildung 6: Da der Bodenfeuchte-Sensor SMT50 seine Werte lediglich analog liefert, ist es notwendig, einen Analog/Digital-Wandler in das Setup zu integrieren. Diese Aufgabe übernimmt der MCP3088.

Das Bewässern übernimmt eine kleine Pumpe, die schon bei 3,3 Volt Wasser fördert. Das Ein- und Ausschalten dieses Bauteils erfolgt wie bei den LEDs über einen Leistungstransistor vom RasPi aus. Achten Sie bei der Wahl der Pumpe darauf, dass Sie ein Modell verwenden, das nicht all zu viel Strom benötigt.

Das DC/DC-Modul [10], das im Test zur Erzeugung der 3,3 Volt zum Einsatz kam, liefert dauerhaft maximal 2 Ampere. Zieht die Pumpe mehr Strom, macht das DC/DC-Modul mit diskreten Rauchzeichen und einem höllischen Gestank auf sich aufmerksam.

Der Sensor für die Bodenfeuchte ist nach dem Raspberry Pi die wichtigste Komponente für das Projekt. Legen Sie bei der Auswahl also Wert auf Qualität. Im Test kam der SMT50 [11] zum Einsatz, der nach dem kapazitiven Messprinzip arbeitet (siehe Kasten “Sensorwahl”). Er muss also keinen Strom durch das Erdreich fließen lassen, um die Feuchtigkeit zu ermitteln.

Sensorwahl

Von Sensoren, die mittels Erdreich Strom messen, raten wir ab. Die Elektroden dieser oft sehr günstigen Sensoren lösen sich mit der Zeit auf, und dann wandern die Metalle in den Pflanzboden. Letztendlich bildet der Mensch das Ende der Nahrungskette, und diese Schadstoffe landen wieder in unserem Körper. Verwenden Sie daher einen etwas teureren, kapazitiven Sensor. Ein solcher hat außerdem eine erheblich längere Lebensdauer und eine höhere Genauigkeit.

Der SMT50 verfügt über einen Temperatursensor, mit dem Sie zusätzlich überwachen, ob es warm genug für die Pflanzen ist. Der Baustein kommt mit Betriebsspannungen von 3,3 bis 30 Volt zurecht. Er lässt sich also direkt an einen kleinen Mikrocontroller anschließen. Die Messwerte gibt er analog aus; Sie müssen sie deshalb über einen Analog/Digital-Wandler aufbereiten, damit der RasPi sie verarbeiten kann. Das erledigt ein MCP3008.

Um zu überwachen, ob die LEDs die erwartete Menge an Licht liefern, kommt ein Fotowiderstand zum Einsatz. Dabei handelt es sich jedoch nicht um ein geeichtes Messgerät – die Messwerte zeigen nur, ob es in der kleinen Farm heller oder dunkler ist.

Für den Aufbau benötigen Sie also insgesamt drei analoge Eingänge, die der MCP3008 liefert. Ein MCP3004 würde mit seinen vier analogen Eingängen ausreichen, war aber in der Bastelkiste des Autors nicht vorrätig. Wie Sie die Elemente verdrahten, entnehmen Sie dem Schaltplan aus Abbildung 6.

Abbildung 7 zeigt die Platine mit allen Bauteilen, Abbildung 8 die komplette Farm im Betrieb. Die Farbe der LEDs wirkt unter Umständen etwas eigenartig. Die Leuchtdioden liefern aber genau die Spektren, die Pflanzen zum Wachsen benötigen.

Abbildung 7: Die Steuerelektronik sitzt huckepack auf dem Raspberry Pi.

Abbildung 7: Die Steuerelektronik sitzt huckepack auf dem Raspberry Pi.

Abbildung 8: In strahlendem Licht: Die speziellen LEDs liefern das von den Pflanzen benötigte Lichtspektrum.

Abbildung 8: In strahlendem Licht: Die speziellen LEDs liefern das von den Pflanzen benötigte Lichtspektrum.

Programm

Das Projekt besteht aus zwei Teilen, die Sie über Software miteinander verbinden. Zum einen gilt es, die Werte der Sensoren auszulesen und diese an die API von Teamviewer zu schicken. Den einfachsten Weg dafür bietet ein Shell-Skript, das Sie zyklisch über Cron starten.

Von der Shell aus können Sie nicht direkt auf die SPI-Schnittstelle zugreifen. Hier schlagen drei kleine C-Programme (Listing 10, Listing 11 und Listing 12) die Brücke, um die entsprechenden Messwerte zu liefern. Alle drei arbeiten nach demselben Muster: Sie öffnen die Schnittstelle, lesen den analogen Wert aus dem entsprechenden Kanal und geben ihn aus. Vor der Ausgabe rechnen sie die Werte des SMT50 dem Datenblatt entsprechend um. Listing 13 zeigt, wie Sie die Programme übersetzen.

Listing 10

 

/*
   temp.c
*/
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
int aread(int channel) {
  unsigned char buffer[3] = {1};
  buffer[1] = (8+channel)<<4;
  wiringPiSPIDataRW(0, buffer, 3);
  return ((buffer[1] & 3) << 8) + buffer[2];
}
int main() {
  wiringPiSPISetup(0,1000000) ;
  int value = aread(0);
  double voltage = (value*3.3)/1024;
  double temperature = (voltage-0.5)/0.01;
  printf("%f",temperature);
  return 0;
}

Listing 11

 

/*
   hum.c
*/
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
int aread(int channel) {
  unsigned char buffer[3] = {1};
  buffer[1] = (8+channel)<<4;
  wiringPiSPIDataRW(0, buffer, 3);
  return ((buffer[1] & 3) << 8) + buffer[2];
}
int main() {
  wiringPiSPISetup(0,1000000);
  int value = aread(1);
  double voltage = (value*3.3)/1024;
  double hum = (voltage/3)*50;
  printf("%f",hum);
  return 0;
}
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland