LinkedIn YouTube Facebook
Szukaj

Wstecz
SoM / SBC

[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:

Autor: Patryk Mądry