Arduino-gebaseerde buitenthermometer met trend, max en min waarden
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| Precisie temperatuursensor TS-NTC-103, 10 kΩ (B+B Thermo Technik) | 1 |
| Adafruit Standaard LCD - 16x2 Wit op Blauw (of gelijkwaardig met I²C) | 1 |
| Voeding 12V DC 2.0A | 1 |
| Condensator 100 nF (0,1 µF) | 2 |
| Elco 470 µF 16V | 1 |
| Metalfilm weerstand 10kΩ, tolerantie 0,1% (voor spanningsdeler) | 1 |
| Drukknop (normaal open) | 1 |
| Draaipotentiometer 10kΩ lineair (voor LCD-contrast) | 1 |
| Weerstand 10kΩ (tolerantie niet kritiek) | 1 |
| Behuizing (optioneel) | 1 |
Over dit project
Inleiding
Deze thermometer is gebouwd voor de plezier, maar ook om ervaring op te doen met Arduino-programmering en het gebruik van een LCD-display. Tijdens de ontwikkeling voegde ik extra functionaliteit toe: weergave van maximum- en minimumtemperatuur, en een pijltje op het display dat de temperatuurtrend aanwijst (stijgend/dalend). Een drukknop stelt de weergegeven min/max waarden in op de actuele temperatuur.
Hoe te bouwen
De opbouw is eenvoudig. Verbind de componenten zoals weergegeven in het schema. De 5V-uitgang van de Arduino Uno moet met alle +5V verbindingen verbonden zijn (pijlen). Ook alle ground-pinnen met elkaar verbinden. De thermometer wordt gevoed door een externe 12V DC voeding aangesloten op de Arduino. Upload de sketch naar je Arduino en je bent klaar.
De sensor: een hoogprecisie NTC
De gebruikte NTC is een precisie temperatuursensor van B+B Thermo Technik van 10 kΩ. Deze sensor heeft een weerstandstolerantie bij 25 °C van ±0,5%. De NTC-temperatuursensoren van de TS-NTC serie hebben een brede meetbereik van -60 ... +150 °C, waardoor ze geschikt zijn voor toepassingen waar vroeger dure platina-weerstanden voor gebruikt werden. Zowel de basiselektrische weerstand als de B-waarde liggen binnen een tolerantie van ±0,5%, waardoor de component in veel toepassingen zonder temperatuurkalibratie gebruikt kan worden en ook zonder herkalibratie vervangen kan worden. Door middel van een eenvoudige weerstandsmeting kan zo een nauwkeurigheid van ±0,12 K bij 25 °C bereikt worden. In het temperatuurbereik van -60 ... +85 °C is de maximale fout ongeveer ±0,5 K.
Je kunt elke andere hoogprecisie NTC gebruiken, maar dan moet je de Steinhart-Hart coëfficiënten in de sketch aanpassen aan die NTC (zie Steinhart-Hart benadering).
Voor hoge precisie moet de andere weerstand van de spanningsdeler, in serie met de NTC, ook een lage tolerantie hebben. Ik gebruikte een metalfilm weerstand van 10kΩ, tolerantie 0,1%, 0,6W, temperatuurcoëfficiënt 25 ppm. Elke andere weerstand met een tolerantie van 0,5% of beter is ook geschikt.
NTC-kabel die ruis opvangt
De NTC is buiten het huis geplaatst, in mijn geval met een paar meters kabel. Om storingen van andere elektrisch "ruisende" apparatuur in huis te voorkomen, plaatste ik een decoupleringscondensator van 0,1 µF van de analoge temperatuuringang van de Arduino Uno (pin A0) naar aarde. De oscilloscoop toonde nog steeds ruis op pin A0. Deze ruis werd veroorzaakt door de klok van het 1602 LCD-display. Deze verdween na het plaatsen van een decoupleringscondensator van 0,1 µF tussen de VDD en VSS pin van het LCD-display. Deze condensator moet direct op de LCD-printplaat gesoldeerd worden met zo kort mogelijke draden (maximaal 1 cm).
De oscilloscoop toonde toen een schoon signaal op pin A0. Om ruis en rimpel van de schakelvoeding te voorkomen, plaatste ik een elco van 470 µF tussen de 5V en GND van de Arduino.
Plaatsing van de NTC
Om foute temperatuurmettingen te voorkomen, mag de NTC en zijn behuizing nooit in de zon komen. Plaats hem in de schaduw, bij voorkeur op de noordzijde van het huis (op de zuidkant als je op de zuidelijke halfrond leeft) of zelfs weg van het huis. Niet recht tegen de muur, maar minimaal een paar mm van de muur af, want de muur kan een paar graden warmer zijn dan de buitenlucht. En bij voorkeur een muur zonder verwarming erachter, zoals de garagemuur.


Over de software
De LiquidCrystal bibliotheek wordt gebruikt voor de 1602 LCD-commando's. Verschillende constanten en variabelen zijn gedeclareerd. Lees de commentaren in de sketch voor meer info. A, B en C zijn de Steinhart-Hart coëfficiënten voor de gebruikte NTC. Voor andere NTC's moeten deze coëfficiënten gewijzigd worden. De integer interval op regel 17 definieert de tijd tussen opeenvolgende metingen, namelijk 3 seconden. Om een vloeiende verloop van de temperatuurmeting te krijgen, wordt een lopend gemiddelde berekend uit 30 opeenvolgende metingen (numReadings op regel 22). De getoonde temperatuur is dus altijd het gemiddelde van de laatste 90 seconden. Voor de berekening van het lopend gemiddelde wordt een array gebruikt: readings[numReadings] of in dit geval readings[30] op regel 21. Elke meting is een integer tussen 0 en 1023.
Steinhart-Hart benadering
Een NTC (Negative Temperature Coefficient) is een weerstand met een temperatuurafhankelijke weerstand. De weerstand daalt als de temperatuur stijgt. Helaas is de relatie tussen weerstand en temperatuur niet lineair. Maar de R-T-kromme kan benaderd worden door een formule. In de praktijk worden twee benaderingsformules gebruikt: de zogenaamde Beta-formule en de Steinhart-Hart formule. Omdat de laatste de beste benadering geeft, gebruik ik die. Vaak geeft de fabrikant waarden voor beide benaderingen. De TS-NTC-103 kan echter in een wijd temperatuurbereik van -60...+150 °C gebruikt worden. Omdat we hem in een veel smaller bereik van ca. -10...+30 °C gebruiken, krijgen we een betere benadering als we de coëfficiënten zelf berekenen speciaal voor dit bereik. Ik gebruikte drie weerstand-temperatuur paren uit de specificaties van de fabrikant in ons werkbereik (-10, 0 en +20 °C). Het is simpel om de coëfficiënten te berekenen met de online calculator van Stanford Research Systems. In het diagram hieronder zie je de data (rode stippen), de Beta-model benadering en de Steinhart-Hart benadering. In de rechter benedenhoek zie je dat bij een weerstandswaarde van 10k, de benaderde temperatuur 25,0035 °C is met Steinhart-Hart (zeer goed), en 25,7716 °C met Beta benadering (aanzienlijk minder goed).

Link naar NTC calculator: Stanford Research Systems
Code
De Arduino-code is beschikbaar in de code-sectie van dit project. Versie 1.4 lost een conventieprobleem in functiedeclaratie PrintPG() op dat een compilerfout gaf in de offline editor maar geen problemen in de web editor. Versie 1.3 bevat hysteresis voor de trendpijl.
Schema's
Schakelschema's zijn beschikbaar in de projectdocumentatie.
Productieproces
- Geïntegreerde QR, RFID en Temperatuurverificatie Toegangscontrolesysteem
- Meerdere DS18B20 1-Wire Sensoren Aan Een Raspberry Pi Koppelen Voor Nauwkeurige Temperatuurmonitoring
- Hoe Temperatuur Te Lezen Met Een DS18B20 Op Raspberry Pi 2
- Temperatuurmeting op Raspberry Pi met Maxim 1-Wire sensoren en DS2482 I2C-brug
- Een externe temperatuursensor bouwen met Raspberry Pi en Python – Stap-voor-stap handleiding
- Naadloze temperatuur- en vochtigheidsbewaking op Raspberry Pi met EzTemp
- Accurate temperatuurbewaking in een serverkast met Raspberry Pi
- DIY thuisbrouw temperatuurcontrole: Monitoren & regelen met Arduino
- Raspberry Pi-gebaseerde kamertemperatuurbewaking met Gnuplot-grafieken en e-mailalerts
- Een Multi-sensor Temperatuur- & Lichtmonitoringssysteem Bouwen met Raspberry Pi & DS18B20
- Een Robot Bouwen met Raspberry Pi en Python: Een Complete Gids