Zaloguje się
or
Tel +48 698 615 740

Stacja Badania Składu Powietrza

29 października, 2021

W tym artykule omówiona zostanie stacja badania składu powietrza. Wszystko zostanie opisane krok po kroku aby było to zrozumiałe.

Spis treści

  • Krótki opis
  • Komponenty potrzebne do budowy stacji i ich specyfikacja
  • Opisy pinów
  • Przykład
  • Rezultat
  • Pliki do pobrania

Krótki opis

Stacja jak sama nazwa wskazuje będzie badać skład powietrza. będzie pokazywać wszystkie wartości w promilach lub ppm. Do stacji trzeba będzie pobrać parę bibliotek. Efekt wart jest zainteresowania.

Komponenty potrzebne do budowy stacji i ich specyfikacja

Wyświetlacz LCD 1602A

  • Wyświetlacz LCD 2×16 znaków,
  • Sterownik zgodny z HD44780
  • Rozmiar modułu : 80 x 36 x 12 mm
  • Wymiary znaku: 2,45 x 5,00 mm  
  • Zakres temperatur pracy: od -20 do +70 °C

Czujniki MQ2 MQ3 MQ4 MQ5 MQ6 MQ8 MQ9 MQ135

  • Zasilanie: od 2,5 V do 5 V
  • Wyjście analogowe oraz cyfrowe
  • Wyprowadzenia: złącza goldpin raster 2,54 mm
  • Wymiary płytki: 20 x 32 mm

Potencjometr przesuwny liniowy 10K

  • Napięcie zasilania: 5 V
  • Typ: suwakowy, liniowy
  • Komunikacja: analogowa
  • wymiary 90.5×21[mm]

Opisy pinów

Przykład

Podłączenie

Odpowiednie podłączenie do Arduino (podłączenie może być dowolne w przypadku pinów analogowych i cyfrowych, ale należy je potem zdefiniować lub stworzyć inny układ. Pokazane schematy podłączeń poszczególnych urządzeń są tylko przykładem. Zaleca się osobne podłączenie komponentów i przetestowanie ich aby lepiej zrozumieć ich działanie lub program.)

Komponenty należy ze sobą połączyć w jeden układ. Na to nie ma instrukcji. Trzeba po prostu podłączyć wszystko pod płytkę stykową według oznaczeń i dokładnie to przeanalizować, ponieważ zawsze możemy coś źle podłączyć i stacja nie będzie działać poprawnie lub nieumyślnie doprowadzić do zwarcia, które może spalić cały układ. Mój sposób podłączenia ukazałem na poniżej dodanym załączniku.

Biblioteki

Przed napisaniem programu należy pobrać odpowiednie biblioteki, które obsłużą wyświetlacz.

Pobranie biblioteki bezpośrednio z Arduino poprzez

Sposób 1

szkic>dołącz bibliotekę>zarządzanie bibliotekami>wpisanie nazwy LiquidCrystal i pobranie biblioteki.

Sposób 2

Pobranie biblioteki z linku na samym dole i manualna instalacja. Szkic>dołącz bibliotekę>dołącz bibliotekę zip>wybieramy lokalizację biblioteki którą pobraliśmy

Program

Gdy nasz układ zostanie odpowiednio podłączony należy przystąpić do pisania programu. Najlepiej robić to powoli tak aby się nie pomylić i nie tracić czasu na poprawianie błędów. Poniżej będzie przykład programu, którego można użyć do stacji.

#include <LiquidCrystal.h>

Tutaj zostaje umieszczona biblioteka, która pozwoli na obsłużenie wyświetlacza.

#define czujnik_MQ2 A0
#define czujnik_MQ3 A1
#define czujnik_MQ4 A2
#define czujnik_MQ5 A3
#define czujnik_MQ6 A4
#define czujnik_MQ8 A5
#define czujnik_MQ9 A6
#define czujnik_MQ135 A7

Definicja wszystkich pinów od czujników.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Definicja wszystkich pinów od wyświetlacza.

void setup() {
  Serial.begin(9600);
  pinMode(czujnik_MQ2, INPUT);
  pinMode(czujnik_MQ3, INPUT);
  pinMode(czujnik_MQ4, INPUT);
  pinMode(czujnik_MQ5, INPUT);
  pinMode(czujnik_MQ6, INPUT);
  pinMode(czujnik_MQ8, INPUT);
  pinMode(czujnik_MQ9, INPUT);
  pinMode(czujnik_MQ135, INPUT);

Przypisanie wszystkim czujnikom funkcji wejścia.

lcd.begin(16, 2);

Definicja rozmiaru wyświetlacza.

lcd.print("Rozgrzewanie");
  delay(3000);
  lcd.clear();
  lcd.print("Czekaj");
  lcd.setCursor(0, 1);
  lcd.print("10 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("9 sek. ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("8 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("7 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("6 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("5 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("4 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("3 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("2 sek.  ");
  delay(1000);
  lcd.setCursor(0, 1);
  lcd.print("1 sek.  ");
  delay(1000);
  lcd.clear();
  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("Rozgrzane");
  delay(3000);

Rozpoczęcie procedury rozgrzewania.

 lcd.clear();

Wyczyszczenie wyświetlacza ze wszystkich tekstów.

void loop() {
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue1 = 0;
    adcValue1 += analogRead(czujnik_MQ2);
    delay(10);
    float v = (adcValue1 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Dym w powietrzu : ");
    lcd.print(mgL, 4);//6
    lcd.println("prom.");
    for (int a = 0; a < 16; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1000);
    }
    delay(1000);
    lcd.clear();
  }//MQ_2
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue2 = 0;
    adcValue2 += analogRead(czujnik_MQ3);
    delay(10);
    float v = (adcValue2 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Alkohol w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 20; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
    delay(1000);
    lcd.clear();
  }//MQ_3
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue3 = 0;
    adcValue3 += analogRead(czujnik_MQ4);
    delay(10);
    float v = (adcValue3 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Metan w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 18; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_4
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue4 = 0;
    adcValue4 += analogRead(czujnik_MQ5);
    delay(10);
    float v = (adcValue4 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("LPG w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 16; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_5
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue5 = 0;
    adcValue5 += analogRead(czujnik_MQ6);
    delay(10);
    float v = (adcValue5 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Propan w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 19; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_6
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue6 = 0;
    adcValue6 += analogRead(czujnik_MQ8);
    delay(10);
    float v = (adcValue6 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Wodor w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 18; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_8
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue7 = 0;
    adcValue7 += analogRead(czujnik_MQ9);
    delay(10);
    float v = (adcValue7 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("CO w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 15; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_9
  {
    lcd.setCursor(3, 0);
    lcd.print("Pomiar");
    float adcValue8 = 0;
    adcValue8 += analogRead(czujnik_MQ135);
    delay(10);
    float v = (adcValue8 / 10) * (5.0 / 1024.0);
    float mgL = 0.05 * v;
    lcd.setCursor(3, 2);
    lcd.print("Amoniak w powietrzu : ");
    lcd.print(mgL, 4);
    lcd.println("prom.");
    for (int a = 0; a < 20; a++)
    {
      lcd.scrollDisplayLeft();
      delay(1200);
    }
     delay(1000);
    lcd.clear();
  }//MQ_135

Działanie wszystkich czujników i ich opis. Program jest napisany tak aby przeliczył wartości na promile, ale można też przeliczać to na ppm za pomocą przelicznika. Przelicznik to 1promil=1000ppm.

for (int a = 0; a < 5; a++)
    {
    lcd.begin(16, 2);
lcd.setCursor(0, 0);
  lcd.print("Zbiernie");
  lcd.setCursor(0, 2);
  lcd.print("danych");
  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("Zbiernie");
  lcd.setCursor(0, 2);
  lcd.print("danych.");
  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("Zbiernie");
  lcd.setCursor(0, 2);
  lcd.print("danych..");
  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("Zbiernie");
  lcd.setCursor(0, 2);
  lcd.print("danych...");
  delay(500);
  lcd.clear();
    }
}

Procedura zbierania nowych danych z otoczenia.

Rezultat

Wszystkie dane z czujnika powinny wyświetlać się na wyświetlaczu i przesuwać w lewą stronę.

Pliki do pobrania

Sticky
Możliwość komentowania Stacja Badania Składu Powietrza została wyłączona

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.