Der Flowgrow Aquacomp

oophaga

Member
muss auch mein größten respekt moritz gegenüber aussprechen.. hat da ein richtig geiles projekt aufgezogen und macht das wirklich geil :thumbs:

find den code gut :thumbs:

versteh ich das soweit richtig?:
-code ist standardmäßig einmal vorhanden.
-will man nur über 10V dimmen (bsp alle 4 ausgänge)...
MajorMadness":3dh7ir34 schrieb:
light_channels[0].Active=1; // Kanal wird bei dimmung berücksichtigt
....Active=1,2,3,4
ist jetzt schätz ich mal nicht progrichtig geschrieben, aber vom prinzip?

will man 10V und tlc oder 10V getrennt dimmen -> code kopieren, anpassen?
 

MajorMadness

Active Member
Hört auf ihr deppen! Ihr macht mich verlegen.... :eek:ps:

Gedacht ist das auf die schnelle so:
man wählt den kanal den man einstellen möchte, setzt diesen auf aktive=1 (Programiertechnisch ist ne 1 = True oder wahr oder ja) und stellt zeiten ect ein. Möchte man den kanal nicht automatisiert benutzen dann ist es aktive =0 (0= False oder falsch oder nein).
Es gibt eine methode die automatisch aufgerufen wird, diese regelt die Helligkeit im gesammten AQ:
Code:
void setLight(){
   
  Tlc.clear(); 
  for( int i=0;i <  16; i++){
    if(light_channels[i].Aktive==1){
      int c_PWM = PWM_Licht(float RTC.daystamp, light_channels[i].Sunrise, light_channels[i].Sunset, light_channels[i].Dim_in, light_channels[i].Dim_out, light_channels[i].Min, light_channels[i].Max);
      Tlc.set(i, c_PWM);
    }
  }
  Tlc.update();
  
  if(light_channels[16].Aktive==1){
    int c_PWM = PWM_Licht(float RTC.daystamp, light_channels[i].Sunrise, light_channels[i].Sunset, light_channels[i].Dim_in, light_channels[i].Dim_out, light_channels[i].Min, light_channels[i].Max);
    analogWrite(DIM1, Value);
  }
  if(light_channels[17].Aktive==1){
    int c_PWM = PWM_Licht(float RTC.daystamp, light_channels[i].Sunrise, light_channels[i].Sunset, light_channels[i].Dim_in, light_channels[i].Dim_out, light_channels[i].Min, light_channels[i].Max);
    analogWrite(DIM2, Value);
  }
  if(light_channels[18].Aktive==1){
    int c_PWM = PWM_Licht(float RTC.daystamp, light_channels[i].Sunrise, light_channels[i].Sunset, light_channels[i].Dim_in, light_channels[i].Dim_out, light_channels[i].Min, light_channels[i].Max);
    analogWrite(DIM3, Value);
  }
  if(light_channels[19].Aktive==1){
    int c_PWM = PWM_Licht(float RTC.daystamp, light_channels[i].Sunrise, light_channels[i].Sunset, light_channels[i].Dim_in, light_channels[i].Dim_out, light_channels[i].Min, light_channels[i].Max);
    analogWrite(DIM4, Value);
  }
}
Erklärbar":2mkp4va8 schrieb:
Wir haben hier eine kleine Funktion ohne Rückgabewert, wer vergessen hat was das ist, der muss leider nochmal auf den ersten Seiten lesen. Aber was macht diese Funktion?
Nun zuerst löscht sie Sachen die wir beim Dimmen nicht mehr brauchen. Dafür steht .clear(); Nun können wir alles neu machen. Also schaut die Funktion einmal ob Sie überhaubt was einstellen muss. Das macht sie indem sie schaut ob der Kanal aktive sein soll. Mit 1 oder 0 können wir auf ja/nein prüfen. Wenn Aktive 1 ist, dann wollen wir das der Kanal automatisch geregelt wird. Also schauen wie hell es eigentlich sein muss? Auch das machen wir wieder mit einer Funktion, diesmal aber eine mit Rückgabe Wert:
int PWM_Licht(float time, float Start, float Ende, int Dim_in, int Dim_out, int Min, int Max){
***** Hier rechnen wir dann nen bisschen rum
return pwm;
}
Das was die Funktion zurück gibt ist ein Wert zwischen 0 und 255 oder 4095. So hell muss es jetzt sein. Nun setzen wir den Richtigen Kanal (dieser versteckt sich hinter i ) auf diesen Wert und machen mit dem nächsten weiter. Am Ende müssen wir unserem Chip noch mitteilen das er das jetzt übernehmen soll. Dafür rufen wir das Update auf.
Danach machen wir das alles nochmal, aber für die Arduino PWM Kanäle, auf dehnen wir 0-10V haben. Da wir hier Feste Pins mit Namen haben, müssen wir das leider einzeln aufrufen und dann den Wert auch einzeln schreiben.

Das wars. :D

Wenn Ich mich nicht irgendwo Arg vertippert habe gestern nacht sollte mit der Menüstruktur und den Aufrufen eine eine Einzelkanal dimmung mit unterschiedlichen Dimmzeiten morgens und abends möglich sein.
Es überläd das Menü zwar etwas mehr, aber mehr möglichkeiten zum einstellen ergibt auch mehr Felder zum einstellen...
 

MajorMadness

Active Member
oophaga":h2sc9doz schrieb:
....Active=1,2,3,4
ist jetzt schätz ich mal nicht progrichtig geschrieben, aber vom prinzip?

will man 10V und tlc oder 10V getrennt dimmen -> code kopieren, anpassen?
Nicht wirklich. Ich habs jetzt "von Werk aus" so gelöst das alle einzeln dimmbar sind. Wer also nur den TLC5940 hat oder nur 10V Dimmung der muss das andere löschen.
Es empfiehlt sich dies am Anfang einmalig im Quelltext einzustellen:
Code:
typedef struct {
  boolean Active;
  float Sunrise;  //34200;    // 9:30
  float Sunset;   //77400;    //21:30
  int Min;  // Inverse Schaltung! 4095 = off
  int Max;  // Wir wollen ja nicht übertreiben, daher LED's nicht voll ausfahren
  int Dim_in;
  int Dim_out;
}LIGHT;

LIGHT light_channels[20] = { 
{ 1, get_ts(10,0,0), get_ts(20,0,0),4080, 2000, 30, 45}, 
{ 1, get_ts(10,30,0), get_ts(19,0,0),4080, 2000, 60, 120}, 
{ 0, get_ts(10,0,0), get_ts(20,0,0),4080, 2000, 30, 45}, 
{ 0, get_ts(10,0,0), get_ts(20,0,0),4080, 2000, 30, 45}, 
/*Das ganze 16 mal, dann 4 mal für 10V Dimmung*/
{ 1, get_ts(10,0,0), get_ts(20,0,0),10, 255, 30, 45}, 
};
In den Zeilen unter LIGHT light_channels[20] wird jeder Kanal gesetzt, immer nach dem Format
{Aktive, Sunrise, Sunset, Min, Max, Dim_in, Dim_out},
Alle die zur dimmung da sind haben Active =1 (Dimmen über diesen Kanal "ein"). Danach kann man einzelne Werte übers menü umstellen, Kanäle ein/ausschalten und Zeiten ändern.
 

MajorMadness

Active Member
axeld":xlwmbtkz schrieb:
Es wäre prima wenn man auf den Comp von unterwegs zugreifen könnte (iPad und iPhone, Android) und die Werte angezeigt bekommt. Eventl. könnte man noch eine IP-Kamera in die Benutzeroberfläche einbinden damit man im Urlaub das auslaufende Aquarium beobachten kann ;-)
Ich kopiere mal ne PN hierhin, falls wer ähnliche Fragen hat müsste es so einfacher sein. :bier:

Also: Von unterwechs zugreifen wäre möglich. Dafür gibt es Ethernet schnittstellen für den Arduino, billigste wäre ein auf dem W5100 basiwerendes Modul. Dieses gibt es ab ca 16€. Es ist meistens Baugleich zu dem Arduino Ethernet Shield, nur kleiner. Andere möglichkeit wäre das ENC28J60 Breakout, auch recht günstig und nach dem ersten überfliegen wohl kompatibel mit dem anderen. Dennoch es gibt ein Problem:
Ethernet Boards komunizieren genau wie SD-Cards über die SPI schnittstelle. Diese verwenden wir aber schon für den TLC5940 und es kann immer nur eins Aktive sein... Ich habe im Layout vorgesehen das alle SPI Pins zwar am TLC auskommen, jedoch zusätzlich noch an anderer Stelle verfügbar sind (Teils über Jumper).
Wir/Ich werde mich irgendwann mal hinsetzen und mir ne Möglichkeit einfallen lassen um dieses Problem im Code dauerhaft zu umgehen. Erstmal soll aber nur der TLC5940 ODER nen Ethernet funktionieren. Da das Projekt abe rnicht nach der ersten Bestellung beendet sein soll und andere Versionen geplant sind (Besonders eine die Ohne zusätzliche Hardware auskommt und eine mit Erweiterbaren Steckplätzen für LED Treiber/KSQ) wird es irgendwann nen Programmcode update geben wo es fest eingebaut ist.
Zum jetzigen stand bleibt nur das selber probieren. Hier hab Ich ne Seite gefunden (http://www.circuitsathome.com/mcu/runni ... no-spi-bus) die evt hilft.

Wenn Ethernet erstmal integriert ist und funktioniert, dann ist auch der Anschluss einer Camera sicherlich nen leichtes unterfangen ("Leicht" bitte nicht wörtliuch nehmen :pfeifen: ). Wir werden sehen... :bier:
 

rwerene81

Member
Anstatt eines Programmes für ein "mobile Device", würde ja im ersten Schritt reichen, die Werte auf einer "Internetseite" hoch zu laden. Egal, ob dann lokal zu hause und dan per DNS oder direkt ins Web blasen.

Aber erst einmal sind da ja noch kleine, unscheinbare technische Probleme :)

LG René
 

MajorMadness

Active Member
Genau das ist ja das Problem: Anbinden des Arduinos ans Netzwerk... Ich habe noch keine einfache Methode gefunden um den Arduino aus zu lesen und daten an nen Webserver zu übertragen ausser per ethernet oder WiFi (was viel teurer ist). Wenn ich das ganze mal im Netzwerk habe ist es nen klaks das an Webseiten, Mobilphones ect zu senden... 1-2 Tage und ich hätte auch ne Droid app die die Daten empfängt und Daten sendet zum Speichern ect...
 

rwerene81

Member
Also ,was für Möglichkeiten gibt es denn:

  • lan --> entfällt wegen der SPI Schnittstelle
    wlan --> entfällt wegen der SPI Schnittstelle
    Blutooth
    USB
    Seriell??

Wlanadapter an die USB Buchse hängen?

LG René
 

MajorMadness

Active Member
lan --> entfällt wegen der SPI Schnittstelle
wlan --> entfällt wegen der SPI Schnittstelle
Blutooth --> Jup, nur wie dann weiter? Müsste man mal möglichkeiten suchen um von Bluetooth auf Lan zu kommen...
USB --> jup, nur wo das einstecken? Dabei müssten wir nen pc immer an haben und an diesem Serielle daten auslesen und weiter verarbeiten...
Seriell?? --> ist gleich usb.

@Harrdy,
genau. aber das muss man erstmal umsetzen... Naja, schauen wir das der Code jetzt läuft und dann machen wir uns daran. Viel arbeit dürfte es nicht sein nur ich will erstmal das menü, einstellungen speichern ect haben und dann kann ich mich um spielerrreien kümmern.
 

RobertS

Member
Ich fände es gut, wenn man die Beleuchtung einschalten kann, indem man zweimal klatscht :wink:

Aber im Ernst: Ich käme nur mit WLAN ran und leider sind die Optionen fürs Arduino wirklich sehr teuer. Mit BT käme man direkt aufs Handy, aber dafür muss man dann vorm Becken stehen. Finde ich nicht sonderlich hilfreich...
Gruß
-Robert
 

MajorMadness

Active Member
Ich finds klasse wenn viele ideen reinwerfen und wir dann überlegen. aber im moment:

Was ist mit dem Menü? :D Macht es sinn? Sollen wir das so programmieren? Gibt es noch dinge die man ändern/umstrukturieren sollte oder die sehr gut wären wenn wir sie im menü bedienen können? Müssen wir Relays Zeitlich steuern und wenn ja, wo sollen wir das einstellen und wie? 2-3 Punkte um immer ein relay mit startzeit und endzeit aus zu wählen oder 10 punkte mit eintellungen wie
1. Relay
Aktion (ein/aus)
Zeit
2. Relay
Aktion (ein/aus)
Zeit
3. Relay
Aktion (ein/aus)
Zeit
4. Relay
Aktion (ein/aus)
Zeit
Doch was ist wenn dann nen stromausfall ist? oder jemand programmiert "relay 4, ein, 12Uhr" und nie wieder aus...
 

rwerene81

Member
KAnnst du das dann so implementieren, dass wenn jemand eine Relays "Ein/1/ ja" einstellt, er direkt danach zu der Eingabe kommt wo er "Aus/0/nein" eingeben muss. Wenn keine Endezeit eingegeben, dann Startzeitpunkt + 1h. Wird er dann schon merken, wenn die Butze aus ist :)

LG René
 

Harrdy

Member
Was beim TLC Menü vielleicht sinn machen könnte wäre ein Menüpunkt TLC Kanle 0-16 und anhand dieser Einstellung werden dann die Menüs angezeigt

MajorMadness":165tlsze schrieb:
  1. Licht
    1. Wettersimulation
      1. Wolken Ein/Aus
      2. Mond Ein/Aus
    2. Konfiguration
      1. TLC Kanäle 0-16
      2. 10V Kanäle 0-4
    3. TLC Kanel 0
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    4. TLC Kanel 1
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    5. TLC Kanel 2
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    6. TLC Kanel 3
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    7. usw
    8. 10V Kanel 1
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    9. 10V Kanel 2
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    10. 10V Kanel 3
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert
    11. 10V Kanel 4
      1. An Zeit
      2. Aus Zeit
      3. Eindimmen Länge
      4. Ausdimmen Länge
      5. Min Wert
      6. Max Wert

So würde das Menü bei nicht vollausgebauten Shield nicht ganz so überquellen.
 
Ähnliche Themen
Themenersteller Titel Forum Antworten Datum
Tobias Coring Flowgrow - das gelebte Miteinander in der Community Ankündigungen 0
Ewald Flowgrow Forum Uhr - der Zeit voraus? Kein Thema - wenig Regeln 2
HaManFu HaManFu grüßt den Rest der Welt@Flowgrow Mitgliedervorstellungen 15
Tobias Coring Der Flowgrow Dünger ist da ;) Nährstoffe 127
D Neu in der Aquaristik (Benjamin aus Raum Köln/Bonn) Mitgliedervorstellungen 4
D Was kann der Sera CO2-Dauertest (nicht)? Technik 2
Maj.Monogwam Hilfe bei der Geschlechtsbestimmung, Königssalmler. Fische 2
Heiko Muth (Sumpfheini) Leptochilus pteropus, der Javafarn... Pflanzen Allgemein 0
T Weiß jemand, wer der Hersteller des Harzes ist, das sich "Purigen" nennt? Technik 11
Benjamin87 Der Zustand meiner Aquarium Pflanzen Pflanzen Allgemein 4
Benjamin87 Klares Wasser nach der Einlaufphase Technik 2
Benjamin87 Unerfahren in der Düngung Nährstoffe 1
Benjamin87 Trübung in der Einfahrphase Erste Hilfe 8
T In Zeiten der sog. Klimakrise ... Was ist Eure Sicht auf das "Teufelszeug" CO2? Kein Thema - wenig Regeln 10
S Optimierung der Düngung Nährstoffe 40
E Kalium Mangel (meine Pflanzen sagen ja der Test sagt nein) Nährstoffe 42
T Hilfe bei der Namenssuche Artenbestimmung 1
S Düngen in der Einfahrphase Nährstoffe 315
J Tropica Dünger in der Einfahrphase Nährstoffe 19
B4m8i Aquarium in der Arbeit - Proxima 250 ohne allem Aquarienvorstellungen 12

Ähnliche Themen

Oben