Kompakte Wetterstation mit Arduino Nano – DIY-Anleitung für Temperatur, Luftfeuchte & Druck
Komponenten und Materialien
| Komponente | Anzahl |
|---|---|
| Arduino Nano R3 | 1 |
| DHT11 Modul (Temperatur & Luftfeuchte) | 1 |
| BMP280 Drucksensor (Temperatur & Luftdruck) | 1 |
| 1,44″ ST7735 TFT LCD Display (128×128) | 1 |
| 3D-gedrucktes Gehäuse (STL-Datei) | 1 |
| USB-A auf Mini-USB-B Kabel | 1 |
Benötigte Werkzeuge
- Lötkolben & Lötzinn
- 3D-Drucker (für Gehäuse)
- Doppelseitiges Klebeband
Software & Design
- Arduino IDE
- Autodesk Fusion 360 (Gehäuse-Design)
Projektbeschreibung
Diese handliche Wetterstation erfasst drei fundamentale Wetterparameter in Echtzeit: Temperatur, relative Luftfeuchte und atmosphärischer Druck. Die Daten werden auf einem 1,44″ TFT-Farbdisplay angezeigt. Das Gerät ist batteriebetrieben (via USB-Powerbank) und passt in die Hosentasche.
Sensorwahl: Warum BMP280 + DHT11 statt BME280?
- Kosten: BMP280 + DHT11 ist deutlich günstiger als BME280.
- Genauigkeit: BMP280 misst Temperatur mit ±0,5 °C Auflösung, DHT11 nur ±2 °C. Daher wird Temperatur vom BMP280, Luftfeuchte vom DHT11 genommen.
- Druck: Nur BMP280/BME280 können Luftdruck messen.
Warum Arduino Nano statt UNO?
Gleicher Mikrocontroller (ATmega328P), aber kleinerer Formfaktor und günstiger – ideal für kompakte Gehäuse.
Schaltung & Programmierung
Pin-Belegung
| Komponente | Pin | Arduino Pin |
|---|---|---|
| DHT11 Data | – | D2 |
| BMP280 (I2C) | SDA | A4 |
| BMP280 (I2C) | SCL | A5 |
| ST7735 TFT | CS | D10 |
| ST7735 TFT | DC | D9 |
| ST7735 TFT | RST | D8 |
| ST7735 TFT | MOSI (SDA) | D11 (Hardware SPI) |
| ST7735 TFT | SCK | D13 (Hardware SPI) |
| Stromversorgung | 5V / GND | ICSP-Header + Onboard-Pins |
Hinweis: Die 5 V und GND des ICSP-Headers werden zusätzlich genutzt, um Kabelgewirr zu vermeiden.
Software-Architektur
- Bibliotheken:
SPI.h,Wire.h,Adafruit_GFX.h,Adafruit_ST7735.h,Adafruit_BMP280.h,DHT.h - Initialisierung: Sensoren starten, Display initialisieren (schwarzer Hintergrund, Trennlinien, Überschriften, Farben festlegen)
- Hauptschleife: Alle 1 s Sensoren auslesen, Werte formatiert an festen Positionen auf dem Display ausgeben
Gehäuse & Bauweise
- Modularer Aufbau mit Steckverbindungen (kein Löten an Sensoren) für einfache Fehlersuche
- 3D-gedrucktes Gehäuse (STL im Projekt enthalten) mit Belüftungsschlitzen für Sensorzugang & Wärmeabfuhr
- Stromversorgung über USB-Mini (Programmier- & Betriebsanschluss identisch)
- Getestet über Stunden an PC-USB & 5 V Handyladegerät – Werte stimmen mit Online-Wetterdaten überein
Vollständiger Programmcode
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_BMP280.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
#define TFT_RST 8
#define TFT_CS 10
#define TFT_DC 9
#define BMP280_I2C_ADDRESS 0x76 // Oder 0x77 – mit Scanner prüfen!
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
Adafruit_BMP280 bmp280;
DHT dht(DHTPIN, DHTTYPE);
void setup(void) {
dht.begin();
tft.initR(INITR_144GREENTAB); // 1,44" Green Tab Display
tft.fillScreen(ST77XX_BLACK);
tft.drawFastHLine(0, 15, tft.width(), ST77XX_CYAN);
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);
tft.setTextSize(1);
tft.setCursor(25, 5);
tft.print("WEATHER BUDDY");
if (!bmp280.begin(BMP280_I2C_ADDRESS)) {
tft.setTextColor(ST77XX_RED, ST77XX_CYAN);
tft.setTextSize(2);
tft.setCursor(5, 76);
tft.print("Connection");
tft.setCursor(35, 100);
tft.print("Error");
while (1); // Halt
}
// Layout: Drei Bereiche mit Trennlinien
tft.drawFastHLine(0, 55, tft.width(), ST77XX_CYAN);
tft.drawFastHLine(0, 95, tft.width(), ST77XX_CYAN);
// Überschriften
tft.setTextColor(ST77XX_RED, ST77XX_BLACK);
tft.setCursor(30, 20);
tft.print("TEMPERATURE");
tft.setTextColor(ST77XX_CYAN, ST77XX_BLACK);
tft.setCursor(40, 60);
tft.print("HUMIDITY");
tft.setTextColor(ST77XX_GREEN, ST77XX_BLACK);
tft.setCursor(40, 100);
tft.print("PRESSURE");
tft.setTextSize(2); // Große Werte
}
void loop() {
char buf[8];
// Sensoren lesen
float temp = bmp280.readTemperature(); // °C
float hum = dht.readHumidity(); // %
float pres = bmp280.readPressure(); // Pa
// 1. Temperatur (°C) – Gelb
if (temp < 0)
sprintf(buf, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100);
else
sprintf(buf, " %02u.%02u", (int)temp, (int)(temp * 100) % 100);
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setCursor(11, 34);
tft.print(buf);
tft.drawCircle(89, 34, 2, ST77XX_YELLOW); // Grad-Symbol
tft.setCursor(95, 34);
tft.print("C");
// 2. Luftfeuchte (%) – Magenta
sprintf(buf, "%02u ", (int)hum);
tft.setTextColor(ST77XX_MAGENTA, ST77XX_BLACK);
tft.setCursor(45, 74);
tft.print(buf);
tft.setCursor(75, 74);
tft.print("%");
// 3. Druck (hPa) – Orange
// pres in Pa → /100 = hPa
sprintf(buf, "%04u.%02u", (int)(pres / 100), (int)((uint32_t)pres % 100));
tft.setTextColor(ST77XX_ORANGE, ST77XX_BLACK);
tft.setCursor(3, 112);
tft.print(buf);
tft.setCursor(91, 112);
tft.print("hPa");
delay(1000);
}
Benötigte Bibliotheken (Arduino Library Manager)
Adafruit ST7735 and ST7789 LibraryAdafruit GFX LibraryAdafruit BMP280 LibraryDHT sensor library(von Adafruit)
3D-Druck Gehäuse
Die STL-Datei für das maßgeschneiderte Gehäuse ist im Projekt enthalten. Drucken Sie es mit PLA oder PETG, 0,2 mm Schichthöhe, 20 % Infill. Belüftungsschlitze sorgen für Luftzirkulation an den Sensoren.
Fazit
Eine preiswerte (< ~25 €), kompakte und präzise Wetterstation, die Spaß macht und nützlich ist. Ideal für Einsteiger in Sensorik, Displays und 3D-Druck.
Bezugsquellen
Elektronische Bauteile z. B. bei UTSOURCE bestellen.
Herstellungsprozess
- Outdoor-Wetterstation mit Raspberry Pi 2 & ADS-WS1 bauen
- Raspberry Pi Wetterstation bauen, die tägliche Wetterdaten per E-Mail sendet
- Remote-Wetterüberwachung mit Raspberry Pi 3 & PubNub
- Fortgeschrittene Wetterstation v2.0: Echtzeit Temperatur, Druck, Feuchte & Höhe Monitoring
- DIY Photoshop-Steuerkonsole mit Arduino Nano RP2040 bauen
- Präzise 7-Segment-Uhr mit Arduino Pro Mini & DS1302 RTC – Selbstbau
- Tragbare Arduino-Wetterstation für 10$ bauen (Nano, DHT22, BMP180 & LCD)
- eDOT: Präzise Arduino-Uhr & Wetterstation mit IR-Fernbedienung
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen
- Wetterstation mit Arduino & ThingSpeak IoT (DHT11 + ESP8266)