Aquariensteuerung

Lemmy

Neues Mitglied
18. Jan. 2010
14
0
0
Berlin
Sprachen
Hallo,
Ich möchte euch hier mein Projekt vorstellen, es soll eine Aquariensteuerung für mein Seewasseraquarium werden. Ideen habe ich viele, was sich davon später umsetzen lässt oder auch nicht werde ich hoffentlich mit eurer Hilfe erfahren… ;)

Hier mal ein paar Punkte, die für mich interessant wären:

Temperaturregelung
Lichtsteuerung
Nachfüllen
Wasserwechsel
Anzeige von Ph-Wert und des Salzgehaltes

Vielleicht lässt sich das Ganze ja später auf einem Grafikdisplay darstellen, oder vielleicht sogar über einen Touchscreen steuern, aber das ist erst mal Zukunftsmusik.
Als erstes möchte ich mir die Temperatur anzeigen lassen, habe auch schon einen DS18S20 hier liegen, einen Atmega8 und ein LC-Display. Wenn ich die drei Komponenten vernünftig zum Laufen bekomme, bin ich erst mal zufrieden… ;)
Geschrieben wird das Ganze in Bascom, und ich denke ich werde am Anfang etwas länger brauchen, da es noch nicht so wirklich „Klick“ gemacht hat, aber ich hoffe, das ich euch dann mit meinem fragen löchern kann…
 
Hallo Lemmy!

Sorry, dass mir momentan etwas die Zeit fehlt....

Trotzdem finde ich persönlich dein Projekt sehr interessant! ;)

Deine angedachten Eigenschaften von:
Temperaturregelung
Lichtsteuerung
Nachfüllen
Wasserwechsel
sind relativ einfach zu realisieren.


Beim PH-Wert und dem Salzgehalt wird es dann schon schwieriger, weil du dabei auf spezielle Sonden zurück greifen musst.

Hast du denn schon deine Gedanken in erste Zeichnungen oder Programmcodezeilen gesteckt?
Bin ja schon ganz gespannt. :)

Ich muss mal schauen, wo ich meine Ideen dazu auf der Festplatte gelassen habe....
Einen Schaltplan und auch einen fertigen Programmcode müsste irgendwo in den Untiefen meines PC schlummern.
Vielleicht bingt dich das ja auch auf Ideen...

Schöne Grüße,
Cassio
 
Hallo Cassio!

Ja, so erste Gedanken hab ich mir gemacht, mein Hauptproblem liegt aber zur Zeit darin, dass ich unter Windows 7 die parallele Schnittstelle nicht aktiviert bekomme, jetzt hab ich mir für den Laptop extra das Windows 7 geholt, und er läuft auch bedeutend besser, aber ich kann jetzt den Atmega nicht programmieren, wird ich wohl XP wieder drauf machen…
Im Grunde hast du recht, da sind die Steuerungen bestimmt nicht besonders schwer, aber bei der Temperatur schwebt mir so etwas wie ein pid-regler vor, der einen Thyristor steuert, der die Leistung eines Heizstabes stufenlos regelt, und dann ab einer bestimmten Temperatur auch eine Kühlung stufenlos einsetzt. Da ich rund 1000 Liter Seewasser hab und mich mit der Seepferdzucht beschäftigen möchte, will ich es den Tierchen doch so angenehm wie möglich machen. Beim Licht verhält es sich ähnlich, da ich T5 benutze, und dimmbare Vorschaltgeräte habe, will ich es so realisieren, das jede röhre einzeln angesteuert wird, um mittags die stärkste Ausleuchtung zu haben, und davor ein gleichmäßiges auf dimmen… das Nachfüllwasser soll litergenau angezeigt werden, wie bei Markus seiner Zisterne, hab auch schon eine Ultraschallsensor da…
Ich hab in meinem Kopf schon viele Ideen und Gedanken, aber erst mal muss es noch klick machen, und dann auch die liebe Zeit, im 24h Schichtdienst ist das nicht immer so einfach, deshalb will ich erst mal mit einer kleinen Temperaturregelung anfangen, ich wird mir demnächst mal einige Codes aus dem Netz ziehen, und sehen ob ich da so einigermaßen durchblicke… ;)
 
Hallo Lemmy!

Habe zwar gerade nicht viel Zeit, aber....

Ein PID-Regler für die Heizung? :rolleyes:
Ultraschall im Wasser bei lebenden Tieren? :eek:

Meinst du das wirklich ernst? :hmmmm:

will ich es den Tierchen doch so angenehm wie möglich machen.

Das wäre mit Sicherheit erstrebenswert! :)


Können ja die Tage darüber noch mal ein wenig "fachsimpeln". ;)

Gruß,
Cassio :ciao:
 
Hallo Cassio!

Hm, ok, das mit dem PID-Regler war erst mal so in den Raum geworfen, da wollte ich eigentlich nochmal meine „alten Lehrbucher“ durchblättern, und genau nachsehen wie sich das am besten ermöglichen lässt, ich hätte gern die Möglichkeit, dass sich die Temperatur recht genau regeln lässt, und zwar sollte die Soll-Temperatur sich zwischen 25 und 27 Grad Celsius bewegen, und ich dachte es ist vielleicht möglich den 300 Watt Stabheizer auch nur mal mit 10% zu betreiben, also über eine Steuerung, die den Heizer je nach Bedarf regelt, und nicht nur an oder aus…

Mit dem Ultraschall, das ist nur für mein Nachfüllbecken im Unterschrank, und hat so keinen direkten Kontakt mit den Fischen, das ist ein 50x50x50 Becken, und über den Ultraschall wollte ich die Füll höhe messen, und mir damit die Litermenge anzeigen lassen, die mir noch zur Verfügung steht, halt so ähnlich wie Markus mit seiner Zisterne…

Der Pegel im Filterbecken soll mit einem normalen Pegelschalter gemessen werden, oder um ein verklemmen des Pegelschalters zu verhindern mit einem Optischen Sensor, wie bei meinem Aquariencomputer, den ich mal hatte, aber da muss ich nochmal nachsehen, wie dort das Problem gelöst wurde, ich wird mich gleich mal an eine Zeichnung setzen, damit du ungefähr eine Vorstellung von meiner Aquarienanlage hier bekommst… ;)

Gruß Lemmy
 
Hallo Lemmy!

Na, das klingt doch schon ganz anders! ;)

Einige deiner Ideen bzw. Überlegungen kann ich schon verstehen.
Allerdings musst du dich manchmal fragen, ob du nicht mit Kanonen auf Spatzen schießen möchtest. ;)

Was die Heizung betrifft...
Die Idee mit dem geregelten Heizstab klingt ja ganz plausibel. Nur musst du bedenken, dass du letztlich gut eine Tonne Massenspeicher vor dir hast.
Auch wenn dein Heizstab 300W hat, wird es mit der Gleichmäßigkeit schwer werden. Da nützt es dir auch nichts, dass du den Heizstab regeln kannst.
Programm- und Hardwaretechnisch wäre das relativ simpel zu lösen.
Dein Heizstad ist ein 100%iger Wirkverbraucher und den kannst du mit einer simplen Dimmerstregelung ansteuern.
Wie aber oben schon erwähnt.... 1000 Liter Wasser sind uuuuuunheimlich träge. Eine "sprunghafte" Änderung der Temperatur wirst du dabei wohl nicht erleben. ;)

Was die Füllmenge des Nachfüllbeckens angeht....
Dafür kannst du natürlich die Ulraschallvariante verwenden. Es gibt aber auch eine Möglichkeit, den Füllstand kapazitiv zu erfassen. Gleiches gilt übrigens für die Wasserkontrolle des Aquariums.
Damit kannst du einen zu schnell sinkenden Wasserstand erfassen und ggf. Signalisieren.
Du hattest weiter oben aber etwas von litergenauer Erfassung geschrieben. Ich weiß nun nicht, wie wichtig das für dich ist...... Ob sich nun 124 Liter oder 123 Liter im Nachfüllbecken befinden. :hmmmm:

Interessant sind die Ideen dazu aber trotzdem! Und außerdem möchtest du doch bestimmt etwas "außergewöhnliches" konstruieren..... sonst könnte man ja auch einen fertigen Aquariumcontroller verwenden.
Obendrein lernt man so auch noch etwas mehr und es macht einfach mehr Spaß. ;)

Na, dann zeichne schon mal eine erste Übersicht und dann geht es weiter. :)

Schöne Grüße,
Cassio
 
Hallo Cassio

Du hast recht, sprunghaft wird sich die Temperatur nicht ändern, dachte auch nur, dass das nachregeln dann nicht jedes Mal mit vollen 300 Watt passiert, sondern vielleicht mit weniger Leistung, da ja vielleicht auch 100 Watt reichen würden. Was ich damit auch vermeiden wollte ist, dass die Temperatur in einem regelmäßigen Rhythmus sich ändert, also es wird geheizt bis 25 Grad, dann geht die Heizung aus, und die Temperatur fällt über Zeitraum x ab, bei einer Temperatur von z.B. 24,5 Grad geht die Heizung wieder an, und die Temperatur steigt wieder auf 25 Grad, bis die Heizung wieder abschaltet, aber wo ich das hier grad so schreibe, ich glaube das ist eigentlich quatsch, ob sich die Temperatur nun um ein halbes oder ein grad über einen Zeitraum von vielen stunden ändert oder nicht, wird die Tiere bestimmt nicht stören, wie du schon schreibst, die ca. 900l brauchen ihre Zeit, um die Temperatur zu ändern, also wird das immer ein sehr langsamer Vorgang sein…

Mit der Litergenauen anzeige ging es mir darum, zu sehen wie weit ich mit meinem Vorrat an Osmosewasser noch komme. Da sich ja durch die genaue anzeige dann der tagesverbrauch anzeigen lässt, und ich meinen Vorrat kenne, muss ich mir keinen Stress machen, ob ich jetzt abends noch schnell ein paar Liter Osmosewasser nachfüllen muss oder nicht. Ich kann dann sehen, das ich einen Verbrauch von zum Beispiel 6 Litern am Tag habe, hab noch 33 Liter im Nachfüllbecken, dann weiß ich, das ich noch 5 Tage Zeit hab, kann also beruhigt in den 24h dienst gehen, und erst nach dem dienst die Osmoseanlage anschließen. Das ist jetzt nur ein Beispiel…. ;)
Eine ganz einfach Zeichnung vom Wasserkreislauf zwischen den Becken hab ich schon, muss mal sehen, wie ich die Datei hier eingestellt bekomme… ;)

Gruß Lemmy
 
Hi Lemmy!

Na, dass Anhängen deiner Zeichnung hat doch geklappt. ;)

Hui... dass wird ja eine richtige Aufgabe!
Fünf Becken und alle sollen vollautomatisch funktionieren. :)

Wenn ich das richtig gesehen habe, hast du den Heizstab nicht in den Becken, sondern im Vorbecken.
Das ist eigentlich eine gute Lösung! Zumindest besser, als direkt im Aquarium zu heizen.
Allerdings hast du zwei unterschiedlich große Becken und musst daher auch bestimmt zwei verschiedene Temperaturschwankungen berücksichtigen.
Ich bin mir daher nicht sicher, ob das mit dem Heizstab im Vorbecken so eine gute Lösung ist? :hmmmm:

Auf alle Fälle solltest du nun versuchen alle Sensoren und Aktoren in ein Blockschaltbild zu bringen.
Also diverse Temperaturfühler, Heizstab, Wasserstandsfühler, ggf. Magnetventile und Pumpen, Tagesbeleuchtung (mit Dimmfunktion), Nachtlicht, Taster, Dispaly und so weiter....

Danach geht es Schritt für Schritt weiter. ;)

Möchtest du denn eine Steuerung für Alles haben, oder möchtest du lieber getrennte Steuerungen aufbauen?
Beides hat seine Vor- und Nachteile.


Ich habe inzwischen mal meine Schaltpläne zum Thema Aquariumsteuerung wieder gefunden. :)

Hier mal die erste (Schnell-)Version, für den ich auch das Programm schon einmal fertig geschrieben hatte:
Aquarium-M8-1wire.gif


Danach habe ich die zweite Version geplant....
aber bis heute mit dem Programm nicht begonnen ;)
Aquarium-M16-neu.gif


Wenn ich ehrlich bin, würde ich jetzt lieber gleich die Version 3.0 planen und auch programmieren. Es fallen einem doch immer wieder zusätzliche Nettigkeiten ein, die man gern gleich mit realisieren möchte. ;)

Kannst ja mal einen Bick auf die Pläne werfen. Vielleicht bringen sie dich auf die eine oder andere Idee. Allerings habe ich ein Süßwasseraquarium... darum ist der technische Aufwand bei mir um einiges geringer. ;)

Grüße,
Cassio


Vielleicht bringen dich
 
Hallo Lemmy,

ich habe hier auch einen Pott Nudelwasser mit 1000 Litern stehen. Mein Steuerungskonzept sieht so aus:

Hauptrechner (Mega2561 mit Grafikdisplay) der separate Komponenten steuert, dort Messwerte abholt und diese grafisch darstellt. Der ist derzeit in Vorbereitung.

Einzelkomponenten mit Mega8:
  • Steuerung für Licht (10 x 54 Watt T5, 4 davon dimmbar) in der Abdeckung eingebaut
  • Steuerung für 2 x Tunze Stream (0 - 8 Volt)
  • SMS-Modul (mit altem Siemens-Handy) für das Absetzen von Warnmeldungen, Goldcap-gepuffert für Stromausfall-Warnung
  • geplant: Webanbindung per Pollin Net-IO

Die Kommunikation läuft über I2C, die Komponenten sind per Netzwerkkabel verbunden, über das auch die Stromversorgung geschleift wird. Als Temperatursensoren kommen vergossene DS1631 zum Einsatz. Momentan laufen die Einzelkomponenten noch separat, aber die Vernetzung ist komplett vorbereitet.

Zusätzliche Steuerungen (komplett getrennt) übernehmen die Versorgung mit Ballinglösungen sowie das Nachfüllen und den Wasserwechsel.

Nachfüllen läuft über zwei Pufferbehälter, welche von der direkt angeschlossenen Osmoseanlage gefüllt werden. Von dort per Pumpe ins Technikbecken. Das Wechselwasser wird direkt in die Abwasserleitung gepumpt. Die Nachfüllanlage verfügt natürlich über diverse Sicherheitsmechanismen (Maximumschalter, zeitgesteuert u. s. w.).
 
Hallo Cassio, hallo Stefan!

Erst mal zu Cassio, ja, mir fallen auch immer neue Ideen ein, oder Änderungen, aber man kann ja auch später im bestehenden System noch einiges ändern, denke ich, sonst ist ja der Spaß auch irgendwann weg… ;)
Hab mir deine Schaltungen mal angesehen, du bist ja da schon viel weiter wie ich, ich wollte ja erst mal nur die Temperatursteuerung hinbekommen, wie gesagt, bei mir hat es noch nicht klick gemacht, ich muss mir jetzt die Tage erst mal einen mkII bestellen, hab keine Lust den Laptop wieder auf XP oder Vista zurückzurüsten.

Ich werde mich heute mal hinsetzen und mir mal genau überlegen, was mir wichtig ist, und was ich genau steuern möchte, hoffe ich komme dazu zwischen den Alarmen, bin heut im Dienst… ;)

Hallo Stefan!
Hört sich schon gut an, was Du da hast, so stelle ich mir das auch vor, da hab ich auch schon wieder ein paar Ideen, das mit dem Grafikdisplay finde ich sehr gut, genau das stelle ich mir auch so vor…
Werd mich jetzt erst mal daran setzen, was ich alles gerne haben möchte…

Gruß Lemmy
 
So, hab mir mal erste Gedanken über die Steuerung gemacht, wie sie am Ende laufen soll, ich denke das Ganze in Module aufzuteilen ist bestimmt eine gute Lösung, da es dann bestimmt einfacher ist, Nachbesserungen oder Änderungen in den Modulen vorzunehmen, wenn ich mich irren sollte, dann klärt mich bitte auf… ;)

Cassio, zu deinem Einwand mit dem Heiz stab im Filterbecken habe ich mir mal Gedanken gemacht, da ich aber ein recht hohen Wasserdurchfluß durch meine Becken habe, denke ich, das man das vernachlässigen kann, am Ende werde ich einen Durchfluss von rund 6.000l/h bis 7.000l/h. Bei meinem Filter sind glaub ich 6.000 Liter pro Stunde gefordert, das kleine Becken werde ich auf 1-2.000 l/h bringen, aber das muss ich in der Praxis herausfinden, wie es den Tierchen gefällt, da sollen ja dann die Pferde rein, und bei denen soll die Strömung nicht ganz so Doll sein… ;)

Als erste die Temperaturregelung:

Temperaturmessung am Eingang des Filterbeckens mit einem DS18S20, der Heiz stab soll am Ausgang des Filterbeckens sein, damit das Wasser einmal durch den Kreislauf muss, bevor die Temperatur von Sensor erfasst wird.
Der Heiz stab soll eine einfache AN/AUS Schaltung bekommen, wo ich über das Display die beiden werte frei einstellen kann, also z.B. an bei 24,5 Grad, aus bei 25,1 Grad. Für den Heiz stab möchte ich dann noch eine Betriebstundenanzeige haben die ich reseten kann.

Dann soll es noch eine Kühlung geben bei der ich ebenfalls die Werte manuell einstellen kann, diese möchte ich aber stufenlos geregelt haben. Die Kühlung besteht aus Lüftern, und die Regelung der Drehzahl wäre mir recht wichtig, damit diese nicht jedes Mal mit voller Drehzahl, also auch mit voller Lautstärke arbeiten, sonst würde mich meine bessere Hälfte bestimmt bald Umbringen… ;)

Eine Anzeige der Temperatur, der Betriebszustände und der Betriebsstunden über ein Display.
Die Einstellung der Temperaturwerte vielleicht über vier einzelne Potis?

So, nun bin ich auf eure Antworten, Änderungs- und Verbesserungsvorschläge gespannt…

Gruß Lemmy
 
Hallo Lemmy!

Na, wenigstens hast du die Wunschliste schon mal im Kopf. ;)

Die Sache mit dem Heizstab und der Durchflussmenge als Temperaturregelung habe ich jetzt nicht ganz verstanden. :hmmmm:
Ist aber wohl auch egal...... Rein theoretisch kann keines der beiden Becken kälter oder wärmer sein, wenn du beide permanent z.B. mit 24Grad warmen Wasser speist.
Dies wäre aber nur theoretisch so, denn allein schon die unterschiedliche Beleuchtung und Belüftung wird wahrscheinlich für Differenzen sorgen.

Was die Regelung deines Heizstabes und deiner Lüfter betrifft mache ich mir keine Gedanken. Dein Heizstab (230V ?) kannst du mit einer Dimmersteuerung regeln. Deine Lüfter (12V ?) kannst du dann mit einem PWM-Ausgang regeln. Sollten sie aber auch 230V verwenden, kannst du wieder auf die Dimmersteuerung zurück greifen.
Ich habe hier mal ein Thema zu selbstgebauten IR-Dimmern eingestellt... ( Kleiner 230V IR-Dimmer für die Norkadose )... das Lastteil verträgt auch induktive Lasten. Damit könntest du dann ggf. auch deine Lüfter regeln.
Problematisch wäre ggf. nur der geringe Stromverbrauch der Lüfter. Ist der permanente Strom zu klein, bekommen die Triacs Probleme. Das ist z.B. auch der Grund, warum bei einem handelsüblichen Dimmer immer ein MIN. und MAX. Wert angegeben wird. Ich hatte meine Einheiten aber schon mal mit 7W als MIN. Wert getestet und es gab keine Probleme.


Wie meinst du das denn mit der "modularen" Aufbauweise? Welche Einheiten möchtest du denn alles separat aufbauen?
Also steuerungstechnisch würde ich einen Controller für Alles bevorzugen. Nur Versorungspannungen, Lastteile, Display mitTastern und Ähnliches würde ich separieren. Ich denke aber mal, dass du es so nicht gemeint hast. ;)


OK.... dann beginnt bei dir nun so langsam wohl die Vorarbeit.
Übersichtsplan mit allen technischen Komponenten zeichnen. Einen (oder mehrere) Controller auswählen. Anschließend die "beste" Pinbelegung zusammenstellen..... und und und.

Bin schon gespannt, wie es weiter geht. :)

Schöne Grüße,
Cassio
 
Hallo Lemmy,

für den Heizstab reicht eine Ein-Aus-Regelung völlig aus. Eine Dimmung macht bei dem Wasservolumen wirklich keinen Sinn. Auch ein Betriebsstundenzähler beim Heizstab ist meines Erachtens völlig sinnfrei. Oder muss man den nach 1000 Stunden austauschen? Bei den Leuchtmitteln wiederum würde es Sinn machen.
 
Hallo Cassio!

Mit Modulen meinte ich, das ich einen Atmega für die Lichtsteuerung nehme, einen für die Temperaturregelung, einen für die Wassersteuerung und diese dann über einen Zentralen mit Display und Eingabemöglichkeiten steuern kann, wie ich bei Deinen beiden Plänen gesehen hab, nutzt du einen, und steuerst über einen alles, ich weiß nicht, wann ich an die Grenzen stoße, daher meine Überlegung, und die Übersichtlichkeit der Programme, ich will was an der Lichtsteuerung ändern, dann schreibe ich nur in diesem Programm etwas um, ich weiß nicht, denke das ist Übersichtlicher, oder wie siehst Du das???
Du hattest geschrieben, dass du die eine Steuerung schon programmiert hattest, in Bascom??? Wenn ja, würdest du mir den Code mal zukommen lassen?

Gruß Lemmy
 
Hallo Stefan,

Mir ging es darum mal zu wissen, wielange die Heizung läuft, bei Pumpen und Licht lässt sich leicht ausrechnen wie hoch die Kosten sind, aber bei der Heizung, ist aus reiner Neugierde... ;)
 
Hallo,

bei einem Betriebsstundenzähler musst du aber dafür sorgen, dass die Betriebstunden auch gespeichert werden für den Fall eines Stromausfalls. Das kannst du mit fortlaufenem Schreiben ins Eeprom machen, was aber nicht wirklich zu empfehlen ist. Ansonsten musst du die Spannungsversorgung puffern, eine Stromausfall detektieren und rechtzeitig ins Eeprom schreiben.

Wenn du die tatsächlichen Stromkosten wissen willst, dann häng an die Stromversorgung doch einfach ein Energiekosten-Messgerät, dann kannst du dir die Klimmzüge mit dem Eeprom sparen.
 
Hmmm.... Ok.... Und wie sieht das dann mit den Betriebsstunden von der Beleuchtung aus, die Anzeige ist ja schon recht wichtig für mich, da ich ja nicht alle Leuchtmittel jeden Tag gleich lange in Betrieb hab???
 
.....wie ich bei Deinen beiden Plänen gesehen hab, nutzt du einen, und steuerst über einen alles, ich weiß nicht, wann ich an die Grenzen stoße,....

Hallo Lemmy !

Ich bin nicht der Meinung, dass du schnell an die Grenzen stoßen wirst. ;)

Wenn du Zweifel haben solltest, dann nimm gleich einen ATMega128 oder evtl. sogar einen ATMega256.... allerdings schießen wir nun schon wieder mit Kanonen auf Spatzen. ;)

Wie du in meinem ersten Plan sehen kannst, habe ich da sogar nur einen Mega8 (!) benutzt. Das Programm kann ich dir hier gerne mal einstellen.

Ach so..... eine Bitte !
Nimm weder meine Pläne, noch meinen Programmcode als fertige Endlösung!
Es sind lediglich Beispiele, wie du etwas erstellen könntest!!!

Wenn ich selbst etwas fertig aufgebaut und getestet habe, dann schreibe ich das hier in den Beiträgen auch!
Alles Andere sind immer nur "Möglichkeiten" oder Beispiele!


Was deine einzelnen "Betriebsmodule" betrifft...
Ich weiß nicht, was dir das bringen soll. Du musst zig einzelne Programme schreiben.... meistens werden die ganzen Controller sich auch noch "langweilen".... und du musst eine permanente und sichere Kommunikation aller Einheiten gewährleisten.
Ich bin auch der Meinung, wenn man nur eine Controllereinheit verwendet, kann man diese bei einem kompletten Ausfall schnell auswechseln und die Neue auch mal eben kurz mit dem kompletten Programm beschreiben.
Obendrein kannst du auch an deinem fertigen Programm immer wieder ein paar Änderungen vornehmen und diese dann in einer zweiten Einheit testen. Oder komplett ins System einspielen.... ohne mehrer Einheiten updaten zu müssen. ;)
Es bleibt aber deine Entscheidung, was dir besser gefällt.


Die Idee mit der Beriebsstundenzahl bzw. Stromverbrauchsmessung finde ich persönlich sehr interessant. Immer wieder gibt es Diskusionen über den tatsächlichen Verbrauch der einzelnen Komponenten beim Aquarium.
Vielleicht ist die Idee gar nicht mal so schlecht, dies gleich vom AVR mit berechnen zu lassen.

Wie weit bist du inzwischen mit deinem gezeichneten Plan?

Gruß,
Cassio
 
Hi, noch mal....

Hier mal meine erste Variante für eine Aquariumsteuerung mit einem Mega8.

Du kannst es dir ja mal ansehen.
Die Pin- und Portbelegung findest du ganz oben am Anfang!

Das Programm ist allerdings schon aus Januar 2008..... :eek:
Inzwischen würde ich einige Dinge wohl anders aufbauen und programmieren! ;)
Es hat auch nur ein 16x2 Display und keine DCF77 Uhr.
Dies allein würde ich heute schon nicht mehr so erstellen! :)



Nimm es also nur als "Ideengeber" !



CodeBox Bascom


' LCD an PB5-2, PD7, PB0

' PC0 ist 1Wire-DS1820
' PC1 ist Menueknopf
' PC2 ist Weiter-Knopf
' PC3 ist + -Knopf
' PC4 ist - -Knopf
' PD2 ist Wasserstand-Alarm "Sensor"
' PD3 ist Filterwechsel Knopf

' PD0 ist Ausgang-Heizung
' PD1 ist Ausgang Co2
' PD4 ist Ausgang Licht
' PD5 ist akustischer Signalgeber
' PD6 ist Displaybeleuchtung


$regfile = "m8def.dat"
$crystal = 1000000



' Configuriere das LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portd.7 , Rs = Portb.0
Config Lcdbus = 4

Cursor Off

Ddrb = &B11_1111 '1 ist Ausgang 0 ist Eingang
Portb = &B00_0000 'auf Hi oder Low setzen

' Bestimme die Ein und Ausgänge
Ddrd = &B1111_0011 '1 ist Ausgang 0 ist Eingang
Portd = &B0000_1100 'auf Hi oder Low setzen

Ddrc = &B0_0000 '1 ist Ausgang 0 ist Eingang
Portc = &B1_1111 'auf Hi oder Low setzen


' Konfiguriere den Timer und die Ausgänge
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Prescale = 8

Config Debounce = 30

Config 1wire = Portc.0

Deflcdchar 0 , 24 , 24 , 6 , 9 , 8 , 9 , 6 , 32 ' Grad Celsius
Deflcdchar 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ' Trennstrich

' Bestimme die Variablen
Config Single = Scientific , Digits = 1

Dim Ist_temp As Single ' Ist-Temperatur
Dim Temp As Word '
Dim Temp1 As Integer '
Dim Scratch(9) As Byte '
Dim I As Byte '
Dim Soll_temp As Single ' Sollwert D

Dim Schalten_ein As Byte ' Einschaltzeit Beleuchtung
Dim Schalten_aus As Byte ' Ausschaltzeit Beleuchtung
Dim Co2_ein As Byte ' Einschaltzeit Ausgang 2
Dim Co2_aus As Byte ' Ausschaltzeit Ausgang 2
Dim Schalten_ein2 As Byte ' Einschaltzeit Beleuchtung
Dim Schalten_aus2 As Byte ' Ausschaltzeit Beleuchtung
Dim Co2_ein2 As Byte ' Einschaltzeit Ausgang 2
Dim Co2_aus2 As Byte
Dim Bel As Word ' Dimmervariable für Beleuchtung

Dim Wtz As Byte ' Zähler für den Wochentag

Dim Z1 As Byte ' Zähler
Dim Z2 As Byte ' Zähler für automatischen Rücksprung aus dem Menü

Dim Wtag As String * 10 ' Wochentag
Dim Ztag As Byte ' Zahl des Wochentages

' Bestimme die EEprom-Variablen
Dim E_soll_temp As Eram Single


' Uhreinstellungen
Config Date = Dmy , Separator = .
Config Clock = Soft

Enable Interrupts

Time$ = "12:00:00"
Date$ = "01.01.07"

Soll_temp = E_soll_temp

'Arbeitsschleife----------------------------------
Cls
Portd.5 = 0
Portd.6 = 1

Do


Debounce Pind.2 , 1 , Alarm , Sub
Debounce Pind.3 , 0 , Filter , Sub

If Pinc.1 = 0 And Pinc.2 = 1 Then
Gosub Menu
Elseif Pinc.1 = 0 And Pinc.2 = 0 Then
Gosub Service
Else
Gosub Normal
End If


Loop



' ----------------------------
' Servicemenue
' ----------------------------
Service:
Cls
Locate 1 , 1
Lcd "Temp"

Locate 1 , 10
Lcd "Tmp1"

Locate 2 , 1
Lcd "S8"

Locate 2 , 9
Lcd "S7"

Bitwait Pinc.1 , Set

Do

Gosub Get_1wire

Locate 1 , 6
Lcd Temp

Locate 1 , 15
Lcd Temp1

Locate 2 , 4
Lcd Scratch(8)

Locate 2 , 12
Lcd Scratch(7)

Loop Until Pinc.1 = 0

Waitms 100
Cls
Bitwait Pinc.1 , Set
Return


' ----------------------------
Normal:
If _sec = 00 Or _sec = 10 Or _sec = 20 Or _sec = 30 Or _sec = 40 Or _sec = 50 Then
Gosub Get_1wire
Else
End If

If Ist_temp < Soll_temp Then
Portd.0 = 1
Else
Portd.0 = 0
End If

Ztag = Dayofweek()
Wtag = Lookupstr(ztag , Wochentage)


' Donnerstag|Temp.
' 16:24:13 |23.5C

Locate 1 , 1
Lcd Wtag ; Chr(1) ; "Temp."

Locate 2 , 2
Lcd Time$
Locate 2 , 11
Lcd Chr(1) ; Ist_temp ; Chr(0)


If Ztag >= 0 And Ztag <= 4 Then
Gosub Schalten04
Else
Gosub Schalten56
End If

Compare1a = Bel

Return



' -----------------------------
' ---Einstellungsmenü----------
' -----------------------------
Menu:
Portd.0 = 0
Portd.1 = 0
Z2 = 0
Cls
Locate 1 , 1
Lcd " Hauptmenue "

Locate 2 , 1
Lcd " weiter/zurueck "

Bitwait Pinc.1 , Set

For Z2 = 1 To 100
Waitms 50

If Pinc.1 = 0 Then
Bitwait Pinc.1 , Set
Cls
Return
Else
End If

If Pinc.2 = 0 Then
Bitwait Pinc.2 , Set
Z2 = 0
Cls
Locate 1 , 1
Lcd "Wassertemperatur"
Locate 2 , 1
Lcd "einstellen:"
Locate 2 , 16
Lcd "C"
Goto Wasser
Else
Next
End If
Cls
Return



' ------------------------------------------
Wasser:
Locate 2 , 12
Lcd " "

For Z2 = 1 To 255

Locate 2 , 12
Lcd Soll_temp
Waitms 20

If Soll_temp > 32 Or Soll_temp < 18 Then
Soll_temp = 18
End If

Debounce Pinc.3 , 0 , Wasser_auf
Debounce Pinc.4 , 0 , Wasser_ab
Debounce Pinc.2 , 0 , Wasser_weiter
Debounce Pinc.1 , 0 , Wasser_menu

Next
E_soll_temp = Soll_temp
Cls
Goto Menu


Wasser_auf:
Soll_temp = Soll_temp + 0.5
Goto Wasser

Wasser_ab:
Soll_temp = Soll_temp - 0.5
Goto Wasser

Wasser_weiter:
E_soll_temp = Soll_temp
Z2 = 0
Cls
Locate 1 , 1
Lcd "Bel. einschalten"
Locate 2 , 1
Lcd "Mo-Fr ab "
Locate 2 , 13
Lcd "Uhr"
Goto Schaltzeit

Wasser_menu:
E_soll_temp = Soll_temp
Cls
Goto Menu

' ------------------------------------------
Schaltzeit:
Locate 2 , 10
Lcd " "

If Schalten_ein > 12 Or Schalten_ein < 6 Then
Schalten_ein = 6
End If

Schalten_aus = Schalten_ein + 13
Co2_ein = Schalten_ein + 1
Co2_aus = Schalten_ein + 12

For Z2 = 1 To 50

Locate 2 , 10
Lcd Schalten_ein
Waitms 130


If Pinc.3 = 0 And Pinc.4 = 1 Then
Incr Schalten_ein
Goto Schaltzeit

Elseif Pinc.3 = 1 And Pinc.4 = 0 Then
Decr Schalten_ein
Goto Schaltzeit

Elseif Pinc.2 = 0 Then
Bitwait Pinc.2 , Set
Z2 = 0
Cls
Locate 1 , 1
Lcd "Bel. einschalten"
Locate 2 , 1
Lcd "Sa+So ab "
Locate 2 , 13
Lcd "Uhr"
Goto Schaltzeit2

Elseif Pinc.1 = 0 Then
Cls
Goto Menu

Else
Next
End If
Cls
Goto Menu




' ------------------------------------------

Schaltzeit2:
Locate 2 , 10
Lcd " "

If Schalten_ein2 > 12 Or Schalten_ein2 < 6 Then
Schalten_ein2 = 6
End If

Schalten_aus2 = Schalten_ein2 + 13
Co2_ein2 = Schalten_ein2 + 1
Co2_aus2 = Schalten_ein2 + 12

For Z2 = 1 To 50

Locate 2 , 10
Lcd Schalten_ein2
Waitms 130


If Pinc.3 = 0 And Pinc.4 = 1 Then
Incr Schalten_ein2
Goto Schaltzeit2

Elseif Pinc.3 = 1 And Pinc.4 = 0 Then
Decr Schalten_ein2
Goto Schaltzeit2

Elseif Pinc.2 = 0 Then
Bitwait Pinc.2 , Set
Z2 = 0
Cls
Locate 1 , 1
Lcd "Uhr einstellen"
Locate 2 , 1
Lcd "Stunden:"
Goto Stunden

Elseif Pinc.1 = 0 Then
Cls
Goto Menu

Else
Next
End If
Cls
Goto Menu




' ------------------------------------------



Stunden:
Locate 2 , 10
Lcd " "

For Z2 = 1 To 100

Locate 2 , 10
Lcd _hour
Waitms 130

If _hour > 23 Or _hour <= 0 Then
_hour = 0
End If


If Pinc.3 = 0 And Pinc.4 = 1 Then
Incr _hour
Goto Stunden

Elseif Pinc.3 = 1 And Pinc.4 = 0 Then
Decr _hour
Goto Stunden

Elseif Pinc.2 = 0 Then
Bitwait Pinc.2 , Set
Z2 = 0
Cls
Locate 1 , 1
Lcd "Uhr einstellen"
Locate 2 , 1
Lcd "Minuten:"
Goto Minuten

Elseif Pinc.1 = 0 Then
Cls
Goto Menu

Else
Next
End If
Cls
Goto Menu


' -------------------------------------
Minuten:
Locate 2 , 10
Lcd " "

_sec = 00

For Z2 = 1 To 100

Locate 2 , 10
Lcd _min
Waitms 130

If _min > 59 Or _min <= 0 Then
_min = 0
End If


If Pinc.3 = 0 And Pinc.4 = 1 Then
Incr _min
Goto Minuten

Elseif Pinc.3 = 1 And Pinc.4 = 0 Then
Decr _min
Goto Minuten

Elseif Pinc.2 = 0 Then
Bitwait Pinc.2 , Set
Z2 = 0
Cls
Locate 1 , 1
Lcd "Wochentag einst."
Locate 2 , 1
Lcd "Tag:"
Goto Tag

Elseif Pinc.1 = 0 Then
Cls
Goto Menu

Else
Next
End If
Cls
Goto Menu


' --------------------------------------------

Tag:
Ztag = Dayofweek()
Wtag = Lookupstr(ztag , Wochentage)

For Z2 = 1 To 255

Locate 2 , 6
Lcd Wtag

Waitms 20

Debounce Pinc.3 , 0 , Tag_auf
Debounce Pinc.4 , 0 , Tag_ab
Debounce Pinc.1 , 0 , Tag_menu

Next
Cls
Goto Menu

Tag_auf:
Incr _day
Goto Tag

Tag_ab:
Decr _day
Goto Tag

Tag_menu:
Cls
Goto Menu

Return


' ---------------------------------------------
Get_1wire:

1wreset
1wwrite &HCC
1wwrite &H44
Waitms 100

1wreset
1wwrite &HCC
1wwrite &HBE

For I = 1 To 9
Scratch(i) = 1wread()
Next

Temp = Scratch(2)
Shift Temp , Left , 8

Temp = Temp + Scratch(1)
Temp1 = Temp
Temp1 = Temp1 / 2
Ist_temp = Scratch(8) - Scratch(7)
Ist_temp = Ist_temp / Scratch(8)
Ist_temp = Ist_temp + Temp1
Ist_temp = Ist_temp - 0.25

Return


' ---------------------------------------------
Schalten04:
If Schalten_ein <= _hour And Schalten_aus > _hour Then ' Beleuchtungssteuerung
Portd.4 = 1
Else
Portd.4 = 0
End If

If Co2_ein <= _hour And Co2_aus > _hour Then ' Ausgang2-Steuerung
Portd.1 = 1
Else
Portd.1 = 0
End If

If Co2_aus = _hour Then ' Dimmersteuerung Beleuchtung
Bel = 17 * _min
Elseif Co2_aus <> _hour Then
Bel = 0
Else
End If

Return

' ---------------------------------------------
Schalten56:
If Schalten_ein2 <= _hour And Schalten_aus2 > _hour Then ' Beleuchtungssteuerung
Portd.4 = 1
Else
Portd.4 = 0
End If

If Co2_ein2 <= _hour And Co2_aus2 > _hour Then ' Ausgang2-Steuerung
Portd.1 = 1
Else
Portd.1 = 0
End If

If Co2_aus2 = _hour Then ' Dimmersteuerung Beleuchtung
Bel = 17 * _min
Elseif Co2_aus2 <> _hour Then
Bel = 0
Else
End If

Return

' ---------------------------------------------
Filter:
Cls
Locate 1 , 1
Lcd " Wasserwechsel! "

Portd.0 = 0
Portd.1 = 0
Portd.4 = 1
Compare1a = 0
Waitms 100

Do
Locate 2 , 5
Lcd Time$
Waitms 75
Toggle Portd.6

Debounce Pind.3 , 0 , Filter_back

Loop


Filter_back:
Cls
Portd.6 = 1
Return




' ---------------------------------------------
Alarm:
Cls
Locate 1 , 1
Lcd " !!! ALARM !!! "

Locate 2 , 1
Lcd "--Wasserstand-- "

Portd.0 = 0
Portd.1 = 0
Portd.4 = 1
Compare1a = 0
Waitms 100

Do

Waitms 100

Toggle Portd.5
Toggle Portd.6

Debounce Pind.3 , 0 , Alarm_back

Loop

Alarm_back:
Cls
Portd.5 = 0
Portd.6 = 1
Return



End

Wochentage:
Data " Montag " , " Dienstag " , " Mittwoch " , "Donnerstag" , " Freitag " , " Samstag " , " Sonntag "



Wenn du Fragen zum Programm hast, dann frag mich ruhig! ;)

Gruß,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)