Detector de partículas SDS011

Objetivos

 

  • Calidad de aire: Partículas en suspensión y detectores de partículas.
  • Sensor SDS011
  • Leyendo el SDS011 desde Arduino.[/three-fourth] [clear/]
  •  

    Material requerido.

     

    Sensor de particulas en suspension  Sensor SDS011
    DEtalle de los pines exteriores  Arduino Mega

     

    Sensores de partículas en suspensión

     

    Decía Mafalda en una de sus tiras, pasando el dedo por un mueble, que era un asco vivir en un planeta que destiñe. Y es que tenemos que asumirlo. El polvo lo invade todo y solo en las carísimas salas limpias de ciertos laboratorios se puede huir de ello.

    Pero, el común mortal vive (Vivimos) en un entorno abundante en pequeñas partículas de todo tipo que van desde las más inofensivas a otras preocupantes. Siempre que quemas algo, generas multitud de partículas diferentes que reconoces vagamente como humo mientras están concentradas, pero que poco a poco se van dispersando, hasta que son inapreciables, pero siguen estando presentes en el aire que respiras.

    Muchos procesos humanos o naturales generan este tipo de partículas y ya hace tiempo que la OMS alertó de que la concentración de partículas en suspensión está relacionada con diferentes enfermedades pulmonares, de vías respiratorias o cardiacas, entre otras, y de diferente gravedad según las características de las mismas.

    En el caso de la muy actual prevención de los contagios por COVID-19, un informe de la OMS dictamina lo siguiente:

  • Las infecciones respiratorias pueden ser transmitidas por gotículas de diferentes tamaños, cuando estas partículas son de entre 5 y 10 µm, se dice que son gotículas respiratorias; cuando son menores de 5 µm, se las llama núcleos de goticulas.
  • De acuerdo con las evidencias actuales, el virus del COVID-19 se transmite primariamente entre personas a través de goticulas respiratorias y otras rutas de contacto.
  • La transmisión de goticulas se produce cuando alguien está próxima a otra persona con síntomas (Tose y estornudos) … y se expone a infecciones potenciales por gotículas respiratorias.
  • La vía aérea de transmisión es diferente de la transmisión por goticulas y se refiere a la presencia de gérmenes microbianos dentro de los núcleos goticulares, a los que, en general, se consideran partículas de tamaño inferior a 5 µm, y que pueden permanecer en el aire por largos periodos de tiempo y transmitirse a otras personas a distancias mayores que 1 metro.
  •  

    En una época como la actual, en la que la preocupación por la salud y la contaminación atmosférica (Típicamente de la quema de combustibles) es alta, y no digamos ya la prevención de enfermedades respiratorias como el COVID-19, no está de más que dediquemos una sesión a  revisar los detectores de partículas que miden la calidad del aire a base de detectar la cantidad de micro partículas en suspensión.

    Conviene empezar diciendo que parece haber consenso en clasificar esas partículas por su tamaño y en general hay dos grandes bloques: menos de 2.5 µm (micrómetros) y entre 2.5 µm y 10 µm que , en uno de esos alardes de imaginación, se suelen llamar PM2.5 y PM10. Los sensores de partículas de andar por caso suelen ser capaces de medir las concentraciones de estos dos tipos, y los podemos encontrar por debajo de los 30€ y hasta unos 100 dependiendo de no estoy muy seguro que.

  • Los sensores profesionales que se utilizan en las ciudades suelen costar varios miles de veces esta cifra, y no faltan las voces de funcionaros pagados en exceso que alertan contra esos sensorcillos baratos de escasa precisión y fiabilidad y nos recuerdan tonantemente que no se puede usar esos datos de chichinabo para hacer estadísticas, sobre todo porque no las hacen ellos con sus carísimos juguetes; faltaría más.
  • Lo que se busca con los sensores de andar por casa es una aproximación suficiente, para saber la situación de humos y polvo o muchas veces polen (Porque cada vez hay más alergias) y esto es algo que cumplen sobradamente por relativamente poco dinero. [/fancy-ul] [/three-fourth]
  •  

    En esta sesión veremos como usar el sensor SDS011 con nuestro Arduino para leer la cantidad de partículas en suspensión PM10 y PM2.5 de un modo bastante sencillo, que no dudo que hará las delicias de los que quieren controlar la calidad de aire que le rodea.

    Las mas gruesas, PM10 suelen ser resultado de polvo y tierra flotante, mientras que las mas pequeñas y mas preocupantes suelen ser aerosoles, resultado de la combustión de Diesel y similares y gotas de Azufre o nitrógeno, restos de combustión.

     

    El sensor SDS011

     

    EL SDS011 es un típico sensor digital de partículas que es capaz de medir la cantidad de ellas mediante un laser y un diodo interno a través de los cuales se empuja el aire exterior, mediante un ventilador y por lo visto, en función de la cantidad de luz que se dispersa y del patrón de interferencias que se genera, es capaz de determinar la concentración de partículas PM2.5 y PM10. Algo que me parece, simplemente magia.

    Según su datasheet, el SDS011 es capaz de detectar partículas PM2.5 de entre 0 y 1.000 µg (microgramos) por metro3 y las PM10 entre 0 y 2.000 µg por metro3, sensibilidad que me parece asombrosa y con una respuesta de alrededor de 1 segundo.

    El sensor viene con un adaptador de USB, que de salida no sirve de mucho porque envía los datos en bruto al USB y por tanto no vemos nada útil (Pero si me acuerdo, intentaré leerlo mediante el USB y un programa Python, a ver que tal) pero en el conector que veis en la esquina inferior izquierda, de la imagen superior, se pueden sacar los cables DuPont (Hembra) para conectarlo con nuestros Arduinos. A mi me ha resultado mas fiable usar el conector que viene con el USB y pinchar ahí directamente los DuPont macho que se aguantaban bastante mejor.

    Ocupa unos 7×7 cm y es muy fácil de usar porque en el conector mencionado, disponemos de alimentación y GND así como un par de hilos RX y TX con lo que conectar con nuestro Arduino es francamente sencillo. Vamos a ver cómo.

     

    Conectando el SDS011 a un Arduino MEGA

     

    Como la conexión del SDS011 es una puerta COM, podríamos usar cualquier par de pines de un Arduino cualquiera para conectarlos, pero me ha parecido mas limpio usar un Mega que tiene varios puertos serie nativos y evitar el cargar la librería SoftSerial (Que es una opción viable en cualquier Arduino que solo tenga una COM port)

    La conexión es trivial:

    Conexion y cableado del sensor sds011

    El conector del SDS011 lleva por debajo rotulados los nombres de los pines y simplemente tiene que conectar GND y Vcc, y asegurarte que conectas el RX del Sensor al TX de Arduino y viceversa.

    Detalle de los pines


     

    EL programa de lectura de datos

     

    El administrador de bibliotecas de Arduino dispone de al menos 3 librerías para manejar el Sds011 y como varias de ellas me han estado mareando, al final he optado por la que menos guerra me ha dado y que además es la que más sencilla me ha parecido:  “Nova Fitness SDS dust sensor”. Vete al menú Arduino: \\Programa\Incluir libreria\Administrador de bibliotecas y busca SDS011:

    libreria sds011

    Y una vez instalada ya podemos empezar con el programa. La librería tiene dos versiones: La que usa una puerta Serial por hardware como en el caso del Arduino Mega (Que es la que voy a usar aquí, porque el Mega tiene varias serial hardware disponibles y hace el código más pequeño y sencillo) y otra versión para modelos tipo Arduino UNO que usa una puerta serie configurable por software.

    Empezamos con los include y un par de variables instrumentales que usaremos para contener los resultados de las medidas de PM10 y PM2.5:

    #include <SDS011-select-serial.h>
    float p10,p25;
    int error;

    Creamos, ahora,  una instancia del sensor pasándole la puerta Serial a la que hemos conectado el sensor:

    SDS011 my_sds(Serial1);

    El setup es muy simple:

    void setup()
    {   Serial.begin(9600);             // initialize normal Serial port
        Serial1.begin(9600);            // initalize SDS Serial Port
        Serial.print("P2.5"); Serial.print("\t");Serial.println("P10");
    }

    Lo único que merece la pena comentar de él, es que hemos metido la última línea de prints con el objetivo de que si usamos una puerta serie saque una cabecera de las columnas y que si usamos el Serial Plotter (Que naturalmente vamos a usar) rotule en diferente color los dos tipos de partículas.

    El loop no es más complicado:

    void loop() 
    { error = my_sds.read(&p25,&p10);
    
      if (! error) 
        {  //Serial.println("P2.5: "+String(p25));
           //Serial.println("P10:  "+String(p10));
           Serial.print(p25) ; Serial.print("\t"); Serial.println(p10);
        }
      delay(100);
    }

    Si recordáis, más arriba declaramos un par de variables p25 y p10 que dijimos íbamos a usar para contener las medidas. La instrucción

    error = my_sds.read(&p25,&p10);

    Lo que hace es comprobar si hay un error al invocar la lectura del sensor, al que le pasamos la dirección de esas variables que nos rellenará con la lectura si no hay problemas, y eso es todo.

    La última línea con los print, simplemente le dice a la consola que tabule la salida de datos del mismo modo que los títulos que pusimos en el setup() (Fijate en los títulos de la primera fila)

    lecturas del sds011

    Pero por supuesto, usar el serial plotter es mucho más interesante e ilustrativo:

    Curvas de concentracion de particulas en suspension

    El primer pico que veis es porque le he encendido una cerilla de madera a su lado y he soplado en dirección al ventilador del SDS011 que recoge el aire externo. El segundo pico, muy inferior, se produce cuando exhalo aliento en el ventilador, que supongo detecta las gesticulas minúsculas de humedad que se condensan.

    Aquí va el programa completo para que descargues:

    Aquí os dejo un minivideo con una prueba del sensor: