2024. május 1., szerda

Gyorskeresés

Útvonal

Cikkek » Akármi rovat

Arduino konyhapult világítás

Egy Arduino Nano, egy MOSFET meghajtó, led szalagok, alu profilok, kábelcsatornák, 20m vezeték és egy hét szabadidő.

[ ÚJ TESZT ]

loop() - szenzorok olvasása

Itt az LDR-t olvassuk be, majd egy itt beállított hiszterézissel megállapítjuk, hogy elég sötét van-e az éjszakai üzemmód aktiválásához.
//night
if (analogRead(ldr) > dark) night = true;
else if (analogRead(ldr) <= dark - 100) night = false;

Itt az állapotgépet váltjuk 2-es - éjszakai - üzemmódra, ha teljesülnek a feltételek.
A PIR szenzornak ugye van egy fenntartási ideje - amit a szenzoron lévő potméterrel lehet állítani -, így elég csak azt megállapítani van-e jel vagy nincs. Itt lehetne alkalmazni egy újabb millis() időzítést ha programból szeretnénk időzíteni. Én ezzel nem éltem: úgy láttam jónak, ha hardveresen szabályozható marad a timeout.

//PIR night
if (PIR &amp;&amp; digitalRead(pir_in) &amp;&amp; night &amp;&amp; mode == 0) mode = 2; //ha be van kapcsolva a PIR és van mozgás és sötét van és ki van kapcsolva a világítás
else if (mode == 2) if (!PIR || !digitalRead(pir_in) || !night) mode = 0; //vagy ha aktív az éjszakai mód és (ki van kapcsolva a PIR vagy nincs mozgás vagy nincs sötét)

Beraktam még egy takarékos üzemmódot is arra az esetre, ha manuálisan felkapcsolják a világítást, de nem érzékelünk semmi mozgást a helyiségben egy adott ideig.

//PIR eco mode
if (PIR &amp;&amp; mode == 1) { //ha be van kapcsolva a PIR és fel van kapcsolva a világítás
if (millis() > eco + 1500000 &amp;&amp; light_tl == max_light) { //ha eltelt 25 perc mozgás nélkül és nagy a fényerő
light_tl = 150;
light_bl = night_light;
debugln(F(&quot;Entering power saving mode.&quot;));
} else if (digitalRead(pir_in) &amp;&amp; light_tl != max_light &amp;&amp; !dim) { //ha van mozgás és kicsi a fényerő, valamint nincs kézzel levéve
light_tl = max_light;
light_bl = max_b_light;
eco = millis(); //eco időzítő nullázása
debugln(F(&quot;Movement detected.&quot;));
} else if (digitalRead(pir_in)) eco = millis(); //ha van mozgás a helyiségben, akkor folyamatosan nullázza a türelmi időt
}

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.