Arduino-Außenthermometer mit Trend, Min/Max-Werten
Komponenten und Zubehör
| Komponente | Menge | Hinweis |
|---|---|---|
| Arduino UNO | 1 | |
| Präzisionstemperatursensor TS-NTC-103, 10 kΩ | 1 | B+B Thermo Technik, Toleranz ±0,5 % bei 25 °C |
| Adafruit Standard LCD 16×2 (weiß auf blau) | 1 | |
| Netzteil 12 V DC 2,0 A | 1 | |
| Keramikkondensator 100 nF | 2 | Entkopplung |
| Elko 470 µF 16 V | 1 | Gegen Schaltnetzteil-Ripple |
| Metallfilmwiderstand 10 kΩ, 0,1 % Toleranz | 1 | Für Spannungsteiler mit NTC |
| Taster (Normalerweise offen) | 1 | Zum Zurücksetzen von Min/Max |
| Drehpotentiometer 10 kΩ linear | 1 | LCD-Kontrasteinstellung |
| Widerstand 10 kΩ | 1 | Allgemein |
Projektbeschreibung
Einführung
Dieses Thermometer wurde zum Spaß und zum Erlernen von Arduino-Programmierung sowie LCD-Ansteuerung gebaut. Später kamen Funktionen hinzu: Anzeige von Maximal- und Minimaltemperatur sowie ein Trendpfeil (steigend/fallend). Ein Taster setzt Min/Max auf den aktuellen Wert zurück.
Aufbau
Der Aufbau ist einfach: Alle Komponenten werden gemäß Schaltplan verbunden. Der 5 V-Ausgang des Arduino versorgt alle +5 V-Anschlüsse (Pfeile im Plan), alle GND-Pins werden miteinander verbunden. Die Stromversorgung erfolgt über ein externes 12 V-Netzteil am Arduino.
Benötigte Bauteile:
- Arduino Uno
- LCD-Display 1602A
- 12 V DC-Netzteil
- B+B Thermo Technik TS-NTC-103 (10 kΩ)
- Metallfilmwiderstand 10 kΩ, 0,1 % Toleranz
- Potentiometer 10 kΩ linear
- Widerstand 820 Ω (Toleranz unwichtig)
- Widerstand 10 kΩ (Toleranz unwichtig)
- Keramikkondensator 0,1 µF (=100 nF) 16 V (2 Stück)
- Elko 470 µF 16 V
- Taster (Normalerweise offen)
- Gehäuse (optional)
Der Sensor – ein hochpräziser NTC
Der verwendete NTC (TS-NTC-103) hat einen Widerstand von 10 kΩ bei 25 °C mit ±0,5 % Toleranz. Der Messbereich reicht von −60 °C bis +150 °C. Sowohl Basiswiderstand als auch B-Wert liegen innerhalb von ±0,5 %, sodass der Sensor ohne Kalibrierung eingesetzt und ausgetauscht werden kann. Durch einfache Widerstandsmessung lässt sich eine Genauigkeit von ±0,12 K bei 25 °C erreichen; im Bereich −60 °C bis +85 °C beträgt der Maximalfehler ca. ±0,5 K.
Für hohe Messgenauigkeit muss auch der Vorwiderstand des Spannungsteilers präzise sein. Hier wurde ein 10 kΩ Metallfilmwiderstand mit 0,1 % Toleranz, 0,6 W, TK 25 ppm verwendet. Jeder Widerstand mit ≤0,5 % Toleranz ist geeignet.
Störsignale am NTC-Kabel
Der NTC wird außerhalb des Hauses platziert (mehrere Meter Kabel). Um Störungen durch im Haus befindliche elektrisch „rauschende“ Geräte zu vermeiden, wurde ein Entkopplungskondensator von 100 nF vom analogen Temperatur-Eingang (Pin A0/14) gegen Masse geschaltet. Das Oszilloskop zeigte jedoch weiterhin Rauschen, verursacht durch den Takt des 1602-LCD. Nachdem ein weiterer 100 nF-Kondensator direkt zwischen VDD und VSS des LCD (mit maximal 1 cm Leitungslänge) gelötet wurde, war das Signal sauber. Ein 470 µF-Elko zwischen 5 V und GND des Arduino unterdrückt Ripple des Schaltnetzteils.
Platzierung des NTC
Um Fehlmessungen zu vermeiden, darf der NTC niemals direkter Sonneneinstrahlung ausgesetzt sein. Ideal ist die Nordseite des Hauses (Südseite auf der Südhalbkugel) oder ein freier Standort abseits des Hauses. Der Sensor sollte einige Millimeter von der Wand entfernt montiert werden, da die Wand wärmer sein kann als die Umgebungsluft. Eine unbeheizte Garagenwand eignet sich gut.


Software
Die LiquidCrystal-Bibliothek steuert das 1602-LCD. Konstanten und Variablen sind im Sketch kommentiert. A, B, C sind die Steinhart-Hart-Koeffizienten für den verwendeten NTC. Bei anderen NTCs müssen diese angepasst werden. Das Messintervall beträgt 3 Sekunden (Zeile 17). Für eine glatte Anzeige wird ein gleitender Mittelwert über 30 Messwerte (90 Sekunden) gebildet (numReadings = 30, Zeile 22). Jeder Rohwert ist ein Integer 0‑1023.
Steinhart-Hart-Näherung
Ein NTC (Negative Temperature Coefficient) ändert seinen Widerstand nichtlinear mit der Temperatur. Zwei gängige Näherungen sind die Beta-Formel und die Steinhart-Hart-Formel. Letztere liefert die bessere Approximation. Da der TS-NTC-103 einen weiten Bereich (−60 °C bis +150 °C) abdeckt, wir ihn aber nur in ca. −10 °C bis +30 °C nutzen, berechneten wir die Koeffizienten speziell für diesen engen Bereich. Dazu dienten drei Widerstand-Temperatur-Paare aus dem Datenblatt (−10 °C, 0 °C, +20 °C). Der Online-Rechner von Stanford Research Systems erleichtert die Berechnung.
Im Diagramm (roter Punkte = Daten, blaue Kurve = Beta-Modell, grüne Kurve = Steinhart-Hart) zeigt sich: Bei 10 kΩ ergibt Steinhart-Hart 25,0035 °C (sehr gut), Beta liefert 25,7716 °C (deutlich schlechter).

Quellcode
Version 1.4 behebt ein Konventionsproblem in PrintPG(), das im Offline-Editor einen Compilerfehler verursachte (im Web-Editor nicht). Version 1.3 fügte Hysterese für den Trendpfeil hinzu.
Der vollständige Sketch ist im Repository verfügbar.
Schaltpläne
Schaltplan wird nachgereicht.
Herstellungsprozess
- Integriertes QR-, RFID- und Temperatur-Verifikations-Zugangskontrollsystem
- Mehrere DS18B20 1-Wire Sensoren an Raspberry Pi anschließen für präzises Temperaturmonitoring
- Temperatur mit DS18B20 am Raspberry Pi 2 auslesen
- Temperaturmessung mit Maxim 1-Wire Sensoren und DS2482 I2C-Bridge am Raspberry Pi
- Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
- Nahtlose Temperatur- & Feuchtigkeitsüberwachung am Raspberry Pi mit EzTemp
- Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
- DIY Heimbrau-Temperaturregelung: Überwachen & Steuern mit Arduino
- Raspberry Pi Raumtemperatur-Überwachung mit Gnuplot-Graphen & E-Mail-Alerts
- Multi-Sensor Temperatur- & Licht-Überwachung mit Raspberry Pi & DS18B20