Home / Blog / Hochauflösende Temperaturmessungen mit dem LM35

Hochauflösende Temperaturmessungen mit dem LM35

Der Code ist hier zu finden: https://gist.github.com/madgyver/7b09e633503119bd198c8873154a9772

 

Ich bin gerade dabei einen Demo zum Thema Überabtastung und gleitender Mittelwert zu bauen. Die Grundidee bei der Überabtastung ist es, deutlich mehr Messwerte zu erfassen als eigentlich nötig wären. Durch die zusätzlichen Messwerte ist man in der Lage das Signal-Rausch-Verhältnis durch Mittelwertbildung deutlich zu verbessern, was letztendlich dazu führt dass das Auflösungsvermögen des Analog-Digital-Umwandlers erhöht wird. Es gibt zu dem Verfahren sogar eine App-Note von ATMEL (AVR121), die eine gute Einführung in die Thematik darstellt, allerdings kann man nicht erwarten, dass dabei besonders tief in die Mathematik eingegangen wird. Dazu werde ich später noch einen ausführlicheren Artikel schreiben, im Moment möchte ich nur kurz vom Stand der Dinge berichten.

 

Normalerweise kann man de LM35 mit einem Arduino UNO mit einer Auflösung von etwa 0,2 °C auswerten. Durch Überabtastung können wir jedoch eine effektive Auflösung von bis zu 0,01°C erreichen! Am Anfang war ich mir nicht sicher ob die Messwerte überhaupt brauchbar sind, weil ich nicht genau weiß wie präzise der Sensor ist. Es hat sich allerdings herausgestellt, dass die Messergebnisse ganz brauchbar sind. Der Sensor ist empfindlich genug, um die Temperaturerhöhung durch eine in der Nähe gehaltene Hand anzuzeigen. Natürlich ist der Temperaturanstieg sehr klein, etwa 0,3 °C, und man muss die Hand etwa 5 cm vor den Sensor halten. Aber selbst das ist schon eine erhebliche Steigerung. Es ist auch möglich das Öffnen eines Fensters an den Messwerten abzulesen, noch bevor sich der Raum um 0,5 °C abgekühlt hat. Später will ich mir dafür aber noch eine automatisierte Auswertung austüftelt.

 

Obwohl ich die App-Note mich erst darauf gebracht hat Überabtastung auf einem Arduino zu testen, folgt dieser Code einem ganz anderen Ansatz und zwar wird ein gleitender Mittelwert verwendet und auf Downsampling verzichtet. Letzteres funktioniert deshalb, weil wir mit Fließkommazahlen und nicht mit Integern arbeiten. Eine Herausforderung war es, eine Möglichkeit zu finden den gleitenden Mittelwert über 2048 Messwerte zu bilden, da der Arduino nur über sehr beschränkte Ressourcen verfügt. Typische Implementierungen des gleitenden Mittelwertes benutzen ein Array um die vorherigen Messwerte zu speichern. Allerdings würden 2048 16-Bit Werte für einen ATmega328 zu viel sein. Die App-Note umgeht dieses Problem vollkommen in dem es einen einfachen Mittelwert bildet und dadurch den Speicheraufwand drastisch reduziert, dabei wird aber natürlich auch die Zeitauflösung stark eingeschränkt. Natürlich ist hat auch dieser Experimentieraufbau ein sehr eingeschränkte Frequenzverhalten, da die Mittelwertbildung einen massiven Tiefpass darstellt und durch die Anzahl an Werten über die gemittelt wird, wird auch eine lange Verzögerung mit eingeschleppt. Glücklicherweise sind Temperaturmessung sehr langsam und daher sind diese Nachteile letztendliche keine große Einschränkung.

Leave a Reply

Your email address will not be published. Required fields are marked *

*