niedziela, 9 lutego 2025

#7 Eksperymenty z fotorezystorem

 

Eksperymenty z fotorezystorem i Arduino

Fotorezystory to proste, ale niezwykle przydatne elementy elektroniczne, które pozwalają na wykrywanie natężenia światła. W tym wpisie podzielę się moim doświadczeniem w pracy z fotorezystorem podłączonym do Arduino, analizą odczytów ADC oraz sposobami dostosowania układu do naszych potrzeb.




1. Co będzie potrzebne?

Aby przeprowadzić testy z fotorezystorem i Arduino, potrzebujesz:

  • Fotorezystora (np. 20kΩ – 30kΩ )

  • Rezystora 10kΩ (lub innych wartości do testów)

  • Płytki Arduino (np. Arduino Uno)

  • Przewodów połączeniowych

2. Jak to działa?

Fotorezystor zmienia swoją rezystancję w zależności od ilości światła, które na niego pada. Im więcej światła, tym niższa rezystancja; w ciemności rezystancja wzrasta. Arduino nie może bezpośrednio odczytać rezystancji, dlatego stosujemy dzielnik napięcia.

W naszym układzie:

  1. Fotorezystor – jedna nóżka do 5V, druga do A0 i do rezystora 10kΩ.

  2. Rezystor 10kΩ – jeden koniec do GND, drugi do A0.

Dzięki temu Arduino odczytuje napięcie między fotorezystorem a rezystorem, które zmienia się w zależności od natężenia światła.

3. Schemat podłączenia


Opis schematu podłączenia Arduino, fotorezystora i diody LED

Schemat przedstawia sposób podłączenia fotorezystora i czerwonej diody LED do Arduino Uno. Układ działa w ten sposób, że fotorezystor mierzy natężenie światła, a dioda LED może zostać zaświecona w zależności od jego poziomu.

Fotorezystor pełni funkcję czujnika światła. Jest częścią dzielnika napięcia z rezystorem 10kΩ, dzięki czemu napięcie na pinie A0 zmienia się w zależności od oświetlenia.

Połączenia:

  • Jedna nóżka fotorezystora5V Arduino
  • Druga nóżka fotorezystoraWejście analogowe A0 oraz do jednego końca rezystora 10kΩ
  • Drugi koniec rezystora 10kΩGND

Dioda LED jest podłączona do pinu D13 Arduino i może być sterowana w programie.
Do ograniczenia prądu użyto rezystora 220Ω.

  • Anoda (+) diody LEDPin D13 Arduino
  • Katoda (-) diody LEDPrzez rezystor 220Ω do GND

4. Kod programu

Oto kod, który wgrany do Arduino pozwala włączać i wyłączać diodę LED za pośrednictwem fotorezystora.


5. Wyjaśnienie kodu:

 Definicje zmiennych

  • ldrPin – Pin analogowy A0 używany do odczytu wartości z fotorezystora.
  • ledPin – Pin cyfrowy D13, do którego podłączona jest dioda LED.
  • threshold – Próg jasności (600 to wartość ADC), poniżej którego dioda się zapala. Można dostosować do warunków.

Konfiguracja w setup()
  • pinMode(ledPin, OUTPUT); – Określa, że pin D13 będzie sterował diodą LED
  • Serial.begin(9600); – Umożliwia podgląd wartości odczytów w Monitorze szeregowym Arduino IDE.

Główna pętla loop()
  • analogRead(ldrPin); – Pobiera wartość napięcia na dzielniku napięcia (0-1023).
  • Serial.print("Odczytana wartość: "); – Wyświetla tekst w Monitorze szeregowym.
  • Serial.println(ldrValue); – Wyświetla rzeczywistą wartość ADC.

Warunek sterujący diodą
  • Jeśli wartość ldrValue jest mniejsza niż threshold (ciemno), włącza diodę LED (digitalWrite(ledPin, HIGH);).
  • Jeśli ldrValue jest większa niż threshold (jasno), dioda zostaje wyłączona (digitalWrite(ledPin, LOW);).

Opóźnienie dla stabilności odczytów
  • delay(500) - Zapobiega zbyt częstym odczytom i skokowym zmianom – co 500 ms program ponawia odczyt.

6. Kod programu z histerezą:

Powyższy kod zawiera histerezę, która wprowadza tzw. "martwą strefę" (dead time), zapobiegając częstemu włączaniu i wyłączaniu diody LED. Dzięki temu, gdy wartości odczytane z fotorezystora balansują wokół progu jasności, unikamy migotania i niestabilnej pracy diody w zakresie przejściowym.


7. Wyjaśnienie kodu:


  • Jeśli wartość ADC jest mniejsza niż lowerThreshold (ciemno) i dioda jest wyłączona (ledState == false),
    to:
    • Włącz LED (digitalWrite(ledPin, HIGH);).
    • Zmień stan flagi ledState na true, aby zapamiętać, że dioda jest włączona.

Zapobiega to ponownemu ustawianiu stanu LED w każdej pętli loop().

  • Jeśli wartość ADC jest większa niż upperThreshold (jasno) i dioda jest włączona (ledState == true), 
to: 
    • Wyłącz LED (digitalWrite(ledPin, LOW);). 
    • Zmień stan flagi ledState na false, aby zapamiętać, że dioda jest wyłączona. 

Dioda nie wyłączy się natychmiast, jeśli wartość oscyluje wokół progu!

Do czego można wykorzystać fotorezystor?
  • Inteligentny system podlewania roślin
  • Słoneczny tracker – panel podążający za słońcem
  • Automatyczne oświetlenie nocne
  • Inteligentne rolety
  • Automatyczna przesłona do kamery
  • Światła adaptacyjne w samochodzie RC
  • Czujnik obecności światła – ochrona roślin domowych
  • Zamek na światło – kod świetlny
  • Automatyczna lupa podświetlana
  • Kamizelka LED dla rowerzysty, która zwiększa swoją jasność w zależności od warunków oświetleniowych.



2 komentarze: