Stránka 1 z 1

Světlo na zahradu

Napsal: 29 lis 2019, 15:08
od cz_marek
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();
   }
 

Re: Světlo na zahradu

Napsal: 29 lis 2019, 18:07
od pavel1tu
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í

Re: Světlo na zahradu

Napsal: 29 lis 2019, 18:15
od pavel1tu
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

Re: Světlo na zahradu

Napsal: 30 lis 2019, 06:34
od cz_marek
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.

Re: Světlo na zahradu

Napsal: 30 lis 2019, 10:02
od cz_marek
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();
}


Re: Světlo na zahradu

Napsal: 09 led 2020, 08:29
od gogar
Tohle řízení osvětlení vypadá moc dobře... chtěl jsem něco podobného vymyslet u sebe před domem, ale ještě jsem se k tomu nedokopal. Nicméně teď přemýšlím, že se na to vrhnu. Chtěl jsem se jen zeptat- máte nějakým způsobem řešeno třeba osvětlení od aut apod? Stejně tak okamžik při západu slunce, kdy se může dle mraků hodnota na senzoru dost měnit- ráno pak něco podobného. Mám obavu, aby osvětlení v těchto okamžicích nemělo tendence se opakovaně zapínat a vypínat.

Re: Světlo na zahradu

Napsal: 09 led 2020, 11:22
od pavel1tu
gogar píše:
09 led 2020, 08:29
Tohle řízení osvětlení vypadá moc dobře... chtěl jsem něco podobného vymyslet u sebe před domem, ale ještě jsem se k tomu nedokopal. Nicméně teď přemýšlím, že se na to vrhnu. Chtěl jsem se jen zeptat- máte nějakým způsobem řešeno třeba osvětlení od aut apod? Stejně tak okamžik při západu slunce, kdy se může dle mraků hodnota na senzoru dost měnit- ráno pak něco podobného. Mám obavu, aby osvětlení v těchto okamžicích nemělo tendence se opakovaně zapínat a vypínat.
To lze ošetřit, že měření více/méně světla provádíš třeba 1x za nějaký čas (15/30/60s) a musí tato změna trvat po nějakou dobu/počet měření (třeba 3x atd.)

Re: Světlo na zahradu

Napsal: 09 led 2020, 12:16
od cz_marek
Plan je takovy jak pise pavel1tu - mereni udelat jednou za minutu a pokud průmer poslednich 3 je vetsi nebo mensi nez nastavena hodnota tak provest zapnuti / vypnuti. potreboval jsem pred koncem roku dodelat jine veci tak jsem to trochu odlozil. Ted jsem začal řešit mechanicke provedeni svetel tak jak dodelam tak se vratim k programu

Re: Světlo na zahradu

Napsal: 10 led 2020, 11:49
od pavel1tu
Doufám že to zveřejníš, mám na chatě asi 15ks těch světýlek z OBI co někdo vyhodil,
využiji jen jako "obal" a chci to předělat, asi s ATTINY85 v SMD, objednal jsem jich 200 a přišlo 1000