Programovatelné vánoční osvětlení

David Benda nám poslal návod na stavbu programovatelného vánočního osvětlění, kde použil 3V a 4.5V LED řetězy ovládání přes tranzistory z Arduino Uno. Rychlost blikání ovládá připojeným potenciometrem.

Tento projekt je mým prvním praktickým zapojením na platformě Arduino. Rozhodl jsem se, že vytvořím vánoční osvětlení do oken. Jedná se o barevné LED řetězy; 4 kusy po 1m, 1 složený kus 2m, a jeden bílý LED řetěz 5m. Všechny řetězy jsem rozdělil do šesti okruhů, které jsou navzájem zcela nezávislé.

Okruhy 1-5 jsou barevné LED a okruh č.6 jsou bílé LEDky.

Použitý materiál:

Celková cena materiálu bez práce byla cca. 1000,-Kč vč. DPH.

Nachystání komponent

Jako první jsem si nachystal LED řetězy s přívodními kabely. Před každý LED řetěz jsem dal předřadný rezistor na snížení napětí podle daného typu řetězu. Rezistory jsem připájel k přívodnímu kabelu a zaizoloval teplem smrštitelnou bužírkou. Poté jsem pokračoval krabičkou (vyvrtání všech děr) a připájel jsem drátky k potenciometru. Poté jsem instalovat Arduino do rámečku Laskakit a tento rámeček jsem vruty přimontoval k plastové krabičce. Dále jsem instaloval řadovou svorkovnici, ke které jsem připojil všechny LED řetězy.

K potenciometru jsem si připájel drátky s piny pro zapojení do pole nebo Arduina. Potenciometr je z přední strany s nasunutým modrým ovládacím kolečkem. Nepájivé kontaktní pole jsem přilepil dodanou oboustrannou lepící páskou a do jeho středu umístil tranzistorové pole UL 2803APG. Poté už jsem jen propojil drátky a nahrál program.

Zapojení

Arduino Uno je připojeno k napájení přes souosý konektor přes step up měnič do USB. Původní připojení přes datový kabel nebylo funkční, zdroj produkoval špičky a rušení. Výstupy z Arduina D4 až D9 jsou připojeny ke vstupům tranzistorového pole.

Tranzistorové pole je připojeno k GND a 5V. Přes tranzistorové pole se spíná GND a tento výstup jde do LED řetězů. 5V pin je připojen k tranzistorovému poli a prosmyčován do řadové svorkovnice. Krajní kontakty potenciometru jsou připojeny k 5V a GND. Prostřední kontakt je připojen na analogový vstup A0.

Otáčením potenciometru lze regulovat rychlost blikání (přepínání jednotlivých částí osvětlení). Tento způsob zapojení jsem zvolil vzhledem k tomu, že jednotlivé LED řetězy mají větší odběr než 100mA (dohromady cca. 800mA) a zbytečně by docházelo k proudovému přetěžování digitálních pinů.

Programování

Nic složitého, vhodné i pro začátečníka. Podle daného pořadí se rozsvěcují jednotlivé části řetězu. Na začátek programu jsem si zhasnul integrovanou LEDku na pinu 13 (působilo to rušivě). Na konci programu se LED 13 rozsvítí (ve chvíli, kdy svítí všechny části LED osvětlení). Rychlost přepínání se řídí potenciometrem připojeným na pin A0. Analogová hodnota je použita ve funkci delay.

// Vanocni programovatelne osvetleni
// Autor: David Benda, Prostejov, Czech republic
// Vytvoreno: 02-2023

int potPin = A0;
int potProm = 0;
int zdrzeni = 800;
int Led1 = 3;   // Colorful LED chain - the cheapest from the KIK store :-)
int Led2 = 4;   // Colorful LED chain - the cheapest from the KIK store :-)
int Led3 = 5;   // Colorful LED chain - double lenght
int Led4 = 6;   // Colorful LED chain - the cheapest from the KIK store :-)
int Led5 = 7;   // Colorful LED chain - the cheapest from the KIK store :-)
int Led6 = 8;   // Not used
int Led7 = 9;   // White LED chain
int Led8 = 10;  // Not used
void setup() {
  pinMode(potPin, INPUT);  // Potentiometer  50k linear
  pinMode(Led1, OUTPUT);   // Colorful LED chain
  pinMode(Led2, OUTPUT);   // Colorful LED chain
  pinMode(Led3, OUTPUT);   // Colorful LED chain - double lenght
  pinMode(Led4, OUTPUT);   // Colorful LED chain
  pinMode(Led5, OUTPUT);   // Colorful LED chain
  pinMode(Led6, OUTPUT);   // Not used
  pinMode(Led7, OUTPUT);   // White LED chain
  pinMode(Led8, OUTPUT);   // Not used
  pinMode(13, OUTPUT);     // LED on the board
}
void loop() {
  {
    for (int i = 0; i < 15; i++)  //Block Nr.1
    {
      potProm = analogRead(potPin);
      zdrzeni = potProm;
      digitalWrite(13, LOW);  //Turn Off LED on the board
      digitalWrite(Led7, HIGH);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
    }
  }
  {
    for (int i = 0; i < 15; i++)  //Block Nr.2
    {
      potProm = analogRead(potPin);
      zdrzeni = potProm;
      digitalWrite(Led7, HIGH);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
    }
  }
  {
    for (int i = 0; i < 15; i++)  //Block Nr.3
    {
      potProm = analogRead(potPin);
      zdrzeni = potProm;
      digitalWrite(Led7, LOW);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni / 100);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
    }
  }
  {
    for (int i = 0; i < 15; i++)  //Block Nr.4
    {
      potProm = analogRead(potPin);
      zdrzeni = potProm;
      digitalWrite(Led7, LOW);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, LOW);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, LOW);
      delay(zdrzeni);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, HIGH);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, HIGH);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, HIGH);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
      digitalWrite(Led1, HIGH);
      digitalWrite(Led2, LOW);
      digitalWrite(Led3, LOW);
      digitalWrite(Led4, LOW);
      digitalWrite(Led5, HIGH);
      delay(zdrzeni);
    }
  }
  //Block Nr.5 - All LEDs ON
  potProm = analogRead(potPin);
  zdrzeni = potProm;
  {
    digitalWrite(Led1, HIGH);  //vsechno sviti zdrzeni*20 potom jde cyklus od zacatku
    digitalWrite(Led2, HIGH);
    digitalWrite(Led3, HIGH);
    digitalWrite(Led4, HIGH);
    digitalWrite(Led5, HIGH);
    digitalWrite(Led7, HIGH);
    digitalWrite(13, HIGH);
    delay(zdrzeni * 20);
  }
}

Sdílet článek

2 Responses

Napsat komentář

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

Mohlo by se také líbit