Sensor de Polvo

Mi aplicación favorita del Open Hardware es sin duda el monitoreo atmosférico y toda la data que se puede capturar con una pequeña inversión en módulos, sensores y placas de prototipado. Un día en un tienda local me encontré con este sensor de polvo óptico, el cual podía ser utilizado para medir la calidad del aire. Aunque tengo un par de sensores de mejores prestaciones y que se pueden catalogar como sensores de partículas, el que este tuviera disponibilidad local lo hacía irresistible para adquirirlo.

Sensor de Polvo

El sensor es un Sharp GP2Y1014AU0F, del cual se pueden encontrar bastantes códigos de ejemplo en la web para hacerlo funcionar con un Arduino UNO R3. Por lo tanto, no fue tan difícil encontrar sketches ya probados y además esquemas de cómo hacer el cableado, para que funcione correctamente y lograr medir las partículas de polvo que contiene el aire que pasan a través de sus haz de luz.

Sensor de polvo: Calidad del aire

La OMS considera las partículas PM10 y PM2.5, las cuales pueden ser de polvo, hollín, humo y/o aerosol. Son partículas suspendidas emitidas por vehículos diésel, quema de residuos o cultivos y las plantas generadoras de energía eléctrica a base de carbón. Estas partículas son un gran problema mundial de salud pública, incluso cuando su concentración es baja.

Las partículas PM10 tienen un diámetro menor a los 10 micrómetros, pueden ser fácilmente inhalada y se acumulan en el sistema respiratorio. Las PM25 tienen un diámetro menor a los 2.5 micrómetros, llamadas también “partículas finas”. Estás suponen un mayor riesgo para la salud porque pueden alojarse profundamente en los pulmones.

Sensor de polvo: Midiendo calidad del aire

Sensor de Polvo

Estas partículas se pueden medir en partes por millón (ppm). Aunque la unidad empleada para cuantificar la calidad del aire es el micro gramo por metro cúbico (µg/m3). El micro gramo es la millonésima parte de un gramo. Para medir la calidad de aire de un lugar se toman las mediciones durante 24 horas y posteriormente se calcula el promedio de todo el día. Si durante 24 horas tuvo mediciones arriba de los 100 µg/m3, este lugar se considera que la calidad del aire es inadecuada. Para una mejor comprensión dejaré una tabla con todas las escalas según la OMS.

Sensor de Polvo
Esta es la tabla de escalas con la que se puede medir la calidad de aire. Las medidas son las lecturas promedio de un periodo de 24 horas.

Antes de continuar con esta entrada, quisiera declarar algo. Estudiando un poco más a fondo este sensor la resolución que tiene no es tan precisa ya que mide las partículas en la escala de miligramos por metro cúbico (mg/m3) y no en micro gramos por metro cúbico (µg/m3). Lo cual no ofrece la misma resolución que podría ofrecer otro tipo de sensores. Por tal motivo es que este dispositivo se considera un sensor de polvo y no un sensor de partículas. En el código que se empleó para este ejercicio, aritméticamente se trabajaron los datos capturados para hacer las conversiones necesarias y que al final la lectura se expresara en micro gramos por metro cúbico siempre recomiendo tener un sensor mejor y con la resolución correcta para conseguir datos de mejor calidad.

Sensor de polvo: el dispositivo

El dispositivo que vamos a construir para tomar las lecturas de partículas de polvo del ambiente lo hice basándome en un esquema que encontré en la web. El dispositivo consiste en una pequeña pantalla OLED conectada a través del I2C la cual toma las medidas que está registrando el sensor de polvo y las muestra microgramos por metro cúbico (µg/m3), lastimosamente no he tenido el tiempo para guardar estos datos en una memoria para su posterior análisis. Por lo tanto, no puedo sacar el promedio diario de las lecturas y saber la calidad de aire en mi casa, según este sensor.

Sensor de Polvo

Partes necesarias

  • Un Arduino UNO R3
  • Un sensor Sharp GP2Y1014AU0F
  • Una pantalla OLED de 128×64 I2C
  • Cables Dupont para las conexiones
  • Una resistencia de 150 Ohm
  • Un Capacitor de 220 uf micro faradios
  • Una breadboard pequeña

La construcción es bastante sencilla y no tiene mucha complicación, una vez se siga correctamente el esquema, el cual adjunto a esta entrada, solo hay que tener cuidado con hacer bien las conexiones de los cables Dupont y le aseguro que podrán tomar medidas.

Sensor de polvo: tomando medidas

Sensor de Polvo

El dispositivo que comparto en esta entrada puede tomar lecturas durante el tiempo que estimemos necesario, pero se limita a tomarlas en tiempo real y no cuenta con la capacidad de almacenarlas en una memoria para su posterior análisis. Esto no quiere decir que no se le pueda adaptar esta funcionalidad, claro que se puede y la tendrá en un futuro. Pero si me espero a agregarla probablemente jamás publique esta entrada.

Para que el sensor tome lecturas sacudí una brocha justo sobre el agujero medio del sensor, por donde pasa el haz óptico que es quien se encarga de medir la concentración de partículas que pasa por este pequeño agujero.

Sensor de Polvo: el cableado

Sensor de Polvo

El código

Aquí dejo el código para poder tomar mediciones de las partículas del aire. Recuerden que por el diseño del sensor sus lecturas no son tan precisas, debido a que según sus especificaciones técnicas, tiene una resolución en miligramos por metro cúbico (mg/m3) y no en microgramos por metro cúbico (µg/m3).

#include <SPI.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);

int measurePin = A1; // controla los LED de medición y el otro el LED de encendido
int ledPower = 7;

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

void draw(void) {
  u8g.setFont(u8g_font_profont15);
  u8g.setPrintPos(65, 22);
  u8g.print("Dust");
  u8g.setPrintPos(65, 38);
  u8g.print("Density");
  u8g.setPrintPos(10, 25);
  u8g.setFont(u8g_font_profont22);
  u8g.print(dustDensity);
  u8g.setFont(u8g_font_profont15);
  u8g.setPrintPos(15, 43);
  u8g.print("ug/m3");
}

// Enciende el puerto serial
void setup() {
  Serial.begin(9600);
  pinMode(ledPower, OUTPUT);
}

// Toma las lecturas de voltaje, esto tarda entre 40 y 50 milisegundos
void loop() {
  digitalWrite(ledPower, LOW);
  delayMicroseconds(280);

  voMeasured = analogRead(measurePin);

  delayMicroseconds(40);
  digitalWrite(ledPower, HIGH);
  delayMicroseconds(9680);

  calcVoltage = voMeasured * (5.0 / 1024); // Esta parte calcula la densidad del polvo
  dustDensity = 0.17 * calcVoltage - 0.1;

  if ( dustDensity < 0)
  {
    dustDensity = 0.00;
  }

  Serial.println("Raw Signal Value (0-1023):");
  Serial.println(voMeasured);

  Serial.println("Voltage:");
  Serial.println(calcVoltage);

  Serial.println("Dust Density:");
  Serial.println(dustDensity);

  u8g.firstPage();
  do {
    draw();
  } while ( u8g.nextPage() );

  delay(1000);
}

Conclusión

Por el momento hasta aquí dejo este proyecto. En un futuro, no tan lejano espero, le agregare una tarjeta de memoria SD para poder guardar las lecturas y de está manera poder llevarme toda la data registrada a una hoja de cálculo; de manera poder medir la verdadera calidad de aire de mi laboratorio y así poder compararla con la tabla que proporciona la OMS.

También espero poder construir un dispositivo utilizando un sensor de partículas propiamente y de esta manera comparar las lecturas de ambos y ver los resultados.

Saludos.-

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top