Manual
do
Maker
.
com
Eis um daqueles sensores que chamam a atenção, principalmente para makers, que veem os "ossos" do dispositivo. Esse sensor de poeira e fumaça DSM501A é um dispositivo de fácil interação, com saída PWM, fácil de configurar e alimentar. Podemos interfaceá-lo diretamente com a MCU desejada, bastando seguir o wiring disposto mais adiante. Se está procurando por um sensor de gás, fumaça e álcool, veja o artigo do MQ-6.
Bora começar.
O datasheet do produto pode ser visto nesse link. Ele acompanha um conector de 5 fios, cujas cores disponho na tabela de wiring, conforme sua utilização.
Ele pode ser utilizado em purificadores de ar, ares-condicionados, monitores de qualidade do ar, ventiladores, minas de extração de minério, medição de índice de poeira lunar ou o que mais sua criatividade e limites permitirem.
Esse sensor quantifica a densidade de partículas, com alta precisão para partículas com diâmetro acima de 1 mícron. Ele possui um aquecedor interno, usado como sistema de captura de ar (ar quente sai, ar frio entra, assim é feita a troca).
Internamente ele possui um LED, um detector, um OPAMP, 2 drivers de circuito e um aquecedor. No datasheet se vê também as saídas para interconexão.
Direto à tabela AMR (Absolute Maximum Ratings), temos as seguintes indicações:
Claro que essa tabela indica o limite para que o sensor funcione gemendo, então são os limites não recomendados de operação, mas toleráveis.
A alimentação ideal é de 5V com tolerância de 0.5V pra mais ou menos.
A sensibilidade em 5V a 25 Celsius com partículas de diâmetro acima de 1 micro é de 15.000/283ml.
O pinout independe da cor do fio, obviamente, mas as cores facilitam a identificar a ordem. Se por alguma razão os fios de seu sensor vierem em cores diferentes, siga a ordem da tabela.
Número do pino | Nome do pino | Descrição |
1 | Controle 1 | Saída de controle 1 |
2 | Vout 2 | saída de tensão 2 |
3 | VCC | Alimentação (5V) |
4 | Vout 1 | Saida de tensão 1 |
5 | GND | GND |
Olhando de frente para o conector macho, com os trilhos de encaixe para cima, o pino 1 fica à esquerda. As cores deverão condizer com a ordem disposta na tabela.
Essa é a porta de saída normal. Essa porta detecta partículas que estão acima de 1 micrômetro.
A sensibilidade de Vout 1 é duas vezes e meia mais lento que Vout 2. Isso significa que o tamanho da partícula é 2.5 micrômetros.
Essa saída também é ajustável e você pode configurar o nível de tamanho da partícula.
Esse pino é o que ajusta a sensibilidade de Vout 1.
Para ajustar o controle, usamos (ou não) resistores conforme a tabela:
Valor do resistor | Descrição |
Aberto | Sensibilidade acima de 2.5 micrômetros |
100K | metade da sensibilidade |
27K | Igual a sensibilidade de Vout 2 (acima de 1 micrômetro |
Como já citado, seu aquecedor interno gera uma corrente de ar pela troca. Com detecção de partículas acima de 1 micrômetro ele pode detectar fumaça de cigarro, poeira doméstica, pólen, esporos e mofo.
O sensor DSM501A deve ser instalado verticalmente e também deve ser mantido longe de qualquer corrente artificial de ar. Deve-se ter atenção ao ambiente de instalação, afim de evitar contato com partículas adesivas como óleo e outros engordurantes. Logo, não é um item de cozinha, para avisar quando o arroz está "pronto".
A manutenção depende do ambiente em que o dispositivo está sendo utilizado, da intensidade de partículas etc. Mas as lentes precisam ser limpas ao menos 1 vez a cada 6 meses para melhor eficiência. A fumaça de cigarro é uma das piores para contaminação do sensor.
Molhe um lado de um cotonete, limpe a lente e seque-a com o outro lado do cotonete.
Tem dois trimpots bonitinhos, azuis com bolinhas amarelas. NÃO MEXA NOS TRIMPOTS. Eles vêm calibrados de fábrica e o próprio datasheet recomenda não mexer nos ajustes.
A alimentação pode ser pega do 5V do Arduino, sem problemas. Então, conectamos o VCC e o GND diretamente ao Arduino. Coloque o pino 2 (Vout) ao pino 8 do Arduino.
Nesse sketch vamos utilizar uma função do Arduino pouco aplicada: a pulseIn. Não que seja um "recurso secreto", mas ela cabe mais em situações como a desse sensor.
Esse sketch é sabe-se lá de quem, mas como não havia nada no datasheet para orientar a leitura, procurei por exemplos de uso. Minha "não" surpresa é que tudo o que encontrei saiu de um mesmo lugar, cujo autor original é desconhecido, por isso não serei injusto em dar mérito a alguém, mas também não tomarei para mim o mérito.
A partir desse sketch podemos variar tanto a leitura quanto criar o plano de ação da MCU.
#include <Arduino.h>
#include <string.h>
byte buff[2];
int pin = 8; //DSM501A input D8
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
void setup(){
Serial.begin(9600);
pinMode(8, INPUT);
starttime = millis();
}
void loop(){
duration = pulseIn(pin, LOW);
lowpulseoccupancy += duration;
endtime = millis();
if ((endtime - starttime) > sampletime_ms){
ratio = (lowpulseoccupancy - endtime + starttime + sampletime_ms) / (sampletime_ms * 10.0); // Integer percentage 0=>100
concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curve
Serial.print("lowpulseoccupancy:");
Serial.print(lowpulseoccupancy);
Serial.print("\n");
Serial.print("ratio:");
Serial.print("\n");
Serial.print(ratio);
Serial.print("DSM501A:");
Serial.println(concentration);
Serial.print(";\n\n");
lowpulseoccupancy = 0;
starttime = millis();
}
}
Esse sensor é mais um produto do nosso parceiro UsinaInfo. O link para o sensor de poeira e fumaça DSM501A é esse.
Espero que o artigo tenha ajudado a sanar dúvidas, caso esteja interessado no sensor. Também sugiro a compra com nosso parceiro, pois além de ser uma loja tradicional e confiável, provê material que torna possível a criação de artigos tutoriais como esse.
Até a próxima!
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.