Skip to content
2025.11.07.
  • F
  • X
  • LinkedIn
  • YouTube
  • Instagram
  • GitHub
TavIR

TavIR

Mikrokontroller világ

  • TavIR Tudástár
  • TavIR WebShop
  • TavIR Fórum
  • Hírek
  • Könyvek
    • Egyszerű elektronika – Kezdőlap
    • ESP8266/ESP32
    • Tippek
      • Tippek-trükkök (AVR)
      • Tippek-trükkök (ESP8266/ESP32)
  • +Gyorstippek
  • +Mélyvíz
  • +Témakereső
  • Kapcsolat
  • Főoldal
  • Cikk
  • Fényérzékelés fotoellenállással és környezeti megvilágításszabályzás
  • Cikk
  • Gyorstippek

Fényérzékelés fotoellenállással és környezeti megvilágításszabályzás

Robert 2025.01.22.
Egy modern okosotthon külső világítása Arduino alapú automatikus fényvezérléssel, amely érzékelők és mikrokontroller segítségével működik.

Az Arduino és a fotoellenállás (LDR) segítségével egyszerűen és hatékonyan mérhetjük a környezeti fényviszonyokat. Ez a cikk részletesen bemutatja, hogyan építhetsz egy fényérzékelő rendszert, amely automatikusan kapcsolja a világítást, figyelembe véve a hiszterézis és a fényerő-szabályozás alapelveit. Ha dugdosós panelnél gyorsabb és stabilabb megoldásra van szükséged – a fotoellenállás modul kerül képbe – amely megkönnyíti az Arduino-val való munkát. Részletes áramköri rajzokkal, Arduino programkódokkal és magyarázatokkal vezetlek végig az automatikus világításvezérlés lépésein.

A cikkben egy fejlett világításvezérlő rendszert is bemutatok, amely nem csupán a fényviszonyokhoz igazodik, hanem fokozatosan növeli a LED fényerejét és a Serial Plotter segítségével valós időben is elemezhető. És még 1-2 megoldási trükk is terítékre kerül.

Tartalomjegyzék

Toggle
  • Fotoellenállás modul használata – az egyszerűbb és gyorsabb megoldás
    • A fotoellenállás modul előnyei
    • A fotoellenállás modul bekötése Arduino laphoz
  • Fényérzékelés Arduinoval – Automatikus esti világítás fényérzékelővel
    • Áramköri összeállítás
    • Arduino programkód – Fényerő vezérlése félhomályban és sötétben
  • Egyszerű ki-/bekapcsolásra redukált program
    • Mikor és miért lehet hasznos a ki-bekapcsolós világításvezérlés?
    • De hogyan működik a ki-bekapcsolós világításvezérlő?
  • PIR bővítéssel készített világítás
    • …mi az a PIR mozgásérzékelő és hogyan működik?
    • Működési logika
    • Miért hasznos ez a rendszer?
  • Összegzés
    • Milyen további fejlesztési lehetőségek vannak?

Fotoellenállás modul használata – az egyszerűbb és gyorsabb megoldás

A fotoellenállás (LDR) egy rendkívül hasznos eszköz a fényintenzitás mérésére, de a hagyományos áramköri összeállítás – amely különálló fotoellenállást és járulékos ellenállást igényel – olykor időigényes és hibalehetőségekkel erősen terhelt megoldásra vezet. Ha gyorsabb, kompaktabb és könnyebben kezelhető megoldást keresel, akkor léteznek fotoellenállás modulok, amelyek egy egyszerűbb csatlakozási lehetőséget kínálnak. Ezek gyárilag tartalmazzák a fotoellenállást és a szükséges kiegészítő ellenállást valamint egy nyáklapra szerelt csatlakozósort, amelynek segítségével gyorsan és precízen illeszthetők az Arduino rendszerhez. A használatukkal elkerülhető a különálló alkatrészekkel való bajlódás, így különösen ajánlottak gyors prototípus-fejlesztéshez, oktatási célokra, vagy ha megbízható és stabil megoldásra van szükség.

Fényérzékelő modul, amely egy fotoellenállást (LDR) és egy ellenállást tartalmaz, három kivezetéssel az áramkörhöz való csatlakoztatáshoz.
Fényérzékelő modul, amely egy fotoellenállást (LDR) és egy ellenállást tartalmaz, három kivezetéssel az áramkörhöz való csatlakoztatáshoz. (KY-018 típusszám)

A fotoellenállás modul előnyei

  1. Gyors és egyszerű csatlakozás: A modul három kivezetéssel rendelkezik – GND (GND – föld) / VCC (+ – tápfeszültség) /  OUT (S – kimenet) –, amelyeket közvetlenül az Arduino megfelelő csatlakozóihoz lehet kötni, megkönnyítve a bekötést és az áramköri tervezést.
  2. Stabil és megbízható működés: A gyárilag kalibrált ellenállások és precíz forrasztási pontok biztosítják a pontos működést és minimalizálják az áramköri zajokat vagy bekötési hibákat.
  3. Időtakarékosság: Mivel az összes szükséges alkatrész egyetlen modulon található, a hagyományos vezetékes vagy breadboard-os összeállítással szemben jelentős időt takaríthatsz meg.
  4. Hibamentes megoldás kezdők számára: Az előre gyártott modulok kiküszöbölik az alkatrészválasztásból vagy pontatlan/helytelen bekötésből adódó hibalehetőségeket.

A fotoellenállás modul bekötése Arduino laphoz

A modul használata rendkívül egyszerű, mindössze három vezeték szükséges a csatlakoztatásához:

  1. VCC (tápfeszültség): Kösd az Arduino 5V kimenetére.
  2. GND (földelés): Csatlakoztasd az Arduino GND lábához.
  3. OUT (kimenet): Kösd az Arduino A1 analóg bemenetére, ahol az érzékelt fényintenzitás alapján feszültségmérés történik.
Egy Arduino Uno mikrokontrollerhez csatlakoztatott fényérzékelő modul, amely egy fotoellenállást (LDR) tartalmaz. A kábelek a tápellátást (5V és GND) és az analóg bemenetet (A1) kötik össze az érzékelő modullal.
Egy Arduino Uno mikrokontrollerhez csatlakoztatott fényérzékelő modul, amely egy fotoellenállást (LDR) tartalmaz. A kábelek a tápellátást (5V és GND) és az analóg bemenetet (A1) kötik össze az érzékelő modullal.

Az előző cikkben (ami a →Fényérzékelés fotoellenállással oldalon található) – az ott leírt programkódok ezzel a moduláris fotoellenállással is használhatóak.

Fényérzékelés Arduinoval – Automatikus esti világítás fényérzékelővel

Az intelligens világításvezérlés egy rendkívül hasznos alkalmazása a fényérzékelésnek. Ebben a fejezetben megvalósítunk egy olyan megoldást, amely egy fotoellenállás segítségével vezérli egy LED fényerejét az esti és félhomályos órákban. A rendszer a következő funkciókat fogja ellátni:

  • Automatikus világítás kapcsolás: A LED bekapcsol, ha a környezet fényszintje egy beállított érték alá csökken.
  • Hiszterézis alkalmazása: Megakadályozza a villogást a határérték közelében.
  • Fényerő fokozatos növelése: A környezet sötétségi szintjétől függően fokozatosan növekszik a LED fényereje.
  • Paraméterezhetőség: A küszöbértékek és az érzékenység a kód elején módosíthatóak.

Áramköri összeállítás

A projekt elkészítéséhez a következőkre lesz szükséged:

Arduino UNO alappanel→ Arduino Uno alaplap: Ez fogja kezelni az érzékelőt.
Egy piros színű Keyes LED modul, amely egy nagy fényerejű fehér LED-et tartalmaz, valamint két csatlakozót és néhány SMD alkatrészt.→ LED modul (3W fehér): A megvilágítást adó részegység
Fényérzékelő modul fotoellenállással és három kivezetéssel.→ Fotoellenállás modul: A szenzorkészletek részeként is elérhető.
Egy háromeres szervo hosszabbító kábel, amely piros, fekete és sárga vezetékekből áll, mindkét végén hárompines csatlakozóval.→ Dupont összekötő kábelek (apa-apa/apa-anya/anya-anya).
Fehér prototípus panel (breadboard) piros és kék tápsínek jelölésével→ Breadboard – a könnyű csatlakoztatáshoz.

Bekötési lépések

  1. Ha a közvetlen kábelezés nm járható út, akkor a BreadBoard is használható a könnyebb megépítéshez.
  2. A fotoellenállás-modult csatlakoztasd az Arduino 5V és GND tápfeszültségéhez.
  3. A fotoellenállás modul szenzorkimenetét (az LDR és ellenállásközös pontja) csatlakoztasd az A1 analóg bemenetre.
  4. A LED modult csatlakoztasd az Arduino 5V és GND tápfeszültségéhez
  5. A LED modul vezérlését kösd az Arduino egyik PWM kimenetére (itt: D9 kivezetés).
Egy Arduino Uno mikrokontroller kapcsolási rajza, amelyhez egy fotoellenállás és egy LED modul csatlakozik különböző színű vezetékekkel.
Egy Arduino Uno mikrokontroller kapcsolási rajza, amelyhez egy fotoellenállás és egy LED modul csatlakozik különböző színű vezetékekkel.

Tipp: Ha a fotoellenállás modult közvetlenül az A1-S , A2-5V, A3-GND kivezetésekre helyezzük, akkor az A2 és A3 kivezetéseket egyszerű digitális kimenetekként a GND és a +5V feszültségre állíthatjuk – így megúszható a kábelezés és a modul tápellátását biztosítjuk.

Arduino programkód – Fényerő vezérlése félhomályban és sötétben

Az alábbi program automatikusan vezérli a LED fényerejét a környezeti fényviszonyoknak megfelelően.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// --- Beállítható paraméterek ---
#define DARK_THRESHOLD 230      // A sötétben mért fotoellenállás analóg értéke (PWM = 255)
#define TURN_OFF_THRESHOLD 840  // A világosban mért fotoellenállás értéke (PWM = 0)
#define LED_PIN 9               // LED kimeneti láb (PWM)
#define LDR_PIN A1              // Fotóellenállás bemeneti láb
#define DELAY_TIME 100          // Mérési ciklus késleltetés (ms)
 
void setup() {
  pinMode(LED_PIN, OUTPUT);     // LED kimenet beállítása
  Serial.begin(9600);           // Soros kommunikáció indítása
}
 
void loop() {
  int lightValue = analogRead(LDR_PIN);  // Fényintenzitás beolvasása
  int brightness = 0;           // LED alapértelmezett fényereje
 
  // A LED fényerejének skálázása a sötét és világos határértékek között
  brightness = map(lightValue, TURN_OFF_THRESHOLD, DARK_THRESHOLD, 0, 255);
  brightness = constrain(brightness, 0, 255);  // Határok között tartás
 
  analogWrite(LED_PIN, brightness);  // LED fényerejének beállítása
 
  // Soros monitor kiírás a teszteléshez
  Serial.print("Feny:"); Serial.print(lightValue);
  Serial.print("\tLED:"); Serial.print(brightness);
  Serial.print("\tMin:"); Serial.print(TURN_OFF_THRESHOLD);
  Serial.print("\tMax:"); Serial.println(DARK_THRESHOLD);
 
  delay(DELAY_TIME);            // Mérési ciklus késleltetése
}

Rövid működési összefoglaló

1. Beolvassa a fényintenzitást a fotoellenállásról (analogRead()).
2. A LED fényerejét beállítja a mért fényérték alapján:

  • Sötétben (DARK_THRESHOLD) → LED teljes fényerő (PWM = 255)
  • Világosban (TURN_OFF_THRESHOLD) → LED kikapcsol (PWM = 0)
  • Köztes értékeknél → A LED fényereje arányosan változik.

3. A map() függvény átalakítja az analóg beolvasott értéket 0-255 PWM tartományba.
4. A constrain() biztosítja, hogy a PWM értékek mindig a 0-255 tartományban maradjanak.
5. A LED aktuális fényerejét az analogWrite() állítja be.
6. A soros monitor kiírja az aktuális fényértéket és a LED állapotát.

Tipp: ha a programot feltöltjuk az Arduino lapra, akkor
– letakarva a fényérzékelő ellenállást a soros monitoron leolvashatjuk a minimum analóg értéket (DARK_THRESHOLD)
– elvéve a kezünket és a ellenállást fényt kapva a soros vonalon a határértéket olvashatjuk le, ahol a LED-nek már nem kell világítania (TURN_OFF_THRESHOLD)

Ha a DARK_THRESHOLD és a TURN_OFF_THRESHOLD értékeket ~10-15 értékkel csökkentjük, akkor biztosabb kapcsolási / billenési értékeket állíthatunk be.

A beállított billenési értékek és a mért megvilágításérték és a LED adatai.
A beállított billenési értékek és a mért megvilágításérték és a LED adatai.

A programhoz tartozó adatok vizualizálhatók az Arduino Serial Plotter funkciójával. Ehhez egyszerűen nyisd meg az Eszközök → Soros plotter menüpontot… Az eredmény valami hasonló lesz: ha a fényérzékelőt kitakarod illetve megvilágítod.
Ha a beállítás után a programot újrafordítjuk és feltöltjük, akkor a →Serial Plotter segítségével nagyon jól követhető a program működése.

A nyers adatok grafikonon ábrázolva...
A nyers adatok grafikonon ábrázolva…

Egy Arduino Uno mikrokontroller kapcsolási rajza, amelyhez egy fotoellenállás és egy LED modul csatlakozik különböző színű vezetékekkel.

Egyszerű ki-/bekapcsolásra redukált program

A világításvezérlés egyik legfontosabb kérdése, hogy a rendszer miként reagál a környezeti fényviszonyok változásaira. A mostani cél egy olyan automatizált megoldás, amely sötétben azonnal bekapcsol, viszont világosban nem kapcsol ki rögtön, hanem kivár egy beállított időtartamot, hogy elkerülje a felesleges ki-bekapcsolásokat. Ez a logika különösen hasznos lehet kültéri világítás esetén, ahol egy rövid fényvillanás – például egy autó fényszórója vagy egy felhők közül előbújó napsugár – nem indokolja a lámpák azonnali kikapcsolását. Ugyanakkor a rendszer képes azonnal reagálni a sötétedésre, így a világítás pontosan akkor kapcsol be, amikor arra valóban szükség van.

Mikor és miért lehet hasznos a ki-bekapcsolós világításvezérlés?

Az előző fejezetben bemutatott PWM-alapú fényerőszabályozás olyan helyzetekben hasznos, amikor fokozatos átmenetet szeretnénk elérni a világítás fényerejében. Ez jó megoldás lehet például beltéri hangulatvilágításhoz vagy olyan alkalmazásokhoz, ahol a LED-ek fokozatos halványítása és felerősítése vizuálisan kellemesebb. Ezzel szemben a ki-bekapcsolós megoldás egy egyszerűbb, de sok esetben hatékonyabb világításvezérlési logika. Az alábbi esetekben kifejezetten előnyös:

Kültéri világítás automatizálása

  • A LED azonnal bekapcsol, ha besötétedik – nincs lassú átmenet, azonnali reakció van.
  • Ha a fényviszonyok gyorsan változnak (például egy felhő elhalad a hold előtt, vagy egy autó fényszórója megvilágítja a szenzort), a lámpa nem kapcsol ki rögtön, hanem kivárja, hogy a világosság tartósan fennáll-e.

Biztonsági világítás és vészhelyzeti fények

  • Egy áramszünet vagy hirtelen fényviszony-változás esetén a világítás azonnal aktiválódik.
  • Nem kell attól tartani, hogy egy rövid világos impulzus (például egy mozgás közbeni fényvisszaverődés) kikapcsolja a fényt.

Garázs- és bejárati világítások

  • Ha valaki este beáll az autóval a garázsba, a fény azonnal felkapcsol, így biztosítja a megfelelő látási viszonyokat.
  • A rendszer nem kapcsolja le rögtön a világítást, ha az autó reflektora egy pillanatra megvilágítja a szenzort – ehelyett kivárja, hogy valóban világos marad-e a környezet.

De hogyan működik a ki-bekapcsolós világításvezérlő?

A rendszer működésének alapját – még mindig – egy fotoellenállás (LDR) adja, amely folyamatosan figyeli a környezeti fényviszonyokat.

  1. Ha a mért fényintenzitás egy adott határérték (DARK_THRESHOLD) alá csökken, a LED azonnal bekapcsol.
  2. Ha a mért fényérték egy másik határérték (TURN_OFF_THRESHOLD) fölé emelkedik, akkor a rendszer nem kapcsolja ki azonnal a fényt, hanem indít egy időzítőt.
  3. Ha a világos állapot folyamatosan fennáll egy beállított időtartamig (pl. 5 másodpercig), a LED kikapcsol.
  4. Ha közben a fényérték visszacsökken a sötét tartományba, az időzítő újraindul, és a fény továbbra is égve marad.

A logika célja az, hogy a világítás ne kapcsoljon le egy-egy rövid fényvillanás miatt, hanem csak akkor, ha valóban tartósan világos van.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// --- Beállítható paraméterek ---
#define DARK_THRESHOLD 270         // A sötétben mért fotoellenállás értéke (LED bekapcsolás)
#define TURN_OFF_THRESHOLD 800     // A világosban mért fotoellenállás értéke (LED kikapcsolási küszöb)
#define LED_PIN 9                  // LED vagy relévezérlő kimenet
#define LDR_PIN A1                 // Fotoellenállás bemeneti láb
#define DELAY_TIME 100             // Mérési ciklus késleltetés (ms)
#define LIGHT_STABLE_TIME 5000     // Kikapcsolási idő (5 másodperc világos után)
 
unsigned long lightStartTime = 0;  // A világos környezet kezdő időpontja
bool ledState = false;             // LED állapota (bekapcsolva/kikapcsolva)
 
void setup() {
  pinMode(LED_PIN, OUTPUT);        // LED kimenet beállítása
  Serial.begin(9600);              // Soros kommunikáció indítása
}
 
void loop() {
  int lightValue = analogRead(LDR_PIN);  // Fényintenzitás beolvasása
  
  // Ha sötét van, azonnal kapcsoljon be a LED
  if (lightValue <= DARK_THRESHOLD) {
    ledState = true;               // Bekapcsolás
    lightStartTime = millis();     // Időzítő újraindítása
  }
  
  // Ha világos van, számolja az időt és csak akkor kapcsoljon ki, ha 5 másodpercnél tovább világos
  else if (lightValue >= TURN_OFF_THRESHOLD) {
    if (lightStartTime == 0) {     // Ha először észlel világosságot, jegyezze meg az időpontot
      lightStartTime = millis();
    }
    if (millis() - lightStartTime >= LIGHT_STABLE_TIME) {  // Ha folyamatosan világos 5 másodpercig
      ledState = false;            // Kikapcsolás
    }
  } else {
    lightStartTime = millis();     // Ha a fényviszony változik, időzítő újraindítása
  }
 
  // LED állapotának frissítése
  digitalWrite(LED_PIN, ledState ? HIGH : LOW);
 
  // Soros monitor kiírás a teszteléshez
  Serial.print("Feny:"); Serial.print(lightValue);
  Serial.print("\tLED:"); Serial.print(ledState ? "ON" : "OFF");
  Serial.print("\tMin:"); Serial.print(TURN_OFF_THRESHOLD);
  Serial.print("\tMax:"); Serial.println(DARK_THRESHOLD);
 
  delay(DELAY_TIME);               // Mérési ciklus késleltetése
}

A kód könnyen testre szabható az adott környezet fényviszonyaihoz, és relé segítségével nagyobb teljesítményű fényforrásokat is vezérelhet. Az energiatakarékos működés és a megbízható kapcsolási logika miatt kiválóan alkalmazható kültéri és beltéri világítási rendszerek automatizálására. De ne is álljunk meg ennél a pontnál! Fejlesszük tovább:

Mozgásérzékelővel kombinálható kültéri fényforrások

  • A ki-bekapcsolási logika jól kombinálható egy mozgásérzékelővel, amely akkor aktiválja a világítást, ha valaki közeledik.
  • Ha a környezeti fény megfelelő, a rendszer nem kapcsol feleslegesen.

PIR bővítéssel készített világítás

Az alábbi mintarendszer egy PIR mozgásérzékelővel (SR501) és egy fotoellenállással (LDR) kiegészített világításvezérlő, amely sötétben észlelt mozgás esetén kapcsolja be a LED-et, és mozgás megszűnése után egy meghatározott ideig világítva marad. A világítás nem kapcsol ki rögtön a mozgás megszűnése után, hanem csak késleltetés letelte végén. De …

…mi az a PIR mozgásérzékelő és hogyan működik?

A PIR (Passzív Infravörös) mozgásérzékelő egy olyan eszköz, amely az emberi test által kibocsátott infravörös sugárzást érzékeli, és ezt használja mozgásdetektálásra. Az SR501 típusú PIR szenzor az egyik leggyakrabban alkalmazott változat, amely olcsó, megbízható és egyszerűen használható. A szenzor működése két fő komponensre épül: egy pyroelektromos érzékelőre, amely érzékeli az infravörös sugárzást, valamint egy Fresnel-lencsére, amely a környezetből érkező IR sugarakat a detektorra fókuszálja. Amikor egy ember vagy más hőforrás elhalad a szenzor látóterében, az infravörös sugárzás mintázata megváltozik, ezt a PIR érzékelő észleli, és magas (HIGH) jelszintet küld az Arduino számára. A PIR érzékelők nem aktívan bocsátanak ki jeleket, hanem csak a környezet hősugárzását figyelik, így rendkívül energiatakarékosak. Az SR501 típust gyakran használják biztonsági rendszerekhez, automatikus világításvezérléshez és okosotthon alkalmazásokhoz. A szenzor érzékenysége és az aktiválási idő késleltetése potméterekkel állítható (vagy fixen beállított változat is elérhető), így a felhasználási igényekhez igazítható.

Egy Arduino Uno mikrokontroller áramköri kapcsolási rajza, amelyhez egy PIR mozgásérzékelő és egy fotoellenállás és egy LED modul csatlakozik különböző színű vezetékekkel.
A képen egy Arduino Uno látható, amelyhez egy PIR mozgásérzékelő és egy LED modul és egy megvilágításmérő modul van csatlakoztatva. A kapcsolások különböző színű vezetékekkel történnek a megfelelő tápfeszültség (VCC), föld (GND) és jel (S) vezetékek használatával.

 

Ez a megfigyelő-szenzor különösen hasznos olyan helyzetekben, ahol csak mozgás esetén szeretnénk aktiválni egy rendszert, például világítást, riasztót vagy ajtónyitó mechanizmust. Az Arduino-val való integrációja egyszerű, mindössze egy digitális bemenetre van szükség, amely figyeli a PIR jeleit és a megfelelő reakciót váltja ki. Itt is ezt használjuk ki.

Működési logika

Az előző programunkat egészítjük ki…

  1. Ha besötétedik (DARK_THRESHOLD alatt) és mozgás van a PIR előtt, a LED azonnal bekapcsol.
  2. Ha a PIR mozgást érzékel, a LED végig ég és az időzítés újraindul minden mozgásérzékeléskor.
  3. Ha nincs mozgás és továbbra is sötét van, a LED a PIR utolsó érzékelése után egy meghatározott időtartamig égve marad, majd kikapcsol.
  4. Ha a fényerő eléri a TURN_OFF_THRESHOLD értéket (tartós világos állapot), a LED kikapcsol, és a PIR nem kapcsolja újra a világítást.
  5. A PIR csak sötétben aktív! Ha világos van, a mozgásérzékelés figyelmen kívül marad.

Mindezeket a kódunkba be is építjük (azaz az előzőt kiegészítjük):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// --- Beállítható paraméterek ---
#define DARK_THRESHOLD 270         // A sötétben mért fotoellenállás értéke (LED bekapcsolás)
#define TURN_OFF_THRESHOLD 800     // A világosban mért fotoellenállás értéke (LED kikapcsolási küszöb)
#define LED_PIN 9                  // LED vagy relévezérlő kimenet
#define LDR_PIN A1                 // Fotoellenállás bemeneti láb
#define PIR_PIN 11                 // PIR mozgásérzékelő bemenet (SR501)
#define DELAY_TIME 100             // Mérési ciklus késleltetés (ms)
#define LIGHT_STABLE_TIME 5000     // Kikapcsolási idő világos környezetben (ms) - 5 másodperc
#define PIR_STABLE_TIME 20000      // PIR mozgás utáni LED kikapcsolási idő (4x hosszabb)
 
// Időzítés változók
unsigned long lightStartTime = 0;   // A világos környezet kezdő időpontja
unsigned long motionEndTime = 0;    // Utolsó mozgás érzékelés időpontja
bool ledState = false;              // LED állapota (bekapcsolva/kikapcsolva)
 
void setup() {
  pinMode(LED_PIN, OUTPUT);         // LED kimenet beállítása
  pinMode(PIR_PIN, INPUT);          // PIR mozgásérzékelő bemenet
  Serial.begin(9600);               // Soros kommunikáció indítása
}
 
void loop() {
  int lightValue = analogRead(LDR_PIN);  // Fényintenzitás beolvasása
  bool motionDetected = digitalRead(PIR_PIN); // PIR mozgásérzékelő állapota
 
  // Ha sötét van és mozgás van, azonnal kapcsoljon be a LED
  if (lightValue <= DARK_THRESHOLD && motionDetected) {
    ledState = true;                // LED bekapcsol
    motionEndTime = millis() + PIR_STABLE_TIME; // Utolsó mozgás utáni időzítés
    lightStartTime = millis();      // Fény időzítés újraindítása
  }
 
  // Ha világos van, akkor időzítve kikapcsol
  else if (lightValue >= TURN_OFF_THRESHOLD) {
    if (lightStartTime == 0) {      // Ha először észlel világosságot, jegyezze meg az időpontot
      lightStartTime = millis();
    }
    if (millis() - lightStartTime >= LIGHT_STABLE_TIME) {  // Ha folyamatosan világos van 5 másodpercig
      ledState = false;             // Kikapcsolás
    }
  }
 
  // Ha mozgás megszűnt, de továbbra is sötét van, akkor várakozik a PIR_STABLE_TIME idejéig
  if (!motionDetected && millis() > motionEndTime && lightValue <= DARK_THRESHOLD) {
    ledState = false; // Kikapcsolás mozgás után 4x késleltetéssel
  }
 
  // Ha világos van, akkor a PIR mozgásérzékelést figyelmen kívül hagyja
  if (lightValue >= TURN_OFF_THRESHOLD) {
    motionEndTime = millis(); // Mozgásérzékelés újraindítása
  }
 
  // LED állapotának frissítése
  digitalWrite(LED_PIN, ledState ? HIGH : LOW);
 
  // Soros monitor kiírás a teszteléshez
  Serial.print("Feny: "); Serial.print(lightValue);
  Serial.print("\tPIR: "); Serial.print(motionDetected ? "Mozgás" : "Nincs mozgás");
  Serial.print("\tLED: "); Serial.print(ledState ? "ON" : "OFF");
  Serial.print("\tMin: "); Serial.print(TURN_OFF_THRESHOLD);
  Serial.print("\tMax: "); Serial.println(DARK_THRESHOLD);
 
  delay(DELAY_TIME);                // Mérési ciklus késleltetése
}

És a könnyebb (?) megértéshez a működési logika sem árt – áttekinthetőbben:

FényviszonyMozgás (PIR)LED állapotMegjegyzés
SötétVan mozgásBekapcsolAzonnali reakció
SötétMozgás megszűnikMarad bekapcsolvaPIR utolsó érzékelése után még ég
SötétNincs mozgásKikapcsol késleltetésselPIR után még 4x hosszabb ideig ég
VilágosVan mozgásNem kapcsol beA PIR ilyenkor nem aktív
VilágosNincs mozgásKikapcsol késleltetésselCsak ha stabilan világos
Rövid világos időVan mozgásMarad bekapcsolvaFényingadozás nem kapcsolja le
Sötét és világos gyorsan váltNincs mozgásLED marad égveNem reagál pillanatnyi fényváltozásra

Miért hasznos ez a rendszer?

  • Csak akkor kapcsol be, ha szükséges → Ha világos van, a mozgásérzékelés inaktív.
  • Nem kapcsol ki egy pillanatnyi fényváltozás miatt → Megakadályozza a villogást.
  • Mozgás után késleltetve kapcsol ki → Nem alszik ki rögtön, hanem marad égve.
  • Energiatakarékos → Csak sötétben és mozgás esetén kapcsol be.
  • Könnyen testre szabható → Az érzékelési küszöbök és az időzítés módosíthatók.

Összegzés

A bemutatott Arduino-alapú világításvezérlő rendszer egy egyszerű, de hatékony megoldás a fényviszonyok és a mozgás alapján történő világításvezérlésre. A rendszer egyesíti a fotoellenállás (LDR) és a PIR szenzor előnyeit, biztosítva ezzel az intelligens energiahasználatot és a pontos vezérlést. A projekt könnyen elkészíthető akár kezdők számára is, és egy remek kiindulópont a világításvezérlési rendszerek fejlesztéséhez. A kód egyszerűen módosítható, hogy az adott környezethez igazodjon, és az áramkör könnyen bővíthető további érzékelőkkel vagy vezérlési lehetőségekkel.

Ha szeretnél egy automatizált, intelligens világításvezérlő rendszert építeni az otthonodba vagy a kertedbe, ez a projekt egy kiváló alap!

Milyen további fejlesztési lehetőségek vannak?

Az itt bemutatott rendszerek egyszerűen továbbfejleszthetők és bővíthetők, például:

  • Távoli vezérlés Wi-Fi-n vagy Bluetooth-on keresztül – Egy ESP8266 vagy ESP32 modul segítségével az adatokat akár egy okostelefonra is küldhetjük, és távolról kapcsolhatjuk be vagy ki a világítást.
  • Időzített világításvezérlés – A rendszer kiegészíthető egy RTC (valós idejű óra) modullal, így például csak este 6 után aktiválódik a világítás.
  • Energiafogyasztás optimalizálás – A LED-ek fényereje naplemente után automatikusan növekedhet, majd az éjszaka közepén csökkenhet, hogy még energiatakarékosabb legyen a rendszer.
  • További érzékelők integrálása – Hőmérséklet- és páratartalom-érzékelőkkel kombinálva okos kültéri vagy beltéri világítási rendszert építhetünk.
  • Mozgásérzékelő integrálása – Csak mozgás esetén aktiválja a világítást.
  • Időzítés funkció – Csak bizonyos órákban kapcsoljon be a fény.
  • Wi-Fi vezérlés – Az adatok távoli eléréséhez ESP32 modul használata.
  • LCD kijelző – A fényértékek valós idejű kijelzéséhez.

 

Források:

A cikkhez kapcsolódóan az alábbi hasznos linkeket ajánlom figyelmedbe:

  • Fényérzékelés fotoellenállással [TavIR]
  • Automatikus világításvezérlés Arduino-val [TavIR]
  • AnalogReadSerial – Arduino Tutorial [Arduino.cc]
  • How to Use a PIR Motion Sensor With Arduino [Instructables]

 

Post navigation

Előző Fényérzékelés fotoellenállással
Következő L9110S motorvezérlő és ventilátormodul

Kapcsolódó anyagok

A digitális idő paradoxonja: az óraátállítás árnyoldalai Ködös kertben analóg és digitális óra, köztük egy végtelen jelet formázó fényív, alatta automata locsoló rendszer – az őszi óraátállítás kettőzött időpontját szimbolizálva.
  • Cikk
  • Mélyvíz
  • Tippek

A digitális idő paradoxonja: az óraátállítás árnyoldalai

2025.10.23.
Teker Ed, te tekered? – Az enkóder Illusztrált forgó enkóder modul Arduino fejlesztőkörnyezetben, számítógéppel és elektronikai munkapaddal. Oktatási és DIY elektronikai célokra.
  • Cikk
  • Gyorstippek

Teker Ed, te tekered? – Az enkóder

2025.08.23.
DS1302 trükkök: RAM, írásvédelem, burst mód és csepptöltés (trickle charge) DS1302 RTC modul egy Arduino fejlesztőasztalon, háttérben laptop és prototípus panelek – Arduino DS1302 valós idejű óra interfész bemutató.
  • Cikk
  • Gyorstippek

DS1302 trükkök: RAM, írásvédelem, burst mód és csepptöltés (trickle charge)

2025.08.20.

Hírlevél

Hogy az újdonságokról első kézből értesülj:
→ Feliratkozás a Hírlevélre

Ingyenes tanfolyam

60 nap alatt Arduino - az ingyenes tanfolyam
→ Kattints ide és iratkozz fel!
60 nap alatt Arduino

Szeretnél egy lépéssel a többiek előtt járni?

Ne hagyd ki a legújabb tanfolyamokat, amik még csak most bontogatják szárnyaikat.

Legyél te az első! Tanfolyamok

Alkatrész-tár

→ TavIR WebShop
→ Tanulókészletek

Témakörök

  • Cikk (49)
  • Hír (35)
  • Könyv (34)
    • Egyszerű elektronika tippek (18)
    • ESP8266/ESP32 (1)
    • Mélyvíz (8)
    • Mit ne használjunk Arduino projektekben? (6)
  • Tippek (59)
    • Gyorstippek (20)
    • Tippek-trükkök (AVR) (21)
    • Tippek-trükkök (ESP8266/ESP32) (5)

TavIR WebShop

→ Tovább a TavIR WebShopba
4 csatornás kétirányú jelszintillesztő modul (digitális vonalakhoz, MOSFET)
4 csatornás kétirányú jelszintillesztő modul (digitális vonalakhoz, MOSFET)

Univerzális, 4 csatornás kétirányú jelszintillesztő modul, amely megbízható módon biztosítja a digitális [...]

Mérleg súlymérő cella (500g)
Mérleg súlymérő cella (500g)

A 500 g-os mérleg súlymérő cella egy kis méretű, mégis meglepően pontos terhelésérzékelő, [...]

USB-A - USB-A galvanikus leválasztó (1500V, isolátor, USB 2.0 izolátor, hi-speed/480Mbps)
USB-A - USB-A galvanikus leválasztó (1500V, isolátor, USB 2.0 izolátor, hi-speed/480Mbps)

Az USB-A - USB-A leválasztó a PC védelmét szolgálja, a statikus kisülés [...]

Arduino UNO R4 WiFi (ABX00087) - az eredeti, fejlett Wi‑Fi és Bluetooth funkcionalitású fejlesztőpanel
Arduino UNO R4 WiFi (ABX00087) - az eredeti, fejlett Wi‑Fi és Bluetooth funkcionalitású fejlesztőpanel

Az Arduino UNO R4 WiFi (ABX00087) egy 32‑bites fejlesztőpanel, amely beépített Wi‑Fi és Bluetooth modullal [...]

XKC‑Y25‑T12V érintésmentes folyadékszint‑érzékelő modul, kapacitív működéssel (5–12 V DC)
XKC‑Y25‑T12V érintésmentes folyadékszint‑érzékelő modul, kapacitív működéssel (5–12 V DC)

Az XKC‑Y25‑T12V egy érintkezés nélküli, kapacitív elven működő folyadékszint‑érzékelő, mely ideális zárt, [...]

LiPo akku (902040, 3.7V, 1000mAh)
LiPo akku (902040, 3.7V, 1000mAh)

Ez a 902040 típusú lítium-polimer (LiPo) akkumulátor kompakt megoldást kínál olyan hordozható [...]

12V digitális termosztát modul - beépíthető, tokos kivitelű hőmérséklet-szabályozó (W1209WK/W1209)
12V digitális termosztát modul - beépíthető, tokos kivitelű hőmérséklet-szabályozó (W1209WK/W1209)

A W1209WK digitális termosztát egy kompakt, intelligens hőmérséklet-szabályozó modul 12 V DC [...]

VEML6040 I2C RGBW színmérő modul (IIC)
VEML6040 I2C RGBW színmérő modul (IIC)

A VEML6040 I2C RGBW színmérő modul egy nagy pontosságú, négysávos (R–G–B–W) fényérzékelő, [...]

Elektromágneses lövedék gyorsító (DIY Coil Gun) készlet – Electromagnetic Gun DIY Kit
Elektromágneses lövedék gyorsító (DIY Coil Gun) készlet – Electromagnetic Gun DIY Kit

Ez az Elektromágneses lövedék-gyorsító DIY Készlet (más néven coil gun kit) olyan [...]

USB-A - USB-A galvanikus leválasztó (CH318T, 1500V, USB 2.0 izolátor, full speed (480Mbps), 400mA)
USB-A - USB-A galvanikus leválasztó (CH318T, 1500V, USB 2.0 izolátor, full speed (480Mbps), 400mA)

A CH318T alapú USB 2.0 nagysebességű galvanikus leválasztó modul célja, hogy biztonságos [...]

Akril tok ESP32‑S3 4,3 hüvelykes 800×480 kijelzős fejlesztőpanelhez – LVGL HMI kompatibilis
Akril tok ESP32‑S3 4,3 hüvelykes 800×480 kijelzős fejlesztőpanelhez – LVGL HMI kompatibilis

Ez az akrilház (plexi tok) kifejezetten az ESP32‑S3 alapú, 4,3 hüvelykes, 800×480 [...]

LM35D / LM35DZ lineáris, analóghőmérséklet‑érzékelő modul
LM35D / LM35DZ lineáris, analóghőmérséklet‑érzékelő modul

Ez az LM35D / LM35DZ típusra épülő hőmérséklet‑érzékelő modul egyszerű, megbízható és [...]

Fórum

  • Ami máshova nem besorolható... :: Re: Melyik humanoid robot gyártó lesz a piacvezető 2030-ban?
  • Ami máshova nem besorolható... :: Melyik humanoid robot gyártó lesz a piacvezető 2030-ban?
  • Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei) :: Re: DC servo motor szabalyzo
  • Tovább a TavIR Fórumra...

Címkék

alappanel Arduino Arduino nap Arduino nap 2023 art atmel AVR billentyűzet biztosíték darlington dióda eeprom egyszerű elektronika elem ellenállás ESP Espressif Systems flash Forrasztás ft232 fusebit hang hőmérő i2c i2clcd infravörös ISP JTAG kijelző LCD lm35 megvilágítás microchip MOSFET motor pcb páratartalom Relé RTC telepítés tmp36 tranzisztor Uno Zener óra

Archívum

  • 2025. október (3)
  • 2025. augusztus (3)
  • 2025. július (7)
  • 2025. június (4)
  • 2025. május (6)
  • 2025. április (5)
  • 2025. március (4)
  • 2025. február (1)
  • 2025. január (6)
  • 2024. december (5)
  • 2024. november (5)
  • 2024. október (6)
  • 2024. szeptember (5)
  • 2024. augusztus (4)
  • 2024. július (3)
  • 2024. június (1)
  • 2024. május (3)
  • 2024. március (1)
  • 2024. február (2)
  • 2024. január (1)
  • 2023. december (3)
  • 2023. szeptember (2)
  • 2023. augusztus (6)
  • 2023. július (2)
  • 2023. június (1)
  • 2023. május (1)
  • 2023. április (10)
  • 2023. február (1)
  • 2022. szeptember (2)
  • 2022. július (1)
  • 2022. május (6)
  • 2022. április (1)
  • 2022. március (2)
  • 2022. január (2)
  • 2021. december (1)
  • 2021. november (4)
  • 2021. október (2)
  • 2021. szeptember (1)
  • 2021. július (1)
  • 2021. május (2)
  • 2021. április (1)
  • 2021. március (2)
  • 2020. szeptember (1)

Eddig nem olvasott...

A digitális idő paradoxonja: az óraátállítás árnyoldalai Ködös kertben analóg és digitális óra, köztük egy végtelen jelet formázó fényív, alatta automata locsoló rendszer – az őszi óraátállítás kettőzött időpontját szimbolizálva.
  • Cikk
  • Mélyvíz
  • Tippek

A digitális idő paradoxonja: az óraátállítás árnyoldalai

2025.10.23.
Qualcomm-Arduino: amikor a nyílt hardver találkozik az ipari óriással Közelkép egy Arduino UNO Q mikrokontroller panelről, amelyen jól látható a Qualcomm Dragonwing logó és a nyomtatott áramkörök részletei. AI-alapú beágyazott rendszerekhez és prototípusfejlesztéshez ideális.
  • Hír

Qualcomm-Arduino: amikor a nyílt hardver találkozik az ipari óriással

2025.10.08.
Arduino UNO Q – Az új korszak kezdete: Linux és valós idejű vezérlés egy lapon Egy futurisztikus megvilágítású Arduino UNO Q fejlesztőlap, középpontban egy Qualcomm QRB2210 chip, kék alaplapon mikrokontrolleres és IoT-alkalmazásokhoz optimalizált alkatrészekkel. AI és IoT fejlesztésekhez készült hardver.
  • Hír

Arduino UNO Q – Az új korszak kezdete: Linux és valós idejű vezérlés egy lapon

2025.10.07.
Teker Ed, te tekered? – Az enkóder Illusztrált forgó enkóder modul Arduino fejlesztőkörnyezetben, számítógéppel és elektronikai munkapaddal. Oktatási és DIY elektronikai célokra.
  • Cikk
  • Gyorstippek

Teker Ed, te tekered? – Az enkóder

2025.08.23.

Információk

Cégadatok-impresszum | Használati feltételek
Adatvédelmi irányelvek | Kapcsolat

Elérhetőség

Ügyfélszolgálat: +36 (20) 99-23-781
E-mail: avr (kukac)tavir (pont) hu
Iroda/telephely: 1181 Budapest, Szélmalom utca 13.
Copyright © TavIR Minden jog fenntartva | DarkNews by AF themes.
TavIR
Manage your privacy

To provide the best experiences, we and our partners use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us and our partners to process personal data such as browsing behavior or unique IDs on this site and show (non-) personalized ads. Not consenting or withdrawing consent, may adversely affect certain features and functions.

Click below to consent to the above or make granular choices. Your choices will be applied to this site only. You can change your settings at any time, including withdrawing your consent, by using the toggles on the Cookie Policy, or by clicking on the manage consent button at the bottom of the screen.

Funkcionális Always active
A technikai tárolás vagy hozzáférés szigorúan szükséges az előfizető vagy felhasználó által kifejezetten kért konkrét szolgáltatás használatának lehetővé tételének jogos céljához, vagy kizárólag a közlés elektronikus hírközlő hálózaton keresztüli továbbításának céljához.
Beállítások
A technikai tárolás vagy hozzáférés a jogos célból szükséges, hogy olyan beállításokat tároljunk, amelyeket az előfizető vagy a felhasználó nem kért.
Statisztika
Kizárólag statisztikai célokra használt technikai tároló vagy hozzáférés. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
A technikai tárolás vagy hozzáférés felhasználói profilok létrehozásához szükséges hirdetések küldéséhez, illetve a felhasználó nyomon követéséhez egy vagy több weboldalon hasonló marketingcélokból.
Statistics

Marketing

Features
Always active

Always active
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
Manage options
{title} {title} {title}