sobota, 20 lutego 2016

[22] Arduino - Czujnik opadów

Ten post będzie zawierał opis programu pozwalającego na zastosowanie czujnika opadów YL-83. Czujnik składa się z dwóch elementów próbówki oraz samego czujnika.


Rys. 1. Czujnik opadów YL-83


Parametry czujnika


  • Napięcie zasilania 5V
  • Wyjście cyfrowe
  • Wyjście analogowe
  • Potencjometr pozwalający na regulowanie czułości
  • Maksymalna obciążalność prądowa wyjścia cyfrowego wynosi 100mA
  • Dwie diody, jedna sygnalizuje podłączenie do zasilania, druga natomiast wykrycie opadów


Podłączenie


  • VCC - 5V Arduino
  • GND - GND Arduino
  • A0 - Pin A0 Arduino, lub inny pin analogowy
  • D0 - Pin 5 Arduino, lub inny pin cyfrowy


Wyjście analogowe pozwala na odczyt zmierzonej wartości opadów. Wartość odczytanego napięcia należy odpowiednio zmapować funkcją w celu poprawnego odczytania parametru. W dalszej części zostanie pokazany dokładny sposób odczytania parametru z pinu analogowego.

Wyjście cyfrowe natomiast zmienia stan z wysokiego na niski po wykryciu opadów. Stopień wyzwalania można wyregulować potencjometrem.


Program 1

Pierwszy program będzie bardzo prosty, jego zadaniem będzie tylko sprawdzanie czy stan na pinie cyfrowym uległ zmianie, czyli czy wystąpiły opady.

const int PinD0 = 5;
int wartosc = 0;
 
void setup() 
{
  //Komunikacja poprzez monitor portu szeregowego
  Serial.begin(9600);
  //Ustawienie pinu jako wejście
  pinMode(PinD0, INPUT);
}
 
void loop() 
{
  //odczytanie wartości
  wartosc = digitalRead(PinD0);
 
  if(wartosc = LOW)
  {
    Serial.println("Wykryto opady");
  }
  delay(3000);
}


Program 2


Drugi program będzie odczytywał otrzymaną wartość z układu poprzez pin analogowy.

int wartoscwejsc = 0;
int wartoscprzetwo = 0;
 
void setup() 
{
  //Włączenie portu szeregowego
  Serial.begin(9600);
}
 
void loop() 
{
  //Odczytanie wartosci z pinu analogowego
  wartoscwejsc = analogRead(A0);
  //Mapowanie wartosci na wartosc od 0 do 100 reprezentująca
  //wartosc procentowa
  wartoscprzetwo = map(wartoscwejsc, 1023, 0, 0, 100);
 
  Serial.println(wartoscwejsc);
  delay(3000);
}


Program 3


Ten program jest delikatną wariacją dotyczącą poprzedniego, pozwala on na oszczędzenie czujnika, jak i na zmniejszenie poboru prądu. Wykonuje się to poprzez podłączenie zasilania czujnika do jednego z pinów cyfrowych, który co określony interwał czasowy włącza czujnik, odczytuje wartość a następnie go wyłącza. 

Wartość okresu do ponownego odczytania zrealizowana została za pomocą funkcji delay, która jest mało precyzyjna ale do tego typu pomiarów w zupełności wystarczy. Dane z czujnika można spokojnie odczytać co 1, 2, 3 czy nawet 10 minut. 

const int PinWej = 5;
const int PinZasil = 6;
int wartoscwejsc = 0;
int wartoscprzetwo = 0;
 
void setup() 
{
  //Włączenie portu szeregowego
  Serial.begin(9600);
 
  //Pin odpowiedzialny za podanie zasilania na czujnik
  pinMode(PinZasil, OUTPUT);
}
 
void loop() 
{
  //Wlaczenie czujnika
  digitalWrite(PinZasil, HIGH);
 
  //Małe opóźnienie na czas włączenia czujnika
  delay(200);
 
  //Odczytanie wartosci z pinu analogowego
  wartoscwejsc = analogRead(A0);
 
  //Mapowanie wartosci na wartosc od 0 do 100 reprezentująca
  //wartosc procentowa
  wartoscprzetwo = map(wartoscwejsc, 1023, 0, 0, 100);
 
  //Wylaczenie czujnika
  digitalWrite(PinZasil, LOW);
 
  //Wypisanie wartości
  Serial.println(wartoscwejsc);
  //Czas w milisekundach, odczyt co około 5 minut
  delay(300000);
}