En este tutorial aprenderás a usar el sensor de polvo GP2Y1010AU0F con un Arduino para medir la densidad de polvo. Hablaremos sobre las características del sensor, cómo conectarlo a una placa Arduino y cómo interpretar los datos que proporciona.
Medir la densidad de polvo es importante para la salud, ya que altos niveles de polvo en el aire pueden causar problemas respiratorios, alergias y otros problemas de salud. Monitorizar los niveles de polvo nos permite evaluar la calidad del aire interior y exterior, identificar posibles riesgos para la salud y tomar medidas adecuadas para mejorar la calidad del aire.
Componentes necesarios
He utilizado un Arduino Uno para este proyecto, pero cualquier otra placa Arduino, o una placa ESP8266/ESP32 funcionará igual de bien.
El sensor de polvo GP2Y1010AU0F viene con un condensador de 220µF y una resistencia de 150Ω, que son necesarios para el cableado del sensor con Arduino. No es necesario comprarlos por separado.

Sensor de Polvo GP2Y1010AU0F

Arduino Uno

Juego de cables Dupont

Breadboard

Cable USB para Arduino UNO
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Conceptos básicos del sensor de polvo GP2Y1010AU0F
El GP2Y1010AU0F es un sensor óptico de calidad del aire, diseñado para detectar partículas de polvo. Es especialmente eficaz para detectar partículas muy finas como el humo de cigarrillos, y se utiliza comúnmente en sistemas purificadores de aire. La siguiente imagen muestra el sensor.

Estructura interna
Dentro del sensor, un LED infrarrojo y una fotorresistencia infrarroja están dispuestos en diagonal. La luz del LED IR es reflejada por las partículas de polvo que entran al dispositivo a través de un orificio (camino del polvo). La cantidad de luz IR reflejada es medida por el sensor infrarrojo y convertida en una señal de voltaje de salida. Cuanto más polvo haya en el camino, más luz se refleja y mayor es el voltaje de salida. La imagen de abajo muestra la construcción interna del sensor GP2Y1010AU0F.

El GP2Y1010AU0F tiene un bajo consumo de corriente de 20mA máximo o 11mA típico, y funciona a 5V. Su voltaje de salida es proporcional a la densidad de polvo medida, con una sensibilidad de 0.5V/0.1mg/m 3 . El sensor puede detectar partículas tan pequeñas como 0.5µm y la densidad máxima de polvo que puede medir es de 580 µg/m 3 .
Esquema interno
La siguiente imagen muestra el esquema interno del GP2Y1010AU0F. Puedes ver el circuito que alimenta el LED IR (IRED) y el circuito amplificador con el fotodiodo IR (PD) que genera la señal de salida Vo en el pin 5.

También hay un trimmer (resistencia ajustable Rs) para ajustar la sensibilidad del sensor, pero no deberías modificarlo. En la imagen de abajo puedes ver la ubicación del trimmer y el CI amplificador.

El GP2Y1010AU0F tiene un conector de seis pines. El LED infrarrojo se alimenta a través de (1) V-LED y (2) LED-GND y se controla mediante el pin (3) LED. El CI amplificador de señal se alimenta a través de (6) Vcc y (4) S-GND y la señal de voltaje de salida Vo está en el pin (5).
Datasheets
Para información más detallada sobre el GP2Y1010AU0F consulta su datasheet y las notas de aplicación enlazadas abajo.
Conectando el GP2Y1010AU0F a Arduino
Para conectar el GP2Y1010AU0F a Arduino debemos seguir el ejemplo de aplicación proporcionado en las Application Notes (ver abajo).

Puedes ver que la señal de salida Vo en el pin (5) va al conversor analógico-digital (A/D) del microcontrolador y que el LED IR en el pin (3) se controla mediante un pin de salida del microcontrolador.
No necesitaremos el transistor mostrado para alimentar el LED IR, ya que un pin GPIO de Arduino puede proporcionar fácilmente los 20mA necesarios para el LED. También hay un poco de circuitería adicional como una resistencia limitadora de corriente de 150Ω para el LED IR y un condensador de 220µF, pero nada demasiado complicado.
El siguiente diagrama de pines muestra dónde se encuentran los seis pines en el conector del sensor real.

V-LED alimenta el LED y debe conectarse a 5V con una resistencia de 150Ω. LED-GND es la tierra para el LED IR y se conecta al GND pin de Arduino. LED se utiliza para encender y apagar el LED y lo conectamos al pin 7 de Arduino. Aunque cualquier otro pin de salida digital también funcionará.
S-GND es la tierra para el sensor y debe conectarse al GND pin de Arduino. Vo proporciona la salida del sensor y se conectará a la entrada analógica A0 de Arduino. Vcc es la alimentación para el módulo sensor y debe conectarse a 5V.
La siguiente imagen muestra el cableado completo en una breadboard, incluyendo el condensador de 220µF.

Al conectar el condensador, asegúrate de respetar la polaridad correcta. Su pin negativo (normalmente más corto y marcado con una franja blanca) debe conectarse a tierra (cable negro).
Código para medir la densidad de polvo con el GP2Y1010AU0F
Para medir la densidad de polvo, primero echemos un vistazo a la curva de respuesta del GP2Y1010AU0F. Muestra cómo cambia el voltaje de salida Vo con el aumento de la densidad de polvo, medida en miligramos por metro cúbico (mg/m 3 ).

Para densidades de polvo de 0 a 0.5 mg/m 3 el gráfico muestra una relación bastante lineal entre el voltaje y la densidad de polvo. Cuando nos acercamos a la densidad máxima de 580 µg/m 3 (=0.58 mg/m 3 ) que el sensor puede detectar, la curva se aplana y ya no podemos medir nada útil. El voltaje de salida máximo será de unos 3.7V en este punto.
Cálculo de densidades de polvo
La parte lineal del gráfico se puede describir con la siguiente ecuación:
D[mg/m 3 ] = 0.170 x Vo − 0.1
Nos permite calcular la densidad de polvo D en mg/m 3 midiendo el voltaje de salida Vo con Arduino. Como las densidades de polvo en mg/m 3 suelen ser números pequeños, también podemos medir las densidades en µg/m 3 , simplemente multiplicando las densidades en mg/m 3 por 1000.
D[µg/m 3 ] = (0.170 x Vo − 0.1) x 1000
Protocolo de muestreo
El datasheet del GP2Y1010AU0F indica que debemos usar el siguiente protocolo de muestreo al medir densidades de polvo. Después de encender el LED IR debemos esperar 0.28 milisegundos, luego leer el voltaje de salida Vo y después apagar el LED IR.

Con la ecuación de densidad de polvo anterior y el protocolo de muestreo, ya tenemos toda la información para escribir el código que realmente mida la densidad de polvo con el GP2Y1010AU0F y un Arduino.
Código para medir la densidad de polvo
Echa un vistazo al código completo primero y luego lo desglosamos y comentamos sus detalles.
const int sensorPin = A0;
const int ledPin = 7;
const int adcMax = 1023;
const float Vcc = 5.0;
float readDensity() {
digitalWrite(ledPin, LOW);
delayMicroseconds(280);
int adc = analogRead(sensorPin);
float v0 = Vcc * adc / adcMax;
float density = 0.170 * v0 - 0.1; // mg/m^3
digitalWrite(ledPin, HIGH);
return density * 1000; // ug/m^3
}
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(1000);
}
void loop() {
Serial.print("Dust:");
Serial.println(readDensity());
delay(1000);
}
Constantes
El código comienza definiendo algunas constantes. sensorPin es la entrada analógica a la que está conectado el Vo output del sensor de polvo, y ledPin es la salida digital que controla el LED IR dentro del sensor de polvo.
adcMax es el valor máximo que puede producir el conversor analógico-digital (ADC). En el caso del Arduino Uno, que tiene un ADC de 10 bits, este valor es 1023. Si usas otro microcontrolador tendrás que ajustar este valor. Consulta la función analogRead() o el datasheet de tu microcontrolador para más información.
También especificamos aquí el voltaje de la fuente de alimentación Vcc . En teoría el sensor puede funcionar a 3.3V, pero entonces tendrás que ajustar la resistencia del LED IR o mantener ese voltaje a 5V. Además, tendrás que asegurarte de que la entrada analógica no supere el voltaje máximo. Para simplificar, es más fácil usar 5V.
const int sensorPin = A0; const int ledPin = 7; const int adcMax = 1023; const float Vcc = 5.0;
Lectura de la densidad de polvo
A continuación tenemos la función readDensity() que lee la densidad de polvo medida por el sensor. Primero la función enciende el LED IR mediante digitalWrite(ledPin, LOW) . Ten en cuenta que la lógica está invertida (LOW significa encendido).
Luego esperamos los 0.28ms (=280µs) como recomienda el datasheet antes de leer la salida Vo del sensor usando analogRead() . Sin embargo, el ADC de Arduino no devuelve el voltaje en A0 sino un valor adc bruto (0…1023) que debemos convertir al voltaje v0 mediante v0 = Vcc * adc / adcMax .
Ahora podemos aplicar la ecuación mostrada arriba para convertir el voltaje v0 en una medida de polvo density en mg/m^3. Después de apagar el LED IR, multiplicamos la medida de polvo density por 1000 para obtener una medición en µg/m 3 .
float readDensity() {
digitalWrite(ledPin, LOW);
delayMicroseconds(280);
int adc = analogRead(sensorPin);
float v0 = Vcc * adc / adcMax;
float density = 0.170 * v0 - 0.1; // mg/m^3
digitalWrite(ledPin, HIGH);
return density * 1000; // ug/m^3
}
Función setup
La función setup es sencilla. Iniciamos la interfaz serie, configuramos el modo de ledPin como OUTPUT y esperamos un segundo; el datasheet indica que el sensor necesita aproximadamente 1 segundo para estar listo.
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
delay(1000);
}
Función loop
En la función loop, simplemente llamamos a nuestra función readDensity() y mostramos la densidad de polvo medida en el monitor serie. Repetimos la medición aproximadamente cada segundo (sin contar los 0.28ms de la medición). Puedes muestrear más rápido, hasta 100ms funciona bien. Más rápido que eso y he notado que el sensor deja de reaccionar correctamente.
void loop() {
Serial.print("Dust:");
Serial.println(readDensity());
delay(1000);
}
Ejemplo de salida
Si abres el Serial Plotter deberías ver las densidades normales de polvo fluctuando alrededor de 0 µg/m 3 . Sacudí enérgicamente un plumero frente al sensor y puedes ver el pico de densidad de polvo en el gráfico de abajo.

Luego encendí una cerilla y el sensor volvió a reaccionar fuertemente al humo producido. Ten en cuenta que el humo permaneció más tiempo que el polvo.

Por último, también puedes probar el funcionamiento del sensor y el código bloqueando el camino del polvo con un objeto, por ejemplo, un destornillador pequeño como se muestra en la imagen de abajo.

La densidad de polvo medida debería acercarse al valor máximo de unos 580 µg/m 3 que el sensor puede medir. Yo obtuve un valor de 534 µg/m 3 .
¡Y eso es todo! Un pequeño sensor de polvo que te ayudará a mantener tu entorno saludable.
Conclusiones
El GP2Y1010AU0F es un sensor fácil de usar y bastante sensible. Responde bien al polvo, al humo y debería poder detectar polen también, aunque esto último aún no lo he probado.
Si conectas el sensor a un microcontrolador diferente al Arduino Uno usado aquí, ten cuidado con los diferentes voltajes (5V vs 3.3V), y la resolución y rango de entrada del conversor analógico-digital (ADC). Muchos tutoriales para el GP2Y1010AU0F cometen pequeños errores en esto y las mediciones resultantes de densidad de polvo son incorrectas. También ten cuidado con la conversión de mg/m 3 a µg/m 3 , que a veces está mal implementada.
Por último, si necesitas un sensor que pueda medir la concentración de partículas PM2.5, échale un vistazo al DSM501 sensor .
FAQ
¿Cuáles son los niveles saludables y no saludables de densidad de polvo cuando se miden en µg/m 3 ?
Los niveles saludables de densidad de polvo suelen estar por debajo de 50 µg/m 3 , mientras que los niveles no saludables superan los 150 µg/m 3 .
¿Cuál es la relación entre la densidad de polvo medida en µg/m 3 y el material particulado PM, específicamente PM2.5 y PM10?
La densidad de polvo medida en µg/m 3 está directamente relacionada con el material particulado (PM), incluyendo PM2.5 y PM10. PM2.5 se refiere a partículas con un diámetro de 2.5 µm o menos, mientras que PM10 se refiere a partículas de 10 µm o menos. Una mayor densidad de polvo indica mayores niveles de PM2.5 y PM10 en el aire.

¿Por qué la contaminación por PM2.5 es perjudicial para la salud?
De todas las medidas de contaminación del aire, la contaminación por PM2.5 representa la mayor amenaza para la salud. Debido a su pequeño tamaño, el PM2.5 puede permanecer suspendido en el aire durante largos periodos y puede ser absorbido profundamente en el torrente sanguíneo al inhalarse.
¿Cuáles son las principales fuentes de contaminación por PM2.5?
Las fuentes comunes de contaminación por PM2.5 son los motores y la combustión, procesos industriales, estufas, chimeneas y quemas de leña en el hogar, humo de fuegos artificiales e incendios forestales, fumar, partículas de polvo y polen.
¿Puede un sensor PM2.5 o PM10 medir polen?
La mayoría de las partículas de polen son más grandes que las partículas PM2.5 y PM10 y serían ignoradas por un sensor PM2.5 o PM10. Sin embargo, aunque las partículas de polen suelen ser de más de 10 µm, pueden romperse en partículas más pequeñas dentro del rango PM2.5, que sí pueden ser medidas.
¿Puedo calibrar el sensor GP2Y1010AU0F para medir valores de PM2.5 o PM25?
No, el sensor GP2Y1010AU0F está diseñado para detectar partículas más grandes y no puede calibrarse para medir valores de PM2.5 o PM25.
¿Cuál es el tamaño típico del polen y puede un sensor de polvo como el GP2Y1010AU0F medir la densidad de polen?
El tamaño típico del polen es de unos 10-100 µm. Si puedes ver el polen flotando en el aire, significa que la partícula es bastante grande, al menos de 60 µm. El sensor de polvo GP2Y1010AU0F puede medir partículas mayores de 0.5 µm, por lo que puede detectar partículas de polen.
¿Cuál es un nivel no saludable de densidad de polen?
Un nivel no saludable de densidad de polen normalmente se considera alto cuando supera los 100 granos por metro cúbico, lo que puede desencadenar alergias en personas sensibles.
¿Qué densidad en µg/m^3 corresponde a 100 granos por metro cúbico?
La conversión de granos a microgramos por metro cúbico (µg/m^3) depende de la densidad del material específico que se mide. Para el polen, el factor de conversión es aproximadamente 1 grano = 6.48 µg/m^3. Por lo tanto, 100 granos de polen equivaldrían a 648 µg/m^3.

