Ich möchte mal den Partikelsensor / Staubsensor testen.

Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Ich habe mir mal den Partikelsensor von Reichelt bestellt. Aber leider ist er noch immer nicht da, weil er gerade "vergriffen" ist. Obwohl er beim bestellen eigentlich "auf Lager" war. Dann ist er wohl auf unerklärliche Weise von Dannen geschwebt. Naja, schaumal mal, ob er doch noch irgendwann eintrifft. :O:

Franz

Achja, ein gutes neues Jahr wünsche ich noch :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Wenn jemand das Ding schon am Tisch liegen hat. Hier ist die Lib. dazu, die ich benutzen will, so sie funktioniert. Und das Datenblatt zum Sensor i2c-sen5x.

Franz :(o):
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Ich habe mir auch noch den sen54-sdn-t dazu bestellt und bereits bekommen. Der Zusätzlich Temp. und Feuchte kann. Aber leider die Stecker sind auch da nicht dabei. Davon habe ich mir jetzt auch genügend zum selber Krimpen bestellt. Sollten die Tage kommen, wenn sie nicht auch wieder plötzlich nicht lieferbar sind. :(o):

Schauma mal, denn seh´n wir´s schon, heißt es ja so schön. Ich hoffe ich kann bald loslegen. :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

So ich habe inzwischen den Sensor am laufen. Also den "SEN54 SDN-T". Den "SEN50 SDN-T" auch, aber den verwende ich jetzt mal nicht, weil der SEN54 mehr kann. Vielleicht besorge ich mir auch noch den SEN55. Aber jetzt mache ich erst mal Nägel mit Köpfen mit dem SEN54.

Hier ist mal das Programm das ich im Moment verwende:

Code: Alles auswählen


/*
   I2C-Generator: 0.3.0
   Yaml Version: 2.1.3
   Template Version: 0.7.0-112-g190ecaa

   Copyright (c) 2021, Sensirion AG
   All rights reserved.

    Weiterverbreitung und Nutzung in Quell- und Binärform, mit oder ohne
    Änderungen sind zulässig, sofern folgende Bedingungen erfüllt sind:

 * * Bei der Weiterverbreitung des Quellcodes muss der oben stehende Copyright-Hinweis enthalten
     sein Liste der Bedingungen und den folgenden Haftungsausschluss.

 * * Weiterverbreitungen in binärer Form müssen den oben genannten Urheberrechtshinweis
     wiedergeben. diese Liste der Bedingungen und den folgenden Haftungsausschluss in der
     Dokumentation und/oder andere Materialien, die mit der Verteilung bereitgestellt werden.

 * * Weder der Name der Sensirion AG noch deren Namen
     Mitwirkende können dazu verwendet werden, daraus abgeleitete Produkte zu unterstützen oder
     zu bewerben diese Software ohne vorherige ausdrückliche schriftliche Genehmigung.

    DIESE SOFTWARE WIRD VON DEN COPYRIGHT-INHABERN UND MITARBEITERN „WIE BESEHEN“ ZUR VERFÜGUNG
    GESTELLT.UND ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH,
    ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT UND
    EIGNUNG FÜR EINEN BESTIMMTEN ZWECK WERDEN AUSGESCHLOSSEN.
    IN KEINEM FALL IST DER COPYRIGHT-INHABER ODER MITARBEITER HAFTBAR FÜR DIREKTE, INDIREKTE,
    ZUFÄLLIGE, BESONDERE, BEISPIELHAFTE ODER FOLGESCHÄDEN (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT
    AUF DIE BESCHAFFUNG VON WAREN ODER DIENSTLEISTUNGEN ERSETZEN; NUTZUNGS-, DATEN- ODER
    GEWINNVERLUST; ODER GESCHÄFT UNTERBRECHUNG) JEGLICH VERURSACHT UND AUF JEDER HAFTUNGSTHEORIE,
    OB IN VERTRAG, GEFÄHRLICHE HAFTUNG ODER unerlaubte Handlung (EINSCHLIESSLICH FAHRLÄSSIGKEIT
    ODER ANDERWEITIG) DIE IN IRGENDEINER WEISE AUS DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN,
    AUCH WENN SIE DARAUF HINGEWIESEN WURDEN MÖGLICHKEIT SOLCHER SCHÄDEN.

    ACHTUNG !!! PIN:5 auf GND legen um die I2C Schnittstelle zu aktivieren !!!
*/

#include <Arduino.h>
#include <SensirionI2CSen5x.h>
#include <Wire.h>

// Die verwendeten Befehle belegen bis zu 48 Bytes. Bei einigen Arduinos der Standardpuffer
// Der Platz ist nicht groß genug
#define MAXBUF_REQUIREMENT 48

#if (defined(I2C_BUFFER_LENGTH) &&                 \
     (I2C_BUFFER_LENGTH >= MAXBUF_REQUIREMENT)) || \
    (defined(BUFFER_LENGTH) && BUFFER_LENGTH >= MAXBUF_REQUIREMENT)
#define USE_PRODUCT_INFO
#endif

SensirionI2CSen5x sen5x;

void printModuleVersions() {
  uint16_t error;
  char errorMessage[256];

  unsigned char productName[32];
  uint8_t productNameSize = 32;

  error = sen5x.getProductName(productName, productNameSize);

  if (error) {
    Serial.print("Fehler65 beim Versuch, getProductName auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("ProductName:");
    Serial.println((char*)productName);
  }

  uint8_t firmwareMajor;
  uint8_t firmwareMinor;
  bool firmwareDebug;
  uint8_t hardwareMajor;
  uint8_t hardwareMinor;
  uint8_t protocolMajor;
  uint8_t protocolMinor;

  error = sen5x.getVersion(firmwareMajor, firmwareMinor, firmwareDebug,
                           hardwareMajor, hardwareMinor, protocolMajor,
                           protocolMinor);
  if (error) {
    Serial.print("Fehler85 beim Versuch, getVersion auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("Firmware: ");
    Serial.print(firmwareMajor);
    Serial.print(".");
    Serial.print(firmwareMinor);
    Serial.print(", ");

    Serial.print("Hardware: ");
    Serial.print(hardwareMajor);
    Serial.print(".");
    Serial.println(hardwareMinor);
  }
}

void printSerialNumber() {
  uint16_t error;
  char errorMessage[256];
  unsigned char serialNumber[32];
  uint8_t serialNumberSize = 32;

  error = sen5x.getSerialNumber(serialNumber, serialNumberSize);
  if (error) {
    Serial.print("Fehler110 beim Versuch, getSerialNumber auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("SerialNumber:");
    Serial.println((char*)serialNumber);
  }
}
//##########################################################################
//###################### SETUP #############################################
//##########################################################################

void setup() {

  Serial.begin(115200);
  while (!Serial) {
    delay(100);
  }

  Wire.begin();

  sen5x.begin(Wire);

  uint16_t error;
  char errorMessage[256];
  error = sen5x.deviceReset();
  if (error) {
    Serial.print("Fehler135 beim Versuch, deviceReset auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  }

  // Drucken Sie SEN55-Modulinformationen, wenn die i2c-Puffer groß genug sind
#ifdef USE_PRODUCT_INFO
  printSerialNumber();
  printModuleVersions();
#endif

  // einen Temperatur-Offset in Grad Celsius einstellen
  // Hinweis: Unterstützt von SEN54- und SEN55-Sensoren
  // Standardmäßig werden Temperatur und Luftfeuchtigkeit vom Sensor ausgegeben
  // werden für die Eigenerwärmung der Module kompensiert. Wenn das Modul ist
  // In ein Gerät integriert, das möglicherweise eine Temperaturkompensation benötigt
  // angepasst werden, um die Änderung der thermischen Kopplung zu berücksichtigen und
  // Eigenerwärmung anderer Gerätekomponenten.
  //
  // Ein Leitfaden zur Erzielung optimaler Leistung, einschließlich Referenzen
  // zu mechanischen Design-In-Beispielen finden Sie im App-Hinweis
  // „SEN5x – Anleitung zur Temperaturkompensation“ unter www.sensirion.com.
  // Weitere Informationen finden Sie in den Anwendungshinweisen
  // über die verwendeten erweiterten Kompensationseinstellungen
  // in `setTemperatureOffsetParameters`, `setWarmStartParameter` und
  // `setRhtAccelerationMode`.
  //
  // TempOffset anpassen, um zusätzliche Temperaturunterschiede zu berücksichtigen
  // Überschreitung der Eigenerwärmung des SEN-Moduls.
  float tempOffset = 0.0;
  error = sen5x.setTemperatureOffsetSimple(tempOffset);
  if (error) {
    Serial.print("Fehler169 beim Versuch, setTemperatureOffsetSimple auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("Temperatur-Offset eingestellt auf ");
    Serial.print(tempOffset);
    Serial.println(" Grad. Celsius (nur SEN54/SEN55).");
  }

  // Start Measurement
  error = sen5x.startMeasurement();
  if (error) {
    Serial.print("Fehler181 beim Versuch, startMeasurement auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  }
}
//#############################################################################
//############################### LOOP ########################################
//#############################################################################
void loop() {
  uint16_t error;
  char errorMessage[256];

  delay(5000);

  // Read Measurement
  float massConcentrationPm1p0;
  float massConcentrationPm2p5;
  float massConcentrationPm4p0;
  float massConcentrationPm10p0;
  float ambientHumidity;
  float ambientTemperature;
  float vocIndex;
  float noxIndex;

  error = sen5x.readMeasuredValues(
            massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0,
            massConcentrationPm10p0, ambientHumidity, ambientTemperature, vocIndex,
            noxIndex);

  if (error) {
    Serial.print("Fehler211 beim Versuch, readMeasuredValues auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("MC -> Pm1p0: ");
    Serial.print(massConcentrationPm1p0);
    Serial.print("   MC -> Pm2p5: ");
    Serial.print(massConcentrationPm2p5);
    Serial.print("   MC -> Pm4p0: ");
    Serial.print(massConcentrationPm4p0);
    Serial.print("   MC -> Pm10p0: ");
    Serial.print(massConcentrationPm10p0);
    Serial.print("  /  Luftfeuchte: ");
    if (isnan(ambientHumidity)) {
      Serial.print("n/a");
    } else {
      Serial.print(ambientHumidity);
    }
    Serial.print("   Temp.: ");
    if (isnan(ambientTemperature)) {
      Serial.print("n/a");
    } else {
      Serial.print(ambientTemperature);
    }
    Serial.print("   Fluechtige-Organische-Verb.:");
    if (isnan(vocIndex)) {
      Serial.print("n/a");
    } else {
      Serial.print(vocIndex);
    }
    Serial.print("\t");
    Serial.print("NoxIndex:");
    if (isnan(noxIndex)) {
      Serial.println("n/a");
    } else {
      Serial.println(noxIndex);
    }
  }
}
Hier ist mal ein Bild von Testaufbau, mit dem LuftQuallität Messgerät auf der Rechten Seite, das ich mit zur Gegenkontrolle geuft habe. Das ist übrigens wirklich recht gut. Damit bekomme ich schnell mal die Luftquallität im Zimmer kontrolliert. Wie genau es ist, lasse ich mal dahingestellt. Dass man für 160,- Euro oder so ähnlich, kein suuuper tolles Labormessgerät erwarten kann ist wohl klar.
.
SEN50_SDN_T_Aufbau.jpg
SEN50_SDN_T_Aufbau.jpg (434.14 KiB) 221 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Hier ist mal die Serial.print() Ausgabe diese Programms. Ich muss natürlich noch eine Sinnvolle Displayausgabe daraus machen. Aber das ist ja nicht das Problem.

Code: Alles auswählen

```
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.05   Temp.: 25.38   Fl??cht.Org.Verb.:155.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.20   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.70  /  Luftfeuchte: 44.84   Temp.: 25.38   Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60   MC -> Pm2p5: 3.10   MC -> Pm4p0: 3.50   MC -> Pm10p0: 3.60  /  Luftfeuchte: 44.93   Temp.: 25.38   Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.80  /  Luftfeuchte: 44.96   Temp.: 25.38   Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.01   Temp.: 25.38   Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.70   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.17   Temp.: 25.38   Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.40   MC -> Pm4p0: 3.70   MC -> Pm10p0: 3.90  /  Luftfeuchte: 45.35   Temp.: 25.38   Fl??cht.Org.Verb.:156.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.70   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.31   Temp.: 25.38   Fl??cht.Org.Verb.:157.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90   MC -> Pm2p5: 3.40   MC -> Pm4p0: 3.80   MC -> Pm10p0: 4.00  /  Luftfeuchte: 45.21   Temp.: 25.38   Fl??cht.Org.Verb.:156.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.27   Temp.: 25.38   Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.50  /  Luftfeuchte: 45.41   Temp.: 25.38   Fl??cht.Org.Verb.:155.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.10   MC -> Pm10p0: 3.30  /  Luftfeuchte: 45.28   Temp.: 25.38   Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.20   MC -> Pm10p0: 3.30  /  Luftfeuchte: 45.26   Temp.: 25.38   Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.20   MC -> Pm10p0: 3.40  /  Luftfeuchte: 45.20   Temp.: 25.39   Fl??cht.Org.Verb.:152.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.20   MC -> Pm10p0: 3.40  /  Luftfeuchte: 45.18   Temp.: 25.39   Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.20   MC -> Pm10p0: 3.30  /  Luftfeuchte: 45.32   Temp.: 25.39   Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.40  /  Luftfeuchte: 45.43   Temp.: 25.39   Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60   MC -> Pm2p5: 3.10   MC -> Pm4p0: 3.40   MC -> Pm10p0: 3.60  /  Luftfeuchte: 45.21   Temp.: 25.39   Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60   MC -> Pm2p5: 3.10   MC -> Pm4p0: 3.40   MC -> Pm10p0: 3.60  /  Luftfeuchte: 45.08   Temp.: 25.39   Fl??cht.Org.Verb.:150.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.50  /  Luftfeuchte: 44.94   Temp.: 25.39   Fl??cht.Org.Verb.:145.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.50  /  Luftfeuchte: 44.91   Temp.: 25.40   Fl??cht.Org.Verb.:143.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.20   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.70  /  Luftfeuchte: 44.91   Temp.: 25.40   Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 3.00   MC -> Pm2p5: 3.50   MC -> Pm4p0: 3.90   MC -> Pm10p0: 4.10  /  Luftfeuchte: 44.99   Temp.: 25.40   Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90   MC -> Pm2p5: 3.40   MC -> Pm4p0: 3.80   MC -> Pm10p0: 3.90  /  Luftfeuchte: 44.86   Temp.: 25.40   Fl??cht.Org.Verb.:139.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.20   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.70  /  Luftfeuchte: 44.94   Temp.: 25.40   Fl??cht.Org.Verb.:139.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.20   MC -> Pm4p0: 3.50   MC -> Pm10p0: 3.70  /  Luftfeuchte: 45.05   Temp.: 25.40   Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.20   MC -> Pm4p0: 3.50   MC -> Pm10p0: 3.70  /  Luftfeuchte: 45.02   Temp.: 25.40   Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.70  /  Luftfeuchte: 44.92   Temp.: 25.41   Fl??cht.Org.Verb.:141.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.40   MC -> Pm4p0: 3.70   MC -> Pm10p0: 3.90  /  Luftfeuchte: 44.82   Temp.: 25.41   Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90   MC -> Pm2p5: 3.50   MC -> Pm4p0: 3.80   MC -> Pm10p0: 4.00  /  Luftfeuchte: 44.89   Temp.: 25.41   Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.90   MC -> Pm2p5: 3.40   MC -> Pm4p0: 3.80   MC -> Pm10p0: 3.90  /  Luftfeuchte: 44.93   Temp.: 25.41   Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.70   MC -> Pm10p0: 3.80  /  Luftfeuchte: 45.02   Temp.: 25.42   Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.80   MC -> Pm2p5: 3.30   MC -> Pm4p0: 3.60   MC -> Pm10p0: 3.70  /  Luftfeuchte: 45.00   Temp.: 25.42   Fl??cht.Org.Verb.:138.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.70   MC -> Pm2p5: 3.10   MC -> Pm4p0: 3.40   MC -> Pm10p0: 3.60  /  Luftfeuchte: 45.19   Temp.: 25.42   Fl??cht.Org.Verb.:140.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.50  /  Luftfeuchte: 45.45   Temp.: 25.42   Fl??cht.Org.Verb.:144.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.60   MC -> Pm2p5: 3.00   MC -> Pm4p0: 3.30   MC -> Pm10p0: 3.40  /  Luftfeuchte: 45.56   Temp.: 25.42   Fl??cht.Org.Verb.:148.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.20   MC -> Pm10p0: 3.30  /  Luftfeuchte: 45.54   Temp.: 25.42   Fl??cht.Org.Verb.:151.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40   MC -> Pm2p5: 2.80   MC -> Pm4p0: 3.00   MC -> Pm10p0: 3.10  /  Luftfeuchte: 45.54   Temp.: 25.42   Fl??cht.Org.Verb.:153.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.40   MC -> Pm2p5: 2.70   MC -> Pm4p0: 3.00   MC -> Pm10p0: 3.10  /  Luftfeuchte: 45.52   Temp.: 25.42   Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
MC -> Pm1p0: 2.50   MC -> Pm2p5: 2.90   MC -> Pm4p0: 3.10   MC -> Pm10p0: 3.20  /  Luftfeuchte: 45.48   Temp.: 25.43   Fl??cht.Org.Verb.:154.00<9>NoxIndex:n/a<\r><\n>
```
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Ich habe das Programm jetzt mal umgebaut auf ein VGA Display 4 Zeilen je 20 Zeichen. Ist aber immer noch vorläufig. Hat noch keinen Schönheitspreis bei mir. Der Partikelwert ist jetzt nur der PM2,5 weil ich für den eine Vergleichsmessung habe.

Code: Alles auswählen


/*
   I2C-Generator: 0.3.0
   Yaml Version: 2.1.3
   Template Version: 0.7.0-112-g190ecaa

   Copyright (c) 2021, Sensirion AG
   All rights reserved.

    Weiterverbreitung und Nutzung in Quell- und Binärform, mit oder ohne
    Änderungen sind zulässig, sofern folgende Bedingungen erfüllt sind:

 * * Bei der Weiterverbreitung des Quellcodes muss der oben stehende Copyright-Hinweis enthalten
     sein Liste der Bedingungen und den folgenden Haftungsausschluss.

 * * Weiterverbreitungen in binärer Form müssen den oben genannten Urheberrechtshinweis
     wiedergeben. diese Liste der Bedingungen und den folgenden Haftungsausschluss in der
     Dokumentation und/oder andere Materialien, die mit der Verteilung bereitgestellt werden.

 * * Weder der Name der Sensirion AG noch deren Namen
     Mitwirkende können dazu verwendet werden, daraus abgeleitete Produkte zu unterstützen oder
     zu bewerben diese Software ohne vorherige ausdrückliche schriftliche Genehmigung.

    DIESE SOFTWARE WIRD VON DEN COPYRIGHT-INHABERN UND MITARBEITERN „WIE BESEHEN“ ZUR VERFÜGUNG
    GESTELLT.UND ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH,
    ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDE GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT UND
    EIGNUNG FÜR EINEN BESTIMMTEN ZWECK WERDEN AUSGESCHLOSSEN.
    IN KEINEM FALL IST DER COPYRIGHT-INHABER ODER MITARBEITER HAFTBAR FÜR DIREKTE, INDIREKTE,
    ZUFÄLLIGE, BESONDERE, BEISPIELHAFTE ODER FOLGESCHÄDEN (EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT
    AUF DIE BESCHAFFUNG VON WAREN ODER DIENSTLEISTUNGEN ERSETZEN; NUTZUNGS-, DATEN- ODER
    GEWINNVERLUST; ODER GESCHÄFT UNTERBRECHUNG) JEGLICH VERURSACHT UND AUF JEDER HAFTUNGSTHEORIE,
    OB IN VERTRAG, GEFÄHRLICHE HAFTUNG ODER unerlaubte Handlung (EINSCHLIESSLICH FAHRLÄSSIGKEIT
    ODER ANDERWEITIG) DIE IN IRGENDEINER WEISE AUS DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN,
    AUCH WENN SIE DARAUF HINGEWIESEN WURDEN MÖGLICHKEIT SOLCHER SCHÄDEN.

    ACHTUNG !!! PIN:5 auf GND legen um die I2C Schnittstelle zu aktivieren !!!
*/

#include <Arduino.h>
#include <SensirionI2CSen5x.h>
#include <Wire.h>
// LCD Display I2C 4 Zeilen je 20 Zeichen einrichten
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 20, 4);

// Die verwendeten Befehle belegen bis zu 48 Bytes. Bei einigen Arduinos der Standardpuffer
// Der Platz ist nicht groß genug
#define MAXBUF_REQUIREMENT 48

#if (defined(I2C_BUFFER_LENGTH) &&                 \
     (I2C_BUFFER_LENGTH >= MAXBUF_REQUIREMENT)) || \
    (defined(BUFFER_LENGTH) && BUFFER_LENGTH >= MAXBUF_REQUIREMENT)
#define USE_PRODUCT_INFO
#endif

SensirionI2CSen5x sen5x;

void printModuleVersions() {
  uint16_t error;
  char errorMessage[256];

  unsigned char productName[32];
  uint8_t productNameSize = 32;

  error = sen5x.getProductName(productName, productNameSize);

  if (error) {
    Serial.print("Fehler65 beim Versuch, getProductName auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("ProductName:");
    Serial.println((char*)productName);
  }

  uint8_t firmwareMajor;
  uint8_t firmwareMinor;
  bool firmwareDebug;
  uint8_t hardwareMajor;
  uint8_t hardwareMinor;
  uint8_t protocolMajor;
  uint8_t protocolMinor;

  error = sen5x.getVersion(firmwareMajor, firmwareMinor, firmwareDebug,
                           hardwareMajor, hardwareMinor, protocolMajor,
                           protocolMinor);
  if (error) {
    Serial.print("Fehler85 beim Versuch, getVersion auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("Firmware: ");
    Serial.print(firmwareMajor);
    Serial.print(".");
    Serial.print(firmwareMinor);
    Serial.print(", ");

    Serial.print("Hardware: ");
    Serial.print(hardwareMajor);
    Serial.print(".");
    Serial.println(hardwareMinor);
  }
}

void printSerialNumber() {
  uint16_t error;
  char errorMessage[256];
  unsigned char serialNumber[32];
  uint8_t serialNumberSize = 32;

  error = sen5x.getSerialNumber(serialNumber, serialNumberSize);
  if (error) {
    Serial.print("Fehler110 beim Versuch, getSerialNumber auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("SerialNumber:");
    Serial.println((char*)serialNumber);
  }
}
//##########################################################################
//###################### SETUP #############################################
//##########################################################################

void setup() {

  Serial.begin(115200);
  while (!Serial) {
    delay(100);
  }
  //-----------LCD Display Start----------------------------------------
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  //-----------LCD Standart Text Display--------------------------------
  lcd.setCursor (0, 0);            // Zeile 1
  lcd.print (F("PM1       PM2"));
  lcd.setCursor (0, 1);            // Zeile 2
  lcd.print (F("PM4       PM10"));
  lcd.setCursor (0, 2);            // Zeile 3
  lcd.print (F("Gas       mg/m3"));
  lcd.setCursor (0, 3);            // Zeile 4
  lcd.print (F("Tem       Hy"));
  //----------------------------------------------------------------------
  Wire.begin();

  sen5x.begin(Wire);

  uint16_t error;
  char errorMessage[256];
  error = sen5x.deviceReset();
  if (error) {
    Serial.print("Fehler135 beim Versuch, deviceReset auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  }

  // Drucken Sie SEN55-Modulinformationen, wenn die i2c-Puffer groß genug sind
#ifdef USE_PRODUCT_INFO
  printSerialNumber();
  printModuleVersions();
#endif

  // einen Temperatur-Offset in Grad Celsius einstellen
  // Hinweis: Unterstützt von SEN54- und SEN55-Sensoren
  // Standardmäßig werden Temperatur und Luftfeuchtigkeit vom Sensor ausgegeben
  // werden für die Eigenerwärmung der Module kompensiert. Wenn das Modul ist
  // In ein Gerät integriert, das möglicherweise eine Temperaturkompensation benötigt
  // angepasst werden, um die Änderung der thermischen Kopplung zu berücksichtigen und
  // Eigenerwärmung anderer Gerätekomponenten.
  //
  // Ein Leitfaden zur Erzielung optimaler Leistung, einschließlich Referenzen
  // zu mechanischen Design-In-Beispielen finden Sie im App-Hinweis
  // „SEN5x – Anleitung zur Temperaturkompensation“ unter www.sensirion.com.
  // Weitere Informationen finden Sie in den Anwendungshinweisen
  // über die verwendeten erweiterten Kompensationseinstellungen
  // in `setTemperatureOffsetParameters`, `setWarmStartParameter` und
  // `setRhtAccelerationMode`.
  //
  // TempOffset anpassen, um zusätzliche Temperaturunterschiede zu berücksichtigen
  // Überschreitung der Eigenerwärmung des SEN-Moduls.
  float tempOffset = 0.0;
  error = sen5x.setTemperatureOffsetSimple(tempOffset);
  if (error) {
    Serial.print("Fehler169 beim Versuch, setTemperatureOffsetSimple auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    Serial.print("Temperatur-Offset eingestellt auf ");
    Serial.print(tempOffset);
    Serial.println(" Grad. Celsius (nur SEN54/SEN55).");
  }

  // Start Measurement
  error = sen5x.startMeasurement();
  if (error) {
    Serial.print("Fehler181 beim Versuch, startMeasurement auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  }
}
//#############################################################################
//############################### LOOP ########################################
//#############################################################################
void loop() {
  uint16_t error;
  char errorMessage[256];

  delay(5000);

  // Read Measurement
  float massConcentrationPm1p0;
  float massConcentrationPm2p5;
  float massConcentrationPm4p0;
  float massConcentrationPm10p0;
  float ambientHumidity;
  float ambientTemperature;
  float vocIndex;
  float noxIndex;

  error = sen5x.readMeasuredValues(
            massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0,
            massConcentrationPm10p0, ambientHumidity, ambientTemperature, vocIndex,
            noxIndex);

  if (error) {
    Serial.print("Fehler211 beim Versuch, readMeasuredValues auszuführen(): ");
    errorToString(error, errorMessage, 256);
    Serial.println(errorMessage);
  } else {
    //Serial.print("MC -> Pm1p0: ");
    //Serial.print(massConcentrationPm1p0);
    lcd.setCursor (4, 0);            // Zeile 1
    lcd.print ("     ");
    lcd.setCursor (4, 0);            // Zeile 1
    lcd.print (massConcentrationPm1p0);
    //--------------------------------------------
    //Serial.print("   MC -> Pm2p5: ");
    //Serial.print(massConcentrationPm2p5);
    lcd.setCursor (15, 0);            // Zeile 1
    lcd.print ("     ");
    lcd.setCursor (15, 0);            // Zeile 1
    lcd.print (massConcentrationPm2p5);
    //--------------------------------------------
    //Serial.print("   MC -> Pm4p0: ");
    //Serial.print(massConcentrationPm4p0);
    lcd.setCursor (4, 1);            // Zeile 2
    lcd.print ("     ");
    lcd.setCursor (4, 1);            // Zeile 2
    lcd.print (massConcentrationPm4p0);
    //--------------------------------------------
    //Serial.print("   MC -> Pm10p0: ");
    //Serial.print(massConcentrationPm10p0);
    lcd.setCursor (15, 1);            // Zeile 2
    lcd.print ("     ");
    lcd.setCursor (15, 1);            // Zeile 2
    lcd.print (massConcentrationPm10p0);
    //--------------------------------------------
    //Serial.print("  /  Luftfeuchte: ");
    if (isnan(ambientHumidity)) {
      //Serial.print("n/a");
    } else {
      //Serial.print(ambientHumidity);
      lcd.setCursor (14, 3);            // Zeile 4
      lcd.print ("      ");
      lcd.setCursor (14, 3);            // Zeile 4
      lcd.print (ambientHumidity);
    }
    //Serial.print("   Temp.: ");
    if (isnan(ambientTemperature)) {
      //Serial.print("n/a");
    } else {
      //Serial.print(ambientTemperature);
      lcd.setCursor (4, 3);            // Zeile 4
      lcd.print ("      ");
      lcd.setCursor (4, 3);            // Zeile 4
      lcd.print (ambientTemperature);
    }
    //Serial.print(" / Fluechtige-Organische-Verb.:");
    if (isnan(vocIndex)) {
      //Serial.print("n/a");
    } else {
      //Serial.print(vocIndex);
      lcd.setCursor (4, 2);            // Zeile 3
      lcd.print ("      ");
      lcd.setCursor (4, 2);            // Zeile 3
      lcd.print (vocIndex / 100);
    }
    //Serial.print(" NoxIndex:");
    if (isnan(noxIndex)) {
      //Serial.println("n/a");
    } else {
      //Serial.println(noxIndex);
    }
  }
}
Hier das Display mit den Messwerten und rechts der Vergleich. Die Gase waren und sind auch wieder auf 1,01 - 1,02. Nur für das Foto habe ich den Sensor nahe hinter das Vergleichsgerät gestellt. Dann hat sich der Wert fürs Foto verändert. Aber der Partikelwert, ist schon seehr weit weg. Das Vergleichsmessgerät schwankt zwischen 1 und 2 und mein Sensor sagt 3,9 - 4,0 :roll: :roll: Da muss ich mal schauen, was der Hersteller zu den Tolleranzen sagt. :O: Callibriert ist der Sensor auf PM2,5 und das ist auch der Wert, den ich verwende. Da sollen 10% Abweichung drin sein. Ja, wenn man jetzt dem Vergleichsgrät auch 10% gibt, dann kommt das schon hin. Zwei Geräte, zwei Tolleranzen, dann ist da schon eine kräftige Abweichung zwischen den beiden Messungen möglich.
.
SEN50_SDN_T_Aufbau_2.jpg
SEN50_SDN_T_Aufbau_2.jpg (365.21 KiB) 212 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Habe die Ausgabe aufs Display noch ein bischen geändert. Die Uhr richte ich jetzt fürs erste nicht ein. Dafür zeige ich da Daten von allen 4 Partikelgrößen an. 1,0 / 2,5 / 4,0 / 10,0.

Das schaut jetzt so aus:
.
SEN50_SDN_T_Aufbau_3.jpg
SEN50_SDN_T_Aufbau_3.jpg (428.04 KiB) 204 mal betrachtet
Was mir hier nicht gefällt, es sind die PM 2,5 bis 10,0 fast immer gleich, oder nur gering unterschiedlich. Das ist irgendwie seltsam. Es sind ja wohl kaum immer die verschiedenen Partikelgrößen in der selben Anzahl vorhanden??

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Ich habe jetzt auch noch einen Logic Level Converter in die I2C zum PartikelSensor eingeschleift, so dass dort auch noch die "Wunschspannung von 3,3 Volt läuft. Es wird zwar im Datanblatt angegeben, dass 5 Volt auch geht, aber ich will ja die Geräte die ich baue, immer auf Langlebigkeit auslegen. Deshalb habe ich dann doch mal so einen Logic Level Converter dazwischen geklemmt. Er macht keinen guten Job. Ich habe damit rel. viele Datenfehler am Display. Die Spannung 3,3 Volt vom Arduino wird damit sehr weit runtergedrückt und ich denke, das ist der Grund für die Fehler. Habe ich also doch wieder rausgeschmissen.

Das nächste ist jetzt mal der Schaltplan, dass man das Leicht zusammenbauen kann.

Servus
Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Hier ist mal die Schaltung von meinem derzeitigen Testaufbau. Habe aber den CO2 - Sensor, und den DH22 Temp./Luftfeuchte Sensor für Aussen, schon mal mit in die Schaltung aufgenommen. Der sollte am Wochenende da sein.

Ich lasse jetzt den Logic Level Converter mal im Schaltplan drin, kann ihn aber nicht empfehlen. Ich versuche es mal noch in einer fest verlöteten Version, aber auf dem Breadboard war das nicht empfehlenswert.
.
SEN54_SDN-T Testaufbau.JPG
SEN54_SDN-T Testaufbau.JPG (287.96 KiB) 180 mal betrachtet
.
SEN50_SDN_T_Aufbau_4.jpg
SEN50_SDN_T_Aufbau_4.jpg (386.79 KiB) 175 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1199
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Ich möchte mal den Partikelsensor / Staubsensor testen.

Beitrag von Admin »

Ich habe mir gerade den CO2 Sensor dazu bestellt. Der kommt in das Endgültige Gerät dann noch mit rein. Damit habe ich dann die Sensoren zusammen. Nur noch ein Aussensensor Temp. und Luftffeuchte also der DH22 kommt noch mit rein. Das wird dann wieder eine Automatische Fensterlüftung steuern.

Das wird kein schnelles Projekt, sondern ein von Tag zu Tag wachsendes. Ein solches Gerät zum Lüften über das automatisch öffnende Fenster habe ich ja schon. Aber da ist der Partikelsensor noch nicht mit drin.

Franz :(V):
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste