Mittwoch, 4. Oktober 2023

Schaltnetzteil Reparatur

Heute möchte ich mal mein ganz persönliches Rezept zum Reparieren eines Schaltnetzteiles vorstellen. Dabei sind hier ausdrücklich nicht die üblichen USB Steckernetzteile gemeint, sondern solche, die in Geräten verbaut sind, und für die man auch nach wochenlanger Suche in Katalogen keinen sinnvollen Ersatz gefunden hat. Tatsächlich ist es immer einfacher, sich ein neues Schaltnetzteil zu kaufen und dieses ggf. mit Blechen und Nieten an den Platz des alten Netzteiles einzubauen. Manchmal aber gibt es diese Möglichkeit nicht, wie zum Beispiel bei meiner alten Sun IPC SparcStation und dem dazugehörigen Monitor. Die Sparc machte nur noch elektrisch knisternde Geräusche, und der Monitor sendete Rauchzeichen. Das Überprüfen der eingebauten Fein-Sicherung sollte immer der erste Schritt sein, aber irgend etwas sagte mir, dass das hier überflüssig ist.

Da sich hier auch Leser der "Generation Unbedarft" bedienen, der nachdrückliche Hinweis, dass ein falscher Handgriff tödlich sein kann. Deshalb lieber ein neues Netzteil kaufen, bevor man ebenfalls Rauchzeichen sendend daneben liegt. Noch besser: Fragt jemanden, der sich damit auskennt. Falls ihr meint, dass ihr selbst derjenige seid, möchte ich euch dringend ans Herz legen, nach dem Ausschalten und Ziehen des Steckers noch gut einen halben Tag zu warten, bis der Primär-Elko ganz sicher ohne (gefährliche) Spannung ist.

Nachdem ich die Sun geöffnet und nach einiger Mühe auch das Netzteil zerlegt hatte, fand ich im Innern des Netzteil-Gehäuses die gesamte Innenseite mit einem "Ölfilm" überzogen: Kondensatorkotze! Das sind die "Ausscheidungen" der Sieb-Elkos auf der Sekundärseite, die ich kurzerhand vollständig auslötete, und gegen neue Low-ESR Typen mit 105°C Festigkeit ersetzte. Auf der Sekundärseite wechselt die Spannung nicht mit den gemütlichen 50Hz der Primärseite ihre Polarität, sondern mit 25-50 kHz. Noch dazu wird die Spannung auf der Sekundärseite meist nur mit einer einzigen Diode gleichgerichtet, sodass der Elko hier einiges an Arbeit leisten muss, um die Spannung konstant zu halten. Deshalb müssen die Innenwiderstände der Elkos so klein wie möglich sein, deshalb Low-ESR Typen, wobei ESR hier - frei übersetzt - äquivalenter Serienwiderstand bedeutet. Aus dem Physikunterricht kann sich der ein oder andere vielleicht noch an den Auf- und Entladevorgang am Kondensator erinnern, und dass der Widerstand hier einen großen Einfluss auf die Geschwindigkeit dieser Vorgänge hat. Den Siebelko auf der Primärseite (meist ein dicker 400V-Typ) unterziehe ich einer Sichtprüfung, aber meist ist hier alles in Ordnung. Wenn nicht -> Austauschen.

Zuerst habe ich also die Elektrolyt-Kondensatoren von der Platine ausgelötet. Natürlich ist genau zu notieren, welcher Typ wo und wie herum drin steckt, also Ort, Ausrichtung, Kapazität und Spannung notieren! Am besten macht man auch noch Fotos von allen Seiten. Nur zur Sicherheit. Wer nicht weiß, wo man Ersatz-Elkos herbekommt, der kann auf den Seiten von reichelt.de fündig werden.

Anschließend, wenn alle Elkos der Sekundärseite ausgelötet sind, wird die Platine gewaschen. Und zwar in handwarmen Spülwasser und mit einer Zahnbürste. Anschließend am besten mit Isopropylalkohol im Ultraschallbad, bis nichts mehr auf den "Unfall" hinweist. Danach trocknet man die Platine in der Sonne, im Dörrobst-Bereiter, im Filament-Trockner, oder was ihr sonst greifbar habt, was mehrere Stunden bei 60° die Platine trocknen kann. Wer mag, kann die Platine jetzt schon wieder bestücken, aber ich persönlich gehe lieber meine Schritt-Für-Schritt Liste durch, um auch noch den Rest zu kontrollieren.

Zuerst schaue ich mir die Sekundärseite an. Alle Untersuchungen finden natürlich ohne Netzspannung statt !! Als Hilfsmittel habe ich ein 08/15 Multimeter mit Ohmmeter und Diodentester, ein geregeltes und strombegrenztes Labornetzteil, sowie ein Oszilloskop.

Zunächst untersuche ich, ob alle Schalt-Dioden in Sperrrichtung sperren und in Durchlassrichtung einen Spannungsabfall von etwa 0,2 - 0,3 V haben. Falls nicht -> ersetzen. Dann messe ich alle Wicklungen des Transformators aus, ob nicht eine der Wicklungen durchgebrannt ist. Falls ja -> Unschön! Transformator auslöten, öffnen, abwickeln, Kupferlackdraht besorgen, neue Wicklung, alle anderen Wicklungen aufbringen, in Trafo-Öl tauchen, schließen und wieder einlöten. Kommt allerdings sehr selten vor. Die beiden Seiten des Netzteils (Primär- und Sekundärseite) sind immer strikt getrennt (was man auch an der Platinenunterseite erkennt). Es gibt nur drei Bauteiltypen, die diese Grenze überschreiten: Der Transformator, einige Kondensatoren und ein oder mehrere Optokoppler. Den Transformator hatten wir schon, die Kondensatoren können wir mit dem Ohmmeter auf Durchgang prüfen, aber leider kann man die Spannungsfestigkeit nicht so ohne weiteres feststellen. Bleiben noch die Optokoppler: Um diese zu testen lege ich mit einem Netzteil an den Ausgang der Schaltdiode für den Hauptzweig (meistens der 5V Zweig) eine 200mV kleinere Spannung an. Mit dem Diodentester kann ich nun den Ausgangstransistor des Optokopplers durchmessen: Wenn ich die Spannung geringfügig erhöhe, so erwarte ich, dass bei Überschreiten der ausgewiesenen Ausgangsspannung für diesen Zweig, die Kollektor-Emitter-Strecke des Optokopplers leitfähig wird, d.h. einen Spannungsabfall von etwa 0,3V hat. Sind mehr als ein Optokoppler verbaut, kann ich die anderen ebenso testen.

Damit ist die Sekundärseite abgeschlossen, und wir kommen zur Primärseite. Hier haben wir in loser Reihenfolge: Eingangsfilter, Sicherung, Varistor, Vorschaltwiderstand, Gleichrichter, Siebelko, Schalt-Transistor, Schalt-IC, Gleichrichter für Hilfswicklung, Siebelko für Schalt-IC und Ladewiderstände für Schalt-IC. Je nach Geschmack des Entwicklers sind da auch noch Thermosicherungen für den Schalt-Transistor, Spannungsregler für das Schalt-IC und anderes Gedöns.

Zunächst messe ich mit dem Ohmmeter in beide Richtungen in den Netzstecker hinein: Hier sollte nach einem kurzen Einschwingen durch den Siebelko alles im Kiloohm Bereich liegen. Dann prüfe ich, ob ich vom Netzstecker auf beiden Leitungen zum Gleichrichter komme. Wenn ja, dann ist der Eingangsteil schon mal in Ordnung. Wenn nicht -> Suchen nach dem Loch im Schlauch.

Danach gehe ich mit dem Ohmmeter auf den Leistungs-Transistor los: Dieser sollte in beiden Richtungen, also Kollektor <-> Emitter, bzw. Source <-> Drain sperren. Falls nicht -> Austauschen.

Kommen wir nun zum Schalt-IC: Finden wir dazu eine Dokumentation im Netz -> Glück gehabt. Wenn nicht -> Platine umdrehen und suchen: 

  • Masse-Anschluss
  • Plus-Anschluss
  • Hinweise auf die Höhe der Versorgungsspannung, evtl. Spannungsregler
  • Inhibit-Anschlüsse (kommen von den Optokopplern)
  • Drive-Ausgang (geht zum Leistungs-Transistor)
Im Folgenden unterstelle ich mal, dass bekannt ist, welche Versorgungsspannung der Schaltkreis braucht. Mit dem Labornetzteil lege ich diese Spannung mit einer Strombegrenzung von 20 mA an das IC an. Da wir eingangs schon die Optokoppler verifiziert haben, ist hier nichts mehr zu untersuchen. Mit dem Oszilloskop untersuche ich nun den Drive-Ausgang zum Leistungs-Transistor: Hier sollte ich eindeutige Impulse im Bereich von 20-50kHz in Höhe von einigen Volt sehen. Wenn ich den Inhibit-Eingang / einen der Inhibit-Eingänge auf Masse ziehe, müssen die Impulse unverzüglich aufhören.

Wenn das alles funktioniert, kommen wir nun zum wahrscheinlichsten Tod aller Schaltnetzteile: Sie schwingen nach dem Einschalten einfach nicht mehr an und stellen sich tot. Um das zu verstehen, muss man begreifen, wie der Schaltregler mit Strom versorgt wird. Wenn (!) das Netzteil erst einmal schwingt, dann ist auf der Primärseite des Transformators eine Hilfswicklung, deren Spannung über eine Diode (oder besonders edel: Über einen Gleichrichter mit nachgelagertem Spannungsregler) gleichgerichtet und dem Schaltregler zugeführt wird. Aber dazu muss das Netzteil erst einmal schwingen. Dazu sind die (selten einer, meist zwei) Widerstände in der Größe von 100-220 kOhm da, die direkt die gleichgerichtete Netzspannung dem Siebelko des Schaltreglers zuführen. Dessen Spannung steigt langsam an, der Schaltregler beginnt zu schwingen, sprich: Der ganze Schwingkreis schaukelt sich sehr schnell auf mehrere -zig Kilohertz hoch. Das ist übrigens auch diese kurze "Quietsch"-Geräusch, dass man beim Einschalten eines Schaltnetzteiles hören kann. Soweit dieser kurze Abriss. Nun ist das gute Stück aber schon einige Jahrzehnte alt, und die Bauteile sind durch den Dauerbetrieb nicht besser geworden, sondern sie sind gealtert. Das betrifft sowohl den Siebelko des Schaltreglers, der an Kapazität verliert, mehr aber noch die Widerstände, deren Widerstand mit der Zeit immer größer wird. Dadurch reicht irgendwann der Strom durch diese Widerstände nicht mehr aus, den Kondensator ausreichend aufzuladen, sodass der Schaltregler niemals genug Spannung erhält, um den Schwingkreis anzustoßen.

Wenn nun alles in Ordnung ist, könnt ihr wieder alles zusammen bauen. 

Üblicherweise steckt man jetzt den Stecker in die Dose und wundert sich, warum da was qualmt... 

  1. Diese Art Netzteile sind nicht dafür ausgelegt ohne Last zu arbeiten. Daher niemals, NIEMALS ohne Last betreiben. Steckt da irgendetwas ran, was mindestens ein Drittel der Nominalleistung in Wärme verwandeln kann. 
  2. Macht den Test, wenn ihr die Möglichkeit habt, immer an einem Trenntrafo oder an einer Powerstation, diese mobilen 230V Notstrom-Dinger, die mit Akkus laufen. Schaltet den Strom für maximal eine Sekunde an und dann wieder aus. Wenn in dieser Zeit eure Last funktioniert, dann dürft ihr das auch noch einmal für zwei Sekunden wiederholen. Wenn auch das funktioniert, dann Feuer frei. Tut euch bitte den Gefallen, und macht das Ausschalten nach einer Sekunde nicht davon abhängig, was sich da tut! Nach einer Sekunde AUS!! Danach könnt ihr reflektieren, was da passiert ist.
  3. Für die, die ohnehin alles haben: Richtet eine Wärmebild-Kamera auf die Platine und macht ein Video von dem Test. Wenn da was verdächtig ist, dann seht ihr das dort, noch bevor sich die Platine mit Rauchzeichen meldet.
Zusammenfassend hier noch einmal die Checkliste zum Abhaken:
  1. Prüfen und ggf. Ersatz der Feinsicherung
  2. Sichtkontrolle und ggf. Ersatz der Elkos. Nur Low-ESR 105°C Typen nehmen.
  3. Messung der Schaltdioden der Sekundärseite
  4. Prüfung aller Transformator-Wicklungen
  5. Prüfung der Optokoppler an den Schaltgrenzen
  6. Prüfung des Schalt-Transistors auf Sperrung
  7. Prüfung des Schaltreglers auf Puls-Erzeugung für Schalt-Transistors
  8. Prüfung des Schaltreglers, Reaktion auf Inhibit-Signale
  9. Prüfung der Widerstände und des Siebelkos für den Schaltregler
  10. Prüfung etwaiger Baugruppen von der Hilfswicklung zum Schaltregler
  11. Messung in den Netzstecker hinein
  12. Messung vom Netzstecker bis zum Gleichrichter
Viel Erfolg

Samstag, 18. März 2023

Was kann man mit einem Haufen Z80 CPUs machen?

In meinem Regal steht eine kleine Kiste, in der etwa 30 Z80 CPUs vor sich hin schlummern. Meine Überlegungen bis hierher:

  • Jede Z80 CPU bekommt eine MMU und kann damit weit mehr als die üblichen 64 kB RAM ansteuern. Jede CPU bekommt eigene 64 kB RAM, kann aber auch auf einen globalen Speicher mit mehreren MB RAM zugreifen.
  • Ein Prioritäten-Arbiter [sic] steuert den geordneten Zugriff auf den globalen Speicher und die Peripherie.
  • Zum Schutz der Programme gibt es eine Hardware, welche die Adressbereiche für Schreib-/Lesezugriffe, sowie die Ausführungsadresse überprüft und ggf. eine Exception (Interrupt) auslöst.
  • Jede CPU holt sich einen lauffähigen (d.h. auf nichts wartenden) Prozess in seinen lokalen Speicher und bearbeitet diesen. Ein Prozess wird erst dann zurück geschrieben und anschließend durch einen neuen ersetzt, wenn er a) gerade nicht im Status "runnable" ist (also z. B. auf eine Semaphore oder einen IO-Zugriff wartet), und b) ein Prozess im globalen RAM im Status "runnable" ist, aber keine CPU sich darum kümmert. Eine Robin-Round-Queue muss sich darum kümmern, wenn es gerade mehr "runnable" Prozesse, als CPUs gibt. Eventuell müssen den Prozessen auch Prioritäten zugeordnet werden können.
  • Als Betriebssystem kommt ein UNIX-Derivat zum Einsatz.


    Montag, 17. Oktober 2022

    Da fehlen ja noch Bilder !

    Stimmt, da fehlen sogar noch eine Menge Bilder. Beginnen wir damit, dass ich beim Bohren der Löcher schon wieder einen Hals bekommen habe, weil mein Stufenbohrer nur bis 30mm geht, die Löcher für die Steckdosen aber 35mm groß sein müssen. Also habe ich nach dem Bohren mit einer Rundfeile die Löcher mehr mit roher Gewalt als mit handwerklichem Geschick aufgeraspelt:


    "Schief ist schick! Schief ist modern!". Oder so. Egal! Hauptsache, passt. Dann kamen da die vier Steckdosen rein, und an der Seite noch eine Durchführung für das Netzkabel. 


    Innenansicht:


    Oben links ist das erste der vier Relais montiert. Und wenn man alle vier Relais verkabelt hat, dann sieht das so aus:


    Die zweite Durchführung, die man hier im Bild oben rechts erkennt, ist für den Temperatur-Fühler. Soweit zum "Back-End". Für das Frontend wollte ich mir eigentlich eine Platine machen, aber dann dachte ich mir "Für einen Prototypen so einen Aufwand?", und habe alles auf einer Punktraster-Platine aufgebaut:


    Und so sieht das dann fertig gelötet aus:


    Und eingebaut:


    Fertig ist die Kiste:




    Donnerstag, 17. März 2022

    Programmierung abgeschlossen

    Was lange währt, wird endlich gut

    Die Programmierung ist nun endlich beendet, alles ist drin, alles funktioniert und Eingabefehler werden einigermaßen von den Web-Seiten abgefangen. Natürlich kann man immer noch eine Menge Blödsinn anrichten, wenn man sich URLs zurecht biegt und an den Controller schickt, es gibt auch keine Passwort-Sicherheit usw. Aber ich denke mir, wer es schafft, in mein lokales WLAN zu kommen, der darf auch meine Gartenbeleuchtung ein- und ausschalten. Ich gehe schließlich nicht davon aus, dass jemand diese Schaltuhr dazu benutzt, ein Kernkraftwerk zu steuern.

    Anstelle der NodeMCU habe ich nun auch das Zielsystem, das winzige ESP8266-01 programmiert, erste Tests waren zufriedenstellend.

    Jetzt geht es daran die Schaltung vom Steckbrett zu erfassen, eine Platine zu layouten und schließlich zu fertigen. Fortsetzung folgt.

    Sonntag, 13. März 2022

    Prototyp auf Steckbrett

     Überblick

    • Oben rechts die NodeMCU mit USB Stecker zum Laptop.
    • Oben links der ATTiny2313
    • Dazwischen der DS1820 Temperatursensor
    • Unten links 4 LEDs zur Anzeige der Schaltausgänge.
    • Unten mittig das Kabel zum Programmer für den ATTiny.
    • Mittig unter dem Kabelgewirr (links von der NodeMCU) das Poti für die Kontrasteinstellung.

    Protokoll

    Da die serielle Ausgabe der NodeMCU sowohl für das Debuggen, als auch für die Kommunikation zum ATTiny verwendet wird, muss der ATTiny wissen, wann er gemeint ist, damit nicht alle Debugausgaben auch auf das Display gelangen. Ferner werden einige Steuerzeichen gebraucht, um das Display bspw. zu löschen oder den Cursor zu positionieren.
    Prinzipiell habe ich das so gelöst, dass alles zwischen den beiden ASCII-Zeichen STX und ETX als anzuzeigender Text behandelt wird. Das Steuerzeichen FF löscht das Display, CR setzt den Cursor an den Anfang der aktuellen Zeile und LF setzt ihn eine Zeile tiefer.
    Außerhalb von STX und ETX reagiert der ATTiny auf die Sequenzen DC1-DC4 gefolgt von ACK/NAK. Damit werden die vier Ausgänge umgeschaltet. Mit der Sequenz DC2 ACK wird beispielsweise Port 2 eingeschaltet.

    Samstag, 12. März 2022

    Die Schaltuhr tickt

    Erste Versuche auf dem Steckbrett

    Tatsächlich habe ich noch keinen ESP8266-01 verbaut, sondern eine wesentlich einfacher zu handhabende NodeMCU. Erstens kann man diese bequem auf einem Steckbrett verwenden (für den ESP8266-01 sind die beiden Pinreihen zu nah beieinander), zum anderen auch viel einfacher programmieren: USB Kabel dran und fertig. Aber prinzipiell sollte das keinen Unterschied machen.
    Von der Software der Cistercian Clock ist auch nicht sehr viel übrig geblieben, allenfalls der Web-Server zum Einstellen der Parameter. Das NTP-Server Gedöns habe ich rausgeschmissen, da es bereits in den Kern-Bibliotheken enthalten ist. Auch das ganze Geraffel zum Thema Sommerzeit/Winterzeit konnte ich getrost dem Kern überlassen. So blieb dann hinterher genug Luft, um die Formeln für die Berechnung des Mittags, der Tageslänge und der Dämmerungen zu hinterlegen. So weiß die Schaltuhr nun genau, wann eine Dämmerung beginnt, und wann sie aufhört.
    An die NodeMCU habe ich einen Dallas DS1820 nebst Pull-Up Widerstand zur Temperaturmessung angeschlossen. Die Beispielprogramme im Netz hatten leider immer einen katastrophalen Systemcrash zur Folge. Als ich nicht mehr auf das Ende der Messung wartete, blieb der Absturz aus. Vermutlich schert sich die Bibliothek nicht um die Beruhigung des Watchdogs, der pflichtgemäß einen Reset auslöste, weil man ihn zu lange nicht beachtet hatte. Jetzt verwende ich eine Interrupt-Routine mit einem Timer, an dessen Ende ich die Messung starte, um sie zu Beginn des nächsten Interrupts auszulesen. Das wars dann.
    Ferner habe ich ein zweizeiliges LCD an die NodeMCU angeschlossen, welches zu Beginn die erhaltene IP Adresse anzeigt, und anschließend das Datum, die Uhrzeit und die Temperatur. Wenn die NodeMCU jetzt noch ein paar freie Pins für die vier Schaltausgänge hätte, wäre ich an dieser Stelle schon beinahe fertig. Aber nöööö....
    Der ATTiny2313 war fix programmiert, ich ließ ihn auch aus Bequemlichkeit einfach auf seinem internen 1 MHz RC-Oszillator laufen. Damit war die Wahl der Baudrate natürlich nicht mehr ganz so einfach, aber 4800Bd sollten genau genug machbar sein (1,7 Promille Abweichung). Ich habe die Source in der NodeMCU also auf 4800Bd eingestellt und den ATTiny2313 so programmiert, dass eintreffende Zeichen einen Interrupt auslösen. Dort gebe ich das Zeichen dann einfach aufs Display aus. Bei 4800Bd können 480 Zeichen/s übertragen werden: Für das Display allemal ausreichend. 
    Während ich die NodeMCU mit der Arduino IDE programmiert habe, verwendete ich für den ATTiny einfach ein älteres Skelett für den avr-gcc mit einem guten, alten Makefile. So schön die IDE auch sein mag, aber vom Speichern der Source bis zum Ende des Hochladens in nicht einmal einer Sekunde ist auch eine feine Sache. 
    So aus reiner Neugierde wollte ich mal wissen, womit die Arduino IDE eigentlich beim Compilieren so ihre Zeit verbringt, da ich eine halbe Minute für etwa 8 C++ Files doch ein wenig übertrieben hielt. Als ich in den Einstellungen die Compiler-Ausgaben einschaltete konnte ich sehen, dass jedes Mal, wenn ich eine Änderung in der Source mache, die IDE alles neu übersetzt, und mit alles meine ich, wirklich alles: Die ganzen Bibliotheken werden ebenfalls alle neu übersetzt. Okay, dafür ist es dann wieder schnell.
    Jetzt braucht es noch ein Protokoll, damit nicht alles, was über die serielle Schnittstelle geht (die ja auch als Debug-Leitung zur IDE verwendet wird), auch auf dem Display erscheint. Außerdem noch ein paar vordefinierte Befehle, um die vier Ausgänge (an denen momentan vier LEDs hängen) ein- oder auszuschalten. Fortsetzung folgt.

    Mittwoch, 2. März 2022

    Die ultimative Schaltuhr

    Vorgeschichte

    Wir wohnen in einem kleinen Häuschen mit Garten. Und in diesem haben wir auch diverse elektrische Verbraucher, die - wenn möglich - automatisch ein- und ausgeschaltet werden sollen. Das sind zum einen die Teichpumpe, die von morgens um 10 Uhr bis abends zur Dämmerung laufen soll. Dann haben wir da die Gartenbeleuchtung, die von der Dämmerung, wenn es also dunkel ist, bis 23 Uhr leuchten soll. Dann haben da die Teichheizung, die im Winter bei Temperaturen unter 1°C in Betrieb sein muss, damit das Wasser nicht zufriert und die Fische keine Luft mehr bekommen.
    Für das alles haben wir unter der Balkon-Terrasse in einem ausgedienten Meerschweingehege einige Schaltuhren und Thermostate installiert. Wenn da jetzt nicht die Sache mit der Dämmerung wäre, könnte man das eigentlich so lassen, aber wenn so mit länger werdenden Tagen die abendliche Beleuchtung immer noch um 16 Uhr angeht, während das Sonnenlicht noch zwei Stunden scheint, dann müsste man das eigentlich nachjustieren. Das Problem ist nur, dass das eine ziemliche Krabbelei unter der Terrasse ist, und man ist nicht mehr der Jüngste. Will heißen, runter ist das kleinste Problem, aber wie kommt man wieder hoch? Da muss man also was basteln.

    Anforderungen

    Da ich nicht mehr ein ganzes Rudel Uhren und Thermostate unter der Terrasse haben will, erscheint es mir sinnvoll, über eine mehrkanalige Schaltuhr nachzudenken. Vier Kanäle sollten ausreichen. Außerdem will ich die Schaltuhr nicht ständig umstellen müssen: Kann die Uhr sich nicht selbst ausrechnen, wann es dämmert und wann es zappenduster ist? Und drittens: Ich will da überhaupt nicht mehr unten herumkrabbeln. Kann man die Uhr nicht mit dem Handy fernbedienen? Viertens: Sommer- und Winterzeit sollte die Uhr von alleine umschalten.

    Die Idee

    Ausgehend von einem kleinen Espressif ESP-8266 01 (das ist dieses kleine, niedliche 16x26mm große Platinchen mit den 8 Pins auf der Rückseite und der markanten WLAN-Antenne) baute ich eine kleine Schaltung auf einem Steckbrett auf, und erweiterte den Chip um einen Dallas DS1820 Temperatursensor. Die Ausgabe auf der seriellen Leitung in die Arduino IDE zeigte plausible Temperaturen an. Dann brauchte man noch eine Oberfläche, einen Access-Point, eine Möglichkeit das ganze ins heimische WLAN zu hängen und eine bisschen Software, damit sich der Chip per Network Time Protocol (NTP) selbständig die aktuelle Uhrzeit holt. Ausgehend von diesem interessanten Projekt der Cistercian Clock fand ich einen guten Teil der Software schon dort vor. Leider hat der ESP 01 nicht genug Anschlüsse für den Temperatur-Sensor, die vier Relais und auch noch ein LC-Display. Auch eine NodeMCU hat nicht genug Anschlüsse. Also entschied ich mich für eine Kombination aus ESP-01 als Controller und ATTiny2313 als Porterweiterung. Die Kommunikation verläuft einseitig über eine serielle Schnittstelle.
    Der ESP-01 übernimmt also sämtliche Aufgaben, verbindet sich mit dem WLAN, bedient den Temperatur-Sensor und übermittelt dem ATTiny, was dieser aufs Display schreiben soll, bzw. welches Relais er ein- oder ausschalten soll.

    Mathematik

    Der kasus knusus, also das hüpfende Komma, ist in diesem Fall die Berechnung der Dämmerungszeiten. Basis hierfür ist das Datum, sowie Längen- und Breitengrad. Ich habe mehrfach verschiedene kostenlose und registrierungsfreie Provider getestet, die mir aufgrund der IP Adresse die Position geben sollten, aber der genauste Provider lag immer noch 400km daneben. Das kanns nicht sein. Also muss ich die Geo-Koordinaten wohl per Hand über die Web-Oberfläche eingeben.
    Damit und dem Datum konnte ich aufgrund des Längengrades und der Zeitgleichung berechnen, wann exakt eine Sonnenuhr hier Mittag anzeigen würde. Sonnenauf- und untergang liegen um diese berechnete Mittagszeit symmetrisch herum. Mit dem Breitengrad kann man mit den Formeln aus Lichter Tag die Tageslänge von Sonnenauf- bis untergang bestimmen. Mit den Formeln aus Dämmerung bekommt man dann die Informationen zu den Dauern der drei Dämmerungen (bürgerlich, nautisch, astronomisch), wobei mich hier nur die bürgerliche Dämmerung interessiert.
    Wir haben nach den Berechnungen also für einen beliebigen Tag X die Informationen:
    • Beginn der morgendlichen (bürgerlichen) Dämmerung (Es wird hell)
    • Ende der morgendlichen (bürgerlichen) Dämmerung (Sonnenaufgang)
    • Beginn der abendlichen (bürgerlichen) Dämmerung (Sonnenuntergang)
    • Ende der abendlichen (bürgerlichen) Dämmerung (Dunkelheit)
    Da für diese Berechnungen eine ganze Menge Winkelfunktionen (und somit ein gutes Maß Rechenzeit benötigt werden), werden diese Berechnungen nur einmal um Mitternacht, bzw. nach Eingabe von Längen- und Breitengrad gemacht.

    Schaltzeiten

    Die Uhr bekommt über das NTP von einem Zeitserver aus dem Internet die Uhrzeit und das Datum. Aus dem Datum kann problemlos der Wochentag berechnet werden. Mit der Osterformel folgen dann der Ostersonntag und davon ausgehend alle anderen beweglichen Feiertage. Somit kennt die Uhr also den Wochentag und alle Feiertage. Damit sind dann diese Kombinationen möglich:
    • Set aus einzelnen Wochentage
    • Montags bis Freitags
    • Wochenende
    • Arbeitstag (= Montags bis Freitags ohne Feiertage)
    • Nicht Arbeitstag (Wochenende und Feiertage)
    • Täglich
    Damit können für unterschiedliche Tage unterschiedliche Schaltpunkte programmiert werden. Diese Schaltpunkte sind:
    • Konkrete Uhrzeit
    • Minuten vor / nach Dämmerung (Beginn morgens, Ende morgens, Beginn abends, Ende abends)
    • Unterhalb / Überhalb einer Temperatur

    Grundlage für die Schaltuhr ist eine Tabelle mit den Spalten

    • Kanal
    • EIN / AUS
    • Tag
    • Schaltpunkt

    Bauteile

    Das meiste, was für die Uhr gebraucht wird, gibt es bei Amazon zu kaufen:

    Alles zusammen also 120 Euro für Material für zwei (!) Schaltuhren. Dazu kommen noch Kleinteile wie Platine, Schrauben, Distanzröllchen, Kabel, Kabelschuhe, Aderendhülsen, usw. Insgesamt also etwa 80 Euro pro Schaltuhr. Fairer Preis.