Präzisions-Luftdruckmesser: Arduino UNO & Nano Barometer mit Drei Zeigeranzeigen
Komponenten und Zubehör
| Arduino Nano R3 | 1 |
| Arduino UNO (ATmega328 auf Lochrasterplatine) | 1 |
| BMP180 Barometrischer Drucksensor (I2C) – 2 Stück | 2 |
| DS3231 RTC-Modul (I2C, mit Batterie) | 1 |
| Nema 17 Schrittmotoren (1,8°, 1 A, 13 Ncm) – 3 Stück | 3 |
| A4988 Schrittmotortreiber – 3 Stück | 3 |
| LCD 20×4 (I2C) – 2 Stück | 2 |
| AMS1117 3,3 V Spannungsregler (für BMP180) | 1 |
| LM2596 Buck-Converter (12 V → 5 V) | 1 |
| 3 mm LEDs (Rot/Grün für Erweiterungsbereich, 8× für Wettervorhersage) | ca. 14 |
| Netzteil 12 V / 1 A (geregelte Steckernetzteil) | 1 |
| Gehäuse: Klassisch (Uhrengehäuse 12") oder Modern (zwei Bilderrahmen 30×30 cm) | 1 |
| Aluminiumblech 1,5 mm für Zifferblatt, Wasserschiebedekor-Papier | 1 |
Über dieses Projekt
Ein hochpräzises, analog anmutendes Barometer mit drei Zeigern auf einem 12″-Zifferblatt (300 mm), angetrieben von drei Nema-17-Schrittmotoren (1/16-Mikroschritt über A4988). Zwei Arduino-Boards (UNO + Nano) teilen sich die Aufgaben:
- Haupt-Platine (UNO/ATmega328): Hauptbarometer (Luftdruck in hPa), 6-Stunden-Druckänderung, RTC (DS3231), 20×4-LCD.
- Zweit-Platine (Nano): 3-Stunden-Druckänderung (Auflösung 0,5 hPa), Wettervorhersage über 8 LEDs, zweites 20×4-LCD.
Alle Anzeigen aktualisieren sich alle 10 Minuten (Haupt/6 h) bzw. stündlich (3 h). Erweiterungsbereiche (±5…±9 hPa) werden per LED angezeigt; Werte darüber hinaus aktivieren beide LEDs (Rot + Grün).
Vergleich zu herkömmlichen Analoggbarometern
Klassische Barometer zeigen nur den aktuellen Luftdruck an; man muss den Referenzzeiger manuell setzen und die Änderung über 3 h selbst beobachten. Dieses Gerät misst kontinuierlich die 3-h- und 6-h-Änderung und zeigt sie auf separaten Skalen an. Die Wettervorhersage erfolgt automatisch per 8 LEDs basierend auf aktuellem Druck und 3-h-Trend.
Wettervorhersage-Logik (basierend auf 3-h-Änderung & aktuellem Druck)
| Druckbereich | Trend (3 h) | Vorhersage (LEDs) |
|---|---|---|
| < 1009 hPa | Steigend/Stetig (≥ 0) | Aufklarend / Kühler (Clear + Change) |
| < 1009 hPa | Langsam fallend (−1,5 … 0) | Regen / Bedrohlich (Rain + Threat) |
| < 1009 hPa | Schnell fallend (< −1,5) | Sturm (Stormy + Threat) |
| 1009–1022 hPa | −1,5 … +1,5 | Wenig Änderung / Fair (Fair + No Change) |
| 1009–1022 hPa | > +1,5 | Aufklarend (Clear) |
| 1009–1022 hPa | < −1,5 | Regen/Schnee (Rain + Change) |
| > 1022 hPa | ≥ 0 | Trocken / Schön (Dry) |
| > 1022 hPa | −1,5 … 0 | Schön (Fair) |
| > 1022 hPa | < −1,5 | Wetterumschwung (Change) |
Aufbau-Highlights
RTC-Modifikation
DS3231 wird mit nicht-wiederaufladbarer Knopfzelle betrieben → Widerstand R5 auf dem Modul entfernen (Ladestrom unterbinden).
Schrittmotortreiber A4988 (1/16-Schritt)
- VMOT: 12 V (mit ≥ 47 µF Elko nahe am Treiber gegen LC-Spitzen)
- VDD: 5 V (Logik)
- Strombegrenzung per Potentiometer einstellen (Vref messen).
- Enable-Pin (EN) low-aktiv → Arduino steuert Sleep-Pins der Treiber.
Gehäusevarianten
- Klassisch: 12″-Uhrengehäuse (Ebay „case only“), Frontrahmen schwenkbar, Aluminium-Zifferblatt.
- Modern: Zwei identische Bilderrahmen (30×30 cm) rückseitig verklebt → Doppelrahmen. Zifferblatt auf Aluminium, per Wasser-Schiebedekor bedruckt. Wartungsklappe über 270°-Einlege-Scharniere an der Wand.
Zeigerbau
Drei passende Zeiger sind schwer zu finden. Der lange Hauptzeiger wurde aus drei Spenderzeigern (Quarz-Sekundenzeiger) zusammengebaut: Spatenende als Gegengewicht, Spitze + Mittelteil als Zeiger, Welle auf Motorwelle geklebt (Blu Tack – lösbar, hält gut).
Inbetriebnahme & Kalibrierung (über Potentiometer & Taster auf Lochrasterplatine)
- RTC stellen: „Select Setting Enable“ an, Potentiometer drehen → Menü: RTC Hour/Min Advance/Retard. Schwarzer Taster: Sekunden auf 30 s synchronisieren.
- 6-h-Zeiger: Erst auf nächstes Ziffernschritt inchen (Inch Advance/Retard), dann in 1-h-Schritten auf notierten 6-h-Wert stellen (beim Start notierter „Disp“-Wert). Dauert 8 h bis korrekt (oder Startwerte im Code vorgeben).
- Hauptzeiger: Analog: inchen → ganzzahlig auf gerundeten Meeresspiegel-Druck stellen (3. LCD-Zeile).
- 3-h-Zeiger (Nano): Vier Taster (Grün/Weiß/Blau/Gelb): inchen auf halbe Einheit, dann in 0,5-hPa-Schritten auf LCD-Wert „D“ stellen. Dauert 4 h bis korrekt (oder Startwerte vorgeben).
Code
Zwei Sketches (für UNO und Nano). Beide nutzen SFE_BMP180, AccelStepper, LiquidCrystal_I2C.
Haupt-Sketch (BarometerA4988_23.ino) – UNO: Hauptbarometer, 6-h-Anzeige, RTC
// Hauptdatei für Barometer und 6-h-Anzeige (gekürzt, Vollversion im Download)
#include <SFE_BMP180.h>
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
SFE_BMP180 pressure;
#define ALTITUDE 118.0 // Kenley, Surrey (m)
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define DS3231_I2C_ADDRESS 0x68
#define dirPin 8
#define stepPin 9
#define dirPin2 10
#define stepPin2 11
#define motorInterfaceType 1
AccelStepper stepper(motorInterfaceType, stepPin, dirPin); // Hauptzeiger
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2); // 6-h-Zeiger
// ... Variablen für Druck, Zeit, Kalibrierung, LEDs, Sleep-Pins ...
void setup() {
// Pins, LCD, RTC, BMP180 initialisieren
// LED-Test, Druck lesen, Motoren deaktivieren (Sleep HIGH)
}
void loop() {
// Einstellmodus (Potentiometer + Taster) prüfen
// RTC Zeit auf LCD anzeigen
// Alle 10 Min (Minute 0,10,20,30,40,50 @ Sek 59) Druck messen
// Stündlich (Minute 59, Sek >50 bis Minute 0, Sek <10):
// 6-h-Differenz berechnen, Schrittmotor stepper2 bewegen
// Hauptzeiger (stepper) auf aktuellen gerundeten Druck stellen
// Stunde-Puls an Nano senden (Pin 13, 15 Sek nachvoller Stunde)
// RTC manuell per Taster synchronisierbar (30 s)
}
// Funktionen: getPressure(), stephourFwd/Bwd(), stephourmanFwd/Bwd(),
// setRTCfwd/bwd/min, Settings()-Menü über Potentiometer, LCD-Anzeige
Zweit-Sketch (BarometerA4988_3hour__21.ino) – Nano: 3-h-Anzeige & Wettervorhersage
// Datei für 3-h-Anzeige und Vorhersage (gekürzt)
#include <SFE_BMP180.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
SFE_BMP180 pressure;
#define ALTITUDE 125.0
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define dirPin 11
#define stepPin 10
#define motorInterfaceType 1
AccelStepper stepper(motorInterfaceType, stepPin, dirPin); // 3-h-Zeiger
// ... Variablen: hour0..hour4 (float), hourDiff, hourChange, Forecast-LEDs ...
void setup() {
// Forecast-LEDs, Taster (Inch/Step), Stunde-Puls-Eingang (Pin 3), Sleep-Pin, LCD
// BMP180 prüfen, LED-Test, ersten Druck lesen, Forecast berechnen, Motor schlafen
}
void loop() {
// Auf Stunden-Puls von Haupt-Platine warten (Pin 3 HIGH 1 min nach Stunde)
// Dann: getPressure(), getForecast(), showLCD(), 3-h-Motor bewegen (hourChange * 160 Steps)
// Manuelle Inch/Step über Taster & Potentiometer (A7) möglich
}
// Funktionen: getPressure() (alle 10 Min, aber hier nur auf Stunden-Puls),
// calcCurrentDisp() (3-h-Diff & Erweiterungs-LEDs),
// getForecast() (Logik s.o., 8 LEDs),
// stephourFwd/Bwd/manFwd/manBwd, maninchFwd/Bwd, ClearforecastLED(), showLCD()
Schaltplan
Wichtige Hinweise
- Schrittmotoren: Nema 17, 1,8° (200 Schritte/Umdrehung). 1/16-Mikroschritt → 3200 Steps/Umdrehung. Code ist darauf abgestimmt.
- BMP180 **nur an 3,3 V** betreiben (AMS1117). I2C-Pins (SDA/SCL) sind 5 V-tolerant.
- Leistungsaufnahme ca. 65 mA (plus kurze Motorimpulse alle 10 min/h).
- Startwerte für Druckhistorie (hour0…hour7 / hour0…hour4) im Code eintragen, um Wartezeit zu vermeiden.
- LCD-Hintergrundbeleuchtung per Schalter abschaltbar (Stromsparen).
Herstellungsprozess
- Aneroid-Barometer: Design, Geschichte und Zukunft der Druckmessung
- Blutdruckmessgerät: Design, Fertigung und Zukunftstrends
- Feuerlöscher: Typen, Konstruktion und zukünftige Trends
- Präzisions-Manometer für industrielle und sicherheitsrelevante Anwendungen
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Kompakte Wetterstation: Arduino Nano & ESP8266 mit BMP280 Barometrischem Sensor & OLED/Nokia LCD Display
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth