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