[PROJEKT] Czujnik jakości powietrza – Air quality sensor v1.3 oraz KAmduino UNO
Teraz należy przerobić program tak, aby w przypadku wykrycia dużego stężenia niebezpiecznego gazu w powietrzu świeciła czerwona dioda LED. Zmodyfikowany program został umieszczony poniżej (pliki projektowe znajdują się również w sekcji do pobrania na koniec artykułu).
/* * AirQuality Demo V1.0. * connect to A0 to start testing. it will needs about 20s to start * By: http://www.seeedstudio.com * * Modyfikacje: Patryk Mądry * Mikrokontroler 2017 r. */ #include"AirQuality.h" #include"Arduino.h" AirQuality airqualitysensor; int current_quality =-1; void setup() { Serial.begin(9600); airqualitysensor.init(14); pinMode(2, OUTPUT); // Dioda } void loop() { current_quality=airqualitysensor.slope(); if (current_quality >= 0)// if a valid data returned. { if (current_quality==0) { Serial.println("High pollution! Force signal active"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==1) { Serial.println("High pollution!"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==2) { Serial.println("Low pollution!"); digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED } else if (current_quality ==3) { Serial.println("Fresh air"); digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED } } } ISR(TIMER1_OVF_vect) { if(airqualitysensor.counter==61)//set 2 seconds as a detected duty { airqualitysensor.last_vol=airqualitysensor.first_vol; airqualitysensor.first_vol=analogRead(A0); airqualitysensor.counter=0; airqualitysensor.timer_index=1; PORTB=PORTB^0x20; } else { airqualitysensor.counter++; } }
W pętli głównej programu do zmiennej current_quality jest przypisywana wartość od 0 do 3, gdzie wartość równa 0 lub 1 informują o dużej ilości cząsteczek w powietrzu, wartość 2 o niskiej ilości cząsteczek gazu w powietrzu, a 3 bardzo małej ilości lub ich braku). Następnie sprawdzana jest wartość tej zmiennej i wyświetlona wartość z czujnika oraz komunikat o ilości cząsteczek w wokół czujnika.
void loop() { current_quality=airqualitysensor.slope(); if (current_quality >= 0)// if a valid data returned. { if (current_quality==0) { Serial.println("High pollution! Force signal active"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED } else if (current_quality==1) { Serial.println("High pollution!"); digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED }
Gdy zmienna current_quality jest równa 0 lub 1, stężenie gazu w powietrzu jest wysokie i musi zapalić się dioda ostrzegające przed tym zjawiskiem. Aby program funkcjonował w ten sposób należy dodać kod, który spowoduje zaświecenie naszej czerwonej diody LED w warunku dla wartości 0 i 1. Kod do realizacji tego zadania wygląda następująco:
digitalWrite(2, HIGH); // Ustawienie pinu 2 na stan wysoki - zaświecenie diody LED
Gdy czujnik wykrył niewielkie stężenie cząsteczek lub nie wykrył ich wcale, zmienna current_quality przyjmuje wartości 2 lub 3. Wtedy dioda LED musi być zgaszona. Należy więc dodać linijkę kodu, która spowoduje ustawienie stanu niskiego na pinie 2 w warunku dla wartości 2 oraz 3:
digitalWrite(2, LOW); // Ustawienie pinu 2 na stan niski - zgaszenie diody LED
Diodę można zastąpić np. buzzerem, który będzie informować o wysokim stężeniu niebezpiecznego gazu w postaci dźwiękowej.
Działanie programu zostało zaprezentowane na poniższym wideo: