{"id":1561,"date":"2012-11-22T21:46:13","date_gmt":"2012-11-22T21:46:13","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1561"},"modified":"2012-12-20T16:08:47","modified_gmt":"2012-12-20T16:08:47","slug":"big-sister-is-watching-you-die-totale-uberwachung-einer-stevia-pflanze","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1561","title":{"rendered":"Big Sister is Watching You &#8211; Die totale \u00dcberwachung einer Stevia-Pflanze"},"content":{"rendered":"<div id=\"attachment_1741\" style=\"width: 365px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/SteviaPlantWithSensors_20121220_153041_600.jpg\"><img aria-describedby=\"caption-attachment-1741\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1741\" title=\"Stevia-Pflanze mit Arduino und Sensoren\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/SteviaPlantWithSensors_20121220_153041_600.jpg\" alt=\"\" width=\"355\" height=\"600\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/SteviaPlantWithSensors_20121220_153041_600.jpg 355w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/SteviaPlantWithSensors_20121220_153041_600-177x300.jpg 177w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/SteviaPlantWithSensors_20121220_153041_600-88x150.jpg 88w\" sizes=\"(max-width: 355px) 100vw, 355px\" \/><\/a><p id=\"caption-attachment-1741\" class=\"wp-caption-text\">Stevia-Pflanze mit Arduino und Sensoren<\/p><\/div>\n<p>Nun ist es soweit: Seit ein paar Minuten steht meine Stevia-Pflanze unter totaler \u00dcberwachung, mit Unterst\u00fctzung von Arduino nat\u00fcrlich. Und das 24 Stunden lang oder l\u00e4nger. Das ist gewissermassen mein erstes echtes Projekt, das nicht mehr unter &#8220;Mit Arduino herumspielen&#8221; l\u00e4uft. Allerdings musste ich erst etwas umdisponieren. Urspr\u00fcnglich wollte ich ja auf meinem Balkon f\u00fcr meine Blumen <strong>Werte wie Temperatur, Feuchtigkeit, Bodenfeuchtigkeit und Licht messen<\/strong>.<\/p>\n<p>Dabei war das Fernziel, den Arduino autonom zu betreiben. Das bedingt aber auch die Verwendung einer <strong>Real Time Clock<\/strong> (RTC) und eines <strong>SD-Card-Moduls <\/strong>(die teurere WiFi-Variante oder Funk-Variante wollte ich mir sparen). Mit etwas Herumknobeln brachte ich sogar SD-Card und RTC zum Laufen, aber die Initialisierung der Zeit auf dem 1302-Chip wollte nie so richtig klappen. Zwar lief die RTC-Komponente, aber eigentlich nie mit der aktuellen Zeit. Und irgendwann beim Herumprobieren habe ich dann das <strong>RTC-Modul vermutlich zerst\u00f6rt.<\/strong> Auf jeden Fall erhalte ich seit geraumer Zeit nur noch 1.1.2000 zur\u00fcck.<\/p>\n<p>Da man ein RTC-Modul nicht gleich um die Ecke kaufen kann, war ich gezwungen umzudisponieren. Mein Netbook ist ohnehin schlecht ausgelastet, und im Moment ist nicht die Jahreszeit f\u00fcr Freiluftmessungen. Es lag also nahe, die <strong>Daten nicht direkt im Arduino zu verarbeiten<\/strong>, sondern<strong> im Netbook<\/strong>, wo ich sie komfortabel mit Datum und Uhrzeit versehen kann. Da die Einbindung von COM-Ports in Java nicht ganz einfach ist, und ich schon \u00f6fter Webanwendungen in CSharp geschrieben habe, lag es nahe, daf\u00fcr <strong>Visual Studio Express 2012<\/strong> und <strong>CSharp <\/strong>zu verwenden.<\/p>\n<p>Seit dieser Einleitung ist fast ein Monat vergangen. Erst jetzt habe ich mich aufgerafft, den Artikel fertig zu schreiben. Daf\u00fcr gibt im Abschnitt Demo aber eine Datenreihe \u00fcber diesen Zeitraum zu sehen.<\/p>\n<h1>Projektziel<\/h1>\n<p>In diesem Projekt misst man mit mehreren <strong>Sensoren <\/strong>f\u00fcr <strong>Pflanzen <\/strong>relevante Umgebungswerte wie<strong> Temperatur, Luftfeuchtigkeit, Bodenfeuchtigkeit und Helligkeit<\/strong>. Die Daten werden via <strong>serielle Schnittstelle<\/strong> an einen <strong>Computer <\/strong>gesendet, der sie mit einer CSharp-Konsolenapplikation entgegennimmt, mit <strong>Datum und Uhrzeit<\/strong> versieht und in eine <strong>CSV-Datei<\/strong> speichert.<\/p>\n<p>Als Versuchspflanze bot sich meine <strong>Stevia <\/strong>an. Sie ist nicht frosthart, so dass ich sie im Sp\u00e4therbst vom Balkon in die Wohnung \u00fcbersiedeln muss, was ihr meist mangels Licht nicht sonderlich gut bekommt. Sie h\u00e4ngt an einem Blumat-Pfropfen, so dass ich dabei auch gleich \u00fcberpr\u00fcfen kann, wie gut diese Bew\u00e4sserungsart funktioniert.<\/p>\n<h1>Komponenten<\/h1>\n<p>Die Komponenten f\u00fcr dieses Projekt stammen abgesehen vom Lichtsensor nicht aus meinem Arduino-Experimentierkit, sondern ich habe sie mir speziell f\u00fcr diesen Zweck gekauft.<\/p>\n<p>Elektronische Komponenten<\/p>\n<ul>\n<li>1 <a href=\"http:\/\/www.play-zone.ch\/de\/set-aus-arduino-uno-r3-mit-breadboard-und-acryl-montageboard.html\" target=\"_blank\">Arduino UNO R3<\/a><\/li>\n<li>1 Steckbrett<\/li>\n<li>ganz viele <a href=\"http:\/\/www.play-zone.ch\/de\/jumperkabel-verbindungskabel-10-20cm-45-stk.html\" target=\"_blank\">Jumperkabel M\/M und M\/F<\/a><\/li>\n<li>1 kombinierter Feuchtigkeits- und Temperatursensor: <a href=\"http:\/\/www.dfrobot.com\/wiki\/index.php?title=DHT11_Temperature_and_Humidity_Sensor_%28SKU:_DFR0067%29\" target=\"_blank\">DHT11<\/a>; Achtung mein Sensor weist nur 3 Pins auf und hat eine etwas andere Pin-Belegung als im Datenblatt<\/li>\n<li>1 Sensor f\u00fcr die Bodenfeuchtigkeit: <a href=\"http:\/\/www.dfrobot.com\/wiki\/index.php?title=Moisture_Sensor_%28SKU:SEN0114%29\" target=\"_blank\">SKU:SEN0114<\/a><\/li>\n<li>1 Lichtsensor aus Kit, vermutlich Excelitas Tech LDR VT90N2 oder <a href=\"http:\/\/de.farnell.com\/excelitas-tech\/vt90n2\/ldr-serie-vt900\/dp\/1652637\" target=\"_blank\">VT935G<\/a><\/li>\n<li>1 Widerstand <a href=\"http:\/\/de.farnell.com\/multicomp\/mcf-0-25w-10k\/widerstand-0-25w-5-10k\/dp\/9339060?Ntt=9339060\" target=\"_blank\">10kOhm<\/a><\/li>\n<li>1 Netbook, Notebook oder sonstiger Computer mit installiertem .NET-Framework und Entwicklungsumgebung Visual Express Studio 2012 oder \u00e4lterer Version<\/li>\n<li>1 USB-Kabel zur Verbindung von Netbook und Arduino<\/li>\n<\/ul>\n<p>Nichtelektronische Komponenten<\/p>\n<ul>\n<li>eine Stevia oder irgendeine andere <strong>Pflanze<\/strong>, die in der <strong>Erde <\/strong>w\u00e4chst (ich w\u00fcrde mal vermuten, dass der Feuchtigkeitssensor mit Hydrokultur nicht wirklich gut funktioniert)<\/li>\n<\/ul>\n<h1>Best\u00fcckungsplan<\/h1>\n<p>Zur Zeit sind drei Sensoren in der Schaltung verbaut (Details siehe Komponentenliste):<\/p>\n<ul>\n<li>Sensor f\u00fcr Bodenfeuchtigkeit, als schwarzes Mystery-Teil dargestellt<\/li>\n<li>Photowiderstand als Lichtsensor unten links<\/li>\n<li>Feuchtigkeits- und Temperatursensor, blaues K\u00e4stchen rechts<\/li>\n<\/ul>\n<div id=\"attachment_1740\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001.jpg\"><img aria-describedby=\"caption-attachment-1740\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1740\" title=\"Arduino mit Sensoren f\u00fcr Pflanzen: Bodenfeuchtigkeit, Temperatur, Feuchtigkeit, Licht\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001.jpg\" alt=\"\" width=\"600\" height=\"414\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001.jpg 600w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001-300x207.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001-150x103.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/PlantSensorsWithCSharp_Steckplatine_6001-400x276.jpg 400w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1740\" class=\"wp-caption-text\">Arduino mit Sensoren f\u00fcr Pflanzen: Bodenfeuchtigkeit, Temperatur, Feuchtigkeit, Licht<\/p><\/div>\n<h1>Code<\/h1>\n<p>Der Code umfasst bei diesem Projekt nicht nur den Arduino- sondern nat\u00fcrlich auf den mit Visual Studio Express 2012 erstellten CSharp-Code, der die Daten aus der Schnittstelle entgegennimmt.<\/p>\n<h2>Arduino<\/h2>\n<p>Der Code f\u00fcr den DHT11 stammt von DFRobot.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/Dieses Programm macht nur mit der zugh\u00f6rigen CSharp-Anwendung Sinn!\r\n\/\/CSharp liest Daten, gibt das Datum dazu\r\n\/\/und h\u00e4ngt die Daten einer CSV-Datei an\r\n\r\n\/\/generelle Einstellungen\r\nchar tab = 9;\r\nunsigned long myDelay = 10000;\r\nint val = 0; \/\/eingelesener Wert aus serieller Schnittstelle\r\n\/\/Type ist n\u00f6tig, weil Multiplikation mit 1000 zu integer f\u00fchrt\r\nunsigned long faktor = 1000;\r\n\r\n\/\/Eingabe des Delays in Sekunden\r\nchar incoming[5] = {};\r\n\r\n\/\/Lichtsensor\r\nint lightPin = 1;\r\n\r\n#define dht11_pin 14 \/\/Analog port 0 on Arduino Uno\r\n\r\nbyte read_dht11_dat() {\r\n  byte i = 0;\r\n  byte result=0;\r\n  for(i=0; i&lt; 8; i++) {     while (!digitalRead(dht11_pin));     delayMicroseconds(30);     if (digitalRead(dht11_pin) != 0 )       bitSet(result, 7-i);     while (digitalRead(dht11_pin));   }   return result; }       void setup(){   pinMode(dht11_pin, OUTPUT);   digitalWrite(dht11_pin, HIGH);   Serial.begin(9600); }        void loop(){   \/\/Delay \u00e4ndern   int j = 0;   \/\/\u00fcber die serielle Schnittstelle kann man das Intervall f\u00fcr die    \/\/Datenerfassung bestimmen   if (Serial.available() &gt; 0) {\r\n    \/\/sonst bleiben die 0 erhalten 60 -&gt; 600\r\n    memset(incoming, 0, sizeof(incoming));\r\n    while (Serial.available() &gt; 0 &amp;&amp; j &lt; sizeof(incoming) - 1) {\r\n      incoming[j] = Serial.read();\r\n      j++;\r\n      delay(3);\r\n    }\r\n\r\n    \/\/array of char in int wandeln\r\n    val = atoi(incoming);\r\n    myDelay = faktor * val;\r\n\r\n    Serial.print(&quot;neues Delay &quot;);\r\n    Serial.print(val);\r\n    Serial.println(&quot; Sekunden&quot;);\r\n  }\r\n\r\n  \/\/Daten f\u00fcr Temperatur- und Feuchtigkeitssensor auslesen\r\n  byte dht11_dat[5];\r\n  byte dht11_in;\r\n  byte i;\/\/ start condition\r\n\r\n  digitalWrite(dht11_pin, LOW);\r\n  delay(18);\r\n  digitalWrite(dht11_pin, HIGH);\r\n  delayMicroseconds(1);\r\n  pinMode(dht11_pin, INPUT);\r\n  delayMicroseconds(40);\r\n\r\n  if (digitalRead(dht11_pin)) {\r\n    Serial.println(&quot;!Temperatursensor dht11 startet nicht&quot;);\r\n    delay(1000);\r\n    return;\r\n  }\r\n  delayMicroseconds(80);\r\n  if (!digitalRead(dht11_pin)) {\r\n     Serial.println(&quot;!Temperatursensor dht11 startet immer noch nicht&quot;);\r\n    return;\r\n  }\r\n\r\n  delayMicroseconds(80);\r\n  for (i=0; i&lt;5; i++)  {\r\n    dht11_dat[i] = read_dht11_dat();\r\n  }\r\n\r\n  pinMode(dht11_pin, OUTPUT);\r\n  digitalWrite(dht11_pin, HIGH);\r\n  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];\/\/ check check_sum\r\n  if(dht11_dat[4]!= dht11_check_sum) {\r\n    Serial.println(&quot;!DHT11 Checksummen-Error&quot;);\r\n  }\r\n\r\n  \/\/Daten an die serielle Schnittstelle ausgeben\r\n\r\n  \/\/*********************************************\r\n  \/\/Feuchtigkeit und Temperatur\r\n\r\n  \/\/Feuchtigkeit\r\n  Serial.print(dht11_dat[0], DEC);\r\n  Serial.print(&quot;%&quot;);\r\n  Serial.print(tab);\r\n  \/\/Temperatur\r\n  Serial.print(dht11_dat[2], DEC);\r\n  Serial.print(tab);\r\n\r\n  \/\/*********************************************\r\n  \/\/Bodenfeuchtigkeit\r\n  \/\/bei 5V 0 an Luft, 800 im Wasser\r\n  \/\/bei 3.3V bis ca 485\r\n  float soilHumidity = analogRead(2);\r\n  soilHumidity = constrain(map(soilHumidity, 0, 800, 0, 100), 0, 100);\r\n  Serial.print(soilHumidity);\r\n  Serial.print(&quot;%&quot;);\r\n  Serial.print(tab);\r\n\r\n  \/\/*********************************************\r\n  \/\/Licht\r\n  \/\/Wert von ca. 0 bis 1023\r\n  \/\/Gesteckt 5 V - 1. Bein - 2. Bein 10 KOhm Widerstand\r\n  \/\/und Arduino-Pin - Ausgang Widerstand GND\r\n  float lightLevel = analogRead(lightPin);\r\n  \/\/Mittel aus 3 Messungen\r\n  delay(10);\r\n  lightLevel = lightLevel + analogRead(lightPin);\r\n  delay(10);\r\n  lightLevel = lightLevel + analogRead(lightPin);\r\n  lightLevel = map(lightLevel\/3, 0, 1023, 0, 100);\r\n  Serial.print(lightLevel);\r\n  Serial.print(&quot;%&quot;);\r\n  Serial.print(tab);\r\n\r\n  \/\/*********************************************\r\n  \/\/Bodenfeuchtigkeit Eigenbau\r\n  \/\/bei 5V 0 an Luft, 800 im Wasser\r\n  \/\/bei 3.3V bis ca 485\r\n  float soilHumidity2 = analogRead(3);\r\n  Serial.print(soilHumidity2);\r\n\r\n  \/\/Zeilenende\r\n  Serial.println(&quot;&quot;);\r\n\r\n  delay(myDelay-500); \/\/n\u00e4chster Durchgang\r\n}\r\n<\/pre>\n<h2>CSharp<\/h2>\n<p>Das CSharp-Programm ist ein reines Konsolenprogramm, das allerdings endlos l\u00e4uft.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nusing System;\r\nusing System.IO;\r\nusing System.IO.Ports;\r\nusing System.Configuration;\r\nusing System.Collections.Specialized;\r\nusing ArduinoReadFromSerial.Properties;\r\n\r\nnamespace test {\r\n  class Program {\r\n\r\n    static void Main(string[] args) {\r\n      Settings settings = new Settings();\r\n      SerialPort port = new SerialPort(settings.port, 9600);\r\n      port.Open();\r\n      port.WriteLine(settings.delayInSek.ToString());\r\n      String filePathAndName = settings.exportpfad;\r\n      String ext = &quot;.csv&quot;;\r\n      String filedate = String.Format(&quot;{0:yyyyMMdd_HHmmss}&quot;, DateTime.Now);\r\n      String fileAll = filePathAndName + &quot;_&quot; + filedate + ext;\r\n      TextWriter tw = new StreamWriter(fileAll, false);\r\n      Console.WriteLine(fileAll);\r\n      String tab = char.ConvertFromUtf32(9);\r\n      String header = &quot;Datum&quot; + tab + &quot;Luftfeuchtigkeit in Prozent&quot; + tab\r\n          + &quot;Temperatur in Grad Celsius&quot; + tab + &quot;Bodenfeuchtigkeit&quot; + tab\r\n          + &quot;Licht in Prozent&quot; + tab + &quot;Bodenfeuchtigkeit Eigenbau&quot;;\r\n      Console.WriteLine(header);\r\n      tw.WriteLine(header);\r\n      \/\/ close the stream\r\n      tw.Close();\r\n\r\n      while (true) {\r\n        tw = new StreamWriter(fileAll, true);\r\n        String myVar = port.ReadLine();\r\n        \/\/Warnhinweise beginnen mit ! -&gt; nicht in Datei schreiben\r\n        if (!myVar.StartsWith(&quot;!&quot;)) {\r\n          \/\/Hier noch Datum und Zeit vorne dran h\u00e4ngen\r\n          DateTime now = DateTime.Now;\r\n          myVar = String.Format(&quot;{0:dd.MM.yyyy HH:mm:ss}&quot;, now) + tab + myVar;\r\n          tw.Write(myVar);\r\n          tw.Close();\r\n        }\r\n        Console.WriteLine(myVar);\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Und so sehen die produzierten Daten aus:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nDatum\tLuftfeuchtigkeit in Prozent\tTemperatur in Grad Celsius\tBodenfeuchtigkeit\tLicht in Prozent\tBodenfeuchtigkeit Eigenbau\r\n25.11.2012 23:16:00\t37%\t25\t100.00%\t73.00%\t1019.00\r\n25.11.2012 23:17:00\t37%\t25\t100.00%\t72.00%\t1023.00\r\n25.11.2012 23:18:00\t37%\t25\t100.00%\t73.00%\t1022.00\r\n25.11.2012 23:19:00\t37%\t25\t100.00%\t74.00%\t1021.00\r\n25.11.2012 23:20:00\t37%\t25\t100.00%\t73.00%\t1021.00\r\n25.11.2012 23:21:00\t37%\t25\t100.00%\t73.00%\t1021.00\r\n25.11.2012 23:22:00\t37%\t25\t100.00%\t73.00%\t1021.00\r\n\r\n<\/pre>\n<h2>Tipps zum CSharp-Projekt<\/h2>\n<p>Das Programm entwickelt habe ich auf meinem Notebook. Visual Studio Express auf meinem Netbook zu betreiben, w\u00fcrde mich ziemlich sicher auf die Palme bringen, weil das Kistchen zu wenig Ressourcen f\u00fcr den fl\u00fcssigen Betrieb einer Entwicklungsumgebung hat. Also stand ich ganz rasch vor dem Problem, dass ich meine Konsolenapplikation konfigurierbar machen musste, so dass die <strong>Einstellungen f\u00fcr Dateipfad und seriellen Port aus einer \u00e4nderbaren Konfigurationsdatei <\/strong>stammen. In einem Konsolenprojekt unter Visual Express Studio 2012 erstellt man diese, indem man im Projektmappen-Explorer Properties direkt unterhalb des Projektnamens doppelklickt. Unter &#8220;Einstellungen&#8221; habe ich die folgenden Werte erfasst:<\/p>\n<ul>\n<li><strong>exportpfad<\/strong>: C:\\meinpfad\\meinedatei (ohne Datei-Endung, da noch Datum und Uhrzeit angeh\u00e4ngt wird)<\/li>\n<li><strong>port<\/strong>: COM9 (wechselt je nach Computer)<\/li>\n<li><strong>delayInSek<\/strong>: 60 (so kann man die Frequenz, mit der Daten gesammelt werden, individuell einstellen)<\/li>\n<\/ul>\n<p>Um die Applikation auf anderen Rechner installieren zu k\u00f6nnen, geht man unter Erstellen &#8211; MeinProjekt <strong>ver\u00f6ffentlichen<\/strong>.<\/p>\n<p>Da die Konsolen-Applikation in ein absolut obskures Verzeichnis installiert wird, und ich nicht jedesmal danach suchen wollte, um meine <strong>Einstellungen in der Config-Datei <\/strong>f\u00fcr das Netbook zu \u00e4ndern, kam ich auf die Idee, die Konfigurationsdatei noch vor der Installation zu \u00e4ndern, denn vom Installationsverzeichnis weiss ich genau, wo es liegt. Doch ich hatte die Rechnung ohne Microsoft gemacht: Die Installation wurde aus Sicherheitsgr\u00fcnden abgebrochen, weil der <strong>Hash-Code der von mir manipulierten Konfigurationsdatei nicht mehr mit jenem des Projektes \u00fcbereinstimmte<\/strong>!<\/p>\n<div id=\"attachment_1752\" style=\"width: 1255px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties.jpg\"><img aria-describedby=\"caption-attachment-1752\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1752\" title=\"Properties in CSharp f\u00fcr konfigurierbare Einstellungen\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties.jpg\" alt=\"\" width=\"1245\" height=\"463\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties.jpg 1245w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties-300x111.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties-1024x380.jpg 1024w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties-150x55.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/CSharpProperties-400x148.jpg 400w\" sizes=\"(max-width: 1245px) 100vw, 1245px\" \/><\/a><p id=\"caption-attachment-1752\" class=\"wp-caption-text\">Properties in CSharp f\u00fcr konfigurierbare Einstellungen<\/p><\/div>\n<h1>Demo<\/h1>\n<p>Mit einer bestimmten Zahl an Sensoren wird die Schaltung ziemlich un\u00fcbersichtlich.\u00a0 Oben links sieht man <strong>Bodenfeuchtigkeitssensor<\/strong>, bzw. jener Teil davon, der nicht im Boden steckt. In der linken oberen Ecke des Steckbretts steht der <strong>Photosensor<\/strong>. Und das blaue Teil im unteren Teil des Steckbretts ist der kombinierte <strong>Feuchtigkeits- und Temperatursensor.<\/strong> Das orange Kabel f\u00fchrt zu einem nicht sichtbaren und auf dem Best\u00fcckungsplan nicht erw\u00e4hnten selbst gebastelten Feuchtigkeitssensor: Ein St\u00fcck Styropor mit zwei verkabelten N\u00e4geln. Am Arduino h\u00e4ngt \u00fcbrigens auch schon die SD Card, auch wenn sie im Moment noch absolut funktionslos ist.<\/p>\n<div id=\"attachment_1745\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600.jpg\"><img aria-describedby=\"caption-attachment-1745\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1745\" title=\"Arduino und Sensoren \" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600.jpg\" alt=\"\" width=\"600\" height=\"509\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600.jpg 600w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600-300x254.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600-150x127.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/ArduinoTemperatureHumiditySoilMoistureLightSensors20121220_154342_600-400x339.jpg 400w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1745\" class=\"wp-caption-text\">Arduino und Sensoren <\/p><\/div>\n<p>Und wozu das Ganze? Am Schluss kann man die Daten aus der Textdatei in Excel holen und mit PivotTables auswerten oder als Diagramme darstellen. F\u00fcr den Lichtverlauf sieht das folgendermassen aus:<\/p>\n<div id=\"attachment_1746\" style=\"width: 1010px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000.jpg\"><img aria-describedby=\"caption-attachment-1746\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1746\" title=\"Lichtverlauf im November und Dezember 2012\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000.jpg\" alt=\"\" width=\"1000\" height=\"227\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000.jpg 1000w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000-300x68.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000-150x34.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/11\/LichtverlaufNovDez2012_1000-400x90.jpg 400w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><p id=\"caption-attachment-1746\" class=\"wp-caption-text\">Lichtverlauf im November und Dezember 2012<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p id=\"caption-attachment-1741\" class=\"wp-caption-text\">Stevia-Pflanze mit Arduino und Sensoren<\/p>\n<p>Nun ist es soweit: Seit ein paar Minuten steht meine Stevia-Pflanze unter totaler \u00dcberwachung, mit Unterst\u00fctzung von Arduino nat\u00fcrlich. Und das 24 Stunden lang oder l\u00e4nger. Das ist gewissermassen mein erstes echtes Projekt, das nicht mehr unter &#8220;Mit Arduino herumspielen&#8221; l\u00e4uft. Allerdings musste ich erst etwas umdisponieren. Urspr\u00fcnglich [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1741,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[160,52,158],"tags":[296,185,186,184,182,187,169,188,183],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1561"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1561"}],"version-history":[{"count":30,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1561\/revisions"}],"predecessor-version":[{"id":1757,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1561\/revisions\/1757"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/1741"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}