
Einfacher CO₂-Monitor mit Arduino, SCD30 und OLED
In diesem Blogbeitrag zeige ich dir, wie du mit einem Arduino, dem Sensirion SCD30 CO₂-Sensor und einem kleinen, schicken OLED-Display einen einfachen, aber effektiven CO₂-Monitor erstellst.
Verkabelung
Sowohl das Display als auch der Sensor unterstützen die I2C-Kommunikation und können beide mit einer Spannung zwischen 3 und 5 Volt betrieben werden.
Wenn du einen ESP32 verwendest, werden normalerweise folgende Pins genutzt:
- SDA: Pin 21
- SCL: Pin 22
Die Pins auf dem Display und dem Sensor sind beschriftet, daher musst du sie einfach korrekt miteinander verbinden.
I2C ist ein Bussystem, das bedeutet:
- SDA von allen I2C-Geräten gemeinsam auf Pin 21
- SCL von allen I2C-Geräten gemeinsam auf Pin 22
Ich habe dafür eine Wagoklemme verwendet, du kannst die Verbindungen aber genauso gut verlöten.
Code
Stelle sicher, dass du alle notwendigen Bibliotheken in deiner Arduino-IDE installiert hast.
Benötigte Bibliotheken
Wire.h– I2C-KommunikationSparkFun_SCD30_Arduino_Library– SCD30-SensorAdafruit_GFX– GrafikbibliothekAdafruit_SH110X– OLED-Display
Arduino-Sketch
```cpp
include
include "SparkFun_SCD30_Arduino_Library.h"
include
include
SCD30 airSensor;
Adafruit_SH1106G display(128, 64, &Wire, -1);
unsigned long previousMillis = 0; // Zeitstempel für das letzte Update
const long interval = 180000; // Intervall für die Verschiebung (3 Minuten)
int offsetX = 0; // Anfangswerte für die Verschiebung
int offsetY = 0;
void setup() {
Wire.begin();
Serial.begin(9600);
airSensor.begin();
display.begin(0x3C, true);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SH110X_WHITE);
}
void loop() {
unsigned long currentMillis = millis();
// Überprüft, ob das Intervall abgelaufen ist
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Verschiebt die Cursorposition leicht
offsetX = (offsetX + 1) % 5;
offsetY = (offsetY + 1) % 5;
}
if (airSensor.dataAvailable()) {
display.clearDisplay();
// CO2-Wert in ppm
display.setCursor(offsetX, offsetY);
display.print(airSensor.getCO2());
display.println(" ppm");
// Temperatur in Grad Celsius
display.setCursor(offsetX, 20 + offsetY);
display.print(airSensor.getTemperature(), 1);
display.println(" C");
// Relative Luftfeuchtigkeit in Prozent
display.setCursor(offsetX, 40 + offsetY);
display.print(airSensor.getHumidity(), 1);
display.println(" %");
display.display();
}
delay(500);
}
````
Setup
Zuerst initialisierst du die Komponenten:
Wire.begin()startet die I2C-KommunikationSerial.begin(9600)öffnet die serielle SchnittstelleairSensor.begin()initialisiert den SCD30- Das Display wird vorbereitet (Adresse, Auflösung, Textgröße und Farbe)
So ist sichergestellt, dass alle Komponenten korrekt starten und sauber anzeigen.
Der Hauptteil
Im loop()-Teil des Skripts passiert die eigentliche Arbeit:
- Zeitgesteuerte Verschiebung der Anzeige
- Abfrage neuer Sensordaten
- Aktualisierung des Displays
Anzeige auf dem Display
Die Messwerte werden mit einer leichten Positionsverschiebung angezeigt.
Das sorgt nicht nur für ein dynamischeres Bild, sondern schützt das OLED auch zuverlässig vor Einbrennen.
3D-Druck-Gehäuse
Der Druck erfordert keine besonderen Einstellungen.
Empfehlungen:
- Support vorne, um die Struktur oberhalb des Displays zu stützen
- Deckel mit Tree Support drucken
Die 3D-Druck-Dateien folgen separat.
Abschluss
Mit diesem Projekt hast du einen kompakten und leistungsfähigen CO₂-Monitor gebaut.
Eine Home-Assistant-Integration wird in wenigen Tagen folgen.
Kommentare