Světlo na zahradu

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
cz_marek
Příspěvky: 49
Registrován: 31 led 2018, 09:01
Reputation: 1

Světlo na zahradu

Příspěvek od cz_marek » 29 lis 2019, 15:08

Ahoj,
potřeboval bych poradit s úplně banální věcí – stmívaní LED. Jde mi o to ze chci po setmění (fotorezistor na analogovém pinu) nastavit LED na nějakou úroveň jasu – změna z nuly na nastavenou úroveň by mela byt pomalá. Pak po sepnutí kontaktu (PIR senzor na digitálním pinu) se nastaví svit LEDky na druhou úroveň (opět pomalý narůst intenzity) a vydrží po nastaveny čas pak se sníží na původní úroveň. Pokud se zvýší intenzita osvětleni tak LEDka zhasne.

Reálně to bude osvětleni chodníku na zahradě – večer se světlo zapne a sviti jen tak aby bylo vidět ze je tam chodnik, pokud po chodníku někdo půjde tak se zvýší intenzita a po nějake době se vrati jen na úroveň aby bylo videt ze je tam chodnik.

Mohl bych to udělat velice jednoduše skokovým nastavenim ale chtěl bych to udelat aby to bylo „efektni“ a zmeny osvětleni byli postupné.

Postupné změny osvětlení dělám přes knihovnu FadeLed.h. Nejsem schopny to dat dohromady – funguje mi zapnuti světla přes fotorezistor ale pokud chci zvýšit intenzitu osvětleni tak už mi to nechce chodit. Problem je v tom že se sice nastaví vyšší intenzita při sepnuti PIR sensoru ale ta se hned dalším průběhem smyčky nastaví zpět na puvodni nižší hodnotu. Tim ze pomalá změna svítivosti LEDky potřebuje nějaký čas a během toho běží program dal do dalších smyček tak mi hned další smyčka přepíše proměnnou kterou řidim hodnotu svitu LEDky
Popravdě jsem se do toho už tak zamotal že nevim jak z toho…

Připojil jsem zakladni kostru programu bez těch pokusu o "časovač" maximalniho svitu protože to stejne nefungovalo

Kód: Vybrat vše


#include <FadeLed.h>

const int PIRpin = 4;      // PIR sensor Connected to PIN 4
const int LDRpin = 0;         // PIR sensor Connected to PIN 4
const int LEDpin = 13;     // LED Connected to PIN 8

int PIRstate = 0;         // Variable for reading switch status
int LIGHTstate = 0;        // Variable for reading light intensity

int brightness = 0;   // brightness 
int brightnessOFF = 0;   // 
int brightnessFADE = 30;   // brightness (%) when is dark (lightSTART) 
int brightnessMAX = 100;   // max brightness (%) - when PIR sensor is active
int lightSTART = 200;      // when light switch on


FadeLed LED(13);

void setup()
{
  Serial.begin(9600);
  pinMode(LEDpin, OUTPUT); 
  pinMode(PIRpin, INPUT);  
  pinMode(LDRpin, INPUT);  
  LED.setTime(timeFADE);
  }
void loop()
{
          
    LIGHTstate = analogRead(LDRpin); 
    if (LIGHTstate < lightSTART) 
    {
     brightness = brightnessFADE;
       PIRstate = digitalRead(PIRpin); 
       if (PIRstate == LOW) 
      {
       brightness = brightnessMAX;       
       }
    }
       
   if (LIGHTstate > lightSTART) 
   {
    brightness = brightnessOFF;
   }
   LED.set(brightness);
   FadeLed::update();
   }
 

pavel1tu
Příspěvky: 1048
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Světlo na zahradu

Příspěvek od pavel1tu » 29 lis 2019, 18:07

Musíš ty podmínky dát zvlášť, ne do sebe

1) je tma * není pohyb = svítím málo
2) je tma * je pohyb = svítím naplno
3) je světlo = nesvítím

já bych to řešil trochu jinak, v loop bych testoval jen to PIR * je světlo = svítím naplno (rozsvítí hned)
v nějakém tásku (třeba 15s) bych testoval jestli je světlo nebo ne (překlene dobu kdy bude zapadat slunce, tam se hodnota na fotorezistoru bude mrcasit všelijak a bude ti to zmatene poblikávat)
v jiném tásku (třeba 100ms) bych dělal přechod mezi svitem 1-málo-naplno (svit++/ svit--)

napsal bych ti ten program během 5 minut, ale naštval mne ten anglický komentář, je trochu OUT na českém foru (můj názor)

PS: nevím, ale zakryj ty fotorezistory nějakým matným plexi, mne na sluníčku odcházejí
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

pavel1tu
Příspěvky: 1048
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Světlo na zahradu

Příspěvek od pavel1tu » 29 lis 2019, 18:15

Takhle já pomalu, opavdu pomalu rozsvěcím akvária
když dáš task 100ms bude to rychlejší, mě tato část programu probíhá jednou za 15s

je to kopie části kodu z akvária, jen nápad jak měnit plynuje jas

svitime - jestli je doba kdy se má svítit nebo ne
jas nastavený - momentální hodnota jasu KED
jas požadovaný - na jakou hodnotu požadujeme svítit (je stejný jako "jas nastavený" pokud se už jas nastavil, nebo jiný, pokud požadujeme změnu jasu
v poslední části pomalu zhasínám na nulu - to asi nepotřebuješ

Kód: Vybrat vše

// ************************ TASKSHEDULER 15s
void t15Callback() 
    {
      
     if (svitime == 1)  
      {
        if (JASpozadovany > JASnastaveny) JASnastaveny++;
        if (JASpozadovany < JASnastaveny) JASnastaveny--; 
        analogWrite(11, JASnastaveny); 
      }
   if (svitime == 0 && JASnastaveny > 0)  
      {
        JASnastaveny--; 
        analogWrite(11, JASnastaveny); 
      } 

    }
musíš jen měnit hodnotu na kterou chceš svítit podle podmínek fotoodporu * PIR
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

cz_marek
Příspěvky: 49
Registrován: 31 led 2018, 09:01
Reputation: 1

Re: Světlo na zahradu

Příspěvek od cz_marek » 30 lis 2019, 06:34

Ten anglicky komentar - pardon. Ja vzal nejaky kus kodu z prikladu na FadeLed a pak uz jsem v tom pokračoval. Ale jinak teda souhlas ze na ceskem foru jedem cesky.
Diky za rady predelam to - asi jsem se i uplne blbe uplnul na knihovnu.

cz_marek
Příspěvky: 49
Registrován: 31 led 2018, 09:01
Reputation: 1

Re: Světlo na zahradu

Příspěvek od cz_marek » 30 lis 2019, 10:02

Diky za pomoc už mam hotovo:

Kód: Vybrat vše

#include <FadeLed.h>

const int PIRpin = 4;      
const int LDRpin = 0;         
const int LEDpin = 13;     
const int LED2pin = 15;     
int PIRstate = 0;         
int LIGHTstate = 0;        
int timeFADE = 10000;
unsigned long interval = 30000;        
unsigned long previousMillis = 0;  

int brightness = 0;    
int brightnessOFF = 0;   
int brightnessFADE = 30;   
int brightnessMAX = 100;   
int lightSTART = 200;      

FadeLed LED(13);

void setup()
{
  Serial.begin(9600);
  pinMode(LEDpin, OUTPUT); 
  pinMode(LED2pin, OUTPUT); 
  pinMode(PIRpin, INPUT);  
  pinMode(LDRpin, INPUT);  
  LED.setTime(timeFADE);
  digitalWrite(LED2pin, HIGH);
  delay(100);
  digitalWrite(LED2pin, LOW);
  delay(100);
  digitalWrite(LED2pin, HIGH);
  delay(100);
  digitalWrite(LED2pin, LOW); 
}
void loop()
{
    unsigned long currentMillis = millis();
    LIGHTstate = analogRead(LDRpin);   
    PIRstate = digitalRead(PIRpin); 
 
    if (PIRstate == LOW && LIGHTstate < lightSTART){
     brightness = brightnessMAX;       
     previousMillis = currentMillis;
    }
    
   if (currentMillis - previousMillis >= interval) {
    
      previousMillis = currentMillis;
    
      LIGHTstate = analogRead(LDRpin);   
    if (LIGHTstate < lightSTART){
      brightness = brightnessFADE;
      }
    if (LIGHTstate > lightSTART){
      brightness = brightnessOFF;
      }
   }
    
   LED.set(brightness);
   FadeLed::update();
}


Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host