Dosierpumpen mit Schaltsteckdosen - Ein AquaGrow Mod

unsigned long time = long(60000L * dosing.mldosing / dosingMlMin[dosing]); kann nicht funktionieren! Dabei will er ein Opjekt als Zahl auswerten und führt dazu das er den Pointer verwendet. Hier nochmaql die ganzen dateien, so wie sie bei mir komplett kompliliert:
Code:
void resetPumps(){
  if(rtc.daystamp>get_ts(23,59,30)){
    pumpReset=true;
  }
  if(rtc.daystamp<60 && pumpReset==true){
    pumpReset=false;
    for( int i=0;i < sizeof(dosingState)/sizeof(dosingState[0]); i++){
        dosingState[i]=false;
    }
  }
}
void setDosing(){
  resetPumps();
    for( int i=0;i < sizeof(dosing) / sizeof(dosing[0]); i++){
      if(dosing[i].active!=0){
        if(rtc.daystamp>=dosing[i].time && rtc.daystamp<=dosing[i].time+10 && digitalRead(dosingPins[dosing[i].pinAddr])==LOW && dosingState[i]==false){
	  unsigned long time = long(60000L * dosing[i].mldosing / dosingMlMin[dosing[i].pinAddr]);
          t.pulseImmediate(dosingPins[dosing[i].pinAddr],time, HIGH);
          dosingState[i]=true;
          printDose(dosing[i].pinAddr,dosing[i].mldosing);
        }
      }
    }
}
Code:
#define PUMPCOUNTS 7      // Number Pumps
#define RELAYCHANNELS 4
#define RELAYTIMES 6
#define KEYPADI2C 0x20
#define LCD_ADR 0x27

  // PIN MAPPING NICHT ÄNDERN!!!
  #define PIN_TEMP A1   // Temperatur
  #define RELAY1 2
  #define RELAY2 3
  #define RELAY3 4
  #define RELAY4 5
  #define DOSE7 6      // Dosierpumpe 
  #define DOSE6 7       // Dosierpumpe 
  #define DOSE5 8      // Dosierpumpe 
  #define DOSE4 9     // Dosierpumpe 
  #define DOSE3 10      // Dosierpumpe 
  #define DOSE2 11     // Dosierpumpe 
  #define DOSE1 12     // Dosierpumpe 

// Größe Vorratsflaschen Dünger in ml
const int dose_val = 1000;

// Neu zuordnung der Pins für Dosierung
const byte dosingPins[PUMPCOUNTS]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,DOSE7};
// Milliliter per minute in Reihenfolge wie Pumpen oben Achtung Maximum 255ml/Minute
const byte dosingMlMin[PUMPCOUNTS]={60,60,60,60,60,60,60};

// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1") Milliliter pro Dosierung
const PUMP dosing[] = {  
{get_ts(10,0,0),1,"D1",0,5},
{get_ts(11,0,0),1,"D2",1,6},
{get_ts(11,25,0),1,"D3",2,3},
{get_ts(11,26,0),1,"D4",3,3},
{get_ts(11,23,0),1,"D3",4,3},
{get_ts(11,28,0),1,"D1",5,5},
{get_ts(11,28,0),1,"D1",6,5},
};

// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[sizeof dosing / sizeof dosing[0]];

const byte relayPIN[]= {RELAY1,RELAY2,RELAY3,RELAY4};
RELAY relays[RELAYCHANNELS][RELAYTIMES] = { 
  {{get_ts(0,0,0),1},{get_ts(17,10,0),0},{get_ts(17,15,0),1},{get_ts(17,20,0),0},{get_ts(17,25,0),1},{get_ts(17,30,0),0}},
  {{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
  {{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
  {{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}}
};

Ich lade es aber auch noch in github hoch als Beispiel der IDE.
 
Hi Moritz,

mein Bau schreitet voran ;-)

Hab mal ne neue Frage.

könntest du dem Arduino auch beibrigen das z.B. Pumpe 1 nur alle 2 Tage oder 3 Tage gedüngt soll?

Pumpe 2 nur Freitags, ............

Ich hoffe ich tu dich nicht überstrapatzieren.

Danke Dir.
 
Kann ich der sicher beibringen. Ich muss dafür aber den code und libarie umschreiben da ich Tage quasi komplett ignoriere...
Habe ich grade nicht die Zeit für außer zwischendurch. Will also nix versprechen...
 
Das ist ein Sonderwunsch und muss nicht unbedingt sein!

Mir fallen gerade eben nur Sachen ein die eben zum Komfort gehören und du vielleicht irgendwann mal mit übernehmen kannst. Dann wird die Sache nämlich für andere auch immer interessanter.
 
Hallo Zusammen,

man soll es nicht glauben, aber ich hab es endlich auch geschafft das Teil zum laufen zu bekommen.

Natürlich dank Eurer und natürlich Moritz Unterstützung.

Hier mal ein Bild:


Ja, ich habe 6 Pumpen in das kleine Geäuse rein bekommen (schön kuschelig da drin) :gdance:

Ich hatte echt große Probleme mit den Kabelverbindungen über D-Sub, Wackelkontakte, .... aber habe es letzten Endes doch hinbekommen ohne das ständig irgend welche Kabel abfliegen :bier:

Jetzt fehlen nur noch die Düngerflaschen (müssen erst neu gemischt werden) :grow:

Eines habe heute Morgen nach der ersten Nacht jedoch feststellen müssen:

Die Uhrzeit hat sich aufgehängt und es war nichts mehr schaltbar. Nur nach einem kurzen Reset ging es wieder.

Hat das Auswirkungen auf die Schaltzeiten, oder hängt sich da nur das Display (Oled) auf?

Euch einen schönen Tag
 

Anhänge

  • IMG_0696.JPG
    IMG_0696.JPG
    525,2 KB · Aufrufe: 542
hugo1892":2r0nkeww schrieb:
Hat das Auswirkungen auf die Schaltzeiten, oder hängt sich da nur das Display (Oled) auf?
Hi
Sehr cool gemacht, Hast noch nen besseres Bild vom dem" Schaltkasten" im Schrank.
Nein es hat keine auswirkung auf die zeiten denn die stehen ja im Sketch fest, und dann lädst es ja erst auf den Nano, also kein problem deswegen.
Aufhängen ! weis net, war es nur einmal oder passiert es jeden Tag?

Gruss Rene
 
Hi Zusammen,

ja, die Freude währt nicht lange.

Also wie gesagt, heute morgen schau ich aufs Display, die Uhrzeit steht. (Aus und wieder an: geht)

Heute Mittag um 14 Uhr ruft mich meine Frau an: "Da rattert ständig was". (Eine Pumpe lief im Dauermodus)

Heim gekommen, Aus wieder an und die Pumpe mal abgeklemmt: Läuft erst mal wieder.

Gerade eben schau ich wieder rein: Uhr steht wieder.

Was mir auch auffällt, wenn alles unter Strom ist und ich den USB Stecker reinschieb und dann in den PC. Schalten immer wieder die Relais, bzw. alles geht aus und wieder an.

Ich hab gestern noch ein zusätzliches 5Volt Netzteil ran geklemmt um die Relais überhaupt zum schalten zu bekommen. Wie sollte ich das den anschließen.

Als erstes hab ich es zu den eh schon am VCC und GND gesteckten Kabel mit drauf gehängt (An den Relais). War das richtig?

Erst dachte ich, ich muss das Netzteil direkt an die Relais mit + und - anschließen ohne VCC und GND von der Platine. Da ging aber gar nix.

Oder ist das Netzteil zu schwach mit 5V und 500 mAh. Oder hat mein Nano einen Schuss weg?

Danke euch

P.S. ein Bild von allem gibts erst wenns funktioniert :tnx:
 
hugo1892":vzoxv6ah schrieb:
Was mir auch auffällt, wenn alles unter Strom ist und ich den USB Stecker reinschieb und dann in den PC. Schalten immer wieder die Relais, bzw. alles geht aus und wieder an.
Das ist normal, ist bei mir auch so. Denk das liegt anm Pc wegen der erkennung.
Würd mal sagen ein 12V 1A wäre besser. Wieso hast du Relays dran, hast du 220V pumpen?
du kannst doch die pumpen direkt am Controller anschliessen.
Wegen dem stehen bleiben bzw aufhängen, müsste dir Moritz drauf antworten. Iss ja sein Code. :glaskugel:
Hast du denn sonnt noch was am code geändert ausser deine Schaltzeiten einzutragen?

Gruss
 
Hi René,

die pumpen laufen auch ganz normal über den Controller.

Die Relais sind ja für die 230Volt Steckdosen.

Ich habe ein 12 Volt Netzteil der am Controller hängt. Das Problem ist das dieses Netzteil nicht ausreicht um die Relais noch mit zu schalten. Die Ausgangsleistung vom Nano reicht scheinbar nicht aus.

Moritz hat empfohlen noch ein weiters Netzteil anzuschließen. Jetzt ist nur die Frage ob ich das richtig angeschlossen habe. Ich hab das einfach dazwischen gepackt.

D. h. vom Controller kommt VCC und GND zur Relais Platine. dazwischen hab ich noch das 5Volt Netzteil gehängt.
Ist das richtig?

Oder GND vom Controller, dazwischen GND vom 5V Netzteil und Plus nur direkt vom Netzteil an die Relais Platine.

So hab ich es im Moment laufen. Mal schauen ob es klappt.
 
kann ich dir nicht sagen da ich keine Relays/Steckdosen drann hat.
Hab aber irgenwo mal von Moritz gelesen das 12V 1A schon besser ware für Nano und Pumpen.
Aber schau noch mal ind den Beitrag von Moritz vom 21 Sep 2014, bei ist es seite 8,da steht einigen dazu.
Hoffe es hilft weiter
 
Re: AW: Dosierpumpen mit Schaltsteckdosen - Ein AquaGrow Mod

Moin
Poste mal deine config

getapatalkt
 
Guten Morgen,

das ist die Original Datei von gitHub die ich gestern runter geladen habe. Nur meine Reilais Zeiten habe ich angepasst.

Code:
#define PUMPCOUNTS 7      // Number Pumps
#define RELAYCHANNELS 4
#define RELAYTIMES 6
#define KEYPADI2C 0x20
#define LCD_ADR 0x27


  // PIN MAPPING NICHT ÄNDERN!!!
  #define PIN_TEMP A1   // Temperatur
  #define RELAY1 2
  #define RELAY2 3
  #define RELAY3 4
  #define RELAY4 5
  #define DOSE7 6      // Dosierpumpe 
  #define DOSE6 7       // Dosierpumpe 
  #define DOSE5 8      // Dosierpumpe 
  #define DOSE4 9     // Dosierpumpe 
  #define DOSE3 10      // Dosierpumpe 
  #define DOSE2 11     // Dosierpumpe 
  #define DOSE1 12     // Dosierpumpe 

// Größe Vorratsflaschen Dünger in ml
const int dose_val = 1000;

// Neu zuordnung der Pins für Dosierung
const byte dosingPins[PUMPCOUNTS]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,DOSE7};
// Milliliter per minute in Reihenfolge wie Pumpen oben Achtung Maximum 255ml/Minute
const byte dosingMlMin[PUMPCOUNTS]={60,60,60,60,60,60,60};

// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1") Milliliter pro Dosierung
const PUMP dosing[] = {  
{get_ts(10,0,0),1,"D1",0,5},
{get_ts(11,0,0),1,"D2",1,6},
{get_ts(11,25,0),1,"D3",2,3},
{get_ts(11,26,0),1,"D4",3,3},
{get_ts(11,23,0),1,"D3",4,3},
{get_ts(11,28,0),1,"D1",5,5},
{get_ts(11,28,0),1,"D1",6,5},
};

// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[sizeof dosing / sizeof dosing[0]];

const byte relayPIN[]= {RELAY1,RELAY2,RELAY3,RELAY4};
RELAY relays[RELAYCHANNELS][RELAYTIMES] = { 
  {{get_ts(0,0,0),1},{get_ts(10,10,0),1},{get_ts(13,30,0),1},{get_ts(14,30,0),0},{get_ts(20,0,0),0},{get_ts(20,30,0),1}},
  {{get_ts(0,0,0),1},{get_ts(10,0,0),1},{get_ts(13,30,0),0},{get_ts(14,30,0),0},{get_ts(20,0,0),1},{get_ts(20,30,0),1}},
  {{get_ts(0,0,0),0},{get_ts(10,0,0),0},{get_ts(13,30,0),0},{get_ts(14,30,0),0},{get_ts(20,0,0),0},{get_ts(20,30,0),0}},
  {{get_ts(0,0,0),1},{get_ts(10,0,0),1},{get_ts(13,30,0),1},{get_ts(14,30,0),1},{get_ts(20,0,0),1},{get_ts(20,30,0),1}}
};
 
Hi, sehr komisch das der Arduino sich weg hängt wenn er eigentlich nichts machen sollte. Ich frage mich ob es am Code liegt oder da ein anderes Problem gibt. Bisher lief es bei allen Platinen immer Störungsfrei (soweit mir bekannt ist). Bei dir scheint aber definitiv was falsch zu laufen. Meine bitte daher erstmal:
Steck die Relais und Pumpen ab und lass den Controller nur durchlaufen über 24 Stunden (Testen ob Platine Störungsfrei läuft). Dann teste nur mit Dosierpumpen, dann nur Relais, dann wieder alles. Wann und womit er hängt ist erstmal wichtig für's eingrenzen des Problems...
 
Oben