Bezprzewodowa stacja monitorowania jakości powietrza

Ostatnio na fali popularności walki ze smogiem, szczególnie w moim rejonie (okolice Rybnika), postanowiłem zrobić swoja własną stację pomiaru zanieczyszczenia powietrza. Nie z pro-ekologicznych motywów, interesowało mnie po prostu zrobienie takiego urządzenia. Poza tym byłem ciekaw, jak w moim małym mieście prezentują się statystyki – bo w zimowy wieczór naprawdę bezpieczniej jest nie wychodzić z domu.

Niestety trochę spóźniłem się z pomysłem i przegapiłem najbardziej smogowy okres. Na dodatek przez chiński Nowy Rok paczka dotarła dopiero w lutym – rekordów zanieczyszczeń w tym roku już nie zmierzę.

Z informacji jakie znalazłem w sieci (szczególnie pod wpływem strony http://krakow-zdroj.pl ) ułożyłem sobie następujący zestaw:

  1. Czujnik laserowy Plantower PMS1003 – dokładny i niedrogi (19$). Jest też dostępny model PMS3003, który różni się rozmiarem, ale elektronika i sposób wykorzystania są praktycznie takie same. Alternatywa to m.in. czujnik SDS011, który powinienem kupić dla kontroli.
  2. Espduino – to dla mnie oczywisty wybór, wygoda Arduino i WiFi w jednym. Cena – 9$
  3. Czujnik wilgotności powietrza i temperatury DHT22 (20PLN?) – tu popełniłem błąd, mogłem od razu kupić coś lepszego.

Czujniki laserowe mają jedną wadę. Ich precyzja jest dobra jedynie w warunkach niskiej wilgotności powietrza. Mierzą ilość cząstek (podane frakcje PM1.0, PM2.5, PM10)  – ale przy wilgotności powyżej 70% zawyżają wynik. Według różnych oszacowań przy wilgotności 70% zawyża około 50%, przy 95% już prawie dwukrotnie. Autor wyżej podanej strony stworzył na podstawie porównań do dwóch państwowych stacji funkcję nieliniową, którą koryguje wyniki pomiaru. Profesjonalne czujniki podobno podgrzewają powietrze, widziałem też amatorskie czujniki z grzałkami, ale nie wiadomo, jaki wpływ ma podgrzewanie grzałką na wynik zawartości pyłu.

Plantower PMS1003 (lub PMS3003)

PMS1003 mierzy zawartość w powietrzu cząstek o rozmiarach:

  • do 1µm (PM1.0) – z niezbyt dużą dokładnością (deklarowane 50%)
  • do 2.5µm (PM2.5) – to najbardziej niebezpieczny pył, przenikający z płuc do krwi
  • do 10µm (PM10) – pył osadzający się głęboko w płucach.

Pomiar odbywa się przez przetłoczenie powietrza wentylatorem przez odpowiedni „tunel”. Na powietrze pada światło lasera, które odbija się od cząstek pyłu i pada na czujnik umieszczony pod kątem prostym. Jest to metoda stosowana przez kilku producentów, na pewno dużo bardziej przecyzyjna niż czujniki oparte na diodzie, choć oczywiście nie tak dobra, jak BAM (Beta attenuation monitoring) w sprzęcie za kilkadziesiąt tysięcy złotych.

Wadą, oprócz wpływu wilgotności powietrza, jest też możliwe zabrudzenie czujnika po dłuższym czasie, choć tunel powietrzny jest tak skonstruowany, żeby duże cząstki kurzu osadzały się w komorze przed czujnikiem.

Transmisja odbywa się poprzez port szeregowy. PMS1003 / 3003 domyślnie pracuje w trybie aktywnym: Co około 2,4 sekundy wysyła wyniki pomiarów, chyba, że dane zmieniają się szybko, wtedy częstotliwość wynosi 0,9 sekundy. Do takiej transmisji wystarczy podłączyć zasilanie (5V), GND, a także RX i TX do transmisji danych (3,3V).

Jest jeszcze tryb pasywny – żeby go wprowadzić, trzeba wprowadzić PMS1003 w ten tryb odpowiednią, komendą, następnie można ręcznie wywoływać pomiar. Komendami można też czujnik uśpić i wybudzić. Jest jeszcze wejście SET (do zmiany trybu pracy) i RST – ale jak się okazało, nie były mi potrzebne.

Po kilku próbach i przemyśleniu tematu ustaliłem, że najwygodniej będzie zrobić tak:

  1. Czujnik jest uśpiony (minimalny pobór prądu) przez kilka minut
  2. Wybudzam czujnik komendą, ten wchodzi w tryb aktywny i zaczyna pomiar
  3. Po 30 sekundach potrzebnych na napływ powietrza i stabilizację odczytów odczytuję 10 pomiarów, co kilka sekund. Obliczam średnią po odrzuceniu skrajnych wyników.
  4. Usypiam czujnik.

Parametry transmisji opiszę w osobnym poście, rozgryzałem je ręcznie na podstawie instrukcji. Opiszę też dlaczego czujnik wysyła dwa rodzaje danych i z których nalezy korzystać.

Espduino – ESP8266

To mój ulubiony zamiennik Arduino. W tym wypadku zaletą jest także praca na napięciu 3V3, a jednocześnie Espduino może zasilać czujnik zapylenia napięciem 5V. Jest to bardzo wygodne, bo nie potrzebuję konwertera sygnałów logicznych, a zasilanie wystarczy podłączyć tylko do Espduino. Na dodatek esp8266 można także wprowadzić w stan uśpienia, przez co pobór prądu przez całą stację będzie rzędu kilkudziesięciu µA!

Myślę, że mógłbym wyciągnąć z szafki ogniwo fotowoltaiczne (18V, 500mA w dobrych warunkach, z wyjściem 5V USB), dopasować jakiś akumulatorek i zrobić stację z własnym zasilaniem!

DHT22 (AM2303)

Czujnik wilgotności jest niezbędny do korekty wyników, niestety nie przewidziałem, że akurat ten model nie jest szczególnie dokładny przy dużej wilgotności, a taką właśnie trzeba mierzyć. Na dodatek osoba, która wyliczyła parametry korekty, posiadała inny czujnik. Korekta nie będzie więc idealna (choć nawet przy tych samych modelach nie byłaby), ale uznałem, że lepsza taka, niż żadna. I tak nie przywiduję dużej dokładności.

Zamówiłem jeszcze dobrze wypadający w testach czujnik BME280 i porównam wyniki.

Zmontowałem całość, napisałem program na esp8266 wykonujący wyżej ustaloną pętlę pomiarów. Dane wysyłam przez HTTP POST na serwer, zapisuję do MySQL za pomocą programu w PHP. Dodatkowo dorzuciłem funkcję automatycznej aktualizacji oprogramowania (podczas wysyłania danych sprawdzana jest wersja).

Pierwsze testy wypadły dobrze, zaskoczyło mnie tylko dość wysokie stężenie pyłów w domu (PM2.5 od 50 do 80µg/m³, PM10 nawet do 150µg/m³). Na zewnątrz było jeszcze gorzej.

Norma (średnia z 24 godzin) ustalona przez Światową Organizację Zdrowia wynosi dla pyłu PM2.5 – 25µg/m³, natomiast PM10 – 50µg/m³.

Po umieszczeniu czujnika na zewnątrz aż zacząłem wątpić w poprawność odczytów, bo po kilku godzinach nastąpił skok do ponad 400-500µg/m³ dla obu frakcji (norma przekroczona o kilkaset procent). Wystarczyło jednak wyjść z domu, by przekonać się, że naprawdę nie ma czym oddychać (w kolejnym dniu ogłoszono alarm).

Dokładność pomiaru

Wracając do korekty pomiaru. W odległości 4800m ode mnie znajduje się państwowa stacja pomiarów m.in. pyłu PM10 (niestety nie ma PM2.5). Wyniki są bardzo zbliżone do moich, różnice zwykle nie przekraczają 10-20µg/m³ w stabilnym i „zdrowym” okresie (norma przekroczona o 100%), natomiast przy dużych skokach często różnią się tylko czasem wystąpienia. Wyniki są też dość stabilne bez względu na wilgotność powietrza (mierzyłem przy gwałtownych skokach 40-95%, a także w wietrzonych pomieszczeniach o niskiej wilgotności) i pokrywają się z w/w stacją Wojewódzkiej Inspekcji Ochrony Środowiska. Wyniki są więc nawet lepsze, niż zakładałem.

Na wykresie pojawiają się czasem kilkunastominutowe skoki nawet do 300-400µg/m³ – dokładnie wtedy, gdy któryś z sąsiadów rozpala w kotle.

Poniżej zdjęcie wersji prototypowej i cały kod na ESP8266 w C (IDE Arduino).

Cały frontend oparłem na PHP + JavaScript z wykresami Google Chart, zawarłem też informacje o indeksie AQI stosowanym do oznaczania jakości powietrza.

Strona z wynikami wzbudziła dość dużą ciekawość jak na małe miasteczko. Pomimo tylko wzmianki dla znajomych na FaceBooku miałem 650 odsłon w pierwsze dwa dni.

 

 

// at7.pl
// bezprzewodowa stacja monitorowania pyłu zawieszonego PM10, PM2.5
// ESP8266 + Plantower PMS1003 + DHT22
// wersja testowa, rzeczywiście działająca może się różnić parametrami
// automatyczna aktualizacja oprogramowania (OTA)

#include <Arduino.h>
#include "DHT.h"
#include <ESP8266WiFi.h>
#include "ESP8266HTTPUpdate.h"

#define WERSJA "016" //wersja programu
#define LEN 31  //długość wiadomości dla PMS1003 32 bajty
//#define SETPIN 3
#define DHTPIN 4 // pin DHT22
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

const unsigned long czasuspienia = 300; //czas pomiedzy pomiarami
// w sekundach
const unsigned long CZAS_START = 15000; // czas od wlaczenia do startu
// pomiaru [ms]
const unsigned long CZAS_PAUZA = 3000 ; // pauza pomiedzy powtorzeniami 
//pomiaru [ms]

#define adresSerwera  "nazwaserwera.pl"
#define portSerwera        80
#define AP_SSID "nazwa_sieci"
#define AP_PASSWORD "haslo_sieci"

//dla ułatwienia obliczyłem komendy dla PMS1003 / PMS3003
const byte wakeup[7] = {0x42, 0x4d, 0xe4, 0x00, 0x01, 0x01, 0x74};
const byte sleep[7] =  {0x42, 0x4d, 0xe4, 0x00, 0x00, 0x01, 0x73};
const byte active[7] = {0x42, 0x4d, 0xe1, 0x00, 0x01, 0x01, 0x71};

unsigned char buf[LEN];

float t=0;
float h=0;


static int PM01Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int PM25Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int PM10Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int PMa01Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int PMa25Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static int PMa10Val[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

static int tPM01Val = 0;
static int tPM25Val = 0;
static int tPM10Val = 0;
static int tPMa01Val = 0;
static int tPMa25Val = 0;
static int tPMa10Val = 0;


static unsigned long licznikczasu;
static int licznik;

char sprawdzSume(unsigned char *buf, char leng) //sprawdzanie sumy 
//kontrolnej z PMS1003
{
  char receiveflag = 0;
  int receiveSum = 0;
  for (int i = 0; i < (leng - 2); i++) {
    receiveSum = receiveSum + buf[i];
  }
  receiveSum = receiveSum + 0x42;
  if (receiveSum == ((buf[leng - 2] << 8) + buf[leng - 1])) 
  {
    receiveSum = 0;
    receiveflag = 1;
  }
  return receiveflag;
}

void setup() {

  Serial.begin(9600);   
  Serial.setTimeout(1500);   
  Serial.println(WERSJA);

  pinMode ( DHTPIN, INPUT_PULLUP );
  dht.begin();

  delay(1000);
  Serial.write(wakeup, sizeof(wakeup));
  delay(200);
  Serial.write(active, sizeof(active));
  licznikczasu = millis();
  licznik = 0;
}


void dodajpomiar(int i)
{
  PM01Val[i] = tPM01Val;
  PM25Val[i] = tPM25Val;
  PM10Val[i] = tPM10Val;
  PMa01Val[i] = tPMa01Val;
  PMa25Val[i] = tPMa25Val;
  PMa10Val[i] = tPMa10Val;

}



void wifiConnect()  //laczenie z sieci wifi
{
  WiFi.mode(WIFI_STA);
  WiFi.begin ( AP_SSID, AP_PASSWORD );
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 1500 );
     if(millis()>120000) ESP.restart();
  }
}





//wysyłanie wyników przez HTTP/POST
void wyslijPomiar(int d1, int d2, int d3, int d4, int d5, int d6, float d7, float d8)
{
  WiFiClient client;
  while (!client.connect(adresSerwera, portSerwera)) {
    wifiConnect();
  if(millis()>120000) ESP.restart();
  }
  bool aktualizuj=false;
  String url = "";
  url += "/plik.php?d1=" + String(d1);
  url += "&d2=" + String(d2);
  url += "&d3=" + String(d3);
  url += "&d4=" + String(d4);
  url += "&d5=" + String(d5);
  url += "&d6=" + String(d6);
  url += "&d7=" + String(d7);
  url += "&d8=" + String(d8);
  url += "&d9=" + String(WERSJA);
  client.print(String("POST ") + url + " HTTP/1.1\r\n" +
               "Host: " + String(adresSerwera) + "\r\n" +
               "Connection: close\r\n" +
               "Content-Length: 0\r\n" +
               "\r\n");
  delay(100);
  while (client.available()) {
   String line = client.readStringUntil('\r');
  
  if(line.indexOf("Wersja") >=0) //sprawdzanie wersji
    { 
      String wersja=line.substring(8,11);
      if (wersja!=WERSJA)
      {
        aktualizuj=true;
                } ;  
  }//sprawdzanie wersji

  if(aktualizuj) // aktualizacja
  {
    Serial.println("Aktualizacja..."); 
        ESPhttpUpdate.update(adresSerwera, portSerwera, "/firmware.bin");
        delay(500);
        client.stop();
        ESP.restart();
  }
      
    }
    client.stop();
      Serial.println("Dane wyslane");
}


void transmisja(unsigned char *thebuf)  //odczyt aktualnych wartosci z PMS1003
{
  tPM01Val = ((thebuf[3] << 8) + thebuf[4]);
  tPM25Val = ((thebuf[5] << 8) + thebuf[6]);
  tPM10Val = ((thebuf[7] << 8) + thebuf[8]);
  tPMa01Val = ((thebuf[9] << 8) + thebuf[10]);
  tPMa25Val = ((thebuf[11] << 8) + thebuf[12]);
  tPMa10Val = ((thebuf[13] << 8) + thebuf[14]);
}


void sortujint(int tablica[], int rozmiar) {
  for (int i = 0; i < (rozmiar - 1); i++) {
    for (int j = 0; j < (rozmiar - (i + 1)); j++) {
      if (tablica[j] > tablica[j + 1]) {
        int t = tablica[j];
        tablica[j] = tablica[j + 1];
        tablica[j + 1] = t;
      }
    }
  }
}


void oblicz()
{
  sortujint(PM01Val, 10);
  sortujint(PM25Val, 10);
  sortujint(PM10Val, 10);
  sortujint(PMa01Val, 10);
  sortujint(PMa25Val, 10);
  sortujint(PMa10Val, 10);


  // obliczanie sredniej z 6 pomiarów
  int d1 = (PM01Val[2] + PM01Val[3] + PM01Val[4] + PM01Val[5] + PM01Val[6] + PM01Val[7]) / 6;
  int d2 = (PM25Val[2] + PM25Val[3] + PM25Val[4] + PM25Val[5] + PM25Val[6] + PM25Val[7]) / 6;
  int d3 = (PM10Val[2] + PM10Val[3] + PM10Val[4] + PM10Val[5] + PM10Val[6] + PM10Val[7]) / 6;
  int d4 = (PMa01Val[2] + PMa01Val[3] + PMa01Val[4] + PMa01Val[5] + PMa01Val[6] + PMa01Val[7]) / 6;
  int d5 = (PMa25Val[2] + PMa25Val[3] + PMa25Val[4] + PMa25Val[5] + PMa25Val[6] + PMa25Val[7]) / 6;
  int d6 = (PMa10Val[2] + PMa10Val[3] + PMa10Val[4] + PMa10Val[5] + PMa10Val[6] + PMa10Val[7]) / 6;

  float  d7 = h;
  float  d8 = t;


  wyslijPomiar(d1, d2, d3, d4, d5, d6, d7, d8);

}

void loop() {
  tPM01Val = 0; //tymczasowe dane dla pojedynczego odczytu
  tPM25Val = 0;
  tPM10Val = 0;
  tPMa01Val = 0;
  tPMa25Val = 0;
  tPMa10Val = 0;


  if (Serial.find(0x42)) {  //wykrycie transmisji z PMS1003
    Serial.readBytes(buf, LEN);

    if (buf[0] == 0x4d) {

      if (sprawdzSume(buf, LEN)) { //spr. czy suma kontrolna sie zgadza
        transmisja(buf); // odczyt danych do tymczasowych zmiennych
      }
    }

  } //koniec odczytu 0x42


  if (millis() > 120000) // jesli nie ma reakcji przez 2 minuty - restart
  {
    ESP.deepSleep(czasuspienia * 1000000);
  }


  //zapis pojedynczego pomiaru
  if (millis() > CZAS_START && millis() - licznikczasu >= CZAS_PAUZA && tPM01Val > 0)
  {
     float  wilg = dht.readHumidity();
     float  temp = dht.readTemperature();
     //czasem jest problem z odczytem z DHT22 (NaN) wiec przy okazji 10 prob
     if (!isnan(temp))
        t=temp;
     if (!isnan(wilg))
        h=wilg;

    dodajpomiar(licznik); //zapis pojedynczego pomiaru  do tablicy
    licznikczasu = millis();
    licznik++;
  }


  if (licznik >= 10) // po 10 odczytach wyslij dane i zasnij
  {
    oblicz();  //oblicza srednie i wysyla dane
    delay(250);
    //uspienie PMS1003
    Serial.write(sleep, sizeof(sleep)); 
      delay(100);

    //uspienie esp8266
    long czasusp = (czasuspienia * 1000) - millis();
    if (czasusp < 10000) czasusp = 10000;
    // zakładam czas uśpienia w mikrosekundach minus czas jaki zajęło wykonanie pomiaru
    Serial.println("Odczyt zakonczony, uspienie esp8266");
    ESP.deepSleep(czasusp * 1000);

  }



}

 

6 769 komentarzy to “Bezprzewodowa stacja monitorowania jakości powietrza”

You can Dodaj komentarz or Trackback this post.

  1. spairo1741 - 28 lutego 2017 o 20:54

    badzo ładny projekt, myślę nad czyms podobnym.
    zastosuję pms3003 (pms5003) i raczej BlueTooth.
    pms5003 trudno obudowac, bo nie ma wysającego wentylatora.

  2. atomic77 - 2 marca 2017 o 21:16

    Dzięki. Ja wybrałem wifi – i i tak mam sieć domową. Do tego mój ulubiony Espduino, który działa na 3,3V a do tego ma wyjście 5V, dzięki czemu nie musiałem stosować żadnych dodatkowych elementów (kiedyś bawiłem z arduino + esp8266 + konwerter sygnału 5V-3V3). Co do obudowy to zacząłem sobie rysować w CAD taką pasującą idealnie, wydrukuję sobie 🙂 Na razie to prowizorka, ale świetnie pokazuje jakie powietrze jest u mnie. Obecnie norma przekroczona o 30-50% ale było już 500-600%. Trzeba też wziąć pod uwagę, że przy dużej wilgotności pomiar jest zawyżony.

  3. spairo1741 - 5 marca 2017 o 14:34

    dzięki za projekt, chyba zostanę przy bluetooth.
    w swoim projekcie zastosuję pms5003 oraz dogrzewanie wlotu powietrza.
    5003 nie ma wystającego wentylatora ale to nie jest potrzebne ponieważ wejście powietrza jest od strony tych 4 otworow obok wentylatora.
    wentylator 5V wyciaga powietrze a nie nadmuchuje.
    do projektu obudowy do 5003 przydałaby się drukarka 3D a tak trzeba będzie klejem na gorąco coś kleić.
    bardziej mnie martwi brak możliwości zakupu wkretów M2 samogwintujących do przykręcenia 5003.
    mój projekt bedzie miał 5003, dht22 jako czujnik zewnętrzny oraz BME280 jako czujnik temperatury i cisnienia „termostatu”, kontroluje grzałkę i grzanie do tych 40 stC.

  4. atomic77 - 5 marca 2017 o 15:48

    Świetnie, ja przymierzałem się do tego grzania, ale to dla mnie za dużo zabawy. Myślałem, że może kiedyś… ale tym czasem okazuje się, że wzór na korektę odczytów od kolegi z Krakowa jest zaskakująco dokładny. Na wykres nakładam sobie dane ze stacji państwowej (kilka km ode mnie) i jest bardzo duża zbieżność, zarówno przy dużych odczytach jak i teraz, przy kilkunastu ug/m3. Dla mnie wystarczy. Tylko DHT22 rzeczywiście nie najlepiej się spisuje jako ten „główny” do pomiaru wilgotności – przy 95% zatrzymuje się i nie spada jak powinien. W lecie będę pracował nad zmianami, na razie chciałem zdążyć na ostatnie tygodnie sezonu grzewczego z testami więc to prowizorka zapakowana do pudełka po płytach CD 🙂
    PS. poprawiłem nick autora, mam nadzieję że teraz dobrze (email był ten sam).

  5. atomic77 - 5 marca 2017 o 15:50

    Aha dodam jeszcze, że wyniki są tu: pszow.cc8.pl

  6. Tadeusz Qteki - 2 kwietnia 2017 o 20:36

    na razie mam kłopoty z obróbką obudowy i rury grzewczej.
    zakupiłem „maszyne ” cnc (mf 70 zabaweczka) do tej obróbki , ale myślałem, że ona sama coś zrobi a tu nic, trzeba samemu projektować i frezować (CAD/CAM).
    najgorzej idzie frezowanie plastiku, frezy oblepiają się tym plastikiem.
    z powodu powolnych prac, zakupiłem dodatkowo Look O2.
    wynik zanieczyszczenia w mojej okolicy można obserwowac z tego linku, adres mego loko2 to wroclaw_wislanska
    link: http://looko2.com/heatmap.php

  7. spairo - 10 kwietnia 2017 o 17:39

    do budowy grzałki użyłem rury od wody ciepłej fi32 oraz ceramicznej grzałki od lutownicy 80W.
    nie był to dobry wybór, za dużą moc grzałki, przez błąd programu grzałka stopiła rure nośną, o mało co nie powodując pożaru.
    zmieniłem grzalki, zastosowałem trzy grzałki od drukarki 3D połaczone szeegowo.
    przy 12 V pobierają prąd 1.1 A, raczej nie stopią rury z plastiku.
    grzałki te są obudowane metalem, dodatkowo daje to pewną bezwładność grzania.
    do sterowania zastosowałem program sterujący z regulacją PID.
    osiągnięta dokładność regulacji temperatury to tak +0.5 / – 1 st C.
    w tym przypadku na dokładności nam nie zależy i tak regulacja temperatury jest włączana wtedy, jak temperatura i wilgotność zbliża się o te +2 st C do punktu rosy.

  8. atomic77 - 11 kwietnia 2017 o 20:07

    Widzę, że to dużo bardziej profesjonalne urządzenie niż moje 🙂 Ja opieram się na matematycznej korekcji i porównaniu danych z sąsiedniej stacji pomiarowej. A co dopiero maszyny CNC, nawet na żywo takiej nie widziałem. Ja wszelkie obudowy i potrzebne urządzenia projektuję w CAD i drukuję. Zastanawiam się, czy podgrzewanie powietrza w celu obniżenia wilgotności nie wpływa też na zawartość pyłu? Zresztą już samo wykorzystanie grzałek komplikuje sprawę bezpieczeństwa, nawet takich grzałek z drukarki 3D. Na pewno trzeba wszystko mieć lepiej przemyślane, niż moja konstrukcja – tymczasowo opakowana w pudełko po płytach CD z wyciętymi dziurami. Ale działa już kilka miesięcy 🙂

  9. byrrt - 17 lipca 2017 o 15:13

    atomic77 pytanko o ten algorytm kompensacji w zależności od wilgotności – możesz coś szerzej?

  10. atomic77 - 17 lipca 2017 o 15:28

    Wzorowałem się na obliczeniach kolegi z Krakowa http://www.krakow-zdroj.pl który opisał mi jak to obliczył. Mieszka w zasięgu 3 państwowych stacji i obliczał zależność wilgotności od wyników pomiaru porównując je do tych stacji.
    Nazbierał bardzo dużo „próbek”.
    Ja z kolei zweryfikowałem to ze stacją która jest w pobliżu mnie (niestety tylko PM10) i wszystko się zgadzało.
    Niemniej jednak, nawet nie korzystając z tych korekt, można chyba (orientacyjnie) korzystać z bezpośrednich wyników pomiaru.
    Na stronie z Krakowa są też dostępne wersje z korektą i bez, można porównać. Myślę, że orientacyjnie można też korzystać z wersji bez korekty.

  11. byrrt - 30 lipca 2017 o 01:25

    Dzięki za odpowiedź. Napisałem do autora projektu z Krakowa. Sam uruchomiłem już czujnik, muszę tylko jeszcze ogarnąć sprawę tej korekty, parę pierdół i na balkon to 😉

  12. Jrvxweata - 7 sierpnia 2022 o 02:21

    viagra gel tabs sildenafil 50mg for sale female viagra pills in india online

  13. Wrfveloft - 8 sierpnia 2022 o 08:51

    viagra 100mg price comparison pfizer viagra 100mg price viagra pills order online

  14. Afgoalums - 10 sierpnia 2022 o 00:54

    uses for cialis liquid tadalafil for sale price comparison tadalafil

  15. Alexisanned - 17 sierpnia 2022 o 23:01

    See the difference.
    Here’s a classic Japanese saying for you.
    Thomas Jefferson also mirrored this general idea when he said, I find that the harder I work, the more luck I seem to have.
    This also reminds me of a precept by Sir Edwin Sandys, a politician who helped establish Jamestown, Virginia.
    People often use this quote when discussing health, but Franklin was talking about fire safety.
    The Purpose & Function of Aphorism
    Aphorisms can act as a guideline to help narrow the focus of your work.
    Practice what you preach.
    Take this proverb, for example.
    Speaking of being safe, that’s another aphorism example that you’ve probably heard before.
    Check it out.
    This is especially true if the excuse is a lie.
    Interestingly enough, this saying was initially intended as a compliment.
    It originated from Lady Mary Montgomerie Currie’s poem Tout vient a qui sait attendre.
    Their direct, witty approach is what makes these self-evident truths powerful.
    How many times have you heard one of the following aphorism examples.

  16. Alexisanned - 17 sierpnia 2022 o 23:25

    But, the aphorism is short and sweet.
    Here’s a classic Japanese saying for you.
    It’s one of my favorite aphorisms because it’s simple but yet powerful.
    Napoleon Bonaparte could relate.
    One of his most notable is, An ounce of prevention is worth a pound of cure.
    They’re easy to remember and pass down through generations because they’re concise.
    Not only that, but you can use aphorisms in your writing to summarize your central theme.
    Aphorisms are so common that we hardly think twice about them.
    But, the aphorism is short and sweet.
    The original dictum said, A penny spar’d is twice got, but it’s adapted over the years for modern English.
    Remember that.
    Sandys said, Honestie the best policie, which in modern English is…
    It’s easier to do it yourself rather than try to explain it to someone else.
    Why is this stuff important.
    Their direct, witty approach is what makes these self-evident truths powerful.
    Are you in.

  17. Alexisanned - 17 sierpnia 2022 o 23:28

    Take this proverb, for example.
    What does it mean.
    It’s one of my favorite aphorisms because it’s simple but yet powerful.
    This also reminds me of a precept by Sir Edwin Sandys, a politician who helped establish Jamestown, Virginia.
    Want a few more.
    search bar with „what use aphorism.” written
    Ready to Use These Aphorism Examples In Your Writing.
    What is an Aphorism.
    If you do, you agree with George Herbert’s famous aphorism from his book, Outlandish Proverbs.
    Don’t count on things that haven’t happened yet because something unexpected could occur.
    It’s become one of the most viral memes on the internet.
    We’ve all probably had to learn that the hard way.
    The complete quote was, A Jack of all trades and master of none, but oftentimes better than a master of one.
    Skilled writers use aphorisms to evoke big ideas in a relatable way.
    Aphoristic statements also appear in everyday life, such as daily speeches made by politicians and leaders.
    Let’s get started.

  18. Alexisanned - 18 sierpnia 2022 o 01:21

    It’s a great saying, but it’s not something you’d necessarily repeat over the dinner table.
    It’s better safe than sorry, right.
    What am I referring to.
    Like George Washington, Sandys believed that telling the truth is always the way to go.
    The complete quote was, A Jack of all trades and master of none, but oftentimes better than a master of one.
    The Purpose & Function of Aphorism
    You’re prepared to use these handy little sayings to make your prose more relatable.
    Today, I’ll define aphorism and show you how these handy little sayings make your writing more memorable.
    And since they’re universal truths about life, they help persuade your reader to accept your message.
    This famous motto highlights the truism that life is full of ups and downs.
    Examples of Aphorism in Film
    Aphorism Examples in Everyday Speech
    Yup, he was reminding Philadelphians that preventing fires is better than fighting them.
    It meant that the person was versatile and adept at many things.
    Not only that, but you can use aphorisms in your writing to summarize your central theme.
    Don’t judge a book by its cover.

  19. Alexisanned - 18 sierpnia 2022 o 03:01

    Guy standing at a bookshelf
    Another aphorism that’s adapted is, Don’t count your chickens before they hatch.
    Opportunities don’t happen.
    Washington’s message was that it’s wiser to be upfront and deal with the consequences.
    Want a few more.
    Today, calling someone a Jack of all trades is usually a jab because it implies that their knowledge is superficial.
    Give it a try!
    The term aphorism originates from late Latin aphorismus and Greek aphorismos.
    20 Aphorism Examples
    Nanakorobi yaoki.
    See for yourself.
    Have you ever felt frustrated when other people didn’t meet your expectations.
    Other Common Examples of Aphorisms
    Let’s talk about that.
    Then use it as a guideline to stay focused on your general theme.
    What is an Aphorism.

  20. Alexisanned - 18 sierpnia 2022 o 05:36

    Brevity is the key.
    This quote originated from Thomas Howell in New Sonnets and Pretty Pamphlets.
    There is no try.
    Have you ever felt frustrated when other people didn’t meet your expectations.
    He once stated, If you want a thing done well, do it yourself.
    It meant that the person was versatile and adept at many things.
    As they say, Nothing ventured, nothing gained.
    They’re in social media captions all over the web.
    Do you believe that a penny saved is a penny earned.
    Fall seven times, stand up eight.
    What am I referring to.
    Washington also said, It is better to offer no excuse than a bad one.
    It’s easier to do it yourself rather than try to explain it to someone else.
    This quote came from Wales, first appearing in an 1866 publication.
    And get this.
    Practice what you preach.

  21. Alexisanned - 18 sierpnia 2022 o 05:38

    20 Aphorism Examples
    The original dictum said, A penny spar’d is twice got, but it’s adapted over the years for modern English.
    He played the villain in the movie that famously stated.
    Let me ask you.
    Interestingly enough, this saying was initially intended as a compliment.
    But these days.
    It’s time.
    Today, I’ll define aphorism and show you how these handy little sayings make your writing more memorable.
    But, the aphorism is short and sweet.
    This famous motto highlights the truism that life is full of ups and downs.
    If you can do something, then you need to do it for the good of others.
    Life is too short to surround yourself with toxic people.
    Finally, Actions speak louder than words is another classic example.
    Another memorable aphorism is, An apple a day keeps the doctor away.
    Aphoristic statements also appear in everyday life, such as daily speeches made by politicians and leaders.
    An aphorism is a literary device that uses a short, clever saying to express a general truth.

  22. Alexisanned - 18 sierpnia 2022 o 06:03

    And since they’re universal truths about life, they help persuade your reader to accept your message.
    Another success aphorism comes from Chris Grosser.
    Thomas Jefferson also mirrored this general idea when he said, I find that the harder I work, the more luck I seem to have.
    Life is too short to surround yourself with toxic people.
    The complete quote was, A Jack of all trades and master of none, but oftentimes better than a master of one.
    But these days.
    Your stories can benefit from this method too.
    What is an Aphorism.
    Examples of Aphorism in Literature
    Examples of Aphorisms for Success
    There is no try.
    He once stated, It is better to be alone than in bad company.
    People often use this quote when discussing health, but Franklin was talking about fire safety.
    Today, calling someone a Jack of all trades is usually a jab because it implies that their knowledge is superficial.
    Give it a try!
    Now here’s the big question.

  23. Jbukweata - 25 sierpnia 2022 o 06:36

    where can i buy resume paper help with writing a speech custom thesis writing

  24. Eybwxfuene - 26 sierpnia 2022 o 08:51

    do my paper for money best online writing services write my persuasive paper

  25. Wdxceloft - 26 sierpnia 2022 o 12:54

    thesis introduction thesis search alison rapp thesis

  26. Wxeveloft - 30 sierpnia 2022 o 20:37

    depression essay an argumentative essay how to begin an essay

  27. Execfuene - 31 sierpnia 2022 o 16:28

    spongebob writing essay writing a college essay how to start a paragraph in an essay

  28. buinddile - 1 września 2022 o 13:09

    If a man has sexual arousal, then these drugs should help him cheap cialis If you feel like you are not having good effect with one, we can always switch to the other assuming there aren t any medical reasons which would prevent us from doing so

  29. Jwnvweata - 3 września 2022 o 13:31

    no prescription online viagra viagra 100 buy generic viagra online uk

  30. Ewbfuene - 4 września 2022 o 11:39

    prescription free cialis maximpeptide tadalafil review how long does tadalafil take to work

  31. embarty - 5 września 2022 o 16:26

    buy cialis generic This coupon code can also apply to generic Cialis 20mg

  32. Wmfseloft - 7 września 2022 o 14:08

    why this college essay sample personal narrative essay examples how to write a personal essay

  33. Heitmen - 7 września 2022 o 18:38

    Both prices have stayed the same for many months brand cialis online

  34. Jbolweata - 10 września 2022 o 15:12

    best canadian online pharmacy viagra price viagra 50mg can you order viagra without a prescription

  35. Wrolverer - 10 września 2022 o 16:10

    1999; 13 F101 F107. clomiphene side effects RE raised dose from 75 to alternate between 75 and 100 until Monday when I get my next u s on cd9.

  36. Ensfuene - 11 września 2022 o 22:59

    viagra online shop how much is viagra cost buy viagra 2013 usa

  37. Anrxalums - 13 września 2022 o 10:21

    how to purchase viagra in uk buy viagra nyc sildenafil tablets

  38. Nbqzweata - 13 września 2022 o 13:02

    viagra over the counter cost how to get viagra without a prescription where to buy over the counter female viagra

  39. JybeNeenFuene - 13 września 2022 o 13:24

    where to buy viagra without a prescription generic viagra pills for sale can you buy viagra over the counter in south africa

  40. boopindub - 13 września 2022 o 19:27

    I did notice I ovulated way earlier than ever before and I wonder if that has anything to do with it. natural alternatives to tamoxifen

  41. Jrczweata - 16 września 2022 o 03:27

    where to get cialis cheap cialis buy australia online cialis windsor canada pharmacy

  42. Ewxrtfuene - 17 września 2022 o 03:48

    buy cialis online with check generic cialis coupons cialis com free sample

  43. accelry - 17 września 2022 o 09:35

    doxycycline for dogs Tips for preventing an infected ear piercing.

  44. Ntvcweata - 20 września 2022 o 08:25

    cialis classification cialis at walmart canadian cialis 200 mg.

  45. JpplNeenFuene - 20 września 2022 o 10:13

    when to take tadalafil cialis purchase buy cialis generic

  46. Anwnalums - 21 września 2022 o 09:30

    levitra discount coupon levitra side effects blood pressure how long does levitra last in your system

  47. Ecxzfuene - 22 września 2022 o 00:59

    where to buy cialis over the counter tadalafil online canada where can i buy cialis on line

  48. Nengweata - 23 września 2022 o 09:09

    cheap viagra for sale generic sildenafil coupon viagra over the counter in usa

  49. JntzNeenFuene - 23 września 2022 o 17:54

    can tadalafil cure erectile dysfunction cialis vs.viagra reviews cialis no prescriptuin

  50. Joxwweata - 23 września 2022 o 18:03

    viagra vs cialis vs levitra tadalafil 20 mg e20 cialis 20 mg price cvs

  51. Acrnalums - 26 września 2022 o 20:59

    vyvanse online pharmacy kamagra oral jelly viagra from canadian pharmacies

  52. Euuyfuene - 28 września 2022 o 00:27

    blood pressure meds lisinopril hydrochlorothiazide 12.5 mg for high blood pressure what is lisinopril hydrochlorothiazide

  53. JynmnNeenFuene - 28 września 2022 o 19:28

    metformin glaucoma metformin with humalog metformin drug id

  54. Nplqqweata - 29 września 2022 o 14:47

    prescription drugs lookup Actos rite aid pharmacy how many store

  55. Jcegweata - 29 września 2022 o 22:51

    online pharmacy courses canada marijuana vs prescription drugs modafinil canada pharmacy

  56. Wbzweloft - 1 października 2022 o 21:04

    furosemide in dogs furosemide and renal failure diesel furosemide 40 mg

  57. Anwnalums - 2 października 2022 o 17:08

    off label use of flagyl flagyl per l’uomo dosage of flagyl

  58. Ebifuene - 3 października 2022 o 20:02

    coreg vs atenolol atenolol lymphadenopathy nebivolol and atenolol comparison

  59. JmiNeenFuene - 4 października 2022 o 14:31

    tamoxifen premenopausal bone loss tamoxifen bijsluiter tamoxifen and uterine cramps

  60. Nbqaweata - 4 października 2022 o 19:49

    trazodone serotonin trazodone and priapism how much trazodone is too much

  61. Jniweata - 5 października 2022 o 04:07

    how long will the side effects of bactrim last bactrim ds instructions bactrim ds usual dose

  62. Anwnalums - 7 października 2022 o 10:08

    how long does it take for flagyl to work on c-diff flagyl for dogs side effects does alcohol prevent flagyl from working

  63. Fligagham - 8 października 2022 o 04:54

    Elroy cRrExfJDrMffXCdK 6 20 2022 lasix and kidney function PMID 16397365 Review

  64. Ebdvfuene - 8 października 2022 o 22:40

    nursing implications furosemide furosemide not working define lasix

  65. Ebdvfuene - 9 października 2022 o 05:03

    lasix interactions furosemide spironolactone lasix without prescription

  66. JtvNeenFuene - 9 października 2022 o 08:04

    can lisinopril cause kidney damage losartan potassium & hydrochlorothiazide buy lisinopril 10 mg online

  67. Wnfveloft - 9 października 2022 o 14:17

    nolvadex triglycerides hoe lang nakuren met nolvadex nolvadex pct dosage epistane

  68. Wnfveloft - 9 października 2022 o 18:09

    3d structure of tamoxifen nolvadex y clomid tamoxifen for men fertility

  69. Azwalums - 9 października 2022 o 22:12

    how does glucophage help with infertility glucophage xr 500 ulotka glucophage upset stomach

  70. Jnisweata - 10 października 2022 o 15:13

    tenormin 50 y alcohol atenolol dose for angina taking atenolol and alcohol

  71. Nbdxweata - 11 października 2022 o 02:33

    side effects of antibiotics bactrim prospecto bactrim balsamico pediatrico mononessa and bactrim

  72. Jnisweata - 11 października 2022 o 05:53

    atenolol en jovenes atenolol vitamins atenolol 25 mg effets secondaires

  73. Azwalums - 11 października 2022 o 07:01

    glucophage patient assistance program application pioglitazone with metformin glucophage auxiliary labels

  74. JtvNeenFuene - 11 października 2022 o 08:23

    hydrochlorothiazide works by what mechanism of action? what dosage does lisinopril come in what is lisinopril 20 mg

  75. Ervsfuene - 11 października 2022 o 18:52

    recalled atorvastatin lots how to stop lipitor para que sirve el lipitor atorvastatina

  76. Wbwbeloft - 12 października 2022 o 09:40

    metronidazole 500 mg once a day side effects of taking metronidazole during pregnancy metronidazole (flagyl) 400mg

  77. Edcgeloft - 12 października 2022 o 10:45

    time it takes for synthroid to work different colors of synthroid what are the generic names for synthroid

  78. JtvaNeenFuene - 12 października 2022 o 12:07

    can you get high on lyrica does lyrica work lyrica drug test

  79. Wtbveloft - 12 października 2022 o 13:46

    trazodone sleep aid dosage average dose of trazodone melatonin and trazodone

  80. Avebalums - 12 października 2022 o 18:23

    valtrex dosage for oral herpes outbreak glaxosmithkline valacyclovir valtrex nyquil

  81. Jikkweata - 13 października 2022 o 11:24

    maximum dose of lyrica lyrica 150mg lyrica high dose

  82. Nikmmweata - 13 października 2022 o 13:32

    neurontin solution package insert gabapentin swelling of feet neurontin effet indesirable

  83. Wbwbeloft - 13 października 2022 o 15:03

    metronidazole la gi dog pancreatitis metronidazole dosage of metronidazole for giardiasis

  84. Nikmmweata - 13 października 2022 o 16:42

    neurontin para dolor de espalda compare gabapentin and cymbalta gabapentin and increased urination

  85. Inarmdymn - 13 października 2022 o 19:38

    Tamoxifen and Raloxifene are the only drugs approved in the U buy cialis online

  86. Avebalums - 13 października 2022 o 22:46

    valtrex herpes prophylaxis dose is valtrex just for herpes valacyclovir hcl cpl

  87. Wtbveloft - 14 października 2022 o 04:50

    when to take trazodone before bed trazodone goodrx trazodone a controlled substance

  88. JtvaNeenFuene - 14 października 2022 o 08:03

    pregabalin farmacia simi lyrica withdrawal symptoms safaree and lyrica

  89. frague - 14 października 2022 o 12:01

    effects of cialis generic cialis online how to get cialis prescription

  90. Edvdfuene - 14 października 2022 o 15:04

    generic for tenormin metoprolol vs tenormin atenolol alopecia

  91. Edvdfuene - 14 października 2022 o 21:23

    atenolol dosage for essential tremor atenolol drug monograph dose letal de atenolol

  92. JnrcNeenFuene - 15 października 2022 o 00:07

    bactrim ds tablet acne bactrim ok while breastfeeding is bactrim safe when pregnant

  93. Wqabeloft - 15 października 2022 o 05:53

    atorvastatin 5 mg side effects alternative to lipitor natural alternatives to lipitor

  94. Ebtveloft - 15 października 2022 o 06:44

    nolvadex tamoxifen buy nolvadex met alcohol tamoxifen interaction with herbal supplements

  95. Ebtveloft - 15 października 2022 o 10:26

    does tamoxifen really increases testosterone levels dianabol nolvadex clomid dbol nolvadex pct

  96. Axealums - 15 października 2022 o 14:33

    metformin affect kidneys role of glucophage in pregnancy do you lose weight on glucophage

  97. Wqabeloft - 16 października 2022 o 11:57

    does atorvastatin have calcium in it atorvastatin for what atorvastatin 5 mg side effects

  98. Jxzxweata - 16 października 2022 o 15:44

    side effects of furosemide 40 mg buy furosemide tablets uk furosemide abuse

  99. Nwnmweata - 16 października 2022 o 17:49

    lisinopril for diabetes to protect kidneys can you stop lisinopril cold turkey lisinopril dosage side effects

  100. Axealums - 16 października 2022 o 20:28

    metformina (glafornil glucophage) weight loss by glucophage glucophage miesiaczka

  101. Nwnmweata - 16 października 2022 o 20:50

    does hydrochlorothiazide lower heart rate lisinopril 2.5mg lisinopril moa

  102. Wzwweloft - 17 października 2022 o 01:45

    gabapentin medication for anxiety neurontin cap 300mg neurontin medicine

  103. Jxzxweata - 17 października 2022 o 06:17

    hydrochlorothiazide and furosemide furosemide cough hydrochlorothiazide vs furosemide

  104. Enwcfuene - 17 października 2022 o 21:05

    magnesium stearate and synthroid synthroid insulin interaction why don’t i feel better on synthroid

  105. JbfNeenFuene - 17 października 2022 o 23:56

    how many times a day do you take valacyclovir valacyclovir fda valacyclovir valtrex dosage

  106. Wnwfeloft - 18 października 2022 o 05:49

    metronidazole gel kill sperm metronidazole zoloft using metronidazole gel

  107. Webbeloft - 18 października 2022 o 09:44

    trazodone bluelight zoloft and trazodone trazodone narcotic

  108. Edcbeloft - 18 października 2022 o 10:23

    tadalafil melanoma tadalafil) price of tadalafil

  109. Ahrralums - 18 października 2022 o 14:18

    atorvastatin compared to simvastatin para que sirve atorvastatin what is the generic name for lipitor

  110. Wnwfeloft - 19 października 2022 o 11:44

    is it ok to drink alcohol while taking metronidazole can you take metronidazole during pregnancy why does metronidazole cause nausea

  111. Ebrceloft - 21 października 2022 o 00:49

    online class for pharmacy tech online pharmacy no prescription buy medication without an rx

  112. gerLifex - 21 października 2022 o 04:20

    Incredible tons of awesome info.
    where to buy zithromax over the counter – zithromax used for
    Useful postings. Cheers.

  113. Ahehalums - 21 października 2022 o 07:59

    tadalafil powder for sale tadalafil spray is tadalafil good for your heart

  114. offemy - 21 października 2022 o 13:55

    viagra versus cialis cheap cialis online cialis buy

  115. Enrcfuene - 21 października 2022 o 17:31

    online order viagra in india sildenafil soft gel capsule viagra generic wholesale

  116. Nbsbweata - 23 października 2022 o 00:08

    cialis promise program card cialis for daily use comprar tadalafil 40 mg en walmart sin receta houston texas

  117. JbfgNeenFuene - 23 października 2022 o 01:48

    where to buy viagra online safely can i buy sildenafil over the counter viagra 1 tablet

  118. Unsano - 24 października 2022 o 03:15

    Truly loads of beneficial info! dapoxetine tadalafil and dapoxetine dapoxetine buy

  119. Bildedy - 24 października 2022 o 10:30

    Davison SP, Baglien BD, Hayes KD buy ivermectin 3mg tablets It can independently estimate the aggressiveness of cancer, the probability of distant metastasis, and disease specific survival

  120. Ebrceloft - 24 października 2022 o 12:47

    canadian pharmacy on line most trustworthy canadian pharmacy Lamivudin (Cipla Ltd)

  121. Ahehalums - 24 października 2022 o 17:23

    tadalafil 5mg daily price how long does tadalafil last tadalafil 20mg review

  122. MichaelFut - 24 października 2022 o 19:19

    смешное видео наркоманы за рулем быстрый займ вебмани безответная любовь этот мир недля

  123. MichaelFut - 25 października 2022 o 15:47

    интернет качалка для mac os. Получить кредит вебмани моментально. тест драйв мазда сх 5 видео тест драйв

  124. Enrcfuene - 25 października 2022 o 19:41

    where to buy viagra in canada female viagra india sildenafil tablets for sale