Elektronické svítání: Porovnání verzí

Z HBblog
Přejít na: navigace, hledání
Řádek 10: Řádek 10:
 
* vhodnou krabičku
 
* vhodnou krabičku
 
* spínací hodiny
 
* spínací hodiny
 +
 +
===Základní zapojení===
 +
[[Soubor:Arduino-rgb.jpg]]
 +
 +
===Software===
 +
<pre>
 +
// *****************
 +
//  SVITANI v 1.0
 +
// *****************
 +
 +
int red_light_pin= 9;
 +
int green_light_pin = 10;
 +
int blue_light_pin = 11;
 +
 +
int program[6][4] = { {  0,  0,0,0 },
 +
                      {  30,  0,0,100 },
 +
                      {  60, 30,50,100 },
 +
                      { 100, 50,100,100 },
 +
                      { 150,150,150,150 },
 +
                      { 255,255,120,30 }
 +
};
 +
 +
int max_cil = 255;  // prvni hodnota z posledniho radku tabulky
 +
 +
float R = 0;          // hodnoty jasu
 +
float G = 0;
 +
float B = 0;
 +
 +
float R_cil = 0;      // cilove hodnoty v kroku
 +
float G_cil = 0;
 +
float B_cil = 0;
 +
 +
float R_prirustek = 0;  // prirustek hodnoty v kroku
 +
float G_prirustek = 0;
 +
float B_prirustek = 0;
 +
 +
long celkovy_cas = 60; // doba svítání v minutách
 +
long zpozdeni = (celkovy_cas * 60 * 1000) / max_cil;
 +
 +
int dalsi_cil = 0;  // dalsi nacteni programu
 +
int krok = 0;      // aktuální krok programu
 +
                     
 +
void setup() {
 +
  Serial.begin(9600);
 +
  pinMode(red_light_pin, OUTPUT);
 +
  pinMode(green_light_pin, OUTPUT);
 +
  pinMode(blue_light_pin, OUTPUT);
 +
  pinMode(13, OUTPUT);
 +
 +
  krok = program[0][0];
 +
  R = program[0][1];
 +
  G = program[0][2];
 +
  B = program[0][3];
 +
 +
  for (int i = 0; i < max_cil; i++) {
 +
    if (i >= dalsi_cil) {
 +
      krok++;
 +
      dalsi_cil = program[krok][0];
 +
      R_cil = program[krok][1];
 +
      G_cil = program[krok][2];
 +
      B_cil = program[krok][3];
 +
 +
      R_prirustek = (R_cil - R) / (dalsi_cil - i);
 +
      G_prirustek = (G_cil - G) / (dalsi_cil - i);
 +
      B_prirustek = (B_cil - B) / (dalsi_cil - i); 
 +
 +
      Serial.print("Celkovy cas: ");
 +
      Serial.print(celkovy_cas);
 +
      Serial.println(" minut");
 +
      Serial.print("Zpozdeni: ");
 +
      Serial.print(zpozdeni);
 +
      Serial.println(" ms");
 +
      Serial.print(krok);
 +
      Serial.print(". KROK PROGRAMU: ");
 +
      Serial.print(R_cil);
 +
      Serial.print(" ");
 +
      Serial.print(G_cil);
 +
      Serial.print(" ");
 +
      Serial.print(B_cil);
 +
     
 +
      Serial.print(", + ");
 +
      Serial.print(R_prirustek);
 +
      Serial.print(" ");
 +
      Serial.print(G_prirustek);
 +
      Serial.print(" ");
 +
      Serial.println(B_prirustek);
 +
      //delay(5000);
 +
    }
 +
 +
    R = R + R_prirustek;
 +
    G = G + G_prirustek;
 +
    B = B + B_prirustek;
 +
 +
    //Serial.print(i);
 +
    //Serial.print(": RGB => ");
 +
    //Serial.print(R);
 +
    //Serial.print(" ");
 +
    //Serial.print(G);
 +
    //Serial.print(" ");
 +
    //Serial.println(B);
 +
   
 +
    RGB_color(R, G, B);
 +
    delay(zpozdeni);
 +
  }
 +
  Serial.println("KONEC");
 +
  digitalWrite(13,true);
 +
}
 +
 +
 +
 +
void loop() {
 +
 
 +
}
 +
 +
 +
 +
void RGB_color(int red_light_value, int green_light_value, int blue_light_value)
 +
{
 +
  if (red_light_value > 255) red_light_value = 255;
 +
  if (green_light_value > 255) green_light_value = 255;
 +
  if (blue_light_value > 255) blue_light_value = 255;
 +
 
 +
  analogWrite(red_light_pin, red_light_value);
 +
  analogWrite(green_light_pin, green_light_value);
 +
  analogWrite(blue_light_pin, blue_light_value);
 +
}
 +
</pre>

Verze z 24. 9. 2020, 07:45

Také vás nebaví vstávat do tmy? Elektronicé svítání vám nahradí východ slunce v zimních měsících...

Potřebujete k tomu

  • 1x arduino
  • 3x bezkontaktní výkonový spínač
  • napájecí zdroj 12V/5A
  • RGB LED pásek
  • hlinikový profil pro LED pásek
  • vhodnou krabičku
  • spínací hodiny

Základní zapojení

Arduino-rgb.jpg

Software

// *****************
//   SVITANI v 1.0
// *****************

int red_light_pin= 9;
int green_light_pin = 10;
int blue_light_pin = 11;

int program[6][4] = { {   0,  0,0,0 },
                      {  30,  0,0,100 },
                      {  60, 30,50,100 },
                      { 100, 50,100,100 },
                      { 150,150,150,150 },
                      { 255,255,120,30 }
};

int max_cil = 255;  // prvni hodnota z posledniho radku tabulky

float R = 0;          // hodnoty jasu
float G = 0;
float B = 0;

float R_cil = 0;      // cilove hodnoty v kroku
float G_cil = 0;
float B_cil = 0;

float R_prirustek = 0;  // prirustek hodnoty v kroku
float G_prirustek = 0;
float B_prirustek = 0;

long celkovy_cas = 60; // doba svítání v minutách
long zpozdeni = (celkovy_cas * 60 * 1000) / max_cil;

int dalsi_cil = 0;  // dalsi nacteni programu
int krok = 0;       // aktuální krok programu
                       
void setup() {
  Serial.begin(9600);
  pinMode(red_light_pin, OUTPUT);
  pinMode(green_light_pin, OUTPUT);
  pinMode(blue_light_pin, OUTPUT);
  pinMode(13, OUTPUT);

  krok = program[0][0];
  R = program[0][1];
  G = program[0][2];
  B = program[0][3];

  for (int i = 0; i < max_cil; i++) {
    if (i >= dalsi_cil) {
      krok++;
      dalsi_cil = program[krok][0];
      R_cil = program[krok][1];
      G_cil = program[krok][2];
      B_cil = program[krok][3];

      R_prirustek = (R_cil - R) / (dalsi_cil - i);
      G_prirustek = (G_cil - G) / (dalsi_cil - i);
      B_prirustek = (B_cil - B) / (dalsi_cil - i);  

      Serial.print("Celkovy cas: ");
      Serial.print(celkovy_cas);
      Serial.println(" minut");
      Serial.print("Zpozdeni: ");
      Serial.print(zpozdeni);
      Serial.println(" ms");
      Serial.print(krok);
      Serial.print(". KROK PROGRAMU: ");
      Serial.print(R_cil);
      Serial.print(" ");
      Serial.print(G_cil);
      Serial.print(" ");
      Serial.print(B_cil);
      
      Serial.print(", + ");
      Serial.print(R_prirustek);
      Serial.print(" ");
      Serial.print(G_prirustek);
      Serial.print(" ");
      Serial.println(B_prirustek);
      //delay(5000);
    }

    R = R + R_prirustek;
    G = G + G_prirustek;
    B = B + B_prirustek;

    //Serial.print(i);
    //Serial.print(": RGB => ");
    //Serial.print(R);
    //Serial.print(" ");
    //Serial.print(G);
    //Serial.print(" ");
    //Serial.println(B);
    
    RGB_color(R, G, B);
    delay(zpozdeni);
  }
  Serial.println("KONEC");
  digitalWrite(13,true);
}



void loop() {
  
}



void RGB_color(int red_light_value, int green_light_value, int blue_light_value)
 {
  if (red_light_value > 255) red_light_value = 255;
  if (green_light_value > 255) green_light_value = 255;
  if (blue_light_value > 255) blue_light_value = 255;
  
  analogWrite(red_light_pin, red_light_value);
  analogWrite(green_light_pin, green_light_value);
  analogWrite(blue_light_pin, blue_light_value);
}