Het weer is één van de meest besproken onderwerpen en je kunt er nog veel meer over vertellen als je je eigen weerstation hebt. Lees hier hoe je die zelf bouwt.

Henk Siewert


Het weer is een dagelijks terugkerend item en een hot topic dat je overal tegenkomt, is de opwarming van de aarde en de gevolgen daarvan. Afgelopen zomer was het inderdaad ‘hot’ en het ene na het andere warmte- en droogterecord werd gebroken. En als het dan regent, komt er in korte tijd zoveel nattigheid naar beneden dat ook dan de records je om de oren vliegen.

KNMI
Voor het bijhouden van al deze verschijnselen, zijn we voor een belangrijk deel afhankelijk van bijvoorbeeld het KNMI en andere weerkundeorganisaties. Nu kun je natuurlijk zeggen dat de weerstations van het KNMI voldoende informatie opleveren en dat klopt in zeker opzicht wel. Maar, en dit is een belangrijke maar, het KNMI doet zijn metingen onder zeer gecontroleerde omstandigheden: zo worden de metingen gedaan op 150 centimeter hoogte in een kortgeschoren grasveld ter grootte van een voetbalveld.

Afb.1 KNMI
De KNMI doet metingen op 150 cm. hoogte in een kortgeschoren grasveld ter grootte van een voetbalveld
(Foto KNMI)

Het grootste deel van de bevolking leeft echter niet in een weiland, maar in verstedelijkte gebieden. En daar zijn de omstandigheden, en dus de gemeten waarden, anders dan bij het KNMI. Er is gelukkig steeds meer begrip voor het verschil in omstandigheden en de gerenommeerde instituten houden er wel steeds meer rekening mee. Toch kan het voor veel mensen nog zeer interessant zijn om op hun woonplek metingen te doen. Maar het is natuurlijk vooral ook leuk om je eigen weerstation te hebben, dus daarom bouwen we er zelf één.

Zelf meten
Amateurwetenschappers, jij en ik dus, kunnen hun metingen opsturen naar het KNMI waar de resultaten in de gegevens worden verwerkt. Maar dan moet je wel die metingen kunnen doen en daarvoor heb je apparatuur nodig. Er zijn vele soorten te koop in allerlei prijsklassen. Maar je kunt ook zelf je apparatuur bouwen en programmeren. Want als we het zelf doen, doen we het met de computer. Daarom zijn we natuurlijk ook lid van HCC. Dus start die computer maar op, stook de soldeerbout warm en schenk maar eens een flinke kop koffie (of thee of zo…) in. Dan gaan we van start.

Onderdelen
Nog niet zo heel lang geleden was er voor het doen van meteorologische metingen behoorlijk dure apparatuur nodig. Maar sinds de introductie van de microcontroller en de sensoren die je daarop kunt aansluiten, is het allemaal een stuk goedkoper geworden. Voor ons project gaan we gebruikmaken van de Arduino en een aantal eenvoudige sensoren. Waarom de Arduino? Vanwege de prijs en de populariteit. Bovendien is er al een heleboel software beschikbaar die we, soms met wat aanpassingen, in ons project kunnen gebruiken.

We kunnen dus vast voor de belangrijkste onderdelen een lijstje maken, die op het laatste onderdeel na, voor HCC-leden met korting als compleet pakket te bestellen is:

   

 
Ledenvoordeel

Klik hier en lees
hoe je als HCC-lid
de benodigde componenten
met een leuke korting
kunt aanschaffen

   
  • Arduino Uno Rev3 - ATmega328 of vergelijkbaar bordje
  • DHT22 relatieve vochtigheidssensor (RV-sensor) met weerstand
  • Bosch BMP280 luchtdruksensor break-out
  • Half-size breadboard
  • Jumperdraadjes male-male
  • Usb-kabel voor Arduino
  • Arduino IDE
  • Computer

Voordat we de lijst gaan doornemen, wil ik een opmerking plaatsen over de aankoop van de onderdelen. Koop kwaliteit! Het is heel verleidelijk om alle spullen in goedkope landen, of bij shops die spullen uit goedkope landen importeren, te bestellen. Dat kan veel geld schelen, maar ook veel ergernis opleveren. Het prijsverschil moet ergens vandaan komen en meestal zit dat verschil in de kwaliteit. Dus denk daar goed over na. Genoeg gepreekt, laten we de lijst maar eens doornemen.

Arduino 2

De Arduino Uno is het zenuwcentrum van het weerstation dat we gaan bouwen

 

Arduino, sensoren, etc.
De Arduino Uno is het meest gebruikte microcontrollerbord met een Atmel ATMega328 processor. Dit bordje is het zenuwcentrum van het weerstation dat we gaan bouwen.De relatieve vochtigheid en de temperatuur worden gemeten met een door Adafruit geleverde Asair DHT22-sensor.

DHT22 3
De relatieve vochtigheid en de temperatuur
worden gemeten met een door Adafruit
geleverde Asair DHT22-sensor

Deze sensor wordt geleverd met de juiste pull-up weerstand. Deze sensor staat ook bekend onder de aanduidingen RHT03, AM2302 enz. Ze lijken hetzelfde, maar zijn het niet helemaal. In de behandeling van de hard- en de software komen we daar nog op terug.

De luchtdruk (en wederom de temperatuur) wordt gemeten met een Adafruit breakout-bordje met een Bosch BMP280-sensor. Een echte BMP280 is in de fabriek gekalibreerd en de kalibratiegegevens zijn in het geheugen van de chip opgeslagen. Die gegevens zijn heel belangrijk voor het goed functioneren van de sensor. Bij namaak-BMP280’s kan dat heel anders zijn…




Waarschijnlijk vraag je je af waar de temperatuur vandaan moet komen. Wel, die gaan we niet apart meten: zowel de hygrometer- als de barometersensor hebben namelijk een temperatuursensor ingebouwd. De relatieve vochtigheid (RV) meten kan niet zonder de temperatuur te meten en de luchtdrukmeting moet gecorrigeerd worden naar de temperatuur waarbij wordt gemeten.

BMP 4
        De luchtdruk (en de temperatuur)
wordt gemeten met een Adafruit
breakout-bordje met een Bosch
BMP280-sensor

Ik heb uitgebreide proeven gedaan met de temperatuurmeters in de beide sensoren en die vergeleken met andere sensoren en een gekalibreerde, traditionele vloeistofthermometer. Ze waren het, binnen redelijke grenzen, best met elkaar eens. Verwacht geen metingen tot op de tiende graad nauwkeurig, zelfs het KNMI, met alle hightech apparatuur, kan dat niet. Een nauwkeurigheid van 0,2 graden Celsius is al fantastisch. In de praktijk is 0,3 graden Celsius meestal goed haalbaar. Wil je meer technische gegevens, dan raad ik je aan de gegevensbladen van de sensoren op te halen bij de fabrikanten

Waarschijnlijk vraag je je af waar de temperatuur vandaan moet komen. Wel, die gaan we niet apart meten: zowel de hygrometer- als de barometersensor hebben namelijk een temperatuursensor ingebouwd. De relatieve vochtigheid (RV) meten kan niet zonder de temperatuur te meten en de luchtdrukmeting moet gecorrigeerd worden naar de temperatuur waarbij wordt gemeten. Ik heb uitgebreide proeven gedaan met de temperatuurmeters in de beide sensoren en die vergeleken met andere sensoren en een gekalibreerde, traditionele vloeistofthermometer. Ze waren het, binnen redelijke grenzen, best met elkaar eens. Verwacht geen metingen tot op de tiende graad nauwkeurig, zelfs het KNMI, met alle hightech apparatuur, kan dat niet. Een nauwkeurigheid van 0,2 graden Celsius is al fantastisch. In de praktijk is 0,3 graden Celsius meestal goed haalbaar. Wil je meer technische gegevens, dan raad ik je aan de gegevensbladen van de sensoren op te halen bij de fabrikanten.

RV-sensor
Als eerste gaan we aan het werk met de RV-sensor. Om deze sensor te kunnen gebruiken, moet je een zogenaamde pull-up weerstand aanbrengen tussen de voedings- en de datapin.

Breng bij de RV-sensor
een zogenaamde pull-up
weerstand aan tussen de
voedings- en de datapin
           RV sensor 5

Bij de DHT22 wordt een weerstand van 10 kilo-ohm meegeleverd. Maar let op! Andere sensoren, ook al zien ze er hetzelfde uit, kunnen andere weerstandswaarden nodig hebben. Een RHT03 heeft, volgens het gegevensblad, 1 kilo-ohm nodig. Controleer de waarde! Pin 3 kun je gewoon laten ‘zweven’ en hoeft dus niet ergens op aangesloten te worden. Wel is het handig om de pin op het bordje te solderen. Het is verstandig om tussen Vcc en Gnd een keramische condensator van 100nF op te nemen om Vcc te stabiliseren.

Bovenaanzicht 6             

Het bovenaanzicht 
van de DHT22

Het aansluiten van de sensor is eenvoudig: Gnd naar Gnd, Vcc naar 5Volt en Data naar één van de digitale ingangen. In de code heb ik gekozen voor pin 5.

Moeilijk?
Als je in het gegevensblad kijkt naar de communicatie tussen de Arduino en de sensor, zul je zien dat voor het programmeerwerk een stevige kennis van elektronica en C++ nodig is. Maar daar hebben we wat op gevonden: er is een kant-en-klare bibliotheek beschikbaar.

Het is mijn ervaring dat een project als dit de nodige begeleiding vraagt. Zeker voor iemand die nog niet eerder met een Arduino of vergelijkbaar bordje bezig is geweest, kunnen er vele vragen of moeilijkheden opdoemen. En de software, zeker de bibliotheken, moeten beschikbaar zijn. Om hier aan tegemoet te komen, wordt dit verhaal op de website www.swtobservatory.nl ondersteund. De software en de bibliotheken zijn gemaakt voor de standaard Arduino IDE die te downloaden is van de Arduino-website: www.arduino.cc . Op diezelfde website staat uitgebreid vermeld hoe de software en de bibliotheken moeten worden geïnstalleerd. Over deze onderwerpen is verder op het internet informatie te vinden, onder andere op Sparkfun (https://bit.ly/2R5xOhH) en op Adafruit (https://bit.ly/2SWLY1V). Dus ik zie er vanaf om dat hier te bespreken.

   

 
De Hygrometersoftware voor de Arduino Uno

/* Versie voor PC-Active 304 */

/*

Hygrometer

 Auteur          : Henk Siewert

 Datum           : 15 december 2018

 Sensor          : Adafruit Asair DHT 22

 Versie          : 01

 Output          : P,T\n

 MCU             : Arduino Uno - Atmel ATMega328

 Language        : Arduino C++

 Compiler        : Arduino 1.8.7

 Editor          : NotePad++

 Systeem         : Windows 10 Pro

 WWW             : http://www.swtobservatory.nl

*/

/*

Adafruit Asair DHT22 aansluitingen

Vooraanzicht van links naar rechts

1 --> 5 Volt

2 --> Data uit --> pin 5 Arduino

3 --> Niet aansluiten

4 --> GND

Vergeet de pull-up weerstand tussen 1 en 2 niet!

*/

#include <dht.h>                             // Sensor bibliotheek invoegen

dht DHT;                                     // Geef bibliotheek een werknaam

#define SENSOR_PIN 5                         // Sensor aan pin 5

void setup()

{

      Serial.begin( 9600 );                  // Start seriële verbinding

}

void loop()

{

        DHT.read2302( SENSOR_PIN );            // Start de sensor en wijs een pin toe       

      Serial.print( DHT.humidity, 1 );       // Haal de RV op

      Serial.print( "," );                   // Scheidingsteken

      Serial.println( DHT.temperature, 1 );  // Haal de temperatuur op

      delay( 2500 ); // Even wachten...

}

 



 

 

 

 

 

 

 

Ik denk dat met de uitgebreide commentaren de werking van het programma wel duidelijk is. De bibliotheek is geschikt gemaakt voor de Atmel ATMega328-microcontroller. Het is dus mogelijk dat de bibliotheek met andere microprocessoren minder of helemaal niet zal werken. Gebruik je bijvoorbeeld een TI LaunchPad, dan heb je een andere bibliotheek nodig. Die bibliotheek, bijvoorbeeld voor de M430G2553, kun je vinden op de ondersteunende website (www.swtobservatory.nl).

 

 

Barometer
Het aansluiten van de BMP280 is niet al te moeilijk: Vin moet aan 5 Volt en GND aan GND. SCK gaat aan A5 en SDI aan A4.



Barometer 7
Het aansluiten van de BMP280 is niet al te moeilijk: 
Vin moet aan 5 Volt, GND aan GND, SCK gaat aan A5 en SDI aan A4 

 

 

Software voor de barometer
Het BP280 breakout-bordje communiceert met de Arduino via het I2C-protocol. Gelukkig heeft Adafruit daar een kant-en-klare bibliotheek voor gemaakt. Deze bibliotheek is van de ondersteuningswebsite http://www.swtobservatory.nl te downloaden.

 

   

 
Software voor de barometer

/* Versie voor PC-Active 304 */

/*

Hygrometer

 Auteur          : Henk Siewert

 Datum           : 15 december 2018

 Sensor          : Adafruit BMP280 breakout

 Versie          : 01

 Output          : T,P\n

 MCU             : Arduino Uno - Atmel ATMega328

 Language        : Arduino C++

 Compiler        : Arduino 1.8.7

 Editor          : NotePad++

 Systeem         : Windows 10 Pro

 WWW             : http://www.swtobservatory.nl

*/

#include <Wire.h>                                      // Laad I2C bibliotheek

#include <Adafruit_BMP280.h>                 // Laad BMP280 bibliotheek

Adafruit_BMP280 bmp;                              // I2C werknaam

void setup()

{

      Serial.begin( 9600 );                  // Start seriële verbinding

      Serial.println( "BMP280 test" );   

      if ( !bmp.begin() )                       // Kijk of sensor is aangesloten
      {
           Serial.println( "Kan sensor niet vinden! Controleer aansluitingen!" ) ;    
           while (1);
      }   

}

void loop()

{

         Serial.print( "Temperatuur =  " );    

         Serial.print( bmp.readTemperature() );  

         Serial.print( " *C");

 

         Serial.print( " Luchtdruk = " ); 

         Serial.print( bmp.readPressure() / 100.0 ) ;

         Serial.println( " hPa" );  

         Serial.println();

         delay( 2000 ); 

}

 

       



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 



De software begint met het vragen om de temperatuur. De drukmeting moet gecorrigeerd worden voor de temperatuur waarin wordt gemeten: zonder temperatuurmeting geen goede drukmeting. Zie voor de bijzonderheden het datablad van de fabrikant.

De foutverwerking is hier iets uitgebreider, op die manier is de I2C-communicatie wat beter te controleren.

Samenvoegen
Om een weerstation te maken, moeten de twee sensoren op één bordje worden samengebracht. Ook de software moet in één broncodebestand bij elkaar worden gezet. Probeer dat eerst zelf eens. Kom je er niet uit, dan kun je de complete code van de website www.swtobservatory.nl halen.

Eindresultaat weerstation 2

Eindresultaat. Het weerstation is nu in elkaar gezet en hij ziet er zo uit

Output
De output van de Arduino Uno kan worden weergegeven in de seriële monitor of in de seriële plotter van het Arduino IDE. De plotter is in dit geval niet zo zinvol. Er is weinig variatie in de gegevens en de real-time waarden worden niet aangegeven.

De output in Arduino IDE
seriële monitor: luchtdruk,
temperatuur / relatieve vochtigheid,
temperatuur
             Output 8 2                

Met een seriële monitor als TeraTerm is het mogelijk om het VT100-protocol te gebruiken, waardoor een beter gebruikersscherm kan worden opgebouwd. Helemaal mooi wordt het als we gebruikmaken van de mogelijkheden van Processing en andere programmeertalen voor de computer.

Processing 9

 

 

 

Output in een processingprogramma

 


Natuurlijk kunnen de gegevens ook op een smartphone worden weergegeven. En wat dacht je van een real-time grafiek in Python? Mooie onderwerpen voor een volgende aflevering

De ondersteuning voor dit stuk is te vinden op www.swtobservatory.nl

Eventuele vragen en opmerkingen zijn welkom op info@swtobservatory.nl.