CO2 Messstation mit Display und SD-Karte
Erstellt von Thore Sommer
Benötigtes Material
- Arduino Uno
- USB-Kabel für den Arduino
- Co2-Sensor (MH-Z19B oder MH-Z19C)
- SD-Kartenmodul
- SD-Karte
- I2C Display
- 2x MM-Kabel
- 14x MW-Kabel
- Kleines Breadboard
Benötigte Software
- Bibliothek SD von Arduino
- Bibliothek LiquidCrystal I2C von Marco Schwartz oder Frank de Brabander
- Bibliothek MH-Z19 von Jonathan Dempsey
Als PDF
Beschreibung
Dieses Arbeitsblatt beschreibt den Aufbau einer einfachen Messstation
für den CO2 Sensor. Die Daten werden direkt auf dem Display
angezeigt und auf einer SD-Karte gespeichert.
Verkabelung
GND | GND | Über Breadboard |
5V | 5V | Über Breadboard |
TX | 5 | |
RX | 6 | |
GND | GND | Über Breadboard |
VCC | 5V | Über Breadboard |
MOSI | 11 | |
MISO | 12 | |
SCK | 13 | |
SS/CS | 10 | |
GND | GND | Über Breadboard |
VCC | 5V | Über Breadboard |
SDA | A4 | |
SCL | A5 | |
Code
Bevor der Code auf dem Arduino ausgeführt werden kann, müssen die unter
benötigte Software aufgezählten Libraries installiert werden.
// Bibliotheken für das Display
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden.
#include <Wire.h> // Wire Bibliothek einbinden.
// Bibliotheken für die SD-Karte
#include <SD.h>
#include <SPI.h>
// Bibliothek für den CO2 Seensor
#include <MHZ19.h>
#include <SoftwareSerial.h>
// Pins vom CO2 Sensor
int MHZ_TX_PIN = 5; // TX Pin von MH-Z19B
int MHZ_RX_PIN = 6; // RX Pin von MH-Z19B
// Objekt für den Sensor
MHZ19 co2Sensor;
// Objekt für die Kommunikation mit dem Sensor.
// Verbine Arduino RX mit MH-Z19B TX und
// Arduino TX mit MH-Z19B RX.
SoftwareSerial co2Serial(MHZ_TX_PIN, MHZ_RX_PIN);
// Objekt für das LCD Display
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Anfang des Dateinamens für die Dateien auf der SD-Karte
// Datei hat dann z.B. den Namen "CO2_0.CSV"
// Der Name darf insgesammt nicht mehr als 8 Zeichen beinhalten.
String logPrefix = "CO2_";
// Name der Datei zum abspeichern der Datei
String logFileName;
void setup() {
// Starte serielle Schnittstelle zur Kommunikation mit dem Arduino
Serial.begin(9600);
// Starte Kommunikationsschnittstelle für den Co2 Sensor
co2Serial.begin(9600);
// Starte den Sensor mit der Kommunikationsschnittstelle
co2Sensor.begin(co2Serial);
// Schalte automatische Kalibration ab
co2Sensor.autoCalibration(false);
// Starte das Display
lcd.init();
// Hintergrundbeleuchtung fürs Display einschalten
lcd.backlight();
// Warte solange bis eine SD-Karte eingesteckt wurde
while (!SD.begin(SS_PIN)) {
Serial.println(F("Konnte keine Verbindung zur SD-Karte aufbauen."));
Serial.println(F("Versuche es in 2 Sekunden nochmal"));
delay(2000);
}
// Finde Dateinamen der frei ist.
int number = 0;
while (SD.exists(logPrefix + number + ".CSV")) {
number++;
}
logFileName = logPrefix + number + ".CSV"; // Setze den Namen zusammen
Serial.print(F("Setup erfolgreich. Speichere Daten in: "));
Serial.println(logFileName);
Serial.println(F("Warte 30 Sekunden damit der CO2 Sensor startet"));
delay(30000);
}
void loop() {
// Warte 10 Sekunden
delay(10000);
// Hole den CO2 Gehalt vom Sensor in ppm
int co2Content = co2Sensor.getCO2();
// Gebe den CO2 Gehalt auf der seriellen Schnittstelle aus
Serial.println(co2Content);
// Gebe den CO2 Gehalt auf dem Display aus
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("CO2 Gehalt ppm:"));
lcd.setCursor(0, 1);
lcd.print(co2Content);
//Öeffne die Datei auf der SD-Karte
File logFile = SD.open(logFileName, FILE_WRITE);
// Speichere den CO2 Gehalt mit der vergangenden Zeit auf der SD-Karte
logFile.print(millis());
logFile.print(F(","));
logFile.println(co2Content);
// Schliesse die Datei auf der SD-Karte
logFile.close();
}
Die SD-Karte muss mit FAT32
formatiert sein, damit der Arduino die
Messwerte darauf abspeichern kann.
Daten in Excel als Graph darstellen
Damit die Daten von der SD-Karte verwendet werden können, als erstes den
Arduino vom Strom trennen und danach die SD-Karte entfernen. Danach
befinden sich Dateien in dem Format CO2_NUMMER.CSV
wobei NUMMER
eine
Zahl ist die hoch gezählt wird.
Hier eine Schritt für Schritt Anleitung um die Daten in Excel zu
importieren.
- Eine leere Excel Datei aufmachen und auf den Reiter “Daten” wechseln
- Auf “Aus Text”
- Überprüfen ob “Textdateien” als Dateiformat gewählt ist
- Die
CO2_NUMMER.CSV
auswählen - Auf “Importieren” klicken
- Auf “Weiter” klicken
- Den Haken bei “Komma” setzen
- Auf “Weiter” klicken
- Auf “Fertig stellen” klicken
- Auf “Ok” klicken
- Nun befinden sich in der ersten Spalte die Zeiten in Millisekunden
und in der zweiten die Messwerte
Aufgaben
Beschreibe, was der Code tut!
Man setzt die Pins für den Co2-Sensor und erstellt zwei
Objekte. Dazu wird noch ein Objekt für das Display erstellt, der
Dateiname und Name des Dateipfades gesetzt. Initialisieren den Sensor,
Display und die SD-Karten Eigenschaften im Setup. In der Loop holen wir
uns den CO2-Gehalt vom Sensor und geben ihn auf der seriellen
Schnittstelle und dem Display aus. Anschließend werden die Werte auf der
SD-Karte gespeichert.
Trage die Werte wie im Video gezeigt in eine Tabelle ein und erstelle
einen Graphen.
Häufige Fragen und Probleme
Mit der SD-Karte, CO2 Sensor funktioniert etwas nicht.
In das FAQ des jeweiligen Materials gucken.
Was bedeutet F("text")
?
F("text")
bedeutet das der Text direkt vom Speicher geladen wird.
Damit wird dem Arduino mehr Speicherplatz zum Arbeiten gegeben. Diese
Funktion nutzen wir, da die benutzten Bibilotheken schon sehr viel
Speicherplatz benötigen
Beim Hochladen wird folgende Meldung angezeigt: “Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten.”
Dies liegt daran, dass die eingebundenen Bibilotheken sehr viel
Speicherplatz benötigen. Solange der Code normal funktioniert kann diese
Meldung ignoriert werden.