Skip to Content

Sensor de Poeiras GP2Y1010AU0F com Arduino

Sensor de Poeiras GP2Y1010AU0F com Arduino

Neste tutorial vais aprender a usar o Sensor de Poeiras GP2Y1010AU0F com um Arduino para medir a densidade de poeiras. Vamos abordar as características do sensor, como ligá-lo a uma placa Arduino e como interpretar os dados fornecidos pelo sensor.

Medir a densidade de poeiras é importante para a saúde, pois níveis elevados de poeiras no ar podem causar problemas respiratórios, alergias e outros problemas de saúde. Monitorizar os níveis de poeiras permite-nos avaliar a qualidade do ar interior e exterior, identificar riscos potenciais para a saúde e tomar medidas adequadas para melhorar a qualidade do ar.

Componentes Necessários

Usei um Arduino Uno para este projeto, mas qualquer outra placa Arduino, ou uma placa ESP8266/ESP32, funcionará igualmente bem.

O sensor de poeiras GP2Y1010AU0F vem com um condensador de 220µF e uma resistência de 150Ω, que são necessários para a ligação do sensor ao Arduino. Não é preciso comprá-los separadamente.

Sensor de Poeiras GP2Y1010AU0F

Arduino

Arduino Uno

Dupont wire set

Conjunto de Cabos Dupont

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

Cabo 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.

Noções Básicas do Sensor de Poeiras GP2Y1010AU0F

O GP2Y1010AU0F é um sensor ótico de qualidade do ar, desenhado para detetar partículas de poeiras. É especialmente eficaz na deteção de partículas muito finas, como o fumo de cigarro, e é frequentemente utilizado em sistemas de purificação de ar. A imagem seguinte mostra o sensor.

Picture of the GP2Y1010AU0F Dust Sensor
Imagem do Sensor de Poeiras GP2Y1010AU0F

Estrutura Interna

Dentro do sensor, um LED infravermelho e um fotoresistor infravermelho estão dispostos na diagonal. A luz do LED IR é refletida pelas partículas de poeiras que entram no dispositivo através de um orifício (caminho da poeira). A quantidade de luz IR refletida é medida pelo sensor infravermelho e convertida numa tensão de saída. Quanto mais poeira houver no caminho, mais luz é refletida e maior é a tensão de saída. A imagem abaixo mostra a construção interna do sensor GP2Y1010AU0F.

Internal construction of GP2Y1010AU0F
Construção interna do GP2Y1010AU0F

O GP2Y1010AU0F tem um baixo consumo de corrente, de 20mA no máximo ou 11mA típico, e funciona a 5V. A sua tensão de saída é proporcional à densidade de poeiras medida, com uma sensibilidade de 0,5V/0,1mg/m 3 . O sensor consegue detetar partículas tão pequenas como 0,5µm e a densidade máxima de poeiras que pode medir é de 580 µg/m 3 .

Esquema Interno

A imagem seguinte mostra o esquema interno do GP2Y1010AU0F. Podes ver o circuito que alimenta o LED IR (IRED) e o circuito amplificador com o fotodíodo IR (PD) que gera o sinal de saída Vo no pino 5.

Internal schematic of GP2Y1010AU0F
Esquema interno do GP2Y1010AU0F ( source )

Existe também um trimmer (resistência ajustável Rs) para ajustar a sensibilidade do sensor, mas não deves alterá-lo. Na imagem abaixo podes ver a localização do trimmer e do CI amplificador.

Electronics of the GP2Y1010AU0F
Eletrónica do GP2Y1010AU0F

O GP2Y1010AU0F tem um conector de seis pinos. O LED infravermelho é alimentado através do (1) V-LED e (2) LED-GND e controlado pelo pino (3) LED. O CI amplificador de sinal é alimentado pelo (6) Vcc e (4) S-GND e o sinal de saída de tensão Vo está no pino (5).

Datasheets

Para mais informações detalhadas sobre o GP2Y1010AU0F consulta o datasheet e as notas de aplicação nos links abaixo.

Ligar o GP2Y1010AU0F ao Arduino

Para ligar o GP2Y1010AU0F ao Arduino devemos seguir o exemplo de aplicação fornecido nas Application Notes (ver abaixo).

Application Example GP2Y1010AU0F
Exemplo de Aplicação GP2Y1010AU0F ( source )

Podes ver que o sinal de saída Vo no pino (5) vai para o conversor analógico-digital (A/D) do microcontrolador e que o LED IR no pino (3) é controlado por um pino de saída do microcontrolador.

Não vamos precisar do transistor mostrado para alimentar o LED IR, pois um pino GPIO do Arduino fornece facilmente os 20mA necessários para o LED. Há também um pouco de circuitaria adicional, como uma resistência de 150Ω para limitar a corrente do LED IR e um condensador de 220µF, mas nada de complicado.

A pinagem seguinte mostra onde estão localizados os seis pinos no conector do sensor.

Pinout of GP2Y1010AU0F
Pinout do GP2Y1010AU0F

V-LED alimenta o LED e deve ser ligado aos 5V com uma resistência de 150Ω. LED-GND  é o GND do LED IR e liga-se ao GND pino do Arduino. LED serve para ligar/desligar o LED e ligamos ao pino 7 do Arduino. No entanto, qualquer outro pino digital de saída também funciona.

S-GND  é o GND do sensor e deve ser ligado ao GND pino do Arduino. Vo fornece a saída do sensor e será ligado à entrada analógica A0 do Arduino. Vcc é a alimentação do módulo sensor e deve ser ligado aos 5V.

A imagem seguinte mostra toda a ligação numa breadboard, incluindo o condensador de 220µF.

Connecting GP2Y1010AU0F to Arduino
Ligação do GP2Y1010AU0F ao Arduino

Ao ligar o condensador, tem atenção à polaridade correta. O pino negativo (normalmente mais curto e marcado com uma faixa branca) deve ser ligado ao GND (fio preto).

Código para medir a densidade de poeiras com o GP2Y1010AU0F

Para medir a densidade de poeiras, vamos primeiro analisar a curva de resposta do GP2Y1010AU0F. Ela mostra como a tensão de saída Vo varia com o aumento da densidade de poeiras, medida em miligramas por metro cúbico (mg/m 3 ).

Response Curve of GP2Y1010AU0F
Curva de Resposta do GP2Y1010AU0F ( source )

Para densidades de poeiras entre 0 e 0,5 mg/m 3 o gráfico mostra uma relação praticamente linear entre a tensão e a densidade de poeiras. Quando nos aproximamos da densidade máxima de 580 µg/m 3 (=0,58 mg/m 3 ) que o sensor consegue detetar, a curva estabiliza e já não conseguimos medir nada de útil. A tensão máxima de saída será cerca de 3,7V neste ponto.

Cálculo da Densidade de Poeiras

A parte linear do gráfico pode ser descrita pela seguinte equação:

D[mg/m 3 ] = 0,170 x Vo − 0,1

Permite-nos calcular a densidade de poeiras D em mg/m 3 medindo a tensão de saída Vo com o Arduino. Como as densidades de poeiras em mg/m 3 tendem a ser números pequenos, também podemos medir as densidades em µg/m 3 , simplesmente multiplicando as densidades em mg/m 3 por 1000.

D[µg/m 3 ] = (0,170 x Vo − 0,1) x 1000

Protocolo de Amostragem

O datasheet do GP2Y1010AU0F indica que devemos usar o seguinte protocolo de amostragem ao medir a densidade de poeiras. Depois de ligar o LED IR, devemos esperar 0,28 milissegundos, ler a tensão de saída Vo e, em seguida, desligar o LED IR.

Sampling Protocol for GP2Y1010AU0F
Protocolo de Amostragem para o GP2Y1010AU0F ( source )

Com a equação da densidade de poeiras acima e o protocolo de amostragem, já temos toda a informação para escrever o código para medir a densidade de poeiras com o GP2Y1010AU0F e um Arduino.

Código para medir a Densidade de Poeiras

Vê primeiro o código completo e depois vamos analisá-lo em detalhe.

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

O código começa por definir algumas constantes. sensorPin é a entrada analógica à qual a saída Vo do sensor de poeiras está ligada, e ledPin é a saída digital que controla o LED IR dentro do sensor de poeiras.

adcMax é o valor máximo que o conversor analógico-digital (ADC) pode produzir. No caso do Arduino Uno, que tem um ADC de 10 bits, este valor é 1023. Se usares outro microcontrolador, tens de ajustar este valor. Consulta a função analogRead() ou o datasheet do teu microcontrolador para mais informações.

Também especificamos aqui a tensão de alimentação Vcc . Em teoria, o sensor pode funcionar a 3,3V, mas nesse caso tens de ajustar a resistência do LED IR ou manter essa tensão a 5V. Além disso, tens de garantir que a entrada analógica não excede a tensão máxima. Para simplificar, é mais fácil manter os 5V.

const int sensorPin = A0;
const int ledPin = 7;
const int adcMax = 1023;
const float Vcc = 5.0;

Leitura da Densidade de Poeiras

A seguir temos a função readDensity() que lê a densidade de poeiras medida pelo sensor. Primeiro, a função liga o LED IR através de digitalWrite(ledPin, LOW) . Nota que a lógica é invertida (LOW significa ligado).

Depois esperamos os 0,28ms (=280µs) como recomendado no datasheet antes de ler a saída Vo do sensor usando analogRead() . No entanto, o ADC do Arduino não devolve a tensão em A0, mas sim um valor bruto (0…1023) que precisamos de converter para a tensão v0 através de v0 = Vcc * adc / adcMax .

Agora podemos aplicar a equação mostrada acima para converter a tensão v0 em uma medida de poeiras density em mg/m^3. Depois de desligar o LED IR, multiplicamos a densidade de poeiras density por 1000 para obter uma medição em µ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
}

Função setup

A função setup é simples. Iniciamos a interface série, definimos o modo do ledPin para OUTPUT e esperamos um segundo – o datasheet indica que o sensor precisa de cerca de 1 segundo para ficar pronto.

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  delay(1000);
}

Função loop

Na função loop, simplesmente chamamos a nossa função readDensity() e imprimimos a densidade de poeiras medida no monitor série. Repetimos a medição aproximadamente a cada segundo (sem contar os 0,28ms da medição). Podes amostrar mais rápido, até 100ms funciona bem. Mais rápido do que isso e reparei que o sensor deixa de reagir corretamente.

void loop() {
  Serial.print("Dust:");
  Serial.println(readDensity());
  delay(1000);
}

Exemplo de Saída

Se abrires o Serial Plotter deves ver as densidades normais de poeiras a oscilar em torno de 0 µg/m 3 . Abanei vigorosamente um espanador em frente ao sensor e podes ver o pico de densidade de poeiras no gráfico abaixo.

Serial Plotter output when Sensor is exposed to dust
Saída do Serial Plotter quando o Sensor é exposto a Poeiras

Depois queimei um fósforo e o sensor voltou a reagir fortemente ao fumo produzido. Nota que o fumo permaneceu mais tempo do que a poeira.

Serial Plotter output when Sensor is exposed to Smoke
Saída do Serial Plotter quando o Sensor é exposto a Fumo

Por fim, também podes testar o funcionamento do sensor e do código bloqueando o caminho da poeira com um objeto, por exemplo uma pequena chave de fendas como mostrado na imagem abaixo.

Blocking Dust Path for Testing
Bloquear o Caminho da Poeira para Teste

A densidade de poeiras medida deve subir até perto do valor máximo de cerca de 580 µg/m 3 que o sensor consegue medir. Estava a obter um valor de 534 µg/m 3 .

E pronto! Um pequeno sensor de poeiras que te vai ajudar a manter o teu ambiente saudável.

Conclusões

O GP2Y1010AU0F é um sensor fácil de usar e bastante sensível. Reage bem à poeira, ao fumo e deve conseguir detetar pólen também, embora ainda não tenha testado isso.

Ao ligar o sensor a um microcontrolador diferente do Arduino Uno usado aqui, tem atenção às diferentes tensões (5V vs 3,3V), e à resolução e gama de entrada do conversor analógico-digital (ADC). Muitos tutoriais para o GP2Y1010AU0F cometem pequenos erros nisto e as medições de densidade de poeiras acabam por estar incorretas. Tem também atenção à conversão de mg/m 3 para µg/m 3 , que por vezes é mal implementada.

Finalmente, se precisares de um sensor que consiga medir a concentração de partículas PM2.5, dá uma vista de olhos ao DSM501 sensor .

FAQ

Quais são os níveis saudáveis e não saudáveis de densidade de poeiras quando medidos em µg/m 3 ?

Níveis saudáveis de densidade de poeiras são normalmente inferiores a 50 µg/m 3 , enquanto níveis não saudáveis são superiores a 150 µg/m 3 .

Qual é a relação entre a densidade de poeiras medida em µg/m 3 e o material particulado PM, especificamente PM2.5 e PM10?

A densidade de poeiras medida em µg/m 3 está diretamente relacionada com o material particulado (PM), incluindo PM2.5 e PM10. PM2.5 refere-se a partículas com diâmetro de 2,5 µm ou menos, enquanto PM10 refere-se a partículas com diâmetro de 10 µm ou menos. Uma maior densidade de poeiras indica níveis mais elevados de PM2.5 e PM10 no ar.

Particle Size Comparison
Comparação de Tamanhos de Partículas ( source )

Porque é que a poluição por PM2.5 é prejudicial para a saúde?

De todas as formas de poluição do ar, a poluição por PM2.5 representa o maior risco para a saúde. Devido ao seu tamanho reduzido, as partículas PM2.5 podem permanecer suspensas no ar durante longos períodos e podem ser absorvidas profundamente na corrente sanguínea ao serem inaladas.

Quais são as principais fontes de poluição por PM2.5?

Fontes comuns de poluição por PM2.5 são motores e combustão, processos industriais, fogões, lareiras e queima de lenha doméstica, fumo de fogo de artifício e incêndios florestais, tabaco, partículas de poeira e pólen.

Um sensor de PM2.5 ou PM10 pode medir pólen?

A maioria das partículas de pólen são maiores do que as partículas PM2.5 e PM10 e seriam ignoradas por um sensor de PM2.5 ou PM10. No entanto, embora as partículas de pólen sejam normalmente superiores a 10 µm, podem partir-se em partículas mais pequenas na gama PM2.5, que podem ser medidas.

Posso calibrar o sensor GP2Y1010AU0F para medir valores de PM2.5 ou PM25?

Não, o sensor GP2Y1010AU0F foi desenhado para detetar partículas maiores e não pode ser calibrado para medir valores de PM2.5 ou PM25.

Qual é o tamanho típico do pólen e um sensor de poeiras como o GP2Y1010AU0F consegue medir a densidade de pólen?

O tamanho típico do pólen é entre 10-100 µm. Se conseguires ver o pólen a flutuar no ar, isso significa que a partícula é bastante grande, pelo menos 60 µm. O sensor de poeiras GP2Y1010AU0F consegue medir partículas maiores que 0,5 µm, por isso pode detetar partículas de pólen.

Qual é um nível não saudável de densidade de pólen?

Um nível não saudável de densidade de pólen é normalmente considerado elevado quando ultrapassa os 100 grãos por metro cúbico, o que pode desencadear alergias em pessoas sensíveis.

Que densidade em µg/m^3 corresponde a 100 grãos por metro cúbico?

A conversão de grãos para microgramas por metro cúbico (µg/m^3) depende da densidade do material específico a ser medido. Para o pólen, o fator de conversão é aproximadamente 1 grão = 6,48 µg/m^3. Assim, 100 grãos de pólen equivalem a 648 µg/m^3.