Überwachen der Luftqualität mit dem SCD30-Sensor

CO2, Temperatur und Luftfeuchtigkeit messen

Die Qualität der Luft, die wir atmen, hat einen erheblichen Einfluss auf unsere Gesundheit und unser Wohlbefinden. Daher ist es wichtig, die Luftqualität in Innenräumen zu überwachen. Eine effektive Möglichkeit, dies zu tun, ist die Verwendung des SCD30-Sensors von Sensirion. Der SCD30-Sensor ist in der Lage, den CO2-Gehalt, die Temperatur und die Luftfeuchtigkeit in Echtzeit zu messen und bietet damit wertvolle Informationen für die Optimierung der Raumluft.

ESP32 mit CO2-Sensor von Sensation

Messungen mit dem SCD30-Sensor:

Der SCD30-Sensor basiert auf der Infrarot-Absorptionstechnologie und bietet eine hohe Genauigkeit und Zuverlässigkeit bei der Messung von CO2, Temperatur und Luftfeuchtigkeit. Durch die Integration des Sensors in ein ESP32-Entwicklungsboard und die Programmierung mit MicroPython kann man die Daten einfach auslesen und analysieren. Mit Hilfe des I2C-Busses kann der SCD30-Sensor problemlos mit dem ESP32 verbunden werden, um präzise Messungen durchzuführen.

from machine import Pin, SoftI2C
from scd30 import SCD30
from time import sleep_ms

# Definiere die I2C-Pins
i2c = SoftI2C(sda=Pin(21), scl=Pin(22))
# Definiere den "readyPin" - sobald dieser auf 1 gesetzt wird 
# können die Messwerte ausgelesen werden.  
readyPin = Pin(23, Pin.IN, Pin.PULL_UP)

scd30_address = 0x61

# Erstelle eine Instanz des SCD30-Sensors
scd30_sensor = SCD30(i2c, scd30_address)

# Initialisiere den Sensor und starte Messung im Contiunous-Modus:
scd30_sensor.start_continous_measurement()

while True:
    # Warten auf die Bereitschaft des Sensors:
    while readyPin.value() != 1:
        sleep_ms(200)
    # Lese die Sensordaten
    co2, temperature, humidity = scd30_sensor.read_measurement()

    # Runde die Werte
    co2 = round(co2, 0)
    temperature = round(temperature, 1)
    humidity = round(humidity, 1)

    # Gib die Werte aus
    print("******************************")
    print("CO2: {} ppm".format(co2))
    print("Temperatur: {} °C".format(temperature))
    print("Luftfeuchtigkeit: {} %".format(humidity))

Die Verwendung des SCD30-Sensors ermöglicht die Überwachung der Luftqualität in verschiedenen Bereichen wie Büros, Schulen, Wohnräumen und öffentlichen Einrichtungen. Durch die Messung des CO2-Gehalts kann man feststellen, ob ausreichend belüftet wird und ob Maßnahmen zur Verbesserung der Raumluftqualität erforderlich sind.

Die Temperatur- und Luftfeuchtigkeitsmessungen bieten weitere Einblicke in das Raumklima und ermöglichen eine gezielte Steuerung von Heizung, Lüftung und Klimaanlage. Mit dem SCD30-Sensor erhält man also wertvolle Daten zur Verbesserung des Raumklimas und zur Förderung von Gesundheit und Komfort.

Add-On: Rundenzeiten

Im Praktikum „Fadenpendel“ haben die Schülerinnen und Schüler die Messwerte mit Excel erfasst, aber die Zeit mit dem Smartphone gestoppt.

Wäre es nicht naheliegend, die Zeit auch mit Excel zu stoppen? Eine einfache Möglichkeit ist die Zeit mit in einem Python-Skript zu stoppen und direkt in die Exceltabelle zu schreiben.

Folgende Lösung hat ChatGPT vorgeschlagen:

import time
import pandas as pd

def save_lap_times(lap_times, lap_count):
    file = 'Messwerte.xlsx'
    sheet_name = 'Rundenzeiten'

    lap_times = [round(lt, 3) for lt in lap_times]
    data = {f'Rundenzeit {lap_count}': lap_times}
    lap_time_df = pd.DataFrame(data)

    try:
        existing_df = pd.read_excel(file, sheet_name=sheet_name)
        new_df = pd.concat([existing_df, lap_time_df], axis=1)
    except FileNotFoundError:
        new_df = lap_time_df

    new_df.to_excel(file, sheet_name=sheet_name, index=False)

print('Drücken Sie Enter, um die Stoppuhr zu starten. Geben Sie "n" ein und drücken Sie Enter, um eine neue Messung zu beginnen. Geben Sie "x" ein und drücken Sie Enter, um die Messung zu beenden und die Daten in Excel zu speichern.')

lap_count = 1

input('Wollen Sie die Messung starten (ja: Enter, nein: x)? ')
lap_times = []
start_time = time.time()
print('Rundenzeit gestartet.')

while True:
    user_input = input('Runde: Enter, Stopp: x : ')
    if user_input == '':
        lap_time = time.time() - start_time
        lap_times.append(lap_time)
        print(f'Rundenzeit gespeichert: {lap_time:.3f} Sekunden')
        start_time = time.time()
    elif user_input.lower() == 'n':
        lap_count += 1
        print('Neue Messung gestartet.')
        break
    elif user_input.lower() == 'x':
        print('Messung beendet. Daten werden in Excel gespeichert...')
        save_lap_times(lap_times, lap_count)
        break

AddOns

Im Unterricht fallen mir immer wieder kleine Ideen ein, die einem das Leben leichter machen könnten. Mithilfe von ChatGPT und Python, lassen sich oft Probleme recht einfach lösen.