Zaloguje się
or
Tel +48 698 615 740

Czujnik pyłu/ czystości powietrza PM2.5 DSM501A

25 października, 2021

W artykule będziemy omawiać czujnik pyłu/czystości powietrza DSM501A. Omówię sposób jego działania, przedstawię przykład jego użycia kolejno omawiając etapy tego co należy zrobić, abyście sami mogli wykonać taki przykład.

Spis treści

  • Krótki opis
  • Specyfikacja
  • Przykład
  • Pliki do pobrania

Krótki opis

Czujnik dzięki wewnętrznemu led -owi i grzejnikowi działa na zasadzie czujnika gęstości i sprawdza zagęszczenie pyłu w powietrzu. Na początku powietrze jest pobierane i ogrzewane grzejnikiem. Kolejno wbudowy LED podświetla to powietrze dla łatwiejszego wykrycia cząsteczek przez czujnik.

Specyfikacja

  • Napięcie zasilania: od 4,5 V do 5,5 V
  • Pobór prądu: 90 mA
  • Czułość: 1 μm
  • Komunikacja: sygnał częstotliwościowy PWM
  • Temperatura pracy: od -10 °C do 65 °C
  • Złącze połączeniowe: 20010WR-05
  • Wymiary płytki: 58,8 x 44,55 x 16,8 mm

Składa się z :

  • Dioda LED
  • Czujnik
  • Obwód wzmacniacza sygnału
  • 2x Obwód napędu wyjściowego
  • Grzałka

Przebieg Przykładu

Elementy

  • Czujnik pyłu/ czystości powietrza PM2.5 DSM501A
  • Płytka stykowa
  • Kable stykowe
  • Arduino Mega lub Uno

Podłączenie

Kable od czujnika wpinamy do płytki stykowej. Dodam, że nie będziemy korzystać ze wszystkich kabli a jedynie z 3 (po kolei od lewej do prawej 2,3,5) . Kable stykowe od arduino będziemy wpinać do wejść znajdujących się równolegle wejść w które wpięliśmy kable od czujnika na płytce stykowej.

  • Kabel nr 2 do dowolnego cyfrowego wejścia na płytce do przykładu wykorzystam wejście nr 6 (oznaczenie na płytce”6″)
  • Kabel nr 3 do 5V
  • Kabel nr 5 do GND

Program:

Na początku dołączamy bibliotekę string.h . Biblioteka jest bezpośrednio dostępna w Arduino IDE, więc nie musimy jej pobierać.

#include<string.h>

Następnie definiujemy wszystkie zmienne jakie będą nam potrzebne do dalszego działania programu.

int pin = 6;//DSM501A input D6
unsigned long duration;
unsigned long starttime;
unsigned long endtime;
unsigned long sampletime_ms = 3000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

Kolejno skupmy się funkcją void setup(). Pierwszą rzeczą jaką w niej robimy to włączamy monitor portu szeregowego funkcją Serial.begin(). Drugą rzeczą jest przypisanie do zmiennej startime wartości mills(), która w arduino jest równa ilości czasu od chwili w której program został uruchomiony. Zauważmy że starttime jest typu który przechowuje tylko wartości dodatnie. Dlatego tylko w nim możemy przechować funkcję mills().

void setup() {
  Serial.begin(9600);
  starttime = millis(); 
}

Na koniec została nam funkcja void loop(), wykonują w petli pobieranie i wyświetlanie informacji pobranych z czujnika. Na początku przypisujemy 3 wcześniejszym zmiennym które utworzyliśmy nowe wartości. Ustalamy dla zmiennej duration wartość pulseIn(pin, LOW) która mówi o tym że funkcja najpierw czeka aż pin 6 który zdefiniowaliśmy jako “pin” przejdzie ze stanu wysokiego (“HIGH”) na stan niski(“LOW”). Gdy to się stanie funkcja wznowi odliczanie czasu które zostało wstrzymane wraz z wywołaniem właśnie tej funkcji. Potem definiujemy zmienną lowpulseocuppancy która jest równa sumie własnej wartości i duration. (Taki zapis ” lowpulseocuppancy += duration” jest skróconą formą takiego zapisu “lowpulseocuppancy = lowpulseocuppancy + duration”). Endtime również będzie równe funkcji mills() jednak jej wartość będzie inna niż ta w starttime gdyż ta funkcja zacznie liczyć czas dopiero po zdefiniowaniu jej w funkcji loop().

void loop() {
 
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy += duration;
  endtime = millis();

Potem tworzymy funkcję if która wykona się jedynie jeżeli warunek znajdujący się w nawiasach() będzie prawdziwy. W tym przypadku jeżeli różnica dwóch zmiennych odliczających czas będzie większa niż sampletime_ms który jest równy 3 s (gdyż podstawową jednostką czasu w arduino są mili sekundy czyli 3000 ms = 3s), to tworzymy 2 nowe zmienne. Zmienne te są równe wzorom służacym do obliczenia procentu zawartości pyłu w powietrzu oraz jego ogólnej koncentracji w bliskiej przestrzeni.

 if ((endtime-starttime) > sampletime_ms)
  {
    ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);// Procent zanieczyszczenia 0=>100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // specjalna krzywa dotycząca zawartości pyłu

Później te zmienne zostaną przez nas na monitorze szeregowym. Jeżeli nie wiesz jak otworzyć monitor szeregowy odsyłam do innego artykułu w którym zostało to wyjaśnione( Czujnik opadów deszczu YL-83 – AJmaker). Uwaga symbol (“\n”) oznacza znak nowej linii.

    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");

Ostatnim krokiem jest przywrócenie podstawowych wartości dla lowpulseoccupancy i starttime.

 lowpulseoccupancy = 0;
    starttime = millis();
  }
 
}

Pliki do pobrania

Sticky
Możliwość komentowania Czujnik pyłu/ czystości powietrza PM2.5 DSM501A została wyłączona
Dadas Bartosz

Dadas Bartosz

Jest Uczniem Technikum Budowlano-Elektronicznego w Świdnicy na kierunku Technik Informatyk. Na co dzień oprócz projektów z ardunio uczy się programować aplikacje mobile. W przyszłości chcę zostać programistą.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.