Fotootpornik

Fotootpornik (LDR) mijenja otpor sa svjetlom: koliko, djelilo napona za Arduino, izbor otpornika i program koji pali svjetlo u mraku.

Nekoliko fotootpornika s dvije nožice, raspoređenih u luku, a stolna lampa obasjava polovicu njih

Što je fotootpornik?

Fotootpornik je otpornik čiji se otpor mijenja sa svjetlom:

  • više svjetla ⇒ manji otpor, pa struja lakše teče;
  • manje svjetla ⇒ veći otpor, pa struja teže teče.

Često ga zovemo i LDR, od engleskog light dependent resistor, otpornik ovisan o svjetlu. Nije važno kako ga okreneš, jer nema plusa ni minusa, kao ni običan otpornik.

Fotootpornik odozgo: okrugla pločica sa smeđom vijugavom crtom između dva siva metalna dijela. U sredini isti fotootpornik sa strane, na dvije nožice. Desno njegov simbol: pravokutnik otpornika s dvije strelice svjetla koje pokazuju prema njemu

Na vrhu fotootpornika vidi se vijugava crta. To je tanki sloj tvari koja se zove kadmijev sulfid. U mraku ona slabo vodi struju. Kad na nju padne svjetlo, ono u njoj oslobodi nosioce naboja, pa vodi bolje. Sivi dijelovi s obje strane crte metalni su i spojeni s nožicama. Crta je vijugava da bi bila što dulja i što šira, pa je fotootpornik osjetljiviji na svjetlo.

Na simbolu fotootpornika dvije strelice pokazuju svjetlo koje pada na otpornik.

Koliko mu se mijenja otpor?

Mnogo. Svjetlo se mjeri u luksima (lx). U osvijetljenoj učionici je oko 300 do 500 lx, vani za oblačna dana nekoliko tisuća, a na suncu i više od 50 000 lx. Graf pokazuje otpor fotootpornika GL5528 kakav koristimo:

Otpor fotootpornika u ovisnosti o svjetlu, od 0,1 do 10 000 luksa. Obje osi rastu u koracima po deset puta. Otpor pada ravnomjerno: označene točke su oko 60 kΩ pri 1 lx, 15 kΩ pri 10 lx, 3,8 kΩ pri 100 lx i 950 Ω pri 1000 lx

SvjetloOtpor
1 lx (sumrak)oko 60 kΩ
10 lx (slabo osvijetljena soba)oko 15 kΩ
100 lx (soba sa svjetlom)oko 3,8 kΩ
1000 lx (pokraj prozora po danu)oko 950 Ω

Na objema osima svaka oznaka je deset puta veća od prethodne. Tako na jednom grafu stanu i jako i slabo svjetlo. Kad je posve mračno, otpor naraste na više od 1 MΩ.

Brojevi su za jedan model. Dva fotootpornika iste vrste mogu se razlikovati i dvostruko, pa svaki prvo izmjerimo, na primjer multimetrom na mjerenju otpora.

Gdje ga koristimo?

  • Ulična rasvjeta se sama upali kad padne mrak, a mnoge noćne lampice u utičnici rade isto.
  • Na Arduino radionici fotootpornik upoznajemo u lekciji Arduino - korak po korak: najprije s tranzistorom pali LED-icu u mraku, a zatim svjetlo čita Arduino.
  • Micro:bit nema fotootpornik, ali svjetlo mjeri svojim LED-icama. Blok light level daje broj od 0 (mrak) do 255 (jako svjetlo).

Fotootpornik na Arduino radionici

Od ovog mjesta stranica je za Arduino radionicu.

Djelilo napona

Arduino ne mjeri otpor, nego napon. Fotootpornik zato spajamo u djelilo napona, s još jednim otpornikom:

Shema: otpornik od 10 kΩ od 5V do točke A0, a fotootpornik od A0 do GND. Plava strelica pokazuje napon U na fotootporniku
Fotootpornik je između A0 i GND, kao u lekciji Arduino - korak po korak. Napon na A0 je:
\[ U = 5\ \text{V} \cdot \frac{R_{LDR}}{R_{LDR} + 10\ \text{k}\Omega} \]
Pri 10 lx fotootpornik ima 15 kΩ, pa je U = 5 V · 15 / 25 = 3,0 V, a analogRead(A0) daje 614. Kad se smrači, otpor fotootpornika raste i napon raste prema 5 V. Kad je svjetlije, napon pada prema 0 V.

Zamijeniš li im mjesta, tako da je otpornik prema GND, a fotootpornik prema 5 V, sve se obrne: tada je napon velik na svjetlu. Oba su spoja dobra, samo program mora znati koji je.

Koji otpornik uz fotootpornik?

Graf pokazuje napon na A0 za otpornik od 1 kΩ, 10 kΩ i 100 kΩ:

Napon na A0 u ovisnosti o svjetlu za tri otpornika. Svaka krivulja pada od 5 V prema 0 V, a najstrmija je u točki gdje je napon 2,5 V: za 100 kΩ pri oko 0,4 lx, za 10 kΩ pri oko 20 lx, a za 1 kΩ pri oko 900 lx
Djelilo najbolje razlikuje svjetlo tamo gdje je krivulja najstrmija. To je u točki gdje fotootpornik ima isti otpor kao otpornik, a napon je 2,5 V:

  • 100 kΩ razlikuje noćne razine svjetla, ispod 1 lx;
  • 10 kΩ razlikuje sumrak i slabo osvijetljenu sobu, oko 20 lx;
  • 1 kΩ razlikuje dnevno svjetlo, oko 900 lx. U mraku i u sobi s njim je napon gotovo 5 V.

Otpornik zato biramo prema svjetlu koje nas zanima. U lekciji Arduino - korak po korak umjesto stalnog otpornika je potenciometar, pa granicu namještamo okretanjem.

Program: svjetlo koje se pali u mraku

Program čita A0 i pali ugrađenu LED-icu Arduina kad se smrači:

// C++
const int senzor = A0;                 // djelilo napona: 10 kΩ prema 5V, fotootpornik prema GND
const int PRAG_TAMNO = 650;            // iznad ovoga je tamno: upali LED-icu
const int PRAG_SVIJETLO = 550;         // ispod ovoga je svijetlo: ugasi LED-icu

bool tamno = false;                    // je li LED-ica sada upaljena

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int ocitano = analogRead(senzor);    // 0 do 1023: što je tamnije, to je broj veći
  float napon = ocitano * 5.0 / 1023;  // isti broj u voltima

  if (!tamno && ocitano > PRAG_TAMNO) {
    tamno = true;                      // smračilo se
  } else if (tamno && ocitano < PRAG_SVIJETLO) {
    tamno = false;                     // razdanilo se
  }

  if (tamno) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }

  Serial.print(ocitano);
  Serial.print("  ");
  Serial.print(napon);
  Serial.println(" V");
  delay(200);
}

Zašto dvije granice? S jednom granicom, recimo 600, LED-ica bi u sumraku treperila. Kad je svjetlo baš oko granice, broj skače malo iznad i malo ispod nje, pa bi se LED-ica stalno palila i gasila. S dvije granice LED-ica se upali kad broj prijeđe 650 (oko 8 lx), a ugasi tek kad padne ispod 550 (oko 15 lx). Između njih ostaje kakva je bila. Isto rade Hallov senzor i ulična rasvjeta, koja se ne pali i gasi svaki put kad oblak prekrije sunce.

Otvori Serial Monitor i prekrij fotootpornik dlanom, pa ga osvijetli svjetiljkom mobitela. Koji broj daje u tvojoj učionici? Granice namjesti prema svojim brojevima.

Fotootpornik je spor

Kad se svjetlo naglo promijeni, fotootporniku treba nekoliko desetaka milisekundi da promijeni otpor. Za sobno svjetlo to nije važno. Kuglica flipera zaklanja zraku svjetla samo desetak milisekundi, pa je fotootpornik ne bi primijetio. Za to su infracrveni senzori, koji reagiraju za manje od milisekunde.

Zašto ih je sve manje?

Kadmij u fotootporniku je otrovan. Pravila Europske unije (RoHS) ograničavaju ga u novim uređajima, pa tvornice umjesto fotootpornika sve češće koriste fototranzistore i fotodiode, koji su i brži. Neki moduli, kao BH1750, svjetlo mjere sami i Arduinu javljaju broj luksa preko I2C-a. Fotootpornik u ruci nije opasan, ali ga nikad ne bacamo u kućni otpad, nego s elektroničkim otpadom.

Što smo naučili?

  • Fotootpornik (LDR) ima manji otpor kad je svjetlije, a veći kad je tamnije. Nema plusa ni minusa.
  • Otpor se mijenja mnogo: od više od 1 MΩ u mraku do stotinjak Ω na suncu.
  • Arduino mjeri napon, pa fotootpornik spajamo u djelilo napona s otpornikom.
  • Otpornik uz fotootpornik biramo tako da ima otpor kakav fotootpornik ima pri svjetlu koje nas zanima.
  • Dvije granice sprječavaju treperenje oko granice. Fotootpornik je spor, pa za brze promjene koristimo infracrvene senzore.

Mali kviz

1. Što se događa s otporom fotootpornika kad ga prekriješ dlanom?
Otpor raste, jer na fotootpornik pada manje svjetla.
2. Zašto fotootpornik ne spajamo na Arduino sam, nego s još jednim otpornikom?
Arduino mjeri napon, a ne otpor. Fotootpornik i otpornik čine djelilo napona, u kojem napon na A0 ovisi o otporu fotootpornika.
3. Fotootpornik je između A0 i GND, a 10 kΩ između 5V i A0. Ima li A0 veći napon u mraku ili na svjetlu?
U mraku. Tada fotootpornik ima velik otpor, pa na njemu ostaje veći dio od 5 V.
4. Fotootpornik pri 10 lx ima 15 kΩ. Koliki je napon na A0 s otpornikom od 10 kΩ?
U = 5 V · 15 kΩ / (15 kΩ + 10 kΩ) = 3 V. analogRead(A0) daje oko 614.
5. Želiš da robot prepozna razliku između sobe i sunčanog dvorišta. Koji otpornik uzimaš: 1 kΩ, 10 kΩ ili 100 kΩ?
1 kΩ. Najosjetljiviji je pri oko 900 lx, a to je jako dnevno svjetlo. S njim je napon u sobi (300 lx) oko 3,3 V, a na suncu oko 0,4 V. S 10 kΩ napon je već u sobi oko 0,8 V, pa je razlika mnogo manja, a sa 100 kΩ gotovo nikakva.
6. Zašto program ima dvije granice, 650 i 550, a ne jednu?
Oko jedne granice broj skače malo iznad i malo ispod nje, pa bi LED-ica treperila. S dvije granice LED-ica se upali iznad 650, a ugasi tek ispod 550.