Elektronické svítání
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í
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);
}
