erstellt
18.01.2011 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Temp Messung 2025 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ziel dieses Versuches ist es mit einem
Digitalen Temperatur Sensor vom Typ DS18B20 die Temperatur
zu erfassen
und natürlich auch aus zu werten. Anschließend dann soll die Temperatur per Funk an einen Rechner oder einen anderen Empfänger übermittelt werden. Um ein Verständnis dafür zu bekommen wie der Sensor arbeitet hab ich versucht mich in der Literatur und auch im Internet Sachkundig darüber zu machen , leider mit sehr mäßigen Erfolg . Es gibt zwar genügend Informationen und auch Videos darüber , aber alle die ich finden konnte waren nur bruchstückhaft und oder unvollständig. Beim genaueren hinterfragen bei Personen die sich schon damit befasst hatten konnte man oft keine gescheiten Informationen bekommen. Und hinterher kam bei den Meisten befragten dann zu Vorschein, das sie den zum auslesen und auswerten des Sensors benutzen Code in der Regel aus dem Netzt einfach übernommen haben und selber angepasst hatten ohne Ihn wirklich zu verstehen. Also sah ich mich gezwungen mich als Autodidakt zu betätigen und der Sache auf den Grund zu gehen. Erst einmal zu den Sensoren selber, ich spreche hier von der Mehrzahl weil es derer unterschiedliche Typen gibt. Zumindest die mit denen ich Bekanntschaft gemacht habe nenne ich hier einmal obwohl ich mich nur mit einen Typen beschäftige, weil der eine höhere Auflösung hat und auch in einer wasserdichten Variante mir Kabelanschluss zu bekommen ist. Es gibt den Typ DS18S20, DS1820 , und den hier von mir benutzten Typ DS18B20 Die Auswertung und Berechnung geschieht mit einem Mikroprozessor vom Typ Atmega 8 denn ich als erstes vorstelle. Den Atmega 8 verwende ich weil es den in einer Standardgröße gibt an dem man noch selber herumlöten kann außerdem gibt es Atmega 8 Typen mit der Zusatzbezeichnung "L" die auch bei Spannungen herunter bis ca. 3,5 Volt arbeiten. Das bietet den Vorteil die Schaltung mit einem Akku vom Typ 18680 zu betreiben. Die weiter unten vorgestellt Schaltung hat ein angeschlossenes Display welches aber nur in der Entwicklung Phase dienen soll und nicht Bestandteil der fertigen Schaltung sein soll. Deshalb ist das Display nur aufgesteckt und kann bei fertiger Schaltung wieder entfernt werden. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Atmega
8L |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Der Atmega 8 mit den von mir folgend benutzten Anschlüsse: Die Pins 17-18-19 sind dabei doppelt belegt da beim Programmieren ja nichts auf dem Display angezeigt werden muss.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Temp
Sensor DS18B20 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Temperaturbereich -55 bis + 125°C Spannung 3 - 5,5 Volt Stromaufnahme ca. 1 mA Auflösung 12 Bit sind 0,0625 Grad Schritte Genauigkeit +- 0,5° |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funk
Modul |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Dabei ist zu beachten , das man ja 2 Stück Module benötigt ,einmal als Sender und einmal als Empfänger . Welche Typ ist nicht wichtig aber es muss sicher gestellt werden das beide Typen also Sender sowie Empfänger vom gleiche Typ sind weil sie offensichtlich verschiedene Protokolle haben Diese Funk Modul arbeitet bei ca 433 MHz Spannung 3,2 - 5,5 Volt Stromverbrauch max. 200 mA |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Display |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() Bei dem Display handelt es sich um ein 4* 20 Zeichen Display mit der Bezeichnung "2004A" Das Display ist steckbar und kann bei Bedarf entfernt werden. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Schaltplan |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die Schaltung enthält Bauteile die nur nötig sind wenn die Temperatur per Funk weitergeleitet werden soll. Wenn das aber nicht gewollt ist, und die Anzeige nur auf dem aktuellen Display statt finden soll , können einige Bauteile in der Schaltung weg gelassen werden. Dazu gehören das Funk-Modul , Quarz, 2 mal 20p Kondensatoren, und im extrem Fall auch die Leuchtdioden mit ihren Widerständen sowie die beiden Taster. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programm Code in Bascom |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Als Ergebnis wird bei einer ungefähren Umgebungstemeratur von ca. 18 ° der Wert 283 ausgegeben. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Das ist also der erfasste Wert als Dezimal
und als Binärwert |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Berechnung des Temperatur Werts |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Der aktueller Temperaturwert also
die Raumtemperatur wird als Binärwert mit 16 Bit angezeigt oder als Dezimalwert mit 283. Nun hat jedes Bit seine eigene Wertigkeit die wir dem Datenblatt des Sensor entnehmen müssen. Dazu werden die ausgelesenen 16 Bits unterteilt in Low Byte und High Byte , die im Datenblatt allerdings als LS und MS angegeben werden. Das Kleinste Bit, also BIT 0 befindet sich ganz rechts und wird zur linken Seite hin immer größer. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nun kann ich jedes Bit einzeln auslesen und mit der jeweiligen Wertigkeit multiplizieren. Und anschließen alle Ergebnisse addieren um an die Temperatur zu kommen. Das brauche ich aber nur bei den Bits der Nach Komma Stellen machen, weil es für die Bits vor dem Komma eine einfacherer Möglichkeit gibt.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Als erstes berechne ich also die Nach-Komma Stellen, das sind die Bits's 0 bis 3. Der direkt aus dem Sensor erfasste Wert ist in der Variable "Sensorwert" gespeichert . Also erstelle ich vier Variable denen jeweils ein Bit zugeordnet werden. Die Anwesung "Halbe = Sensorwert.3 " liest aus dem Binären "Sensorwert" das dritte Bit von rechts aus gezählt aus und speichert es in der Variable "Halbe"
Anschließend werden die Variablen abgefragt, und falls die jeweilige Variable einen Eins auf weist dann wird diese Eins mit der passenden Wertigkeit in der Tabelle multipliziert befindet sich etwas anderes als eine Eins in der Variable, dann wird der Wert mit Null angenommen und soweit ignoriert.
Nun werden die vier Werte addiert und in der Variable "Nachkomma" hinterlegt.
Betrachten wir das Ergebnis für die Nach Komma Stelle. 1 mal 0,00625 + 1 mal 0,125+ 1 mal 0,5 wären 0,63125 °C
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Das gleiche machen wir nun mit den Vor Komma Stellen. Im Datenblatt des Sensor ist angegeben das der eigentliche Temperatur-Wert in den Bits 0 bis 12 abgespeichert ist. Bit 0- 3 ist vergeben für die Nachkomma-Stelle und Bit 4 bis 12 für die Vor-Komma Stellen. Um nun die Vorkomma-Stellen zu berechen kann man es genau so machen , wie bei den Nach Komma stellen. Es gibt aber auch eine bessere Lösung mit weniger Aufwand. Nehme ich nun die 16 Bits und verschiebe sie um 4 Stellen nach rechts ,
dann fallen die 4 Stück Nachkomma Stellen zur rechten Seite heraus und die restlichen Bits haben ihre Normale Wertigkeit weil ja diese Bits normalerweise keine Kommstellen kennen. Das ganze sieht dann so aus:
Das Ergebnis wäre dann 1 mal 1 + 1 mal 16 wären 17 °C Addiere ich nun die Ganzen Werte mit der Nachkomma Stelle komme ich auf 17,63125°C |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nun kann man noch angeben ob es sich um einen positive oder negative Temperatur handelt. Diese Information ist gespeichert in den Bits 10 bis Bit 15. Bei 0 °C und darunter enthalten alle diese Bits den Wert "1"
Also werden alle diese Bits abgefragt ob sie alle eine "1" enthalten um den Temperaturwert dann eine Minus oder Pus Zeichen voran zu stellen.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||