Integration eines CO2-Sensors in Arduino und ESP32 Projekte
In diesem Beitrag erkläre ich, wie ihr einen CO2-Sensor, konkret den Sensirion SCD 30, mit einem Arduino oder einem ESP32 nutzen könnt. Dieser Sensor ist besonders vielseitig, da er nicht nur CO2, sondern auch Temperatur und Luftfeuchtigkeit messen kann.
Warum den Sensirion SCD 30?
Der Sensirion SCD 30 ist ein präziser und zuverlässiger Sensor, der über eine I2C-Schnittstelle kommuniziert. Das bedeutet, dass er sich relativ einfach an die meisten Mikrocontroller anbinden lässt. Ihr müsst lediglich die I2C-Pins eures Mikrocontrollers identifizieren. Beim ESP32 Dev Kit, das ich für dieses Beispiel verwende, sind dies in der Regel Pin 21 (SDA) und Pin 22 (SCL). Zudem benötigt der Sensor eine Stromversorgung, die entweder über einen 3V- oder 5V-Pin hergestellt wird, während der GND-Pin des Sensors an den GND-Pin des Mikrocontrollers angeschlossen wird.
Benötigte Teile
Hier ist eine Liste der Komponenten, die Sie für dieses Projekt benötigen:
- Sensirion SCD 30 CO2-Sensor: Dieser Sensor kann CO2, Temperatur und Luftfeuchtigkeit messen.
- Arduino oder ESP32 Mikrocontroller: Für dieses Beispiel wird ein ESP32 Dev Kit verwendet.
- Verbindungskabel: Zum Anschluss des Sensors an den Mikrocontroller.
- Stromversorgung: Für den Mikrocontroller und den Sensor. Der Sensor kann mit 3V oder 5V betrieben werden.
Der Programmcode
Der Code ist sowohl für den Arduino als auch für den ESP32 geeignet. Zuerst müssen die notwendigen Bibliotheken eingebunden werden:
#include <Wire.h>
#include "SparkFun_SCD30_Arduino_Library.h"
SCD30 airSensor;
Im setup()
wird die I2C-Kommunikation und die serielle Kommunikation gestartet und der Sensor initialisiert:
void setup()
{
Wire.begin(); // Startet die I2C-Kommunikation
Serial.begin(9600); // Startet die serielle Kommunikation
airSensor.begin(); // Initialisiert den Sensor
}
Die Hauptarbeit geschieht in der loop()
-Funktion:
void loop()
{
if (airSensor.dataAvailable())
{
Serial.print("CO2 (ppm): ");
Serial.print(airSensor.getCO2());
Serial.print(", Temp (C): ");
Serial.print(airSensor.getTemperature(), 1);
Serial.print(", Humidity (%): ");
Serial.print(airSensor.getHumidity(), 1);
Serial.println();
}
else
{
// Serial.println("Warte auf Daten..."); // Optional
}
delay(500); // Kurze Pause zwischen den Messungen
}
Der Gesamte Code:
#include <Wire.h>
#include "SparkFun_SCD30_Arduino_Library.h"
SCD30 airSensor;
void setup()
{
Wire.begin(); // Startet die I2C-Kommunikation
Serial.begin(9600); // Startet die serielle Kommunikation mit 9600 Baud
airSensor.begin(); // Initialisiert den SCD30-Sensor
}
void loop()
{
if (airSensor.dataAvailable()) // Prüft, ob Daten vom Sensor verfügbar sind
{
// Gibt den CO2-Wert in ppm (parts per million) aus
Serial.print("CO2 (ppm): ");
Serial.print(airSensor.getCO2());
// Gibt die Temperatur in Grad Celsius aus
Serial.print(", Temp (C): ");
Serial.print(airSensor.getTemperature(), 1); // Eine Nachkommastelle
// Gibt die relative Luftfeuchtigkeit in Prozent aus
Serial.print(", Humidity (%): ");
Serial.print(airSensor.getHumidity(), 1); // Eine Nachkommastelle
Serial.println(); // Beginnt eine neue Zeile in der Ausgabe
}
else
{
// Optional: Nachricht ausgeben, wenn keine Daten verfügbar sind
// Serial.println("Warte auf Daten...");
}
delay(500); // Wartet 500 Millisekunden vor der nächsten Messung
}
Fazit
Mit diesem einfachen Setup könnt ihr euren Arduino oder ESP32 in eine umfassende Umweltüberwachungsstation verwandeln. Der Sensirion SCD 30 ist eine ausgezeichnete Wahl für Projekte, die genaue Messungen von CO2, Temperatur und Luftfeuchtigkeit erfordern.
Schreibe einen Kommentar