In diesem Blogbeitrag zeige ich dir, wie du mit einem Arduino, dem Sensirion SCD30 CO2 Sensor und einem kleinen schicken OLED Display einen einfachen, aber effektiven CO2-Monitor erstellst.
Was Du Brauchst
- ESP32: Der Mikrocontroller welcher sich um alles kümmert.
- Sensirion SCD30 Luftsensor: Misst CO2, Temperatur und Luftfeuchtigkeit.
- OLED Display: Zeigt deine Messwerte an.
- Jumperkabel
- Mini-Breadboard oder Lysterklemme oder Wagoklemme. Wenn Du einen Lötkolben hast, kannst Du auch die Verdrahtung löten.
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 die Pins 21 für SDA und 22 für SCL für die I2C-Kommunikation verwendet. Die Pins auf dem Display und dem Sensor sind beschriftet, daher musst du sie einfach richtig miteinander verbinden. I2C ist ein Bussystem, was bedeutet, dass du die SDA- und SCL-Kabel beider I2C-Geräte an die Pins 21 und 22 anschließen kannst. Ich habe dafür eine Wagoklemme verwendet, aber du kannst sie natürlich auch durch Löten miteinander verbinden.
Code
Stelle sicher das du alle notwendigen Bibliotheken in deiner Arduino IDE installiert hast. Die benötigten Bibliotheken: Wire.h
für die KommunikationSparkFun_SCD30_Arduino_Library
für den SCD30-SensorAdafruit_GFX
, Adafruit_SH110X
für das Display.
#include <Wire.h>
#include "SparkFun_SCD30_Arduino_Library.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
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; // Speichert den aktuellen Zeitstempel
// Verschiebt die Cursorposition leicht
offsetX = (offsetX + 1) % 5; // Verschiebt um 1 Pixel bis zu 5, dann zurück auf 0
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();
} else {
// Optional: Nachricht, wenn keine Daten verfügbar sind
// Serial.println("Warte auf Daten...");
}
delay(500);
}
Setup
Zuerst initialisierst du die Komponenten. Mit Wire.begin()
und Serial.begin(9600)
startest du die Kommunikation. Dann initialisierst du den SCD30-Sensor und das Display. Das Display wird für eine klare Anzeige vorbereitet – Größe, Farbe und Schrift.
Der Hauptteil
Im loop
-Teil des Skripts geschieht die Magie:
- Zeitsteuerung: Durch das Speichern der letzten Zeit und den Vergleich mit dem aktuellen Zeitpunkt wird alle 3 Minuten (180000 Millisekunden) eine Aktion ausgeführt. Hierbei wird die Anzeigeposition des Textes leicht verschoben, um ein Einbrennen des Bildschirms zu verhindern.
- Datenabfrage: Der Code prüft, ob der SCD30-Sensor Daten zur Verfügung hat. Falls ja, werden diese auf dem Display angezeigt:
- CO2-Konzentration: Angezeigt in ppm (Teile pro Million).
- Temperatur: In Celsius.
- Luftfeuchtigkeit: In Prozent.
Anzeige auf dem Display
Die Werte werden mit einer leichten Verschiebung angezeigt, um ein dynamisches Bild zu erzeugen. Das erhöht nicht nur die Ästhetik, sondern schützt auch dein Display vor Einbrennen.
3D Druck Gehäuse
Der Druck erfordert keine besonderen Einstellungen, ich empfehle jedoch Support vorne um die Struktur oberhalb des Displays zu stützen.
Der Deckel sollte mit Tree Support gedruckt werden.
3D Druck Dateien
Abschluss
Mit diesem Projekt hast du einen leistungsfähigen CO2-Monitor. Eine Homeassistant Integration wird in wenigen Tagen folgen.
Schreibe einen Kommentar