18. Detektor stmievania pomocou Arduino

18. Detektor stmievania pomocou Arduino

Cieľom cvičenia je zostrojiť a naprogramovať detektor stmievania, ktorý dokáže rozpoznať pokles intenzity svetla v čase, nie iba stav „svetlo / tma“.

Žiak sa naučí:

  • pracovať s analógovým senzorom,
  • čítať hodnoty zo senzora pomocou Arduino,
  • rozlišovať medzi okamžitou hodnotou a zmenou v čase,
  • pochopiť princíp jednoduchého trendového detektora.

🧰 Použité súčiastky

  • Arduino UNO
  • Modul fotorezistora (LDR – Photoresistor sensor) zo sady Keyestudio KS0068
  • Prepojovacie vodiče
  • (voliteľne) LED dióda – alebo vstavaná LED na pine 13

🔍 Použitý senzor

Použitý je modul s fotorezistorom (LDR), ktorý mení svoj odpor v závislosti od intenzity dopadajúceho svetla.

Modul obsahuje:

  • fotorezistor (LDR),
  • komparátor LM393,
  • analógový výstup AO,
  • digitálny výstup DO (v tomto cvičení nepoužívame).

🔌 Zapojenie

Zapojenie vykonajte podľa tabuľky:

Modul LDRArduino UNO
VCC5V
GNDGND
AOA0

Poznámka: Digitálny výstup DO zatiaľ nezapájame.


🧪 Úloha 1: Meranie intenzity svetla

Najskôr si overíme, že senzor funguje a správne reaguje na zmenu svetla.

Program – čítanie analógovej hodnoty

const int LDR = A0;

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

void loop() {
  int light = analogRead(LDR);
  Serial.println(light);
  delay(200);
}

Postup:

  1. Nahraj program do Arduino.
  2. Otvor Serial Monitor.
  3. Sleduj hodnoty pri:
    • zakrytí senzora rukou,
    • osvetlení mobilom,
    • postupnom tienení.

Pozorovanie:

  • viac svetla → vyššia hodnota,
  • menej svetla → nižšia hodnota.

🧠 Úloha 2: Detekcia stmievania

V tejto úlohe budeme sledovať zmenu hodnoty v čase a rozpoznať, že svetlo klesá.

Program – detektor stmievania

const int LDR = A0;
const int LED = 13;

int lastValue = 0;
unsigned long lastTime = 0;

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  lastValue = analogRead(LDR);
  lastTime = millis();
}

void loop() {
  int current = analogRead(LDR);
  unsigned long now = millis();

  int delta = current - lastValue;

  if (delta < -30 && (now - lastTime) < 1000) {
    digitalWrite(LED, HIGH);
    Serial.println("STMIAVANIE");
  } else {
    digitalWrite(LED, LOW);
  }

  lastValue = current;
  lastTime = now;

  delay(200);
}

💡 Vysvetlenie princípu

Program:

  • porovnáva aktuálnu hodnotu s predchádzajúcou hodnotou,
  • sleduje, či hodnota klesá dostatočne rýchlo,
  • reaguje iba na zmenu, nie na samotnú tmu.

➡️ LED sa rozsvieti len vtedy, keď dochádza k stmievania.


🧠 Dôležitá myšlienka

Detektor stmievania nerozhoduje podľa jednej hodnoty, ale podľa správania signálu v čase.


⭐ Rozšírenie (pre rýchlejších žiakov)

  • Použiť výstup DO a nastaviť prah pomocou trimra.
  • Vypísať hodnoty do Serial Plotter a zobraziť graf.
  • Porovnať detekciu stmievania s jednoduchým prahovým detektorom.

❓ Kontrolné otázky

  1. Aký je rozdiel medzi analógovým a digitálnym výstupom senzora?
  2. Prečo nestačí sledovať iba jednu hodnotu svetla?
  3. Kde sa podobný princíp používa v technickej praxi?

1) Schéma zapojenia (LDR modul → Arduino UNO)

Spoje:

  • VCC (modul)5V (Arduino)
  • GND (modul)GND (Arduino)
  • AO (modul)A0 (Arduino)

Voliteľne (indikácia na breadboarde):

  • LED + rezistor (220–330 Ω):
    • D8 (Arduino)rezistor 220–330 Ωanóda LED (dlhá noha)
    • katóda LED (krátka noha)GND
      (môžeš použiť aj vstavanú LED na D13 a tento krok vynechať)

2) ASCII „schéma“ pre ovy.sk (ľahko kopírovateľná)

Arduino UNO            Breadboard / Modul LDR
-----------           --------------------------
5V   ----------------> VCC  (LDR modul)
GND  ----------------> GND  (LDR modul)
A0   ----------------> AO   (LDR modul)

(Voliteľne LED)
D8   --> [220Ω] --> |>| --> GND
                  LED

3) Postup zapojenia na breadboard (krok za krokom)

A) Napájacie lišty breadboardu

  1. Arduino 5V pripoj na + lištu breadboardu (červená).
  2. Arduino GND pripoj na – lištu breadboardu (modrá).

B) LDR modul

  1. Zasuň LDR modul do breadboardu tak, aby tri piny boli v troch rôznych riadkoch (nie v jednej spojenej lište).
  2. Prepoj:
    • pin VCC z modulu na + lištu,
    • pin GND z modulu na – lištu,
    • pin AO z modulu na riadok, z ktorého ide vodič do A0 na Arduine.

C) Voliteľná LED na breadboarde

  1. Vlož LED do breadboardu (dlhá noha = anóda).
  2. Daj rezistor 220–330 Ω do série:
    • D8 → rezistor → anóda LED
    • katóda LED → – lišta (GND)

4) Najčastejšie chyby (aby si ich hneď odchytil)

  • Modul je zasunutý tak, že piny sú v jednej rade → potom je VCC spojené s GND a nič nefunguje.
  • Zamenené AO/DO → musí byť AO do A0.
  • LED otočená opačne → nesvieti (dlhá noha má ísť cez rezistor na pin).

5) Krátky test (bez zmeny kódu)

Po zapojení spusti predchádzajúci program a v Serial Monitore:

  • zakry senzor → hodnota klesne,
  • zasvieť mobilom → hodnota stúpne.

Pridaj komentár