Zum Inhalt

AGS10 TVOC Gas Sensor

Der AGS10 ist ein digitaler TVOC-Gassensor zur Messung der Gesamtmenge flüchtiger organischer Verbindungen (TVOCs) in der Luft. Er eignet sich für Anwendungen wie Raumluftüberwachung, Smart-Home-Systeme und IoT-Projekte.


Kurzüberblick

  • Messgröße: TVOC (Total Volatile Organic Compounds)
  • Schnittstelle: I²C
  • Versorgungsspannung: 3,3 – 5,0 V
  • Logikpegel (I²C): 3,3 V und 5 V kompatibel
  • I²C-Pull-Ups: auf dem Breakout-Board vorhanden
  • Ausgabe: TVOC-Wert in ppb
  • Aufwärmzeit: ca. 2–3 Minuten

Typische Anwendungsfälle

  • Raumluftqualitätsmessung
  • Smart-Home & Gebäudeautomation
  • Luftüberwachung in Büros & Werkstätten
  • Maker- & IoT-Projekte

Technische Daten

Parameter Wert
Messbereich 0 – 1000 ppb TVOC
Auflösung 1 ppb
Schnittstelle I²C
I²C-Adresse 0x1A (Standard)
Versorgungsspannung 3,3 – 5,0 V
Logikpegel 3,3 V / 5 V tolerant
Stromaufnahme typ. ca. 30 mA
Betriebstemperatur -10 °C bis +50 °C

Pinout & Anschlüsse

Pin Bezeichnung Beschreibung
VCC Versorgung 3,3 – 5,0 V
GND Masse Ground
SDA I²C Data I²C Datenleitung
SCL I²C Clock I²C Taktleitung

Hinweis:
Auf dem verwendeten Breakout-Board sind die I²C-Pull-Up-Widerstände bereits integriert.
Der Sensor kann daher direkt an 3,3-V- oder 5-V-I²C-Busse angeschlossen werden.


Elektrische Eigenschaften

  • Betrieb mit 3,3 V oder 5 V Versorgungsspannung
  • I²C-Logikpegel kompatibel zu 3,3 V und 5 V
  • Interne Pegelanpassung über das Breakout-Board
  • Stabiler Ruhestrom nach abgeschlossener Aufwärmphase

Kommunikation (I²C)

  • Bus: I²C
  • Adresse: 0x1A
  • Pull-Ups: vorhanden auf dem Board
  • Datenformat: 16 Bit TVOC-Wert (ppb)

Messwert auslesen (vereinfacht)

  1. Startbedingung
  2. I²C-Adresse + Read
  3. 2 Bytes empfangen
  4. TVOC-Wert berechnen

Beispielcode

Arduino (I²C)

## Beispielcode (Arduino)


#include <Wire.h>

#define AGS10_ADDR 0x1A
#define REG_DATA_ACQ        0x00
#define REG_READ_VERSION    0x11
#define REG_READ_RESISTANCE 0x20
#define CMD_DELAY_MS        30
#define READ_DELAY_MS       1500

uint8_t calcCRC8(const uint8_t *data, uint8_t len) {
  uint8_t crc = 0xFF;
  for (uint8_t b = 0; b < len; b++) {
    crc ^= data[b];
    for (uint8_t i = 0; i < 8; i++)
      crc = (crc & 0x80) ? (crc << 1) ^ 0x31 : (crc << 1);
  }
  return crc;
}

bool i2cRead5(uint8_t reg, uint8_t *out) {
  Wire.beginTransmission(AGS10_ADDR);
  Wire.write(reg);
  if (Wire.endTransmission() != 0) return false;
  delay(CMD_DELAY_MS);

  if (Wire.requestFrom((int)AGS10_ADDR, 5) != 5) return false;
  for (uint8_t i = 0; i < 5; i++) out[i] = Wire.read();

  return (calcCRC8(out, 4) == out[4]);
}

bool readTVOC(uint32_t &tvoc, uint8_t &status) {
  uint8_t buf[5];
  if (!i2cRead5(REG_DATA_ACQ, buf)) return false;

  status = buf[0];
  tvoc = ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | buf[3];
  delay(READ_DELAY_MS);
  return true;
}

bool readVersion(uint8_t &ver) {
  uint8_t buf[5];
  if (!i2cRead5(REG_READ_VERSION, buf)) return false;
  ver = buf[3];
  return true;
}

bool readResistance(uint32_t &res) {
  uint8_t buf[5];
  if (!i2cRead5(REG_READ_RESISTANCE, buf)) return false;
  res = ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | buf[3];
  return true;
}

void setup() {
  Serial.begin(115200);
  Wire.begin();

  Serial.println("Paradisetronic - AGS10 TVOC Sensor Test");
  Serial.println("Bitte mindestens 2 Minuten Vorheizzeit beachten...");
  delay(2000);

  uint8_t fw;
  if (readVersion(fw)) {
    Serial.print("Firmware-Version: 0x");
    Serial.println(fw, HEX);
  }

  uint32_t r;
  if (readResistance(r)) {
    Serial.print("Sensor-Widerstand: ");
    Serial.print(r / 10.0, 1);
    Serial.println(" kOhm");
  }

  Serial.println("Starte TVOC-Messung...");
}

void loop() {
  uint32_t tvoc;
  uint8_t status;

  if (readTVOC(tvoc, status)) {
    Serial.print("Status: 0x");
    Serial.print(status, HEX);
    Serial.print(" | TVOC: ");
    Serial.print(tvoc);
    Serial.println(" ppb");
  } else {
    Serial.println("Fehler beim Lesen der TVOC-Daten.");
  }

  delay(2000);
}

Kalibrierung & Hinweise

•   Nach dem Einschalten ist eine Aufwärmzeit von ca. 2–3 Minuten erforderlich.
•   Die Messung ist relativ und für Trendanalysen vorgesehen.
•   Initialisierung idealerweise in sauberer Umgebungsluft.
•   Kurzzeitige Belastungen (Alkohol, Lösungsmittel) führen zu hohen Peaks.
•   Nicht für sicherheitskritische Gaswarnsysteme geeignet.

Troubleshooting

Troubleshooting

Keine I²C-Kommunikation • SDA/SCL korrekt verbunden • Versorgungsspannung prüfen (3,3 V oder 5 V) • Keine externen Pull-Ups notwendig (bereits auf dem Board) • I²C-Adresse 0x1A verifizieren • Bus ggf. mit I²C-Scanner testen

Downloads

  • Datenblatt (PDF)

  • Herstellerdokumentation
  • I²C-Spezifikation
  • Richtlinien zur Raumluftqualität (TVOC)

Revision / Changelog

Version Datum Änderung
1.0 2025-01-08 Erster Release