Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino:flaschenkuehler:programmversion_0.6

Flaschenkühler - Programmversion 0.6

Nach den Problemen mit den Thermistoren im ersten Langzeittest wurden diese durch die digitalen Temperatursensoren DS18B20 ersetzt.

Um dynamischen Speicher zu sparen, werden die Adressen der Temperatursensoren nicht beim Programmstart ausgelesen, sondern manuell zugewiesen. Der einzige Nachteil ist, dass die Sensoren nicht getauscht werden können, ohne die Adresse des getauschten Sensors manuell im Programmcode zu ändern.

Dafür werden die folgenden Programmzeilen gelöscht:

DeviceAddress environmentThermometer, coolerThermometer, cupbaseThermometer, cuptopThermometer;

if (!sensors.getAddress(environmentThermometer, 0)) Serial.println("Unable to find address for Device 0");
if (!sensors.getAddress(coolerThermometer, 1)) Serial.println("Unable to find address for Device 1");
if (!sensors.getAddress(cupbaseThermometer, 2)) Serial.println("Unable to find address for Device 2");
if (!sensors.getAddress(cuptopThermometer, 3)) Serial.println("Unable to find address for Device 3");

Und durch dies ersetzt:

DeviceAddress environmentThermometer = { 0x28, 0x7C, 0x49, 0x3B, 0x0A, 0x00, 0x00, 0x57 };
DeviceAddress coolerThermometer      = { 0x28, 0x2E, 0xE0, 0x39, 0x0A, 0x00, 0x00, 0xD0 };
DeviceAddress cupbaseThermometer     = { 0x28, 0x6B, 0x9F, 0x54, 0x0A, 0x00, 0x00, 0x41 };
DeviceAddress cuptopThermometer      = { 0x28, 0x0F, 0x13, 0x55, 0x0A, 0x00, 0x00, 0x3B };

Dadurch werden 2 % Programmspeicher und 13 % dynamischer Speicher eingespart.

Die digitalen Temperatursensoren dürfen nicht häufiger angefragt werden, als sie benötigen, um die Temperatur zu berechnen. Weil die Dauer der Berechnung von der eingestellten Sensorauflösung abhängig ist, wird die Dauer des Messintervalls auf Basis der Sensorauflösung berechnet:

intervalTempControl = 750/ (1 << (12-TEMPERATURE_PRECISION));

Das EEPROM ist nur für eine begrenzte Anzahl von Schreibvorgängen ausgelegt. Um die Schreibvorgänge in das EEPROM zu reduzieren, werden alle mit den Tastern vorgenommenen Einstellungen mit einer Zeitverzögerung von 10 Sekunden im EEPROM gespeichert. Wenn nun also die Solltemperatur verändert wird, wird nicht nach dedem Tastendruck das EEPROM aktualisiert. (Bis Programmversion 0.5 wurde das EEPROM nach jedem Tastendruck aktualisiert.

Ebenfalls um das EEPROM zu schonen, werden die Betriebsstunden und das Serviceintervall nur noch stündlich im EEPROM aktualisiert.

Damit die Anzeige der Isttemperatur nicht zwischen zwei Werten hin und her zappelt, wird aus den letzten neun Werten der Medianwert im Display angezeigt. Ich habe mich für den Medianwert und nicht für den Mittelwert entschieden, damit das Display möglichst selten aktualisiert werden muss. Die Anzeige des Mittelwerts würde dazu führen, dass das Display sehr viel häufiger aktualisiert werden muss. Diese genauere Anzeige würde jedoch keinen Mehrwert bieten, sondern nur dazu führen, dass die Anzeige unruhig erscheint. Die Berechnung des Medians aus neun Float-Werten kostet ca. 5 % des dynamischen Speichers, dessen Belegung von 72 % auf 77 % steigt. Ab einer Belegung von 75 % des dynamischen Speichers warnt die Arduino-IDE vor möglichen Instabilitäten. Daher muss beobachtet werden, ob es zu Instabilitäten kommt und ggf. der Median aus weniger Werten gebildet werden.

To Dos:

  • Die Variable für den Betriebsstundenzähler auf int umstellen. Es weicht, wenn volle Stunden gezählt werden, weil der Flaschenkühler in der Regel mehrere Stunden pro Tag läuft.
  • Im Expertenmodus wird die Temperatur des Becherranssensors nicht aktualisiert.
  • Die Setpoint des PID-Regelers muss schärfer eingestellt werden: 8°C unter der Umgebungstemperatur.
  • Die Betriebsstundenanzeige sollte eine konstante Anzahl von Ziffern haben und dann mittig ausgerichtet werden.
  • Anstatt den Duty-Cycle des Peltierelements auf dem Display anzugeben, könnte die (berechnete) Kühlleistung ausgegeben werden. Da ich die nicht messen kann, müsste ich recherchieren, ob es für das Peltierelement eine entsprechende Tabelle gibt.

Tags: #Arduino #OLED

arduino/flaschenkuehler/programmversion_0.6.txt · Zuletzt geändert: 18.05.2023 12:34 von 127.0.0.1