Elektronika i elektrotechnika

Fotorezystor w Arduino – jak podłączyć czujnik światła i odczytywać pomiary

Spis treści
Fotorezystor w Arduino – jak podłączyć czujnik światła i odczytywać pomiary

Fotorezystor można łatwo wykorzystać w projektach z Arduino jako analogowy czujnik światła. Wystarczy zbudować prosty dzielnik napięcia z dodatkowym rezystorem, a następnie odczytywać wyniki z wejścia analogowego za pomocą funkcji analogRead(). Dzięki temu Arduino może reagować na zmianę oświetlenia, na przykład włączać diodę LED, przekaźnik lub inne elementy wykonawcze.

Czym jest fotorezystor i jak działa

Fotorezystor, nazywany także LDR (Light Dependent Resistor), to element elektroniczny, którego rezystancja zależy od ilości padającego światła. W ciemności jego rezystancja jest bardzo wysoka i może wynosić od kilkudziesięciu do kilkuset kiloomów. Pod wpływem silnego światła znacząco maleje.

Zmiana rezystancji pozwala wykorzystać fotorezystor jako prosty analogowy czujnik światła. Po podłączeniu go do Arduino można uzyskać sygnał napięciowy odpowiadający aktualnym warunkom oświetleniowym.

Fotorezystor znajduje zastosowanie między innymi w następujących projektach:

  • czujnikach zmierzchowych,
  • automatycznym sterowaniu oświetleniem,
  • wykrywaniu przerwania wiązki światła,
  • stoperach laserowych,
  • zabezpieczeniach reagujących na zasłonięcie czujnika.

Dlaczego potrzebny jest dzielnik napięcia

Arduino nie mierzy bezpośrednio rezystancji elementów. Może natomiast mierzyć napięcie na wejściach analogowych względem masy. Aby zamienić zmienną rezystancję fotorezystora na napięcie możliwe do odczytania przez mikrokontroler, należy zbudować dzielnik napięcia złożony z fotorezystora i rezystora o stałej wartości.

W typowej konfiguracji fotorezystor znajduje się między zasilaniem 5 V a punktem pomiarowym. Rezystor stały jest natomiast podłączony między punktem pomiarowym a masą GND. Napięcie w punkcie pomiarowym zależy od stosunku rezystancji obu elementów, dlatego zmienia się wraz z natężeniem światła.

Wejścia analogowe Arduino Uno, takie jak A0–A5, mierzą napięcie i zamieniają je na wartość cyfrową. Wbudowany 10-bitowy przetwornik ADC zwraca wyniki od 0 do 1023. Przy domyślnym napięciu odniesienia wynoszącym 5 V wartość 0 odpowiada napięciu zbliżonemu do 0 V, a 1023 — napięciu zbliżonemu do 5 V.

Podstawowy schemat połączenia fotorezystora z Arduino

Najprostszy dzielnik napięcia z fotorezystorem można zbudować w czterech krokach:

  1. Podłącz jedną końcówkę fotorezystora do pinu zasilania 5 V Arduino.
  2. Połącz drugą końcówkę fotorezystora z wejściem analogowym, na przykład A0. Będzie to punkt pomiarowy.
  3. Podłącz rezystor stały, na przykład 10 kΩ, między punktem pomiarowym a masą GND.
  4. Sprawdź, czy wszystkie elementy układu korzystają ze wspólnej masy.

W tej konfiguracji fotorezystor jest górnym elementem dzielnika, a rezystor stały — dolnym. Silniejsze oświetlenie zmniejsza rezystancję fotorezystora, co zazwyczaj zwiększa napięcie w punkcie pomiarowym i wynik funkcji analogRead().

Po zamianie miejscami fotorezystora i rezystora stałego zależność będzie odwrotna: większa ilość światła spowoduje spadek odczytywanej wartości.

Dobór rezystora w dzielniku napięcia

Popularną i uniwersalną wartością rezystora współpracującego z fotorezystorem jest 10 kΩ. W wielu projektach zapewnia ona użyteczny zakres napięcia i pozwala szybko uruchomić czujnik.

Wartość rezystora można dostosować do docelowych warunków pracy:

  • Jasne otoczenie – mniejsza wartość, na przykład 5 kΩ, może poprawić wykorzystanie zakresu pomiarowego przy intensywnym świetle;
  • Warunki uniwersalne – rezystor 10 kΩ jest dobrym punktem wyjścia dla większości projektów edukacyjnych;
  • Ciemne otoczenie – większa wartość, na przykład 20–50 kΩ, może ułatwić rozróżnianie zmian oświetlenia przy niskim poziomie światła.

Najlepszą czułość w wybranym zakresie uzyskuje się zwykle wtedy, gdy wartość rezystora stałego jest zbliżona do rezystancji fotorezystora w interesujących warunkach oświetleniowych. W praktyce warto zacząć od 10 kΩ, sprawdzić odczyty w miejscu pracy czujnika i w razie potrzeby zmienić rezystor.

Podłączenie fotorezystora na płytce stykowej

Arduino Uno i fotorezystor można połączyć na klasycznej płytce stykowej w następujący sposób:

  1. Podłącz Arduino do komputera kablem USB i sprawdź, czy na pinie 5V jest dostępne zasilanie.
  2. Umieść fotorezystor na płytce stykowej tak, aby jego nóżki znajdowały się w dwóch różnych rzędach pól.
  3. Podłącz jedną nóżkę fotorezystora do linii zasilania połączonej z pinem 5V Arduino.
  4. Połącz drugą nóżkę fotorezystora z wejściem analogowym A0. To połączenie będzie punktem pomiarowym.
  5. W tym samym rzędzie co punkt pomiarowy umieść jedną nóżkę rezystora 10 kΩ.
  6. Drugą nóżkę rezystora podłącz do linii masy połączonej z pinem GND Arduino.
  7. Upewnij się, że linia masy płytki stykowej jest połączona z pinem GND Arduino.
  8. Sprawdź cały układ: fotorezystor powinien znajdować się między 5 V a A0, natomiast rezystor między A0 a GND.

Brak wspólnej masy lub pozostawienie wejścia analogowego bez prawidłowego połączenia może powodować niestabilne i przypadkowe wyniki. Po sprawdzeniu przewodów układ jest gotowy do wykonywania pomiarów.

Moduł czujnika światła z trzema przewodami

Zamiast pojedynczego fotorezystora można zastosować gotowy moduł czujnika światła, na przykład KY-018. Taki moduł zawiera już dzielnik napięcia i udostępnia gotowy sygnał analogowy, zazwyczaj oznaczony symbolem S.

Typowy moduł należy połączyć z Arduino w następujący sposób:

  • Sygnał – pin S podłącz do wejścia analogowego, na przykład A0;
  • Zasilanie – pin + lub VCC podłącz do pinu 5V Arduino;
  • Masa – pin lub GND podłącz do pinu GND Arduino.

Gotowy moduł upraszcza montaż, ponieważ wymaga podłączenia jedynie zasilania, masy i sygnału analogowego. Przed uruchomieniem należy jednak sprawdzić kolejność wyprowadzeń oraz dopuszczalne napięcie zasilania podane przez producenta. Rozmieszczenie pinów może różnić się zależnie od modelu modułu.

Odczyt wartości z fotorezystora

Do odczytywania sygnału z czujnika podłączonego do wejścia analogowego służy funkcja analogRead(). Jeśli punkt pomiarowy znajduje się na pinie A0, podstawowy program dla Arduino Uno może wyglądać tak:

const int ldrPin = A0;
int ldrValue = 0;

void setup() {
Serial.begin(9600);
}

void loop() {
ldrValue = analogRead(ldrPin);

Serial.print("Pomiar swiatla = ");
Serial.println(ldrValue);

delay(500);
}

Program wykonuje pomiar co 500 ms i wyświetla wynik w monitorze portu szeregowego. Dzięki temu można sprawdzić, jakie wartości odpowiadają rzeczywistym warunkom oświetleniowym.

W konfiguracji, w której fotorezystor znajduje się między 5 V a punktem pomiarowym, można orientacyjnie uzyskać następujące wyniki:

  • Jasne światło – około 600–1023;
  • Umiarkowane oświetlenie – około 300–600;
  • Ciemność – około 0–300.

Podane zakresy są wyłącznie orientacyjne i nie powinny być traktowane jako uniwersalne wartości progowe. Wynik zależy od modelu fotorezystora, wartości rezystora stałego, napięcia odniesienia, konfiguracji dzielnika oraz warunków otoczenia.

Sterowanie diodą LED lub przekaźnikiem

Jednym z najczęstszych zastosowań fotorezystora jest automatyczne włączanie urządzenia, gdy poziom światła spadnie poniżej ustalonego progu. Arduino Uno ma wbudowaną diodę LED połączoną z pinem D13, dlatego można ją wykorzystać do pierwszych testów.

Przykładowy program włączający diodę po wykryciu ciemności wygląda następująco:

const int ldrPin = A0;
const int ledPin = 13;
const int threshold = 300;

void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}

void loop() {
int ldrValue = analogRead(ldrPin);

if (ldrValue < threshold) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}

delay(200);
}

Wartość zapisaną w zmiennej threshold należy dopasować do wyników uzyskiwanych przez konkretny układ. Jeżeli odczyt maleje przy silniejszym oświetleniu, trzeba zamienić operator < na > albo zmienić kolejność elementów w dzielniku napięcia.

W podobny sposób można sterować modułem przekaźnikowym i zbudować prosty włącznik zmierzchowy. Przekaźnika nie należy zasilać bezpośrednio z pinu cyfrowego Arduino. Trzeba zastosować odpowiedni moduł wyposażony w układ sterujący i zabezpieczenia.

Urządzeń zasilanych napięciem sieciowym nie wolno podłączać bezpośrednio do Arduino. Do sterowania instalacją 230 V należy używać właściwie dobranych, izolowanych modułów oraz przestrzegać zasad bezpieczeństwa. Prace przy napięciu sieciowym powinna wykonywać osoba z odpowiednimi kwalifikacjami.

Kalibracja czujnika i dobór progu

Aby prawidłowo dobrać próg zmierzchu, należy najpierw sprawdzić wyniki pomiarów w rzeczywistym miejscu pracy czujnika. Kalibrację można przeprowadzić w następujących krokach:

  1. Uruchom program odczytujący analogRead(A0) i obserwuj wyniki w monitorze portu szeregowego.
  2. Zapisz wartości uzyskiwane przy pełnym oświetleniu pomieszczenia lub w ciągu dnia.
  3. Zasłoń fotorezystor albo wyłącz oświetlenie i zapisz wartości uzyskiwane w ciemności.
  4. Wybierz próg znajdujący się pomiędzy zarejestrowanymi zakresami. Jeśli w ciemności odczyty wynoszą 150–250, a przy świetle 600–800, dobrym punktem początkowym może być 300–350.
  5. Wpisz wybraną wartość do zmiennej threshold i przetestuj działanie układu o różnych porach dnia.
  6. Skoryguj próg, jeśli urządzenie włącza się lub wyłącza zbyt wcześnie.

Kalibracja w docelowym miejscu montażu jest dokładniejsza niż korzystanie ze sztywnych wartości teoretycznych. Na wyniki wpływają między innymi położenie czujnika, światło sztuczne, cienie, odbicia oraz zastosowana obudowa.

Jak zapobiec migotaniu przy wartości progowej

Jeżeli wynik pomiaru oscyluje w pobliżu ustalonego progu, dioda lub przekaźnik mogą szybko przełączać się między stanami. Problem można ograniczyć przez uśrednianie kolejnych pomiarów albo zastosowanie histerezy.

Histereza wykorzystuje dwa oddzielne progi: jeden do włączania, a drugi do wyłączania. Przykładowo urządzenie może włączać się po spadku wyniku poniżej 300, ale wyłączać dopiero po jego wzroście powyżej 350. Dzięki temu niewielkie wahania odczytów nie powodują ciągłego przełączania wyjścia.

Praktyczne zastosowania fotorezystora

Fotorezystor współpracujący z Arduino można wykorzystać w wielu projektach elektroniki i automatyki:

  • Automatyczne oświetlenie domu lub ogrodu – uruchamiane po wykryciu zmierzchu;
  • Proste zabezpieczenia – reagujące na zasłonięcie czujnika lub przerwanie wiązki światła;
  • Stoper laserowy – rejestrujący moment przerwania wiązki lasera skierowanej na fotorezystor;
  • Monitor natężenia światła – zapisujący zmiany odczytów w ciągu dnia;
  • Projekty edukacyjne – ułatwiające naukę wejść analogowych, dzielników napięcia i sterowania wyjściami Arduino.

Dzięki prostej konstrukcji, niskiej cenie i łatwej obsłudze fotorezystor jest jednym z najpopularniejszych czujników w zestawach startowych z Arduino.

Typowe błędy i dobre praktyki

Podczas budowy układu warto przestrzegać kilku podstawowych zasad:

  • Zawsze stosuj dzielnik napięcia – sam fotorezystor nie zapewni prawidłowego pomiaru, ponieważ Arduino mierzy napięcie, a nie rezystancję;
  • Zapewnij wspólną masę – Arduino, czujnik, rezystor i pozostałe moduły muszą mieć wspólne połączenie GND;
  • Nie pozostawiaj wejścia analogowego niepodłączonego – takie wejście może przyjmować przypadkowe wartości i reagować na zakłócenia;
  • Dopasuj rezystor do warunków pracy – przetestuj wartości takie jak 5 kΩ, 10 kΩ lub 20 kΩ, aby uzyskać użyteczny zakres pomiarowy;
  • Uśredniaj pomiary – średnia z kilku kolejnych odczytów ogranicza wpływ szumów i krótkotrwałych zmian oświetlenia;
  • Stosuj histerezę – dwa różne progi zapobiegają migotaniu diody i szybkiemu przełączaniu przekaźnika;
  • Sprawdzaj oznaczenia gotowych modułów – kolejność pinów VCC, GND i S może różnić się zależnie od producenta;
  • Ograniczaj prąd zewnętrznych diod LED – każda dioda wymaga właściwie dobranego rezystora szeregowego;
  • Nie zasilaj przekaźnika bezpośrednio z pinu Arduino – użyj modułu z tranzystorem, diodą zabezpieczającą i, jeśli jest potrzebne, oddzielnym zasilaniem.