Bouw een $10 Draagbare Arduino Weerstation (AWS) – Eenvoudige DIY met Nano, DHT22, BMP180 & LCD
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
| DHT22 Temperatuursensor | 1 |
| BMP180 Druksensor | 1 |
| Adafruit Standaard LCD - 16x2 Wit op Blauw (met I2C driver) | 1 |
Benodigde tools
- Solderbout
Apps en online diensten
- Arduino IDE
Over dit project




Onlangs had mijn college een kleine wetenschapsbeurs. Mijn leraar vroeg me een project te presenteren om jonge studenten te leren over elektronica. Ik had twee dagen de tijd.
Omdat de temperatuur hier fluctueert (34-40°C), besloot ik een weerstation te bouwen.
Wat doet een weerstation?
Een weerstation verzamelt omgevingsdata met behulp van sensoren zoals: wind, vochtigheid, regen, temperatuur, luchtdruk en hoogte.
Doel: Een draagbaar weerstation met de functies: temperatuur, vochtigheid, luchtdruk en hoogte.
Stap 1: Benodigdheden kopen

Budget en onderdelen:
- DHT22 Temperatuur- en vochtigheidssensor → $3,00
- BMP180 Druksensor (BMP280 is goedkoper maar duurder in mijn regio) → $2,00
- Arduino Nano → $1,89
- LCD Display met I2C Driver → $3,00
- Experimenteerprint, female headers, soldergerei, tang, draden
Stap 2: Temperatuur en vochtigheid – DHT22

Populaire sensoren: DHT22, DHT11, SHT1x. De DHT22 (AM2302) levert een gecalibreerd digitaal signaal, heeft een groot meetbereik, hoge nauwkeurigheid en lange transmissieafstand (100m).
Vergelijking:
| Sensor | Voordelen | Nadelen |
|---|---|---|
| DHT11 | Goedkoop, stabiel, >20m bereik | Foutmarge: ±2°C, ±5% RH, bereik 0-50°C |
| DHT22 | Betere nauwkeurigheid, groter bereik, >20m | Gevoeliger, langzamere temperatuurtracking |
| SHT1x | Snelle respons, lage stroom, sluimermodus | Twee digitale interfaces, zelfde bereik als DHT11 |
Aansluiting DHT22: VCC → 5V/3.3V, GND → GND, Data → Pin 2 Arduino.
Stap 3: Barometer en druksensor – BMP180

De BMP180 meet absolute luchtdruk via I2C. Druk varieert met weer en hoogte. Dalende druk = slecht weer komend, stijgende druk = helder weer.
Hoogte berekenen: De standaard zeedruk is 1013,25 hPa. Formule: alti = 44330 * [1 - (p/p0)^(1/5.255)].
Let op: Mijn module had een 3.3V regulator (662k) die ik verbrandde; ik bridgeerde VCC direct naar de chip. Alleen 3.3V gebruiken!
Aansluiting BMP180 (I2C op Nano/Uno): SDA → A4, SCL → A5, VCC → 3.3V, GND → GND.
Voorzorgsmaatregelen: Toegang tot omgingslucht geven (ventgat), beschermen tegen wind, koel en droog houden, afschermen voor licht.
Stap 4: De schakeling maken

We begonnen met headers voor de Nano, gesoldeerd op maat. DHT22 kreeg een 10k pull-down weerstand. BMP180 op 3.3V en I2C-bus. LCD (I2C) deelt de I2C-bus met BMP180. (Er is een vrije slot voor een toekomstige RTC-module.)
Stap 5: Code

Eerst libraries installeren:
Code getest op Arduino IDE 1.6.5.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <SFE_BMP180.h>
SFE_BMP180 pressure;
#define ALTITUDE 20.56
#define I2C_ADDR 0x27
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7);
float t1, t2;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
lcd.print("Weerstation");
delay(5000);
dht.begin();
pressure.begin();
}
void loop() {
char status;
double T, P, p0, a;
status = pressure.startTemperature();
if (status != 0) {
delay(status);
status = pressure.getTemperature(T);
if (status != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Baro Temp: ");
lcd.setCursor(0,1);
lcd.print(T,2);
lcd.print(" C");
t1 = T;
delay(3000);
status = pressure.startPressure(3);
if (status != 0) {
delay(status);
status = pressure.getPressure(P,T);
if (status != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Abs druk: ");
lcd.setCursor(0,1);
lcd.print(P,2);
lcd.print(" mb");
delay(3000);
p0 = pressure.sealevel(P, ALTITUDE);
a = pressure.altitude(P, p0);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hoogte: ");
lcd.setCursor(0,1);
lcd.print(a,0);
lcd.print(" m");
delay(3000);
}
}
}
}
float h = dht.readHumidity();
float t = dht.readTemperature();
t2 = t;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Vocht: ");
lcd.setCursor(0,1);
lcd.print(h);
lcd.print(" %");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("DHT Temp: ");
lcd.setCursor(0,1);
lcd.print(t);
lcd.print(" C");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gem Temp: ");
lcd.setCursor(0,1);
lcd.print((t1+t2)/2);
lcd.print(" C");
delay(3000);
}
Schema
Productieproces
- Een buitenweerstation bouwen met Raspberry Pi 2 en ADS-WS1
- Een Raspberry Pi-weerstation bouwen dat dagelijkse weergegevens e-mailt
- Geavanceerd Weerstation v2.0: Real-time Temperatuur, Druk, Vochtigheid & Hoogte Monitoring
- Bouw een DCC-commando station voor modelspoor met Arduino – gratis app inclusief
- Arduino-gestuurde 6-Shooter Drank Mixstation – Bouw je eigen Cocktail Automaat
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Bouw een Draagbare Capacitieve Touch-piano met Arduino – Stap-voor-stap Handleiding
- DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
- Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
- Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
- High-Performance Arduino Weerballon Datalogger