⭐⭐ Gevorderde beginner
⏱️ 20 minuten
Mini-weerstation
Je maakt een mini-weerstation. De DHT11 meet de temperatuur en de luchtvochtigheid, en het OLED-schermpje laat ze zien.
🧰 Wat heb je nodig?
🗺️ Aansluitschema
Volg de draden van de Arduino naar elk onderdeel. De kleuren van de draden mag je zelf kiezen.
| Van | Naar |
|---|---|
Arduino UNO · D2 |
Temperatuursensor DHT11 · DAT |
Arduino UNO · 5V |
Temperatuursensor DHT11 · VCC |
Arduino UNO · GND |
Temperatuursensor DHT11 · GND |
Arduino UNO · A4 |
OLED-schermpje 0,91" · SDA |
Arduino UNO · A5 |
OLED-schermpje 0,91" · SCL |
Arduino UNO · 5V |
OLED-schermpje 0,91" · VCC |
Arduino UNO · GND |
OLED-schermpje 0,91" · GND |
🛠️ Zo bouw je het
- Sluit de DHT11 aan: DAT naar pin 2, VCC naar 5V en GND naar GND.
- Sluit het OLED-scherm aan: SDA naar A4, SCL naar A5, VCC naar 5V en GND naar GND.
- Tip: twee onderdelen hebben 5V en GND nodig. Gebruik de + en − strips van je breadboard.
💻 De code
// Mini-weerstation
// De DHT11 meet de temperatuur en de luchtvochtigheid. Het OLED-schermpje laat het zien.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
const int DHT_PIN = 2; // DAT van de DHT11 zit op pin 2
DHT dht(DHT_PIN, DHT11);
Adafruit_SSD1306 scherm(128, 32, &Wire, -1); // OLED van 128 x 32 pixels (SDA = A4, SCL = A5)
void setup() {
Serial.begin(9600);
dht.begin();
if (!scherm.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C is het adres van het scherm
Serial.println(F("Scherm niet gevonden. Kijk de draden van SDA en SCL na."));
while (true); // Stoppen: zonder scherm heeft het geen zin
}
scherm.setTextColor(SSD1306_WHITE);
}
void loop() {
float temperatuur = dht.readTemperature(); // In graden Celsius
float vocht = dht.readHumidity(); // In procent
scherm.clearDisplay();
scherm.setTextSize(2);
scherm.setCursor(0, 0);
if (isnan(temperatuur) || isnan(vocht)) { // Lukt het meten niet?
scherm.setTextSize(1);
scherm.print(F("Geen DHT11 gevonden"));
} else {
scherm.print(temperatuur, 1);
scherm.print((char)247); // Het graden-teken
scherm.println(F("C"));
scherm.print(vocht, 0);
scherm.print(F("% vocht"));
Serial.print(F("Temperatuur: "));
Serial.print(temperatuur);
Serial.print(F(" C Vocht: "));
Serial.print(vocht);
Serial.println(F(" %"));
}
scherm.display(); // Pas nu komt alles echt op het scherm
delay(2000); // De DHT11 kan maar eens per 2 seconden meten
}
🧠 Wat doet de code?
- De DHT11 zit op pin 2. Met
readTemperature()enreadHumidity()lezen we de waarden. - Het OLED-scherm praat via SDA (A4) en SCL (A5). Met
print()zetten we tekst op het scherm. - Elke 2 seconden komt er een nieuwe meting. Lukt het meten niet? Dan zie je een melding.
🎯 Probeer eens…
- Laat ook de temperatuur in Fahrenheit zien
- Laat een LED branden als het warmer is dan 25 graden
- Onthoud de hoogste temperatuur van vandaag en laat die ook zien
🚀 Bouw dit project met Codey: open codey.online/nl/starter-kits/uno/projects/weather-station en klik op MAAK DIT. Dan staan de code en het aansluitschema meteen klaar.
Codey Online is een product van OTRONIC