Oko Arduino

Mierzemy natężenie światła, poznając podstawowe pojęcia programowania Arduino

Wstęp

Zmontowany układ na płytce prototypowej

Jak wykryć zmierzch, bądź czy w pokoju zapalone jest wieczorem światło? Do tego celu można użyć fotorezystora, który w połączeniu z Arduino może stworzyć prosty czujnik zmierzchowy.

Dzielnik napięcia

W układzie został zastosowany dzielnik napięcia. Jest to układ, który dzieli napięcie wejściowe, a napięcie wyjściowe jest częścią napięcia wejściowego. Co to oznacza dla nas? Otóż jeśli nasz mikrokontroler może mierzyć napięcia z zakresu 0-5V, a chcemy np. zmierzyć napięcie akumulatora w samochodzie taki dzielnik trzeba zastosować. W przeciwnym wypadku uszkodzimy piny mikrokontrolera.

Schemat dzielnika napięcia

W celu dobrania odpowiednich rezystorów należy podstawić dane do wzoru:

Wzór na dobranie rezystorów dzielnika napięcia

W naszym przypadku jeden rezystor został zastąpiony fotorezystorem.

Schemat układu

Fotorezystor to element światłoczuły, który pod wpływem zmiany jasności zmienia swoją rezystancję. Idealnie nadaje się jako czujnik np. zmierzchu.

Drugi opornik ma rezystancję 10k (kolor brązowy czarny pomarańczowy).

Kod

// pin z którego odczytujemy wartość napięcia
int photoPin = 0;
// odczytana wartość
int val = 0;

//początkowa konfiguracja
void setup()
{
  pinMode(photoPin, INPUT); // ustawienie pinu jako wejscie
  Serial.begin(57600);
}

void loop()
{
  //odczytujemy i normalizujemy do przedziału 0-7
  val = analogRead(photoPin)/128;
  for (int i=0;i<=val;i++) {
    Serial.print(".");
  }
  Serial.println();
  delay(90);
}

Program (jak prawie każdy na Arduino) składa się z części przygotowywującej układ do działania (setup) oraz głównej pętli (loop) wykonującej się póki prąd w Arduino...

W głównej pętli mierzymy napięcie.

val = analogRead(photoPin);

Docelowo Arduino mierzy napięcie i podaje wynik jako liczbę od 0 do 1023. Jeśli chcielibyśmy poznać jakie napięcie odczytało Arduino musielibyśmy przemnożyć odczytaną wartość "val" przez 0.0049. Zanim jednak otrzymamt wynik musimy dodać zmienną "float", która obsłuży nam wynik naszego mnożenia (zmienna float obsługuje liczby od 3.4028235E+38 do -3.4028235E+38, natomiast zmienna int tylko z zakresu 0-255). Czyli w przypadku jeśli chcielibyśmy odczytać napięcie to musielbyśmy w funckji loop podać poniższy kod

  val = analogRead(photoPin);
  float voltage= val*0.0049;
  Serial.print("voltage");
  Serial.println();
  delay(90);

Dla naszego przykładu zmianę oświetlenia chcemy przedstawić w postaci kropek. Jedna kropka to brak światła, natomiast 7 kropek to pełne oświetlenie fotorezystora. W tym celu musimy przekształcić odczytaną wartość w zakres liczb od 0 do 7 (jak wspomnieliśmy wyżej Arduino odczytuje napięcie jako liczbę od 0 1023, więc po podzieleniu na 128 i zaokrągleniu w dół dostajemy wynik od 0 do 7) i tyle ile wyszło, tyle kropek wyświetlamy.

//odczytujemy i normalizujemy do przedziału 0-7
  val = analogRead(photoPin)/128;
  for (int i=0;i<=val;i++) {
    Serial.print(".");
  }
  Serial.println();
  delay(90);

Działanie układu

Arduino IDE w trakcie pracy naszego programu

W trakcie pracy zakrywamy ręką fotorezystor, zmieniając jego rezystancję a w rezultacie napięcie odczytywane przez Arduino na PIN 0. Ilość kropek jest proporcjonalna do odczytanego napięcia.

Serial port monitor w trakcie pracy naszego programu

Podsumowanie

Czego się nauczyliśmy w tym artykule