SDS011 – Feinstaubsensor

Mit dem Modul SDS011 kann der Feinstaub in der Luft per Particulate Matter (PM) „gezählt“ werden. Es werden Partikelgrößen in den Bereichen PM 2.5 und PM 10 registriert.

Die Kommunikation mit dem Arduino geht per Serieller Verbindung. Der Sensor kann per HEX Befehl gesteuert oder Schlafen gelegt werden. Dies ist auch bei Einsatz als „Messsonde“ auch sinnvoll da die Lebensdauer der Laserdiode auf 8000 h geschätzt wird. Mehr Infos gibt es Datenblatt am Ende des Beitrages.

Ein einfacher Arduino Sketch zum auslesen der Daten sollte als Basis für weitere Entwicklungen ausreichend sein. Hierfür bietet sich die Library von Paweł Kołodziejczyk an die hier zu finden ist.



Nachfolgend eine Ausgabe im Arduino Seriellen Monitor.

 
#include "SdsDustSensor.h"
 
int rxPin = 6;
int txPin = 7;
SdsDustSensor sds(rxPin, txPin);
 
void setup() {
  Serial.begin(9600);
  sds.begin();
 
  Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version
  Serial.println(sds.setActiveReportingMode().toString()); // ensures sensor is in 'active' reporting mode
  Serial.println(sds.setCustomWorkingPeriod(10).toString()); // sensor sends data every 3 minutes
}
 
void loop() {
  PmResult pm = sds.readPm();
  if (pm.isOk()) {
    Serial.print("PM2.5 = ");
    Serial.print(pm.pm25);
    Serial.print(", PM10 = ");
    Serial.println(pm.pm10);
 
    // if you want to just print the measured values, you can use toString() method as well
    Serial.println(pm.toString());
  } else {
    // notice that loop delay is set to 5s (sensor sends data every 3 minutes) and some reads are not available
    Serial.print("Could not read values from sensor, reason: ");
    Serial.println(pm.statusToString());
  }
 
  delay(5000);
}

Nachfolgend noch das Datenblatt von Nova Fitness Co., Ltd..

Servomotor ansteuern

Development Board

Einen Servo mit einem Arduino anzusteuern ist kein Hexenwerk. Mit nachfolgendem Sketch können zwei unterschiedliche Positionen angefahren werden.

// Servo Libary 
#include <Servo.h>
 
// Neues Objekt
Servo myservo;
int wert_auf;
int wert_zu;
 
void setup()
{
  // Servo an Pin 9 koppeln
  myservo.attach(9);
  Serial.begin(9600);
}
 
void loop()
{
  
   // Servo auf steuern
  wert_auf = 900;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_auf = map(wert_auf, 0, 1023, 0, 180);  
  myservo.write(wert_auf);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
  delay(1500);

  // Servo zu steuern
  wert_zu = 800;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_zu = map(wert_zu, 0, 1023, 0, 180);  
  myservo.write(wert_zu);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
   delay(1500);
 

}