Warum eigentlich ein Mikrocontroller?
Der war gerade da. Es ist (im Gegensatz zum analogen Aufbau) unproblematisch seine grundlegende Funktion und Parameter nach Bedarf beliebig anzupassen.
Da ich mit dem Bauen von Kühlmöbeln keine Erfahrung habe, wird sich die Anpassbarkeit als nützlich erweisen.
Auf dem Arduino Uno ist ein Atmega 328 (oder 168 beim billigsten pro mini), der einen integrierten ADC mit 10 bit Auflösung besitzt. Bei Verwendung der interen Referenz und 5V und LM35 Temperaturfühlern mit 10mV/K lässt sich damit theoretisch auf ca. ein halbes °C genau messen. Das reicht für diesen Zweck aus.
Zwei Eingänge lesen die Temperaturfühler ein, ein dritter bekommt ein Poti zum manuellen Nachstellen der Kühlleistung (Sommer/Winter oder andere Notwendigkeiten) ohne das Programm ändern zu müssen.
Der Motorstrom wird über ein 5V Relais geschaltet, welches „1/8 HP“ und 6A aufgedruckt hat. Über den Kontakt habe ich zur Entstörung einen 250V Varistor gelötet, die Spule bekommt eine Freilaufdiode und wird über einen NPN-Transistor vom Mikrokontroller geschaltet.
Als Zusatzfunktion gibts eine helle Alarm-LED die rot Blinkt wenn es im Kühlschrank wieder erwarten zu warm ist. Dies wird mit dem zweiten Fühler im Kühlraum überwacht.
Die Fühlerleitungen werden jeweils über 1uF Elkos direkt am ADC Eingang stabilisiert.
Die verwendeten billigen LM335 sind die aussortierten LM35 Sensoren die nicht so gut geworden sind. Hier muss man also selbst dafür sorgen, das Sensor-offset entsprechend zu korrigieren. Dafür habe ich ein LC-Display angeschlossen um im experimentellen Status Diagnosedaten angezeigt zu bekommen. (Nicht in der Schaltzeichnung enthalten, Pinbelegung siehe .ino Datei)
Was zeigt das 2×16 Display an?
Links oben die Verdampfertemperatur, Links unten die Kühlraumtemperatur, Rechts oben „M0“ oder „M1“ ob der Motor angesteuert ist, und unten den Temperaturoffset vom Poti, um wieviel Grad die Abschalttemperatur zusätzlich durch Potieinstellung in Richtung „kalt“ verschoben wurde.
Die Temperaturen sind der Einfachheit gleich in Kelvin, da gibts keine Probleme mit dem Nullpunkt und negativen zahlen, und man kann die Werte gleich 1:1 mit der Spannung mit einem DMM nachmessen.
Damit sind wir bei den Fehlerquellen: die billigen LM335 können mehrere Grad Offset haben, meist sind die aber deutlich besser als das Datenblatt garantiert, wodurch es sich eher nicht lohnt die teureren selektierten LM35 zu kaufen. Eine größere Fehlerquelle ist die Betriebsspannung des Mikrocontroller, die ja gleichzeitig die Referenz für den ADC ist. Läuft die Referenz davon, während die Temperaturfühlerspannungen stabil bleiben, verschiebt sich die Temperatur um ein paar Grad.
Beim ersten versuch mit einer Powerbank hatte ich genau 5V, da stimmten die Temperaturen, über Nacht hatte ich dann ein Samsung-Ladenetzteil angesteckt, welches fast 5,2V liefert, wodurch die Temperaturmesswerte um mehrere Grad daneben lagen.
Hier liegt Optimierungspotenzial, man könnte die ADC-Referenz mit einem TL431 erzeugen (z.B. auf 3,5V) und dabei gleichzeitig die Auflösung noch etwas verbessern.
Ich verzichte darauf. Grundlegend ist eine stabile Spannungsversorgung wichtig damit die Fühlerwerte stabil stehen, deshalb ist ein Elko auf der 5V schiene Pflicht. Ich habe 220uF verwendet. Nach dem Anschließen des später zu verwendenden Netzteils (und damit welche Spannung genau anliegt) kann man mit einem Multimeter die ADC_Eingänge nachmessen und mit dem Kelvin-Temperaturwerten im Display vergleichen. Im Arduino-Sketch kann dann ein Offset für die Messung eingetragen werden um die Fühler auf Linie zu bringen.
Danach wird die Temperatureinstellung nur noch mit dem Poti auf Wunsch abgeglichen. Ein Min/Max Thermometer mitten im Kühlraum ist hilfreich, die Werte sollten etwa zwischen 1°C und 10°C pendeln.
Wie gehts weiter?
Die ganze Sache wird jetzt ein paar Tage im Probebetrieb laufen um ggf noch hier und da was daran zu fummeln. Bei Zufriedenheit folgt dann ein angepasstes Gehäuse mit eingebautem Netzteil und Steuerung. Das Gehäuse soll hinten am Lüftungsgitter angeklipst werden.