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:
- Arduino Uno R3, ATmega328P, Klon + datový kabel na USB
- Laskakit Arduino Uno Light Bumper
- Zásuvku s USB výstupem
- Step UP měnič na USB
- Nepájivé kontaktní pole 170 pinů
- Dupont propojovací kabely
- Potenciometr 50k + modré kolečko
- 7 ks levných barevných LED řetězů (3V)
- 1 ks bilý LED řetěz (4,5V)
- Připojovací kabely 2 x 0,75mm2
- Plastová krabička (třeba svačinový box)
- Řadová svorkovnice (čokoláda)
- Tranzistorové pole UL2803APG
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);
}
}
2 Responses
jjj s arduinem se dají dělat bezva zařízení.