CO2 meter deel 1

Dit is deel 1 van de beschrijving voor het bouwen van een CO2 meter met een Arduino

Bouw je eigen CO2 meter: deel 1

Het meten van het CO2 gehalte in de lucht.
Het CO2 gehalte in de lucht is eenvoudig te meten met de sensor SCD30. Deze sensor is op een bordje gemonteerd en heeft een I2C aansluiting. Naast het CO2 gehalte geeft het bordje ook de temperatuur en de vochtigheid van de lucht aan. Hieronder staat een afbeelding van het bordje met de SCD30.

Bordje met SCD30

Het aansluiten van de SCD30 op een Arduino Uno
We maken gebruik van de I2C bus. Op de Arduino Uno zijn de de aansluitingen van de I2C bus als volgt: A4 is SDA en A5 is SCL.

De aansluitingen van het SCD30 bordje zijn op de volgende foto aangegeven.

Verbind de overeenkomstige pennen van SCD30 met die van de Arduino Uno:

Arduino: 5volt naar SCD30: +5 volt
Arduino: GND naar SCD30: GND
Arduino: A4 naar SCD30: SDA
Arduino: A5 naar SCD30: SCL

Om de SCD sensor te kunnen gebruiken hebben we een SDC30 bibliotheek nodig.
Ga naar : https://www.arduino.cc/reference/en/libraries/sparkfun-scd30-arduino-library/
Download de nieuwste SparkFun bibliotheek voor de SCD30. Deze file is in ZIP formaat en voeg deze bibliotheek aan de Arduino bibliotheek toe door:
Schets –> Bibliotheek gebruiken –> .ZIP bibliotheek toevoegen.

Nu gaan we de sensor met de sensor bibliotheek testen.

Test programma voor de SDC30
We gebruiken een programma dat meegeleverd wordt met de bibliotheek als test programma:
Bestand –> voorbeelden –> SparkFun SCD30 Arduino Library –> Example1_BasicReadings

Bij de uitvoering van het programma wordt op de seriële monitor (instellen op 115200 bps) de CO2 waarde, de temperatuur en de vochtigheid van de lucht geprint.


Als dit correct werkt is het tijd om zelf een programma te gaan maken.

De meetwaarden op een LCD
Maak nu zelf een programma dat de CO2, temperatuur en vochtigheid waarden op een 20 x 4 I2C LCD schrijft.
Sluit het I2C LCD 20 x 4 en de SCD30 aan op de Arduino.

Aansluitschema van het LCD en de SCD30 (klik op het plaatje om het te vergroten)

Bij het maken van het programma kan het nuttig zijn om de beschrijvingen van weerstation deel 2 erbij te nemen; die vind je op: https://on4cdu.net/weerstation-deel-2/
Het aanpassen van deze sketch om CO2, temperatuur en vochtigheid op het LCD te schrijven is niet zo moeilijk. Eventueel kun je hieronder kijken hoe dit gedaan kan worden.

De proefopstelling

De sketch
Hieronder de sketch om CO2, temperatuur en vochtigheid op een LCD scherm te laten zien: CO2_meting_01

/*  Sketch CO2_meting_01 versie 1.0
Meting van CO2, temperatuur en vochtigheid met sensor SCD30
De weergave is op een 4 x 20 I2C LCD en op de seriële monitor
Het oorspronkelijk programma is gemaakt door Nathan Seidle van SparkFun Electronics
Aangepast voor Coderdojo
*/
#include <Wire.h>                                 // laad de I2C bibliotheek
#include <LiquidCrystal_I2C.h>          // bibliotheek voor het I2C LCD scherm
#include “SparkFun_SCD30_Arduino_Library.h” // laad de SCD30 bibliotheek

LiquidCrystal_I2C lcd(0x27,20,4);      // start LCD scherm en lcd is de gebruiksnaam
SCD30 Sensor                                      // het SCD30 board krijgt gebruiksnaam Sensor

float temperatuur, vochtigheid;        // variabelen
int CO2waarde;

byte graden[8] = {                // graden teken
B00010,
B00101,
B00101,
B00010,
B00000,
B00000,
B00000,
B00000
};

void emptyline()                  // lege lijn routine
{
lcd.print (”                    “);
}

void setup()
{
Serial.begin(115200);
Serial.println(“SCD30 programma met LCD uitlezing”);
Wire.begin();

if (Sensor.begin() == false)
{
Serial.println(“Sensor niet gevonden…..”);
while (1);
}

lcd.init();                                   // initialiseer het LCD scherm
lcd.backlight();                        // zet de backlight aan
lcd.createChar(0,graden);    // het symbool graden staat nu op positie 0
lcd.clear();                              // wis het scherm
lcd.setCursor(0, 0);               // zet de cursor op positie 1, regel 0
lcd.print (”   CO2-Temp-Vocht  “);
}
//De SCD30 geeft data om de 2 seconden

void loop()
{
if (Sensor.dataAvailable())
{
CO2waarde = Sensor.getCO2();
lcd.setCursor(0,1);         // zet de cursor op positie 1, regel 1
emptyline();
lcd.setCursor(0,1);         // zet de cursor op positie 1, regel 1
lcd.print (“CO2  : “); lcd.print(CO2waarde); lcd.print (” ppm”);
Serial.print(“co2 waarde(ppm):”);
Serial.print(CO2waarde);

temperatuur = Sensor.getTemperature();
lcd.setCursor(0,2);         // zet de cursor op positie 1, regel 2
emptyline();
lcd.setCursor(0,2);         // zet de cursor op positie 1, regel 2
lcd.print (“Temp : “); lcd.print(temperatuur,1); lcd.write(0); lcd.print (“C”);
Serial.print(” temp(C):”);
Serial.print(temperatuur,1);

vochtigheid = Sensor.getHumidity();
lcd.setCursor(0,3);         // zet de cursor op positie 1, regel 3
emptyline();
lcd.setCursor(0,3);         // zet de cursor op positie 1, regel 3
lcd.print (“Vocht: “); lcd.print(vochtigheid,1); lcd.print (” % “);
Serial.print(” vocht(%):”);
Serial.print(vochtigheid,1);
Serial.println();
}
else
Serial.println(“wacht op nieuwe meting”);

delay(500);
}

Op de seriële monitor (instellen op 115200 bps) is het volgende te zien:

Download links voor code en beschrijving

  1. Code voor sketch CO2 meting 01 (in ZIP formaat)
  2. Download link voor “bouw je eigen CO2 meter deel 1” (in PDF formaat)

Vragen en/of opmerkingen?

Schrijf ze in de reactie sectie hieronder.