1-draads temperatuursensor DS1820 op Raspberry Pi (direct GPIO)
Om de binnen- of buitentemperatuur te meten met de Raspberry Pi zijn er verschillende mogelijkheden. Dit artikel beschrijft de versie met de minimale hoeveelheid externe componenten. Deze is gebaseerd op de DS18S20 temperatuursensor en de software-emulatie van het 1-draads protocol.
De DS18S20 en gerelateerde DS18B20 en DS1822 zijn geïntegreerde schakelingen in een TO-92 behuizing met daarin de temperatuursensor, analoog-naar-digitaal omzetter en 1-draads interface. De genoemde typen zijn pin- en software-compatibel, ze verschillen aanzienlijk in meetnauwkeurigheid en prijs. De drie connectoren (zie afbeelding links) zijn massa (GND, pin 1), data (DQ pin 2) en bedrijfsspanning (VDD , pin3). U kunt VDD . aansluiten en GND en bedien de sensor met een parasitaire voeding van 3-5 volt. De verbinding van het circuit met de computer is dan mogelijk met een eenvoudige tweedraads twisted pair-kabel.
Op deze kabel – de 1-draads bus – kunt u meerdere DS1820 parallel aansluiten. Elke sensor heeft een unieke code die door de fabrikant is toegewezen om zichzelf te identificeren.
Raspberry Pi en 1-draads
Temperatuurmeting met de Raspberry Pi en de 1-draads temperatuursensor DS1820 bevat een lijst met verschillende manieren om vanuit de Raspberry Pi een 1-draads bus aan te sturen. Dit artikel beschrijft de oplossing (1) met de minste hoeveelheid externe schakelingen. Je hebt naast de sensoren maar één weerstand nodig, omdat deze oplossing het 1-draads protocol volledig softwarematig simuleert.
Slechts één weerstand
De datapoort DQ van de DS1820 wordt rechtstreeks aangesloten op de poort GPIO4 van de GPIO-interface van de Raspberry Pi. GND en VDD bevinden zich op aardklem GND. De parasitaire voeding zorgde voor een pull-up weerstand van 4k7 tussen de 3,3 volt aansluiting 3V3 en GPIO4.
De weerstand, een vrouwelijke connector voor bevestiging aan de GPIO-poort en de 1-draads aansluiting zijn gesoldeerd op een klein breadboard, dat direct op de GPIO-poort zit. De 1-draads aansluiting is te realiseren met een ruimtebesparende haakse female connector. Dit alles past in de TEK-BERRY behuizing van de Raspberry Pi.
1-draads softwarestuurprogramma's
De kernelmodules die nodig zijn voor de activering van de 1-draads temperatuursensor maken deel uit van de Linux-distributie Raspbian "wheezy". U moet ze echter expliciet laden:
sudo modprobe w1-gpio pullup=1sudo modprobe w1-therm
Belangrijk is de parameter pullup =1 , die de module vertelt dat er een parasitaire voeding via een pull-up weerstand aanwezig is. De modules creëren een submap voor elke sensor die zich net onder /sys/bus/w1/devices bevindt. De naam van de directory bestaat uit de familiecode van de sensor en het unieke identificatienummer. Sensoren van het type DS1820 en DS18S20 hebben de Family Code 10, DS18B20 heeft Code 28 en DS1822 de 22. In elke subdirectory bevindt zich het bestand w1_slave met daarin de sensorstatus en gemeten temperatuurwaarde:
cd /sys/bus/w1/devicescd 10000801b5*cat w1_slave0f 00 4b 46 ff ff 06 10 0c :crc=0c YES0f 00 4b 46 ff ff 06 10 0c t=7375
Het bestand bestaat uit twee regels, die elk de hexadecimale registerdump van het sensor-IC bevatten. Aan het einde van de eerste regel staat de controlesom (CRC) en de informatie of het een geldige meting is (JA). De tweede regel eindigt met de temperatuurmeting in duizendsten van een graad Celsius. In het voorbeeld is de temperatuur dus 7.375 °C. De nauwkeurigheid tot op drie plaatsen achter de komma is natuurlijk slechts schijn; in de datasheet van de DS18S20 staat bijvoorbeeld dat de meetnauwkeurigheid slechts ± 0,5° C is. De werkelijke temperatuur ligt dus ergens tussen de 6,8 en 7,9° C.
Als alles tot nu toe werkt, moet u de twee vereiste modules invoeren in het bestand /etc/modules om ze automatisch te laten laden tijdens het opstarten:
# /etc/modulesw1-gpio pullup=1w1-therm
Round Robin Database RRDtool
Voor een langdurige registratie van temperatuurmetingen en het comfortabel genereren van grafische afbeeldingen wordt het gebruik van RRDtool aanbevolen. De artikelen Weersdata-acquisitie met de USB WDE1 en Temperatuurmeting met de Raspberry Pi (USB-serieel) leggen deze tool in detail uit.
Eerst moet je RRDtool installeren met behulp van de Package Manager op de Raspberry Pi:
sudo apt-get install rrdtool python-rrdtool
Het tweede geïnstalleerde pakket python-rrdtool is een Python-interface voor RRDtool, die later wordt gebruikt. Aan het begin van het werk met RRDtool is de definitie van de database. In het volgende voorbeeld wordt een database gemaakt voor twee temperatuursensoren temp0 en temp1 . Het doel is om één waarde per kwartier (900 seconden) op te slaan. Na tien dagen (=960 waarden) vindt er een reductie plaats naar één gemiddelde, minimum en maximum waarde per dag. De bewaartijd van deze dagwaarden is tien jaar (=3600 waarden):
rrdtool create temperature.rrd --step 900 \DS:temp0:GAUGE:1200:-40:80 \DS:temp1:GAUGE:1200:-40:80 \RRA:AVERAGE:0.5:1:960 \RRA:MIN:0.5:96:3600 \RRA:MAX:0.5:96:3600 \RRA:GEMIDDELDE:0.5:96:3600
Data-acquisitie met Python
Een Python-script leest de speciale bestanden w1_slave en voegt de temperatuurwaarden in de round-robin-database in:
Voor meer details:1-draads temperatuursensor DS1820 bij Raspberry Pi (direct GPIO)
Productieproces
- Raspberry Pi Temperature Logger
- Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
- Temperatuur aflezen met DS18B20 | Raspberry Pi 2
- Temperatuurbewaking op de Raspberry Pi
- Temperatuur meten met RASPBERRY PI
- TMP006 Temperature Sensor Python Library met Raspberry pi,
- Python- en Raspberry Pi-temperatuursensor
- Raspberry Pi-weerstation
- Temperatuur bewaken met Raspberry Pi
- Ultrasone sensor (HC-SR04) + Raspberry Pi
- Bewegingssensor met Raspberry Pi