10. Januar 2020

Der Start

Moin, mein Name ist Gunnar und ich möchte an dieser Stelle den Fortschritt meines Projektes – den Bau eines smarten Bewässerungscomputers – beschreiben.

Um dies zu realisieren, habe ich mich heute erstmal ein wenig mit WordPress beschäftigt und mir ein grobes gestalterisches Konzept überlegt. Der aktuelle Plan ist, dass ich drei Teilbereiche habe, unter denen die einzelnen Projektteile beschrieben werden.

In dem Bereich „Die Grundidee“ kommen Beiträge zur Idee des Projektes und welche Anforderungen an es gestellt werden. Unter “Schulbezug” soll der Alltagsbezug für die SuS und welche Kompetenzen mit diesem Projekt erworben werden können erläutert werden. Unter „Hardware“ kommen alle Beiträge, die die verwendete Hardware betreffen, wie beispielsweise eine Materialliste oder Begründungen für die verwendeten Bauteile. Im Bereich „Software“ soll schließlich die Programmierung und die 3D-Modelierung für das Projekt beschrieben werden.

Die Startseite soll die wichtigsten Beiträge darstellen, aber dazu später mehr.

10. Januar 2020

Erste Probleme tauchen auf

Die ersten Probleme tauchen auf. WordPress ist stur und gibt mir nicht die Freiheit das Template nach meinen Wünschen anzupassen. Ich verschwende viel zu viel Zeit für das Optische….

Außerdem hätte ich gerne für diesen Blog einen fortlaufende Text, jedoch werden die Beiträge automatisch nach Datum sortiert. Aus diesem Grund verwende ich diesen Entwicklerblog nun als Seite und hänge meine Beiträge einfach hinten an.

Morgen geht es an die Hardware

11. Januar 2020

Das Projekt

Heute werde ich mich erstmals an die Hardware wagen. Aber zunächst möchte ich kurz mein Projekt vorstellen.

Ich verwende in meinem Garten schon seit einigen Jahren einen Bewässerungscomputer, um meine Tomaten zu bewässern. Dabei handelt es allerding praktisch nur um eine Zeitschaltuhr, die jeden Tag den Wasserhahn für eine Stunde öffnet. Da der Wasserbedarf der Pflanzen aber stark von der Witterung abhängt, habe ich mich entschlossen, einen Bewässerungscomputer mit Feuchtigkeitssensor zu Bauen. Eine genaue Beschreibung des Projekts und die Anforderungen gibt es hier.

Verwendetet Hardware

Vor dem Zusammenbau der Hardware soll nun zunächst ein Schaltplan erstellt und die Funktionsweise des bestehenden Bewässerungscomputer nachvollzogen werden.

11. Januar 2020

Schaltplan

Eine Skizze vom Schaltplan ist soweit erstellt, mal schauen ob es auch funktioniert.

11. Januar 2020

Zusammenbau und Programmierung

Heute war ein nervenaufreibender Tag…. Ich habe zunächst alle Teile provisorisch zusammengebaut, was auch eigentlich problemlos funktioniert hat. Bei der Programmierung traten dann die Probleme auf. Das Ein- und Ausschalten des Motors wollte einfach nicht funktionieren. Das erste Problem war, dass die Ausgegebene Stromstärke anscheinend nicht ausreichte, um den Motor zu betreiben. Mit einem Transistor konnte ich dieses Problem beheben. Das zweite Problem war, dass der Mikroschalter zur Steuerung des Motors ein Defekt hatte und somit die Motorsteuerung nicht zuverlässig arbeitete.

Trotz dessen habe ich heute was gelernt. Trenne IMMER die Batterieversorgung, wenn der Arduino über USB mit dem Computer verbunden ist, ansonsten fliegen sie dir um die Ohren!

13. Januar 2020

Es Läuft!

Nach einem sehr aufschlussreichen Gespräch mit Anatolij funktioniert jetzt alles. Das Hauptproblem war, dass der Mikroschalter im High-Zustand zwar funktioniert, aber im Low-Zustand undefiniert war.

Das Arduino Board verfügt für diesen Fall über interne Pullup Widerstände, die sich nach bedarf aktivieren lassen. Dafür muss der Pin mit „pinMode(pin, INPUT_PULLUP);“ definiert werden. Dabei ist zu beachten, dass sich die Zustände des Mikroschalters umkehren und der Schalter gegen Masse geschaltet werden muss.

So sieht der aktuelle Stand aus:

16. Januar 2020

Der Schaltplan ist fertig

So wie es aussieht, funktionier der interne Pullup-Widerstand nicht richtig. Aus diesem Grund wird ein externer 10k Ω Pulldown-Widerstand verwendet und der Mikroschalter auf Phase geschaltet.

Der Feuchtigkeitssensor wird nun über einen digitalen Pin mit Spannung versorgt, wodurch sich die Stromzufuhr nun über den Quellcode regeln lässt.

Hier ist der komplette Schaltplan.

Schaltplan

16. Januar 2020

Es Läuft, aber Jetzt wirklich!

Heute wurde erstmals alles zusammengebaut und tatsächlich funktioniert es auch! Auch das Gehäuse passt – mit einer kleinen Modifikation – wie angegossen.

Der erste Zusammenbau

Das Kabel für den Feuchtigkeitssensor wurde durch ein Loch im unteren Teil des Gehäuses geführt, um einen möglichen Wassereintritt zu verhindern. Da sich die Abdeckung zu dem darunter liegenden Getriebe aber nicht mehr rausnehmen lies, musste von dieser ein Teil entfernt werden.

Getriebe, Motor, Schalter
Entfernte Teil der Abdeckung

Nun geht es erstmal um das Stromsparen, Kalibrieren und Optimieren des Quellcodes.

16. Januar 2020

Deep-Sleep

Die erste Version des Deep-Sleep-Modus steht, allerdings ist dieser Hardwareseitig auf maximal 8 Sekunden begrenzt, wenn man ohne ein externes Aufwachsignal auskommen will. Bei der momentanen Lösung wacht der Arduino alle 8 Sekunden auf und überprüft ob die eingegebene Zeit schon abgelaufen ist. Wenn dies nicht der Fall ist, wird die verbleibende Zeit reduziert und der Arduino geht wieder in den Sleep-Modus.

#include "LowPower.h"
#define led 13

const int zeitSleep = 10000;

void setup() {
 pinMode (led, OUTPUT);
 Serial.begin(9600); 
}


/* Methode zur aktivierung des Deep-Sleep-Modus.
 * Überprüfung ob geswünschte Zeit schon abgelaufen, wenn nicht, Sleep für größtmögliche Zeit 
 * und reduzierung der noch verbleibenden Zeit.
 */

void deepSleep(int milliseconds) {
  while (milliseconds >= 8000) { LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); milliseconds -= 8000; }
  if (milliseconds >= 4000)    { LowPower.powerDown(SLEEP_4S, ADC_OFF, BOD_OFF); milliseconds -= 4000; }
  if (milliseconds >= 2000)    { LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF); milliseconds -= 2000; }
  if (milliseconds >= 1000)    { LowPower.powerDown(SLEEP_1S, ADC_OFF, BOD_OFF); milliseconds -= 1000; }
  if (milliseconds >= 500)     { LowPower.powerDown(SLEEP_500MS, ADC_OFF, BOD_OFF); milliseconds -= 500; }
  if (milliseconds >= 250)     { LowPower.powerDown(SLEEP_250MS, ADC_OFF, BOD_OFF); milliseconds -= 250; }
  if (milliseconds >= 125)     { LowPower.powerDown(SLEEP_120MS, ADC_OFF, BOD_OFF); milliseconds -= 120; }
  if (milliseconds >= 64)      { LowPower.powerDown(SLEEP_60MS, ADC_OFF, BOD_OFF); milliseconds -= 60; }
  if (milliseconds >= 32)      { LowPower.powerDown(SLEEP_30MS, ADC_OFF, BOD_OFF); milliseconds -= 30; }
  if (milliseconds >= 16)      { LowPower.powerDown(SLEEP_15MS, ADC_OFF, BOD_OFF); milliseconds -= 15; }
}

/* LED zur Überprüfung
 */
void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  deepSleep(zeitSleep);  
}

18. Januar 2020

Das Gehäuse

Heute habe ich die Abdeckung für das Gehäuse designt. Ich hatte dabei so meine Probleme die genauen Maße des Gerätes in Fusion 360 zu Übertragen. Aus diesem Grund habe ich die Außenmaße des Gerätes auf ein Papier übertragen, eingescannt, mit Inkscape in eine Vektorgrafik konvertiert, in Fusion 360 übertragen und daraus dann die Abdeckung modelliert.

28. Januar 2020

Fertig!

Die Abdeckung passt gut. Um eine höhere Dichtigkeit zu erlangen, wurde ein bisschen Isolierband verwendet. Nach der Kalibrierung des Sensors funktioniert das Gerät jetzt wie es soll.

Nun geht es um die Gestaltung der Website und die Stromaufnahme will ich die tage noch einmal überprüfen.

6.135 Kommentare zu „Entwicklerblog

    1. Nach groben Berechnungen kann ich, bei täglicher Bewässerung von etwa einer Stunde, eine Laufzeit von 707 Tagen erreichen. Somit sollte die Versorgung über 6 Monate kein Problem darstellen.

    1. Einige hätten in der tat etwas kürzer sein können, allerding macht es das Arbeiten noch schwieriger. Wenn die Platinen befestigt sind, kümmere ich mich um das Kabelmanagement.

  1. Der Deep-sleep-Modus ist einfach so etwas wie das gerät auszuschalten?
    Wenn du das fertig hast würde ich das doch glatt für mein Projekt übernehmen wollen^^

    Anatolij meinte sonst zu mir mal was davon, dass das über seine special schaltung gehen kann, aber vielleicht hab ich da auch was durcheinander gebracht (mit der Schaltung kannst du ein gerät von der Stromversorgung trennen, sowohl vcc als auch gnd)

    1. Bei dieser Variante wird nicht alles ausgeschaltet, ansonsten könnte es ja nicht wieder aufwachen. Ich habe noch gelesen, man sollte die Output-Pins vor dem Deep-Sleep als Input definieren, um den Stromverbrauch weiter zu senken. Ich werde das nächste Woche mal durchmessen.

      Es gibt noch die Möglichkeit eines “external Interrupt”, vielleicht ist das eher eine Variante für dich? Dabei hast du die Möglichkeit den Arduino komplett schlafen zu legen und weckst ihn z.B. über einen Button wieder auf. Bei der Variante oben, wird das Gerät für einen festen Zeitraum schlafen gelegt, was in deinem Fall ja eher nicht so passt.

Schreibe einen Kommentar