Skip to main content

2.3 Analogno čitanje fotootpornika

Cilj ovog primjera je pokazati ti kako mjeriti jačinu svjetla pomoću fotootpornika (LDR) spojenog na jedan od analognih ulaznih pinova na NULA MINI pločici.
Naučit ćeš kako koristiti funkciju analogRead() za čitanje kontinuiranog raspona vrijednosti umjesto običnih UKLJUČENO/ISKLJUČENO signala.
Ovo je tvoj prvi korak u svijet analognog ulaza, nužan za senzore kao što su senzori svjetla, temperature ili zvuka.

U ovoj dokumentaciji naučit ćeš:

  • Kako se analogni ulazi razlikuju od digitalnih.
  • Kako spojiti fotootpornik na NULA MINI pločicu.
  • Kako čitati analogne vrijednosti pomoću analogRead().
  • Kako prikazati vrijednosti jačine svjetla u Serial Monitoru.

Potreban hardver:

  • 1x Soldered NULA MINI pločica
  • 1x Breadboard
  • 1x Fotootpornik (LDR)
  • 1x otpornik od 10 kΩ
  • 4x Jumper žice
  • 1x USB-C kabel
ℹ️
Za razliku od primjera s tipkom, ovome otpornik jest potreban. Onaj od 10 kΩ nije tu da bilo što zaštiti. On je polovica samog mjernog kruga, kako je objašnjeno ispod.

Spajanje komponenti

Prati sedam koraka ispod. Svaka fotografija snimljena je s istog položaja, pa je možeš usporediti s prethodnom i vidjeti točno što se promijenilo.

ℹ️
Sve u ovom primjeru živi na f–j strani breadboarda, jer su sva tri pina koja mu trebaju na tom rubu pločice: IO5 u redu 28, 3V3 u redu 29 i GND u redu 30. Pločica prekriva većinu tih redova, pa su krajnje rupice (j28, j29, j30) one do kojih možeš doći.

1. Umetni NULA MINI pločicu na breadboard

ℹ️
Ovaj korak pretpostavlja da znaš kako je breadboard spojen iznutra i što su njegove naponske vodilice (power rails). Za uvod pogledaj stranicu dokumentacije Osnove breadboarda.

Utisni pločicu u jedan kraj breadboarda tako da njezina dva reda pinova sjednu s obje strane središnjeg kanala, s čipom okrenutim prema dolje.

NULA MINI pločica postavljena na breadboard
Korak 1: pločica postavljena na breadboard

2. Izvedi napajanje i masu

Prvo dvije jumper žice, da krug ima između čega sjediti.

  • Iz j30 (GND) do plave vodilice. Ta vodilica postaje tvoja linija mase.
  • Iz j29 (3V3) gore u red 14.
Žica mase na negativnu vodilicu i 3V3 izveden u red 14
Korak 2: GND na − vodilicu, i 3V3 izveden u red 14

3. Dodaj fotootpornik

LDR premošćuje red 14, u koji sada dolazi 3.3 V, i red 11.

Fotootpornik postavljen između redova 14 i 11
Korak 3: fotootpornik premošćuje redove 14 i 11
ℹ️
Fotootpornik nema polaritet: bilo koja nožica može ići na bilo koju stranu. To je samo otpornik čija se vrijednost mijenja sa svjetlom.

4. Dodaj otpornik od 10 kΩ

Otpornik nastavlja lanac prema dolje: iz reda 11 u red 9.

Otpornik od 10k dodan između redova 11 i 9
Korak 4: otpornik od 10 kΩ premošćuje redove 11 i 9
⚠️
Pobrini se da uzmeš otpornik od 10 kΩ, a ne onaj od 330 Ω koji se koristi s LED-icama. Prstenovi za 10 kΩ su smeđi-crni-narančasti, a za 330 Ω narančasti-narančasti-smeđi. S pogrešnim ćeš i dalje dobivati vrijednosti, ali će se jedva mijenjati kad se svjetlo promijeni.

5. Spoji otpornik na masu

Jedna jumper žica iz reda 9 do plave vodilice, koja je već spojena na GND.

Jumper žica spaja otpornik na negativnu vodilicu
Korak 5: donji kraj otpornika spojen na plavu − vodilicu

Lanac je sada potpun: 3.3 V → LDR → 10 kΩ → GND. Struja teče kroz oba dijela serijski.

6. Zahvati sredinu pomoću IO5

Sada samo mjerenje. Povuci jumper žicu iz j28 (IO5) u red 11, red koji dijele donja nožica LDR-a i gornji izvod otpornika.

IO5 spojen na spoj između LDR-a i otpornika
Korak 6: IO5 zahvaća spoj u redu 11
ℹ️
Red 11 je cijela svrha ovog kruga. On je središnja točka između dva otpora, i njegov se napon mijenja kako se mijenja otpor LDR-a. To je ono što IO5 mjeri.

7. Spoji pločicu na računalo

Gotov krug napajan preko USB-C
Korak 7: gotov krug, napajan preko USB-C
ℹ️
Redovi iznad samo su oni koje fotografije slučajno koriste. Bilo koji slobodni redovi rade, dokle god LDR i otpornik ostanu serijski između 3.3 V i GND, a IO5 zahvaća red u kojem se spajaju.

Kako radi djelitelj napona

Pločica ne može mjeriti otpor. Može mjeriti samo napon. Fotootpornik mijenja svoj otpor sa svjetlom, pa sam za sebe pločici ne daje ništa za čitanje.

Spajanje s fiksnim otpornikom to rješava. Ta dva otpornika u seriji tvore djelitelj napona, a napon u točki između njih ovisi o odnosu dva otpora:

  • Na jakom svjetlu otpor LDR-a pada, pa zadržava manje od 3.3 V za sebe i napon na IO5 raste.
  • U tami otpor LDR-a raste, zadržava veći dio napona, a vrijednost na IO5 pada.

Zato je fiksni otpornik važan koliko i senzor: bez njega nema središnje točke koja bi se mogla mjeriti.


Razumijevanje analognog ulaza

Za razliku od digitalnih pinova koji čitaju samo HIGH (1) ili LOW (0), analogni pinovi mogu mjeriti kontinuirani raspon napona između 0V i 3.3V.
ADC (Analog-to-Digital Converter) unutar NULA MINI pretvara te napone u brojeve između 0 i 4095, jer koristi 12-bitni ADC.

Uvjeti osvjetljenjaPribližna vrijednost
Jako svjetlo3000–4095
Srednje svjetlo1500–3000
Tama0–1500

Kod

/*
Ovo je varijabla kojoj dodjeljujemo broj pina na koji smo spojili izlaz fotootpornika.
NULA MINI pločica za čitanje promjenjivih napona koristi pinove sposobne za analogni ulaz (ADC pinove).
U ovom primjeru koristit ćemo IO5, koji podržava analogni ulaz.
*/
const int LDR_PIN = 5; // Analogni ulazni pin za fotootpornik

/*
Ova varijabla čuvat će sirovu analognu vrijednost pročitanu sa senzora.
Budući da NULA pločica koristi 12-bitni ADC, vraćena vrijednost bit će u rasponu od 0 do 4095.
*/
int lightValue = 0;

void setup() {

/*
Serial.begin() pokreće serijsku komunikaciju između pločice i računala.
Koristimo ga za prikaz izmjerenih vrijednosti u Serial Monitoru.
*/
Serial.begin(115200);

/*
analogReadResolution() definira koliko se bitova koristi za ADC vrijednosti.
NULA MINI podržava 12-bitnu rezoluciju, što znači da analogRead() vraća vrijednosti od 0 do 4095.
*/
analogReadResolution(12);

/*
Ispiši početnu poruku da potvrdimo da program radi.
*/
Serial.println("Cover or shine light on the sensor to see value changes...");
}

void loop() {

/*
analogRead() čita napon na zadanom analognom pinu i pretvara ga u digitalni broj.
Što je jačina svjetla veća, to je otpor fotootpornika manji, a izmjereni napon veći.
*/
lightValue = analogRead(LDR_PIN);

/*
Ispiši izmjerenu vrijednost u Serial Monitor.
*/
Serial.print("Light level: ");
Serial.println(lightValue);

/*
Dodaj kratku pauzu da se vrijednosti lakše promatraju.
*/
delay(500);
}

Što bi trebao vidjeti

Prenesi skicu, pa otvori Tools → Serial Monitor i postavi baud rate na 115200. Nova vrijednost pojavljuje se dvaput u sekundi.

Sada stavi ruku preko senzora i gledaj kako brojevi padaju.

Ruka zasjenjuje fotootpornik
Zasjenjivanje senzora rukom dovoljno je da se vrijednost pomakne
Serial Monitor prikazuje vrijednosti razine svjetla koje padaju kako se senzor zasjenjuje
Vrijednost pada s oko 3135 na oko 1900 kako se senzor zasjenjuje
ℹ️
Tvoji brojevi neće se točno poklapati s ovima. Ovise o svjetlu u tvojoj prostoriji i o samom fotootporniku. Važno je da se vrijednost miče kada se svjetlo mijenja. Ako stoji na fiksnom broju bez obzira što radiš, provjeri da IO5 stvarno zahvaća red spoja, a ne jedan od vanjskih redova.

Cijeli primjer

Pogledaj cijeli kod primjera na linku ispod:

2.3_Photoresistor_Analog_Read.ino

Primjer koji pokazuje kako čitati analogne vrijednosti s fotootpornika i prikazati razine svjetla u Serial Monitoru.