INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 4 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Urlaubsvertretung zum Blumengiessen....
07.03.2018, 17:54 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2018 01:10 von carsten9189.)
Beitrag #1
Urlaubsvertretung zum Blumengiessen....
MoineTongueTongue...

Da ich seit diesem Jahr zu den Leuten gehöre, die sich ihre eigenen Chilis auf der Fensterbank ziehen, musste ich mir Gedanken machen wer die Pflanzen denn Gießt wenn ich im Urlaub bin.... und da kam mir folgende Idee...
Ein Programm in dem die Giesszeit, in Sekunden und der Giessintervall in Stunden, den Ausgang entsprechend schaltet und damit einen MOSFET Transistor ansteuert der wiederum ein Magnetventil schaltet.

Soweit so gut... ein solches Programm stellt der Blink Sketch dar und erfüllt somit alle Programmpunkte.

Da der Mensch aber bequem ist und gerne Luxus hat sollte das ganze über ein Touch-Display zu regeln und anzusteuern sein.... also ging Blink nicht mehr und es musste eine Timersteuerung her, die es mir ermöglicht den Prozessablauf zu stoppen, die Werte zu ändern und zu starten....
Zudem musste ich dafür sorgen, dass sich das Touch und der Arduino munter austauschen...

Aber seht selbst wie ich das nach meinen Vorstellungen umgesetzt habe

Code:
/*
  Programm zum automatischen Blumen giessen, alle z.B. 12 Stunden,
  für 4Sekunden...
  Die Zeit wie lange das Magnetventil öffnen soll und in welchen Zeitabständen dieses geschehen soll
  kann auf einem Touch-Display, über Schieberegler eingestellt werden...
  Über einen DualStateButton, auf dem Touch, kann der Prozess gestartet und wieder gestoppt werden...
  Geplant ist evtl. noch ein Protokollprint auf dem Touch, wann gegossen wurde mit Uhrzeit und Datum...
  Mit dem Ausgang wird ein N-Kanal MOSFET Transistor angesteuert
  der dann das Magnetventil Schaltet...

  Von Carsten Falke...
*/


#include <SimpleTimer.h> // Einbinden der Timer Lib
#include "Nextion.h" // Einbinden der Nextion 7.0 Lib... Ich habe aus der Master Lib noch eine Lib in diesen Ordner
// mit aufgenommen und in der Nextion.h eingefügt... NexDualStateButton.cpp + h

SimpleTimer timer;

// Declaration der Touch-Komponenten die im Programm verarbeitet werden...
//NexText t4 = NexText(0, 10, "t4");
NexScrolltext g0 = NexScrolltext(0, 10, "g0");
NexSlider h0 = NexSlider(0, 1, "h0");
NexSlider h1 = NexSlider(0, 2, "h1");
NexNumber n0 = NexNumber(0, 5, "n0");
NexNumber n1 = NexNumber(0, 6, "n1");
NexDSButton bt0 = NexDSButton(0, 9, "bt0");

// Liste der Touch-Komponenten von denen ein Event erwartet wird...
NexTouch *nex_listen_list[] =
{
  &h0, NULL + &h1, NULL + &bt0, NULL
};

// Benennung der Variablen...
uint32_t SekundenState;
uint32_t StundenState;
uint32_t RefreshState;

int MeldungPin = 12;
int AusgangPin = 13;


void h0PopCallback(void *ptr)
{
  h0.getValue(&SekundenState); // holen des Valuewert vom Schieberegler der die Giesszeit einstellt...
}

void h1PopCallback(void *ptr)
{
  h1.getValue(&StundenState); // holen des Valuewert vom Schieberegler der die Intervallzeit einstellt...
}

void bt0PopCallback(void *ptr)
{
  bt0.getValue(&RefreshState); // holen des Valuewert vom DualStateButton der den Prozess startet oder Stoppt...
}


// Initialisierung...
void setup(void)
{
  pinMode(MeldungPin, OUTPUT);
  pinMode(AusgangPin, OUTPUT);

  nexInit();
  h0.attachPop(h0PopCallback);
  h1.attachPop(h1PopCallback);
  bt0.attachPop(bt0PopCallback);

  timer.setTimeout(1, InitialisierungAusgang);
}


// Programmschleife Anfang...
void loop(void)
{
  nexLoop(nex_listen_list);
  n0.setValue(SekundenState); // Setzen des Nummerischen Feldes, für die Giesszeit...
  n1.setValue(StundenState); // Setzen des Nummerischen Feldes, für den Giessintervall...

  if (RefreshState == 1) {
    bt0.setText("Stop"); // Änderung des Textes auf dem DualStateButton, wenn gedrückt...
  }
  else {
    bt0.setText("Start");
  }

  delay(450);

  if (RefreshState == 1) {
    timer.run(); // Aktivierung des Prozesses, wenn gedrückt...
  }
  else {
    timer.disable(SekundenLang);
  }

}
// Programmschleife Ende...


// Prozeduren für den Timerablauf...
void InitialisierungAusgang() {
  timer.setTimeout(SekundenState * 1000, SekundenKurz);
  digitalWrite(AusgangPin, HIGH);
}

void SekundenKurz() {
  timer.setTimeout(StundenState * 1000, SekundenLang); // Im moment auf Sekunden eingestellt um besser,effektiver, testen zu können... Für Stunden wären es statt 1000 dann 3600000...
  digitalWrite(AusgangPin, LOW);
  g0.setText("Habe die Blumen gegossen..."); // Hier soll irgendwann der Protokolltext mit Uhrzeit und Datum eingefügt werden...

}

void SekundenLang() {
  timer.setTimeout(SekundenState * 1000, SekundenKurz);
  digitalWrite(AusgangPin, HIGH);
}
Gruss Carsten...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.03.2018, 22:54
Beitrag #2
RE: Urlaubsvertretung zum Blumengiessen....
Könntest Du bitte Deine Codetags nochmal korrigieren?

Danke.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.03.2018, 15:36 (Dieser Beitrag wurde zuletzt bearbeitet: 14.03.2018 00:14 von carsten9189.)
Beitrag #3
RE: Urlaubsvertretung zum Blumengiessen....
AngelAngel Moinsen...

Nur nochmal der Vollständigkeithalber...
Dieses Projekt basiert auf dem Nano in Verbindung mit einem NEXTION 3,5" Touch-Display

Ich habe in der Zwischenzeit noch ein wenig am Code geändert und wollte dieses hier nochmal posten....


Code:
/*
  Programm zum automatischen Blumen giessen, alle z.B. 12 Stunden,
  für 4Sekunden...
  Die Zeit wie lange das Magnetventil öffnen soll und in welchen Zeitabständen dieses geschehen soll
  kann auf einem Touch-Display, über Schieberegler eingestellt werden...
  Über einen DualStateButton, auf dem Touch, kann der Prozess gestartet und wieder gestoppt werden...
  Geplant ist evtl. noch ein Protokollprint auf dem Touch, wann gegossen wurde mit Uhrzeit und Datum...
  Mit dem Ausgang wird ein N-Kanal MOSFET Transistor angesteuert
  der dann das Magnetventil Schaltet...

  Von Carsten Falke...
*/

// Einbinden der Timer Lib
#include <SimpleTimer.h>

// Einbinden der Nextion 7.0 Lib... Ich habe aus der Master Lib noch eine Funktion in diesen Ordner
// mit aufgenommen und in der Nextion.h eingefügt... NexDualStateButton.cpp + h
#include "Nextion.h"


SimpleTimer timer;


// Declaration der Touch-Komponenten die im Programm verarbeitet werden
NexText t4 = NexText(0, 10, "t4");
NexSlider h0 = NexSlider(0, 1, "h0");
NexSlider h1 = NexSlider(0, 2, "h1");
NexNumber n0 = NexNumber(0, 5, "n0");
NexNumber n1 = NexNumber(0, 6, "n1");
NexDSButton bt0 = NexDSButton(0, 9, "bt0");


// Liste der Touch-Komponenten von denen ein Event erwartet wird
NexTouch *nex_listen_list[] =
{
  &h0, NULL + &h1, NULL + &bt0, NULL
};


// Benennung der Variablen
uint32_t SekundenState = 3; // Voreinstellung der Giesszeit...
uint32_t StundenState = 24; // Voreinstellung des Giessintervalls...
uint32_t RefreshState;

int MeldungPin = 12;
int AusgangPin = 13;


// Prozeduren für das holen der Daten, vom Touch-Display
void h0PopCallback(void *ptr)
{
  h0.getValue(&SekundenState); // holen des Valuewert vom Schieberegler der die Giesszeit einstellt...
}

void h1PopCallback(void *ptr)
{
  h1.getValue(&StundenState); // holen des Valuewert vom Schieberegler der die Intervallzeit einstellt...
}

void bt0PopCallback(void *ptr)
{
  bt0.getValue(&RefreshState); // holen des Valuewert vom DualStateButton der den Prozess startet oder Stoppt...
}


// Initialisierung
void setup(void)
{
  pinMode(MeldungPin, OUTPUT);
  pinMode(AusgangPin, OUTPUT);

  nexInit();
  h0.attachPop(h0PopCallback);
  h1.attachPop(h1PopCallback);
  bt0.attachPop(bt0PopCallback);

  timer.setTimeout(10, InitialisierungAusgang);
}


// Programmschleife Anfang
void loop(void)
{
  nexLoop(nex_listen_list);
  n0.setValue(SekundenState); // Setzen des Nummerischen Feldes, für die Giesszeit...
  n1.setValue(StundenState); // Setzen des Nummerischen Feldes, für den Giessintervall...

  if (RefreshState == 1) {
    bt0.setText("Stop"); // Änderung des Textes auf dem DualStateButton, wenn gedrückt...
  }
  else {
    bt0.setText("Start");
    t4.setText("                           "
               " Guten Tag...              "
               "                           "
               " Zum starten fuer 3 Sek.   "
               " auf die -Start- Flaeche   "
               " tippen...");
  }

  delay(700);

  if (RefreshState == 1) {
    timer.run(); // Aktivierung des Prozesses, wenn der DualStateButton gedrückt...
  }
  else {
    timer.deleteTimer(SekundenLang);
  }
}
// Programmschleife Ende


// Prozeduren für den Timerablauf
void InitialisierungAusgang() {
  digitalWrite(AusgangPin, HIGH);
  timer.setTimeout(SekundenState * 1000, SekundenKurz);
}

void SekundenKurz() {
  digitalWrite(AusgangPin, LOW);
  timer.setTimeout(StundenState * 3600000, SekundenLang);
  t4.setText("                           "
             " Habe die Blumen gegossen.."
             "                           "
             " Zum stoppen fuer 3 Sek.   "
             " auf die -Stop- Flaeche    "
             " tippen...");
}

void SekundenLang() {
  digitalWrite(AusgangPin, HIGH);
  timer.setTimeout(SekundenState * 1000, SekundenKurz);
}

Gruss Carsten...Rolleyes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2018, 11:11
Beitrag #4
RE: Urlaubsvertretung zum Blumengiessen....
Warum immer alles doppelt erfinden?
http://fam-haugk.de/giessautomat-fuer-pflanzen

Jaaa, ich weiss. Dein Ansatz ist über die Zeit.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2018, 15:25
Beitrag #5
RE: Urlaubsvertretung zum Blumengiessen....
Moin FredRam...
Zum einen läuft es bei mir über die Zeit und zum anderen wird das ganze über ein Touchdisplay gesteuert...

Es geht mir bei solchen Projekten auch nicht unbedingt darum ob das schon mal jemand gemacht hat oder nicht... es geht in erster Linie darum seinen eigenen Horizont zu erweitern.
Wenn du ewig von anderen abkupferst ist der Lernerfolg lange nicht so hoch als wenn du deine eigene Rübe zum rauchen bringst, denke ich... ES GEHT HIER UM DAS WIE UND NICHT DARUM OB ES SOWAS SCHON GIBT... Wenn wir in der Arduino Gemeinde alle so denken würden bräuchten wir das hier alles nicht, da du über China einen Grossteil der Sachen bestimmt schon fertig kaufen kannst...

Gruss Carsten...

Zudem ist keiner perfekt und alles ist verbesserungsfähig, ausbaufähig... deswegen gibt es dieses Forum...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2018, 15:28
Beitrag #6
RE: Urlaubsvertretung zum Blumengiessen....
(21.03.2018 15:25)carsten9189 schrieb:  ES GEHT HIER UM DAS WIE UND NICHT DARUM OB ES SOWAS SCHON GIBT...
Deshalb brauchst Du hier nicht rumschreien.

Du bestimmst nicht, was jemand postet oder nicht. Das steht Dir nicht zu.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2018, 15:35 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2018 15:35 von Hilgi.)
Beitrag #7
RE: Urlaubsvertretung zum Blumengiessen....
Moin,


bitte nicht schreien (GROßSCHREIBEN) Wink


Ich bin auch Chilinese Big Grin

Habe eine ähnliche Schaltung mit Bodenfeuchtemessung (Kapazitiv) zusammengefummelt, sowas in Betracht gezogen?

Display, seh ich immer wieder - klar geil....

Evtl. geiler...
Feuchtemessung (Giesomat) + App (app inventor 2) + datenbank (Firebase) + visualisierung (thingspeak) + wifi (esp8266)

Würde eine weltweite Bedienung und Ansicht ermöglichen.

So viel zum Horizont Wink


Gruß

Nicht denken,...
...nachdenken... Rolleyes

Smarter - LiveData - KLAMM.de
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2018, 16:54
Beitrag #8
RE: Urlaubsvertretung zum Blumengiessen....
Tommy56...
Ich habe nicht geschriehen und meinetwegen können die Leute hier posten was sie mögen....
Ich habe niemanden das Wort verboten. Ich habe lediglich geschrieben was ich denke weshalb es solche Foren gibt und das ich solche Projekte in erster Linie für mich mache um meinen Bereich zu erweitern und wenn ich sowas hier poste dient es einzig und alleine dazu, dass sich evtl. der eine oder andere einen Denkanstoß holen kann und schauen kann wie hat der das denn gemacht...
Ich bin genauso wenig perfekt wie du und zumindest was mich angeht erhebe ich da auch kein Recht drauf Perfekt zu sein....

Hilgi...
Das mit China war nicht abwertig gemeint aber es ist ja zur Zeit tatsächlich so, dass man da fast alles bekommt....
Feuchtemessung habe ich in betracht gezogen ist dann allerdings hinten runter gefallen da für mich im moment zu aufwendig. Die Urlaubsvertretung auf Zeitbasis ist zumindest im Moment für mich am kompaktesten und funktioniert, vor allem da die Gieseinheiten für sich alle im eigenen Saft laufen sollen, das heißt ohne zusätzliche Kabel und mit Akku, nach dem Schwerkraftprinzip sprich Wasserkanister mit unteren Auslauf der über ein Magnetventil vom Controller gesteuert wird... Aber trotzdem danke...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste