Lekce 8
Fotorezistor

Úvod

Fotorezistor je proměnný rezistor, jehož odpor je závislý na míře jeho osvětlení. Odpor fotorezistoru se snižuje s rostoucí intenzitou dopadajícího světla, takže jej můžeme využít pro měření intenzity světla nebo osvětlení. Stejně tak fotorezistor můžeme využít při stavbě světlocitlivého detektoru, který se aktivuje světlem či tmou.

Použité komponenty

  • modul Arduino
  • USB kabel
  • fotorezistor
  • rezistor (10 kΩ)
  • 8× LED
  • 8× rezistor (220 Ω)
  • nepájivé pole
  • vodiče pro nepájivé pole

Princip

Jak bylo uvedeno v úvodu, odpor fotorezistoru se mění na základě intenzity dopadajícího světla. Když se intenzita tohoto světla zvýší, odpor se sníží a naopak. V tomto experimentu zapojíme fotorezistor společně s pevným rezistorem tak, abychom vytvořili tzv. dělič napětí. Podobné zapojení jsme kupříkladu viděli při použití potenciometru nebo ještě uvidíme u detektoru plamene. Díky změně odporu fotorezistoru se bude měnit napětí na analogovém pinu A0. Toto napětí budeme načítat vestaveným AD převodníkem modulu Arduino. Pro zobrazení změny velikosti vstupního napětí na fotorezistoru, které odpovídá míře osvětlení, použijeme výstup na osmici LED. Čím větší bude intenzita světla, tím více LED se rozsvítí. Při dosažení maximální intenzity světla, se rozsvítí všechny LED. V případě nízké úrovně světla se nerozsvítí nic.

Jelikož vstupní interval načtených hodnotu potřebujeme rozdělit do osmi stupňů, které budou rozsvěcet patřičné LED, můžeme buď použít systém několika podmínek, ale zde lépe využijeme příkazový blok mapování zadané hodnoty na předem stanovený interval (více v popisu kódu). Využití tohoto příkazového bloku se velmi často využívá nejen pro převod vstupní hodnoty analogových vstupů (interval 0–1023) na „užitečný“ rozsah.


Postup experimentu

Krok 1: Sestavíme si obvod podle následujícího obrázku nebo schématu. Fotorezistor zapojíme k napájecímu napětí +5 V a k pinu analogovému pinu A0, který přes rezistor 10 kΩ připojíme k zemi GND. LED zapojíme katodou (kratší vývod) k zemi GND a anodou (delší vývod) přes rezistor 220 Ω k digitálním pinům 29 modulu Arduino.

Blokové schéma

Blokove schema

Elektronické schéma

Elektronicke schema

Krok 2: V prostředí mBlock sestavíme následující program.


ikona vysvetleni Vysvětlení kódu

V první části jsou jednotlivé piny s připojenými LED nastaveny na nízkou hodnotu (LOW), čímž jsou nejen všechny LED zhasnuty, ale zároveň deklarovány příslušné digitální piny do režimu digitálních výstupů. Po tomto kroku je již možné se na tyto výstupy odkazovat z hodnot proměnných (vysvětleno v předešlé lekci: LED tekoucí potok).

V hlavní nekonečné smyčce „opakuj stále“ je nedříve načten analogový vstup A0 do proměnné sensorValue. Proměnná sensorValue je nadále „přemapována“ na osmistupňovou hodnotu (0–7), která je potřeba rozsvícení daných LED. Tato hodnota je uložena do proměnné ledLevel. Všimněme si, že hodnoty sensorValue nejsou mapovány od nuly (viz fialový blok „mapovat“), ale až od hodnoty 300. Důvod nalezneme v elektronickém schématu. Zatímco v jedné z předchozích lekcí potenciometr reguloval vstupní napětí na vstupu A0 v rozmezí 0–5 V, zde je minimální hodnota dána maximálním odporem fotorezistoru a zároveň pevným rezistorem 10 kΩ zapojeným proti zemi GND.

Proměnná led je využita pro postupné rozsvěcení LED. V cyklu, který se opakuje 8×, je postupně zvyšována proměnná led od 0 do 7. Podmínka testuje, zda je proměnná led (adresa aktuální LED) vyšší/nižší než hodnota proměnná ledLevel (přemapovaná hodnota vstupu). Pokud je hodnota proměnné led nižší, dojde k rozsvícení LED nastavením daného pinu na vysokou hodnotu HIGH, jinak je LED zhasnuta nízkou úrovní LOW. Tím dojde k efektu rozsvěcení LED stupnice podle osvícení fotorezistoru.

Tip:
Kdybychom chtěli v tomto kódu snížit počet proměnných, mohli bychom vypustit proměnnou sensorValue tím, že bychom příkazový blok načtení analogové hodnoty pinu A0 rovnou vložili do bloku „mapování“ – viz následující ukázka:
blok mapovani v prostredi mBlock

A když už optimalizujeme kód, mohli bychom udělat další úpravu. Nemapovat vstup na interval 0–7, ale na rozsah 2–9. Tím pádem by hodnoty ze senzoru rovnou odpovídaly hodnotám odpovídajícím číslům pinů jednotlivých LED. Proměnná led by tak v podmínce také musela odpovídat pinům a nikoliv pořadí LED. Ale to není problém – před cyklem osminásobného opakování prostě proměnnou led nastavíme na hodnotu 2 (číslo pinu nejnižší LED). Tím pádem si ušetříme přičítání dvojky v příkazech ovládání výstupů s LED.
Celkové upravený kód by pak mohl vypadat následujícím způsobem:
program v prostredi mBlock - verze 2
Program lze stáhnout z:
http://mBlock.fyzika.net/zdrojove-kody/lekce-08/08-Fotorezistor-ver2.mblock.

Krok 3: Zkompilujeme kód a nahrajeme do modulu Arduino tlačítkem tlacitko nahrat.

Krok 4: Postupně budeme měnit intenzitu osvícení fotorezistoru a měli bychom sledovat, jak se LED postupně rozsvěcí. Čím více posvítíme na fotorezistor, tím více větší počet LED se rozsvítí. Jakmile fotorezistor zatemníme, všechny LED zhasnou.

Pohled na experiment

Poznámka:
Kromě výše uvedeného experimentu můžeme vyměnit fotorezistor za mikrofon a pozorovat, jak nám budou LED signalizovat sílu zvuku. Čím větší bude síla zvuku, tím více LED se rozsvítí.