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