Met een ESP en een paar sensoren kun je vrij eenvoudig een weerstation bouwen die ook de vochtigheid meet: Floris Wouterlood over zijn project sniffer box.
Floris Wouterlood
Een vriend van me is eigenaar van een Brabants vakantiehuisje waar hij zo nu en dan een weekendje vertoeft. De ligging tussen veel bomen maakt dat het huisje vooral in het najaar en winter behoorlijk last heeft van te hoge luchtvochtigheid. In de winter brandt een kacheltje op een laag pitje om vocht en vorst buiten de deur te houden. Mijn vriend wil heel graag inzicht hebben in het verloop van de luchtvochtigheid in het huisje, omdat hij overweegt een ontvochtiger te plaatsen. Het project was geboren: een apparaatje waarmee wordt bijgehouden hoe de relatieve vochtigheid in het vakantiehuisje dagelijks en in alle seizoenen op en neer gaat. Hiervoor moeten met regelmaat twee omgevingsvariabelen worden gemeten: temperatuur en relatieve vochtigheid. Een gegeven is dat er stroom is in het huisje, en internet (wifi).
ESPjes
Met een Arduino en een paar sensoren is het vrij eenvoudig om een weerstation te bouwen. Het is mogelijk om een logger te construeren die data wegschrijft naar een sd-kaartje. Nu vond mijn vriend het wonderbaarlijk dat het Internet of things (IoT) het mogelijk maakt om thuis vanuit de luie stoel op de smartphone te zien hoe het ermee staat in z’n huisje. Dat zou iets zijn!
‘ESPjes’, ofwel microcontrollers die een ESP8266-chip aan boord hebben, behoren tot de Arduino-familie omdat je ze kunt programmeren via de Arduino-gebruikersomgeving met standaard Arduino-instructies. Voorbeelden zijn de NodeMCU ESP8266 en de Wemos-ESP8266. Omdat ze wifi aan boord hebben, zijn ‘ESPjes’ typische vertegenwoordigers van het IoT-tijdperk. Ze gebruiken dezelfde sensoren als Arduino’s. Het enige verschil is dat een ESP8266 geheel op 3V-architectuur is ingericht, terwijl een Arduino zowel met 3V- als met 5V-componenten overweg kan.
Ontwerp
Ik stelde voor een IoT sniffer box te ontwerpen: een weerstation in een klein doosje waarin een printplaatje zit met daarop een Wemos type D1 mini-microcontroller met ESP8266-chip, een temperatuursensor, twee sensoren voor de relatieve vochtigheid en een piepkleine 128x32 oled-display. De stroomvoorziening is via een micro-usb-aansluiting en een externe 5V-gelijkstroomadapter die je ook als telefoonoplader kunt gebruiken.
Het meten van relatieve vochtigheid is lastig, want sensoren uit het goedkope segment zijn behoorlijk onnauwkeurig. Daarom kies ik voor twee relatieve-vochtigheidssensoren van het type DHT-11 voor de zekerheid een aparte, behoorlijk accurate temperatuursensor, de Dallas DS18B20. In afbeelding 1 zie je het schematische ontwerp.
Afbeelding 1: Bedradingsschema van de sniffer box |
Maken
Het definitieve apparaatje werd ingebouwd in een pvc-montagedoosje van 8 bij 12 cm. uit de bouwmarkt. De microcontroller kreeg een eigen printplaatje. De sensoren werden gepositioneerd op een plekje zo dicht mogelijk bij de poorten van het doosje en zo ver mogelijk weg van de microcontroller om de sensoren uit de buurt te houden van mogelijke warmtebronnen. Met schuimplastic werd het compartiment met de sensoren afgeschermd van de rest van het doosje: frisse, verse lucht dus voor de sniffer box-sensoren! Ik gebruikte hiervoor twee printplaatjes die in L-vormige configuratie aan elkaar werden gemonteerd. De onderzijde van de gecombineerde printplaatjes met de bedrading zie je in afbeelding 2, de geassembleerde, geopende sniffer box op de testbank is te zien in afbeelding 3.
Afbeelding 2: De ‘engine’: twee printplaatjes in L-vorm; onderzijde met bedrading |
Afbeelding 3: Gemonteerde ‘sniffer box’ (dekseltje nog niet bevestigd); |
Software
|
|||
Software
De sketch waarmee de sniffer box zijn werk verricht, doet het volgende:
- declareert alle benodigde libraries en variabelen;
- definieert een aantal zaken: one wire (voor de DS18B20), i2c voor de OLED display en het wegschrijfinterval via wifi;
- initialiseert de seriële poort en stuurt een boodschap naar deze poort;
- initialiseert de OLED-display en geef daarop een initialisatie-tekst weer;
- initialiseert de DS18B20-temperatuursensor;
- initialiseert de wifiverbinding (via een subroutine);
- leest beide DHT-11-sensoren uit en slaat de waarden op in (vier) variabelen;
- leest de DS18B20-sensor en slaat de waarde op in een variabele;
- gaat daarna aan de slag in het gedeelte ‘loop’ van de sketch.
Hierin wordt elke vijf minuten de gemeten relatieve luchtvochtigheid (beide DHT-11- sensoren) het internet opgestuurd (&field1 en &field2) en de temperatuur van de DS8B20 gemeten en opgestuurd (&field 3). De gemiddelde waarde van de relatieve luchtvochtigheid worden berekend en opgestuurd (&field4).
Het werkt allemaal prima en mijn vriend kan wanneer hij maar wil en vanaf elke plek ter wereld op zijn smartphone zien hoe het zit met de luchtvochtigheid en temperatuur in zijn vakantiehuisje.
|
||