Offline
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #15 on: June 03, 2012, 06:15:20 am » |
Wieso den Wochentag berechnen, ist zwar schon lange her, aber das RTC Modul liefert doch nach einmaligem Stellen den Wochentag oder liege ich jetzt völlig daneben. Ich muss nachschauen, aber ich hab das schon mal genutzt.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #16 on: June 03, 2012, 08:30:07 am » |
Hallo maverick 1509, das RTC liefert unteranderen auch den Wochentag. Mit dem 4.Byte ( 0x03 Wochentag ), wenn ich das richtig gelesen habe. Wieso den Wochentag berechnen, ist zwar schon lange her, aber das RTC Modul liefert doch nach einmaligem Stellen den Wochentag oder liege ich jetzt völlig daneben. Ich muss nachschauen, aber ich hab das schon mal genutzt.
Also, sobald das RTC-Modul da ist, fange ich damit an und werde mich dann noch mal melden. Ich glaube, ich kann es denn besser verstehen und konkretere Fragen stellen. Danke Euch aber bis jetzt für die tolle Unterstützung und Hilfe. Danke !
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #17 on: June 03, 2012, 11:42:39 am » |
Hallo Cetax, ich baue sowas gerade für die Bewässerung meiner Gemüsepflanzen auf dem Balkon. Ich habe einen RTC-Chip (DS1307) angeschlossen und die entsprechende Bibliothek (DS1307new) installiert. Man kann aus dem RTC dann mit verschiedenen Befehlen Stunde, Minute und Sekunde auslesen. Das vergleiche ich dann mit der gewünschten Uhrzeit und betätige dann den Ausgang. Sieht dann z. B. so aus: #include <Wire.h> #include <DS1307new.h>
// Anschluß für Pumpe int pumppin = 2;
// Uhrzeit für Bewässerung int pumphour = 19; int pumpminute = 0; int pumpsecond = 0;
// Bewässerungszeit in Sekunden long pumptime = 120;
...
void loop() { RTC.getTime(); // Start Pumpe if (int(RTC.hour) == pumphour && int(RTC.minute) == pumpminute && int(RTC.second) == pumpsecond) { digitalWrite(pumppin, HIGH); timenow = RTC.time2000; } // Stop Pumpe if (RTC.time2000 - timenow == pumptime) { digitalWrite(pumppin, LOW); } delay(500); }
Da fehlt natürlich noch das setup den RTC und so. Zum Ausschalten der Pumpe kann man das gleiche wieder machen oder eine Zeitspanne vorgeben wie im Beispiel. Um die Zeitdifferenz zu berechnen bis zum Ausschalten mußt du die Zeit in Sekunden auslesen (RTC.time2000). Wichtig ist, daß die Schleife sicher in jeder Sekunde durchlaufen wird, deshalb habe ich den delay am Schluß kleiner als 1000ms gewählt. Sonst kann es dir passieren, daß die Zeit am Ende der Sekunde 18:59:59 ausgelesen wird und dann erst wieder am Anfang der Sekunde 19:00:01. Dann schaltet er nicht ein, weil die Bedingung in der if-Abfrage nie erfüllt wird. Das Verfahren ist ein sehr einfaches und funktioniert so, wenn du wenige Schaltereignisse hast (so wie hier 1x täglich ein). Viele Grüße Elektrix
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #18 on: June 03, 2012, 11:53:14 am » |
Hallo Elektrix, das ist ja klasse, machst ja ähnliches wie. Ich Bewässere meinen Garten, habe 6 Ventile die an unterschiedlichen Tagen zu unterschiedlichen Zeiten geöffnet und nach einer Vorgegeben Zeit wieder geschlossen werden sollen. Was schon funktioniert ist halt die Öffnung der Ventile für eine bestimmte Laufzeit. Ich übergebe per Web-Interface eine Zeit (z.B. 30min) und wenn die abgelaufen ist, schließt das Ventil wieder automatisch. Jetzt sollen noch die Wochentage und Uhrzeit mit rein, aber da muss ich noch auf das RTC-Modul warten, kommt hoffentlich morgen  Aber erstmal danke für den Sketch-Teil, habe ich schon mal was zum lesen und versuchen zu verstehen.
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #19 on: June 03, 2012, 11:55:14 am » |
Hallo Elektrix, warum arbeitest du nicht mit < und > dann brauchst du dir keine Sorgen zu machen, das nicht geschaltet wird. Und ein delay brauchst du auch nicht, mit delay arbeitet man nicht :-)) Gruß Bernward
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 23
|
 |
« Reply #20 on: June 03, 2012, 03:35:18 pm » |
Naja mein Vorschlag war ja auch nicht zu Ernst gemeint. Aber bei seinen Projekten sollte man immer was lernen. Und sowas in einen Algorithmus zu packen ist ne gute Übung für die grauen Zellen. 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #21 on: June 04, 2012, 05:07:01 am » |
Hallo maverick1509,
das mit < und > ist ein guter Tipp, danke! Ich würds dann entsprechend mit <= und >= machen, dann schaltet er zur vorgegebenen Zeit oder etwas später, wenn die genaue Sekunde nicht erreicht wird. Den delay habe ich drin, weil der arduino nichts anderes zu tun hat als den Ausgang zu schalten. Deswegen beschäftige ich ihn mit dem delay. Vlt. kann man ihn auch für eine vorgegebene Zeit schlafen legen, aber das weiß ich nicht.
Hallo Cetax,
welches Bewässerungssystem nimmst du denn? Mein Aufbau ist einfacher als deiner, ich habe eine 12V-Tauchpumpe im Regenfass und meine Bewässerung dran. Da ich nur den Balkon habe brauche ich nicht mehrere Stränge, also keine Ventile. Die Tauchpumpe wird vom Arduino über einen Leistungs-MOSFET direkt geschaltet. Schön, wenn du mit meinem Sketch-Vorschlag was anfangen kannst. Du kannst es entsprechend um die Abfrage des Wochentags erweitern.
Viele Grüße
Elektrix
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #22 on: June 05, 2012, 04:11:27 pm » |
Moin, so nu ist die RTC da und ich bin irgendwie zu blöd den Wochentag anzuzeigen  Ich habe es so versucht, bekomme aber immer eine 0 angezeigt lcd.printIn( itoa( datum[ 3 ], buffer, 10 ) );/**************************************************************************************************** * RTC DS1307 mit LCD-Display * * 05.11.2011 Jürgen Mayer, DL8MA * * http://www.amateurfunk.de/dl8ma * * Dieser Beispielcode ist public domain * * Hardware: Arduino * Arduino SD Shield Plus mit DS1307 (www.avrcontrollers.com) * LCD-Shield */
#include "LCD4Bit_mod.h" #include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // I2C Adresse char buffer[20] = ""; // Speicherbereich für Datenkonvertierung LCD4Bit_mod lcd = LCD4Bit_mod(2); // LCD-Display /**************************************************************************************************** * Konvertierung BCD-kodierter Dezimalzahl */ byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); }
/**************************************************************************************************** * Zeit und Datum aus DS1307 auslesen und konvertieren */ void getDateDs1307(int date[]) { Wire.beginTransmission(DS1307_I2C_ADDRESS); // I2C-Kommunikation im Schreibmodus starten Wire.send(0x00); // Registerzeiger auf 0 setzen Wire.endTransmission(); // I2C-Kommunikation beenden Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // I2C-Kommunikation im Lesemodus starten date[ 0 ] = bcdToDec(Wire.receive() & 0x7f); // Sekunden date[ 1 ] = bcdToDec(Wire.receive()); // Minuten date[ 2 ] = bcdToDec(Wire.receive() & 0x3f); // Stunden date[ 3 ] = bcdToDec(Wire.receive()); // Wochentag date[ 4 ] = bcdToDec(Wire.receive()); // Tag date[ 5 ] = bcdToDec(Wire.receive()); // Monat date[ 6 ] = bcdToDec(Wire.receive()); // Jahr } /**************************************************************************************************** */ void setup() { Wire.begin(); // I2C-Bus einrichten lcd.init(); // LCD-Anzeige initialisieren lcd.clear(); //lcd.printIn( "DS1307 - Uhr" ); }
/**************************************************************************************************** */ void loop() {
int datum[ 7 ]; getDateDs1307( datum ); // Datum und Uhrzeit aus DS1307 holen
// Wochentag ausgeben: lcd.cursorTo(0, 2); lcd.printIn( itoa( datum[ 3 ], buffer, 10 ) );
lcd.cursorTo(2, 0); // Datum und Uhrzeit in 2. Zeile schreiben
if( datum[ 4 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 4 ], buffer, 10 ) ); lcd.printIn( "." ); if( datum[ 5 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 5 ], buffer, 10 ) ); lcd.printIn( "." ); /* if( datum[ 6 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 6 ], buffer, 10 ) ); */ lcd.printIn( " " );
if( datum[ 2 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 2 ], buffer, 10 ) ); lcd.printIn( ":" ); if( datum[ 1 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 1 ], buffer, 10 ) ); lcd.printIn( ":" ); if( datum[ 0 ] < 10 ) lcd.printIn( "0" ); lcd.printIn( itoa( datum[ 0 ], buffer, 10 ) ); lcd.printIn( " " );
delay(1000); // grobes Sekundenraster für Anzeige } Kann jemand helfen ? Ist vieleicht schon zu spät... 
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 231
|
 |
« Reply #23 on: June 05, 2012, 11:44:47 pm » |
Hallo Cetax, ich habe in meine Programmen die Library #include <DS1307.h> eingebaut. Wenn man dann ein Array z.B. Daten[7] definiert reicht ein ganz normales RTC.get(Daten,true); und man hat alle Werte. So sind z.B Daten[0] die Sekunden und Daten[3] der Wochentag. Gruß Bernward
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 198
|
 |
« Reply #24 on: June 06, 2012, 12:31:17 am » |
Hi, sorrie das ich jetzt erst antworte...Was macht meine Terrarienzeitschaltuhr...In erster Linie wirklich nur An und Aus zu bestimmten Zeiten, aber eben 5 Geräte. Zusätzlich habe ich noch eine Sensorgesteuerte An/Aus-Funktion,d.h. wenn die Feuchtigkeit unter einen Schwellenwert sinkt, geht die Beregnung für ein paar Sekunden an (und muss dann eine Stunde aus bleiben). Sollte während der "An"-Zeit das Terrarium überhitzen, gehen die Heizstrahler aus und wenn die Temperatur wieder im Normalbereich ist gehen die Dinger wieder an. Also eigentlich ganz Simpel. Ich habe sonst noch einen Wasserstandssensor, der misst den Wasserstand im Beregnungstank,d.h. vor jeder Beregnung wird geprüft ob der Wasserstand noch aussreichend ist und nur dann wird die Beregnung durchgeführt, damit die Pumpe nicht trocken läuft. Aktuell bastel ich gerade daran, das ganze über das WLAN auszulesen und gegebenenfalls auch über das Internet eingreifen zu können. mfg Balli p.s. auch ich verwende die DS1307-Lib
|
|
|
|
« Last Edit: June 06, 2012, 12:33:44 am by Ballibum »
|
Logged
|
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #25 on: June 15, 2012, 03:22:59 pm » |
Hallo allerseits, so nachdem ich nun 1 Woche kein Internet hatte und mein Job mich voll gebraucht hat, würde ich nun gern weitermachen...  Hi, sorrie das ich jetzt erst antworte... Kein Problem  Was macht meine Terrarienzeitschaltuhr...In erster Linie wirklich nur An und Aus zu bestimmten Zeiten, aber eben 5 Geräte. Zusätzlich habe ich noch eine Sensorgesteuerte An/Aus-Funktion,d.h. wenn die Feuchtigkeit unter einen Schwellenwert sinkt, geht die Beregnung für ein paar Sekunden an (und muss dann eine Stunde aus bleiben). Sollte während der "An"-Zeit das Terrarium überhitzen, gehen die Heizstrahler aus und wenn die Temperatur wieder im Normalbereich ist gehen die Dinger wieder an. Also eigentlich ganz Simpel. Ich habe sonst noch einen Wasserstandssensor, der misst den Wasserstand im Beregnungstank,d.h. vor jeder Beregnung wird geprüft ob der Wasserstand noch aussreichend ist und nur dann wird die Beregnung durchgeführt, damit die Pumpe nicht trocken läuft.
Das hört sich Suuper an, Feuchtigkeits-Sensor... Ich glaube, wenn meine Pumpensteuerung fertig ist, kommt das dran. Das wäre dann Bewässerung in Perfektion 
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #26 on: June 15, 2012, 03:48:03 pm » |
Moin, so nun ist die Hardware verlötet (RTC) und nun soll es mit dem Sketch weitergehen. Ich habe es hinbekommen, die Uhrzeit zu stellen und ich kann die Uhrzeit, Datum und den Wochentag mir im SerialMonitor anzeigen lassen. Soweit so gut. Aber wie bekomme ich es hin, das ich per PHP Script sage: Öffne Montag um 15 Uhr Ausgang 6 für 15 min ? Wie ich Ihm sage, das er den Ausgang für 15 min öffnen soll, klappt schon. Aber ich weiß jetzt nicht wie ich weitermachen soll/muss. Wer kann mir Anhaltspunkte geben, mit denen ich weiter machen kann ? Die Sketche findet Ihr hier: http://dl.dropbox.com/u/80052077/PHP_Ausgang_schalten.inohttp://dl.dropbox.com/u/80052077/RTC_Uhr_Auslesen_incl_WoTag.inoVielen Dank für Eure Hilfe. Falls Ihr noch irgendwelche Infos braucht, sagt bescheid...
|
|
|
|
« Last Edit: June 16, 2012, 03:49:12 pm by Cetax »
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #27 on: June 16, 2012, 03:50:00 pm » |
<- PUSH -> Keiner einen Hinweis , Tipp , oder fertigen Code ? 
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
Offline
Edison Member
Karma: 18
Posts: 1294
|
 |
« Reply #28 on: June 18, 2012, 09:31:41 am » |
Hier mal ein kurzer Denkanstoss:
Was Du ja schon hast ist eine Funktion wo Du per PHP eine Zeit (z.B. 15min) übertragen. Das kannst Du ja problemlos auf zusätzliche Werte erweitern. Also zusätzlich zur Dauer noch den Wochentag, oder ein Datum und eine Uhrzeit oder was auch immer mitschicken. Du musst halt nur den Sketch zum auslesen der Kommandos erweitern. Diese Werte für die Steuerung merkst Du Dir auf dem Arduino wieder in einem Array. Du merkst Dir also eigentlich den Start-Wert (Zeit) und den End-Wert (Zeit) Der Trick ist nun folgender. Das Ventil wird nicht sofort geöffnet, sondern jede Sekunde wird geschaut, ob ein Ausgang geschaltet werden muss (Einschalten oder Ausschalten).
Mario.
|
|
|
|
|
Logged
|
|
|
|
|
Germany
Offline
Full Member
Karma: 1
Posts: 214
|
 |
« Reply #29 on: June 18, 2012, 01:21:40 pm » |
Hi Mario, schön von Dir zu hören  Ok, stimmt. Werde mich mal ran machen, habe jetzt wieder ein bischen Zeit. Und Danke für die Tip's/Hinweise/Anstupser ;-)
|
|
|
|
|
Logged
|
*greatz*
CeTax
www dot blinkmann dot de
|
|
|
|
|