Lebensdauer des Feinstaubsensors verbessern

Der Feinstaubsensor hat eine begrenzte Lebensdauer

  1. wegen dem Lüfter,
  2. wegen der zunehmenden Verschmutzung im Innern (irgendwo muss der Staub ja wohin).

Außerdem ist es bestimmt nicht notwendig die Feinstaubkonzentration jede Minute zu messen.
Wenn man also den Feinstaubsensor in einem größeren Zeitraum zum Leben erweckt (geht das unabhängig von den anderen Messungen?) muss man dann auch einen Vorlauf des Lüfters eiplanen ?

Gruß
Altprog

Hi altprog

Es ist scheinbar möglich den Feinstaubsensor SDS011 in den “sleep mode” mit 3 mA statt 100 mA Stromverbrauch zu versetzen. Mit turnOff() und turnOn() wie es beim Hackair Projekt gemacht wird.
Dort haben sie nach dem turnOn() einen Delay von 2 Sekunden.
Mir fehlt momentan leider die Zeit das detaillierter anzuschauen.
Sobald ich die Box mit Solar betreibe wird es aktuell, mit dem reduzierten Stromverbrauch spart man einige Euros für Akku und Solarpanel.
Gruss
Olly

2 Likes

Hi altprog,
habe im Forum danach gesucht und folgende funktionierende Lösung gefunden:
Auszüge aus meinem Programm (geht sicher noch eleganter, es macht aber was es soll- SDS 1 Minute vor auslesen Messwert einschalten und Ser Schnittstelle initialisieren!Wichtig! – Messwert auslesen und SDS wieder ausschalten):
--------------begin teil 1 –
// PM2.5
const char PM25SENSOR_ID[] PROGMEM = “5xxxxxxxxxxx…”;

int SDSdelay = 0; //Zähler
int uber = 20; //Anzahl Minuten für Aktivierung Feinstaubsensor –>const… besser

WiFiSSLClient client;

--------------ende teill 1

--------------beginn-teil 2
//-----PM-----//
#ifdef SDS011_CONNECTED

uint8_t attempt = 0;
float pm10, pm25;
SDSdelay++;
Serial.print(SDSdelay);
Serial.print (" ");
//if (SDSdelay<uber-1) senseBoxIO.powerUART(true); //bzw (false)??
if (SDSdelay == uber - 1) {
Serial.println(“SDS SensornON”);
senseBoxIO.powerUART(true);
delay(3000);
SDS_UART_PORT.begin(9600);
}
else {
senseBoxIO.powerUART(false);
Serial.println(“SDS SensornOFF”);
}

if (SDSdelay >= uber) {
Serial.println(“SDS-Sensor read”);
while (attempt < 10) {

  bool error = SDS.read(&pm25, &pm10);
  if (!error) {
    addMeasurement(PM10SENSOR_ID, pm10);
    addMeasurement(PM25SENSOR_ID, pm25);
    break;
  }
  attempt++;
}
senseBoxIO.powerUART(false);
Serial.println("SDS SensornOFF");
SDSdelay = 0;

}
#endif

DEBUG(F(“Submit values”));
submitValues();
-----------ende teil 2—

…viel Erfolg!

Vielen Dank für die Lösung. Eine ähnliche Lösung habe ich auch gefunden.

uint8_t attempt = 0;
float pm10, pm25;
//prüfen ob Zeit für eine neue Feinstaubmessung
unsigned long jetzt=millis();
unsigned long vergangen=jetzt-startSDS_time;
//Serial.println(jetzt/1000);
//Serial.println(startSDS_time/1000);
//Serial.println(vergangen/1000);
if (vergangen>=feinstaubIntervall) {
SDS.wakeup();
zustand=true;
delay(10000); // Vorlauf damit nicht gleich nach dem Einschalten gemessen wird
}
while (attempt < 5) {
bool error = SDS.read(&pm25, &pm10);
if (!error) {
addMeasurement(PM10SENSOR_ID, pm10);
addMeasurement(PM25SENSOR_ID, pm25);
SDS.sleep();
zustand=false;
startSDS_time=millis();
break;
}
attempt++;
}

Die Vorlaufzeit ist im Moment etwas kurz gewählt, muss ev. verlängert werden

Gruß Altprog