Wstęp
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.
W celu dobrania odpowiednich rezystorów należy podstawić dane do wzoru:
W naszym przypadku jeden rezystor został zastąpiony fotorezystorem.
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
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.
Podsumowanie
Czego się nauczyliśmy w tym artykule
- co to jest dzielnik napięcia
- jak odczytać napięcie w Arduino
- jak i do czego służy fotorezystor