Arduino návody: Osvětlení vitríny

David Benda

Tento projekt je již mým čtvrtým projektem. Jedná se o LED podsvícení skleněných polic v prosklené obývací stěně. Na tomto projektu jsem se naučil pracovat s adresnými RGB LED diodami a IR snímačem. Pro ovládání jsem použil Arduino Nano. Uživatel může ovládat barvu a intenzitu osvětlení pomocí libovolného bezdrátového infračerveného ovladače, jehož kódy je potřeba zadat do programu. Výstupní prvky jsou adresné RGB LED diody. LED diody jsem instaloval ze zadní stěny prosklené vitríny. Z pohledové části nábytku jsou vidět pouze diody, které svítí do skleněných poliček. Tento projekt je vhodný pro začátečníka.

Použitý materiál:

Zapojení desky

Arduino Nano je připojeno k napájení přes VIN a GND. RGB diody jsou zapojeny na 5V a GND, Din první diody je na pin D6 (přes 75Ω rezistor) a další diody mají Din zapojen přes 75Ω rezistor do Dout předchozí diody. Poslední (šestá) dioda má zapojeno pouze Vcc, GND a Din. Infračervená dioda snímače je zapojena na 5V, GND a datový pin na D11. 

Program: Nic složitého, vhodné i pro začátečníka. Po napsání kódu jsem pomocí jednoduchého programu na vyčítání hodnot z IR snímače a jejich výpis na sériovou linku zjistil jednotlivé hodnoty tlačítek z mého ovladače. Tyto jsem zapsal do programu a pak už se jen radoval z dobrého výsledku. Instalace do nábytku proběhla bez problémů (viz.foto). Výsledek je přesně podle mého očekávání (decentní osvětlení).

#include <Adafruit_NeoPixel.h>
#include <IRremote2.h>
#include <Arduino.h>
#include <EEPROM.h> 
#define pinDIN 6
#define pocetLED 6
// inicializace LED modulu z knihovny
Adafruit_NeoPixel rgbWS = Adafruit_NeoPixel(pocetLED, pinDIN, NEO_GRB + NEO_KHZ800);  // datovy pin 6

// Zacatek projektu osvetleni vitrina 20-09-2023
// Skutecne naklady za jednotlive komponenty
// Arduino nano USB-C                          239 Kc
// Arduino terminal shield                     62 Kc
// Redukce pro napajeni z kulateho konektoru   29 Kc
// Zdroj 230V  9V 1A                           107 Kc
// Diody RGB  WS2812   6ks   celk. cena        66 Kc
// Propojovaci vodice                     cca. 10 Kc
// IR prijimac                                 59 Kc
// Krabicke pro arduino  -                     zdarma
// VSECHNY CENY JSOU VCETNE DPH 
// Celkova cena bez prace je                   572 Kc 

// verze SW25092023
// poradi barev je Green, Red, Blue  - tj. ZELENA, CERVENA, MODRA
// pri omezeni na max svit 250  je max. proud do vsech LEDek  200 mA  
// IR prijimac je zapojen na D11

void setup() {
  // zahájení komunikace s LED modulem
  rgbWS.begin();
byte zelena;
byte cervena;
byte modra;
byte ledka;
byte program=0;  // pokud je 0 vsechny ledky jsou na 0  
int RECV_PIN = 11;
Serial.begin(9600);
EEPROM.get(2, zelena);
EEPROM.get(3, cervena);
EEPROM.get(4, modra);

if (program<0 or program>2) {program=1;};   //po prvnim spusteni stiskni OFF, zakomentuj tento blok a znova nahraj
if (zelena<0 or zelena>254) {zelena=0;};
if (cervena<0 or cervena>254) {cervena=0;};
if (modra<0 or modra>254) {modra=0;};

// program 0 - vsechny ledky jsou zhasnuty
// program 1 - vsechny LEDky sviti dle nastavene barvy
// program 2 - tlac.24 - vsechny LEDky pomalu meni samovolne barvy, plynuly prechod RED-GREEN-BLUE 
// program 3 - tlac.12 - postupne se rozsvecuji jednotlive LEDky vzdy s jinou barvou 

IRrecv irrecv(RECV_PIN);
irrecv.enableIRIn();
decode_results results;
delay(1000);rgbWS.clear();rgbWS.show(); delay(1000);
};

void loop()
{
int RECV_PIN = 11;
 byte zelena; 
 byte cervena; 
 byte modra; 
 byte ledka;  
 byte program;

IRrecv irrecv(RECV_PIN);
decode_results results;

if (program==0) {nastavRGB(0,0,0,1); nastavRGB(0,0,0,2); nastavRGB(0,0,20,3);
nastavRGB(0,0,0,4); nastavRGB(0,0,0,5); nastavRGB(0,0,0,6); delay(1000);
  };   // pri vypnuti zustane slabe svitit modre dioda c.3 - je to tak schvalne
 
 if (irrecv.decode(&results)) {
if (results.value == 16752735 and program==1) {
  if (zelena<247 and zelena>3) {zelena=zelena+5;}; 
  if (cervena<247 and cervena>3) {cervena=cervena+5;}; 
if (modra<247 and modra>3) {modra=modra+5;};for (byte ledka=1; ledka<7; ledka++){
    nastavRGB( zelena,cervena, modra, ledka);};
};   // tlacitko zvyseni intenzity
if (results.value == 4294967295) {irrecv.resume(); };
if (results.value == 16720095 and program==1) {
  if (zelena>5){zelena=zelena-5;};
  if (cervena>5){cervena=cervena-5;};
  if (modra>5){modra=modra-5;}; for (byte ledka=1; ledka<7; ledka++){
    nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko snizeni intenzity 
if (results.value == 16736415) {
   EEPROM.put(1, program);EEPROM.put(2,zelena);EEPROM.put(3,cervena);EEPROM.put(4,modra);program=0;delay(200);
  };   // tlacitko vypnuti 
if (results.value == 16769055 and program==0) {
  EEPROM.get(1, program); EEPROM.get(2, zelena); EEPROM.get(3, cervena);
EEPROM.get(4, modra);for (byte ledka=1; ledka<7; ledka++){
    nastavRGB( zelena,cervena, modra, ledka);};program=1;};   // tlacitko zapnuti
if (results.value == 16748655) {
  program=1; zelena=0; cervena=252; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
    nastavRGB( zelena,cervena, modra, ledka);};
    };  // tlacitko sviti pouze cervena 
if (results.value == 16716015) {
  program=1; zelena=252; cervena=0; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko sviti pouze zelena

if (results.value == 16732335) {
  program=1; zelena=0; cervena=0; modra=252;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko sviti pouze modra
  
if (results.value == 16764975) {
  program=1; zelena=252; cervena=252; modra=252;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko sviti bila
if (results.value == 16756815) {
  program=1; zelena=63; cervena=252; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.9
if (results.value == 16724175) {
  program=1; zelena=252; cervena=0; modra=63;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.10
if (results.value == 16740495) {
  program=1; zelena=0; cervena=63; modra=252;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.11

if (results.value == 16754775) {
  program=1; zelena=126; cervena=252; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.13

if (results.value == 16722135) {
  program=1; zelena=252; cervena=0; modra=252;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.14

if (results.value == 16738455) {
  program=1; zelena=0; cervena=126; modra=126;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.15
if (results.value == 16750695) {
  program=1; zelena=190; cervena=253; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.17
if (results.value == 16718055) {
  program=1; zelena=126; cervena=0; modra=126;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.18
  if (results.value == 16734375) {
  program=1; zelena=0; cervena=190; modra=126;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.19
  if (results.value == 16746615) {
  program=1; zelena=253; cervena=253; modra=0;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.21
if (results.value == 16713975) {
  program=1; zelena=80; cervena=0; modra=80;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.22
  if (results.value == 16730295) {
  program=1; zelena=0; cervena=253; modra=253;
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};
  };  // tlacitko c.23
 if (results.value == 16762935) {program=2; };    // tlacitko c.24
 if (results.value == 4294967295) {irrecv.resume(); };
delay(10); 
irrecv.resume(); };

if (program==2) {
  zelena=0; cervena=0; modra=0;
  IRrecv irrecv(RECV_PIN);
  decode_results results;irrecv.resume();
  for (int sila=0; sila<254; sila=sila+1) {zelena=253-sila; cervena=sila; modra=0; delay(40);
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};    // prechod zelena-cervena
 if (irrecv.decode(&results)) {program=1; sila=254; delay(10); if (results.value == 16736415) {
   EEPROM.put(1, program);EEPROM.put(2,zelena);EEPROM.put(3,cervena);EEPROM.put(4,modra);program=0;delay(200);
  }; 
  }; };};

  if (program==2) { irrecv.resume();delay(50); 
  zelena=0; cervena=0; modra=0;
   for (int sila=0; sila<254; sila=sila+1) {zelena=0; cervena=253-sila; modra=sila; delay(40);
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};    // prechod cervena-modra
 if (irrecv.decode(&results)) {program=1; sila=254; delay(10);
 if (results.value == 16736415) {
   EEPROM.put(1, program);EEPROM.put(2,zelena);EEPROM.put(3,cervena);EEPROM.put(4,modra);program=0;delay(200);
  };   
  }; }; };
 
if (program==2) { irrecv.resume();delay(50);
 zelena=0; cervena=0; modra=0;
  for (int sila=0; sila<254; sila=sila+1) {zelena=sila; cervena=0; modra=253-sila; delay(40);
  for (byte ledka=1; ledka<7; ledka++){
  nastavRGB( zelena,cervena, modra, ledka);};     // prechod modra-zelena 
 if (irrecv.decode(&results)) {program=1; sila=254; delay(10);if (results.value == 16736415) {
   EEPROM.put(1, program);EEPROM.put(2,zelena);EEPROM.put(3,cervena);EEPROM.put(4,modra);program=0;delay(200);
  };   
  }; }; };
 delay(40);
}

// poradi barev je Green, Red, Blue  - tj. ZELENA, CERVENA, MODRA
// funkce pro nastavení zadané barvy na zvolenou diodu
void nastavRGB (byte r, byte g, byte b, int cislo) {
  // vytvoření proměnné pro ukládání barev
  uint32_t barva;
  // načtení barvy do proměnné
  barva = rgbWS.Color(r, g, b);
  // nastavení barvy pro danou LED diodu,
  // číslo má pořadí od nuly
  rgbWS.setPixelColor(cislo - 1, barva);
  // aktualizace barev na všech modulech
  rgbWS.show();
}

Sdílet článek

Jedna odpověď

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit

Nejčtenější články