Arduino Pixel LED මල්වෙඩි ලයිට් සිස්ටම් හදන හැටි – SC Guide

හැඳින්වීම: ඔබේ ගෙදරටම මල්වෙඩි ආලෝකයක්!
අලුත් අවුරුදු, උත්සව අවස්ථා, පාටි, නැත්නම් නිකම්ම ගෙදර සාලේ ලස්සන කරන්න හිතෙනකොට, ඒකට ලස්සන ආලෝක රටා ටිකක් එකතු කරගන්න තිබ්බනම් නේද කියලා හිතෙනවද? අද අපි කතා කරන්න යන්නේ ඒ වගේ ආලෝක සිස්ටම් එකක්, විශේෂයෙන්ම මල්වෙඩි වගේ පෙනෙන ආලෝක රටා, Arduino එකයි Pixel LEDs (ඒ කියන්නේ WS2812B/NeoPixels වගේ Addressable LEDs) ටිකකුයි පාවිච්චි කරලා කොහොමද හදාගන්නේ කියලයි. මේක හිතනවට වඩා හරිම ලේසියි, විනෝදජනකයි! ඒ වගේම Electronics සහ Coding ගැන අලුත් දේවල් ගොඩක් ඉගෙන ගන්නත් මේක හොඳ අවස්ථාවක්.
මේ SC Guide එකෙන්, අපි මේ project එකේ මුල ඉඳන් අගටම පියවරෙන් පියවර බලමු. අවශ්ය කරන Hardware Components මොනවද, ඒවා සම්බන්ධ කරගන්නේ කොහොමද (Circuit Diagram), ඒ වගේම Arduino Code එක ලියන්නේ සහ FastLED Library එක භාවිතා කරන්නේ කොහොමද කියලා ඔයාලට පැහැදිලිව කියලා දෙනවා. බය වෙන්න එපා, Coding ගැන ලොකු දැනුමක් නැති කෙනෙකුට වුණත් මේක පහසුවෙන් තේරුම් ගන්න පුළුවන් විදියට තමයි අපි පැහැදිලි කරන්නේ. එහෙනම්, අපි පටන් ගමු!
1. මල්වෙඩි ලයිට් සිස්ටම් එකට අවශ්ය කරන Hardware Components
මේ ව්යාපෘතිය පටන් ගන්න කලින්, ඔයාලට අවශ්ය කරන දේවල් ටික ලෑස්ති කරගමු. මෙන්න එතකොට ඕන කරන ප්රධානම දේවල් ටික:
1.1. Arduino Board එකක්
- Arduino Uno හෝ Arduino Nano: මේ project එකට මේ ඕනෑම Board එකක් පාවිච්චි කරන්න පුළුවන්. ඒවා Programming කරන්නත් ලේසියි, ගණනුත් අඩුයි.
1.2. Addressable LED Strips (Pixel LEDs)
- WS2812B (NeoPixel) LED Strip: මේවා තමයි අපේ මල්වෙඩි ආලෝකය හදන්න ප්රධානම අංගය. මේ LED වල විශේෂත්වය තමයි, මේකේ තියෙන සෑම LED එකක්ම තනි තනිවම අපිට Control කරන්න පුළුවන් වීම. ඒ කියන්නේ, එක LED එකකට රතු පාට දීලා, ඊළඟ LED එකට නිල් පාට දෙන්න පුළුවන්. සාමාන්ය LED Strips වලට මේක කරන්න බෑ.
- වැදගත්: ඔයා ගන්නේ LED කීයක්ද කියන එකට අනුව තමයි Power Supply එක තීරණය වෙන්නේ. සාමාන්යයෙන් එක WS2812B LED එකක් Max Brightness එකේදී 60mA (මිලිඇම්පියර්) විතර ධාරාවක් (Current) ගන්නවා.
1.3. Power Supply එකක්
- 5V DC Power Supply: අපේ LED Strips වලට අවශ්ය ධාරාව Arduino එකෙන් දෙන්න බෑ. Arduino එකෙන් 5V විතරක් දුන්නත්, Current එක මදි වෙනවා. ඒ නිසා, LED Strips වලට වෙනම Power Supply එකක් අවශ්යයි.
- උදාහරණයක්: ඔයා LED 60ක් තියෙන Strip එකක් ගන්නවනම්, 60 * 60mA = 3600mA (3.6 Amps) වගේ Current එකක් අවශ්ය වෙන්න පුළුවන් (හැබැයි මේක Max Brightness එකේදී). ඉතින් 5V 5A Power Supply එකක් වගේ එකක් ගැනීම ආරක්ෂාකාරීයි.
1.4. තවත් අවශ්ය දේවල්
- Breadboard: Components තාවකාලිකව සම්බන්ධ කරන්න.
- Jumper Wires: Components එකිනෙක සම්බන්ධ කරන්න.
- 330-470 Ohm Resistor: LED Strip එකේ Data Pin එකට ආරක්ෂාවක් විදියට මේක දාන එක හොඳයි.
- 1000uF, 6.3V (හෝ ඊට වැඩි) Capacitor: LED Strip එකේ Power Input එකට මේක සම්බන්ධ කරන එක වැදගත්. මේකෙන් Power Spikes වළක්වනවා, LED වලට හානි වීම වළක්වනවා.
- Push Button (විකල්ප): විවිධ මල්වෙඩි රටා අතර මාරු වෙන්න අවශ්ය නම් මේක පාවිච්චි කරන්න පුළුවන්.
- Arduino IDE Software: Code ලියන්න සහ Arduino Board එකට Upload කරන්න.
2. Circuit එක හදාගමු: සම්බන්ධතා ටික
හරි, දැන් අපි Hardware ටික සම්බන්ධ කරගමු. මේක හරිම සරලයි.
- LED Strip එකේ Power Supply එක සම්බන්ධ කිරීම:
- ඔයාගේ LED Strip එකේ 5V (හෝ VCC) Pin එක Power Supply එකේ +5V එකට සම්බන්ධ කරන්න.
- LED Strip එකේ GND (Ground) Pin එක Power Supply එකේ GND එකට සම්බන්ධ කරන්න.
- වැදගත්: මේ 5V DC Power Supply එකේ GND එක, Arduino Board එකේ GND එකටත් සම්බන්ධ කරන්න ඕනේ. (Common Ground). මේක අනිවාර්යයි, නැත්නම් Data Signal එක වැඩ කරන්නේ නෑ!
- Capacitor එක සම්බන්ධ කිරීම: LED Strip එකේ Power Input එකට පුළුවන් තරම් ආසන්නව 1000uF Capacitor එක සම්බන්ධ කරන්න. Capacitor එකේ දිග කකුල (Positive) 5V එකටත්, කොට කකුල (Negative) GND එකටත් සම්බන්ධ කරන්න.
- LED Strip එකේ Data Pin එක සම්බන්ධ කිරීම:
- LED Strip එකේ Data In Pin එක (DI) ගන්න.
- මේ Pin එකට 330-470 Ohm Resistor එකක් සම්බන්ධ කරන්න.
- Resistor එකේ අනෙක් පැත්ත Arduino Board එකේ ඕනෑම Digital Pin එකකට සම්බන්ධ කරන්න. අපි මේ Tutorial එකට Pin 6 භාවිතා කරමු.
- Push Button එක (විකල්ප):
- Push Button එකේ එක් Pin එකක් Arduino Digital Pin එකකට සම්බන්ධ කරන්න (උදා: Pin 2).
- අනෙක් Pin එක GND එකට සම්බන්ධ කරන්න. මේකට Pull-up Resistor එකක් ඕනේ නෑ, Arduino එකේ Internal Pull-up එක පාවිච්චි කරන්න පුළුවන්.
ප්රායෝගික උපදෙස්: Power Supply එක ගැන
ඔබේ LED Strip එකේ LED ගණන අනුව, නිවැරදි Power Supply එකක් තෝරා ගැනීම අත්යවශ්යයි. Current එක මදි වුණොත් LED එකේ ආලෝකය අඩු වෙන්න පුළුවන්, නැත්නම් නිකම්ම දැල්වෙන්නේ නැති වෙන්න පුළුවන්. Arduino එකට USB කේබලයකින් Power දෙන්න පුළුවන්, නමුත් LED Strip එකට අනිවාර්යයෙන්ම වෙනම External Power Supply එකක් අවශ්යයි. ඒ වගේම, Capacitor සහ Resistor එකෙන් ඔබේ LED සහ Arduino යන දෙකම ආරක්ෂා වෙනවා.
3. FastLED Library එකයි Code එකයි
දැන් අපි Coding පැත්තට යමු. Arduino එකෙන් Pixel LEDs Control කරන්න තියෙන පහසුම සහ ජනප්රියම Library එක තමයි FastLED කියන්නේ. මේකේ තියෙන Functions ගොඩක් නිසා, අපිට ලස්සන Animations හදන එක හරිම ලේසියි.
3.1. FastLED Library එක Install කරගමු
- Arduino IDE එක Open කරන්න.
- Sketch > Include Library > Manage Libraries... යන්න.
- Library Manager එකේ Search Bar එකේ
FastLED
කියලා Type කරලා Search කරන්න. - FastLED Library එක හොයාගෙන Install කරන්න.
3.2. මූලික මල්වෙඩි ආලෝක රටාව (Basic Fireworks Effect)
අපි මුලින්ම සරල 'sparkle' වගේ Effect එකක් හදමු. මේකෙන් FastLED වල මූලික ක්රියාකාරීත්වය ගැන හොඳ අවබෝධයක් ලැබෙයි. Arduino IDE එකේ අලුත් Sketch එකක් Open කරගෙන මේ Code එක Copy-Paste කරන්න.
#include <FastLED.h>
// LED Strip එකේ Settings
#define NUM_LEDS 60 // ඔබේ LED Strip එකේ LED ගණන
#define DATA_PIN 6 // Arduino එකේ Data Pin එක සම්බන්ධ කර ඇති Digital Pin එක
// CRGB array එකක් හදනවා, මේකෙන් තමයි අපි හැම LED එකකම පාට Save කරන්නේ
CRGB leds[NUM_LEDS];
void setup() {
// FastLED Library එක Initialize කරනවා
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(100); // LED වල දීප්තිය (0-255)
Serial.begin(9600); // Debugging සඳහා Serial Monitor එක On කරනවා
}
void loop() {
// මල්වෙඩි Sparkle Effect එකක් හදමු
// මුලින්ම තියෙන LED එකක පාට ටිකක් අඩු කරමු (fade out)
fadeToBlackBy(leds, NUM_LEDS, 10); // 10 කියන්නේ fade වන ප්රමාණය (0-255)
// අලුත් Sparkle එකක් Random තැනකින් පටන් ගමු
int pixel = random(NUM_LEDS); // 0 සිට NUM_LEDS-1 දක්වා අහඹු LED එකක් තෝරනවා
// තෝරාගත් LED එකට Random පාටක් දෙමු
leds[pixel] = CHSV(random(256), 255, 255); // CHSV(Hue, Saturation, Value) - අහඹු පාටක්
// LED වලට ආලෝකය පෙන්වන්න
FastLED.show();
delay(20); // කෙටි ප්රමාදයක් (මිලි තත්පර වලින්)
}
3.3. Code එකේ පැහැදිලි කිරීම
#include <FastLED.h>
: FastLED Library එක අපේ Sketch එකට එකතු කරනවා.#define NUM_LEDS 60
: මේකෙන් LED Strip එකේ තියෙන LED ගණන Define කරනවා. ඔයාගේ Strip එකේ LED කීයක් තියෙනවද ඒ ගණන මේකට දාන්න.#define DATA_PIN 6
: Arduino එකේ Data Pin එක Connect කරලා තියෙන Digital Pin එක. (අපේ Circuit එකේ අපි Pin 6 පාවිච්චි කළා).CRGB leds[NUM_LEDS];
: CRGB කියන්නේ FastLED වල Color Structure එක. මේ Array එකෙන් හැම LED එකකම වර්ණය Store කරනවා.FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
: මේ Function එකෙන් FastLED Library එක Setup කරනවා. WS2812B කියන්නේ LED Type එක, DATA_PIN එක, සහ GRB කියන්නේ Color Order එක (සමහර LED Strip වල මේක RGB හෝ BGR වෙන්න පුළුවන්).FastLED.setBrightness(100);
: LED වල දීප්තිය (Brightness) සකසනවා. 0 සිට 255 දක්වා අගයක් දෙන්න පුළුවන්.fadeToBlackBy(leds, NUM_LEDS, 10);
: මේක හරිම වැදගත් Function එකක්. මේකෙන් LED වල දැනට තියෙන වර්ණ ක්රමයෙන් අඳුරු කරනවා. 10 කියන්නේ කෙතරම් වේගයෙන් අඳුරු වෙනවද කියන එක. මේක වැඩි කරන තරමට වේගයෙන් අඳුරු වෙනවා. මේක තමයි 'trail' Effect එකට උපකාරී වෙන්නේ.int pixel = random(NUM_LEDS);
: random() Function එකෙන් 0 සිට (NUM_LEDS-1) දක්වා Random Number එකක් හදනවා. මේකෙන් අපි Sparkle එක පටන් ගන්න LED එක තෝරනවා.leds[pixel] = CHSV(random(256), 255, 255);
: තෝරාගත් LED එකට Random Color එකක් දෙනවා. CHSV(Hue, Saturation, Value) Format එකෙන් තමයි Color එක දෙන්නේ. Hue එක 0-255 අතර Random කරනවා, ඒ නිසා හැම වෙලාවෙම වෙනස් පාටක් එනවා. Saturation (පාටේ තීව්රතාවය) සහ Value (දීප්තිය) අපි උපරිමයට දාලා තියෙනවා.FastLED.show();
: මේක තමයි LED වලට Color Data එක යවලා, ඒ Colors ටික දැල්වෙන්න සලස්වන්නේ. මේක නැත්නම් ඔයාගේ Code එක Run වුණත් LED දැල්වෙන්නේ නෑ.delay(20);
: 20ms ක කෙටි ප්රමාදයක්. මේකෙන් Animation එකේ වේගය Control කරන්න පුළුවන්.
4. විවිධ රටා සහ වැඩි දියුණු කිරීම්
දැන් ඔයාලා Basic Sparkle Effect එක හදාගත්තා නේද? දැන් අපි තව ටිකක් Creative වෙලා, මේකට වෙනස් Effects කිහිපයක් එකතු කරමු. FastLED Library එකේ තියෙන Functions ගොඩක් පාවිච්චි කරලා අපිට මේ වගේ දේවල් පහසුවෙන් කරන්න පුළුවන්.
4.1. වෙනස් මල්වෙඩි රටා එකතු කිරීම
'Fireworks' කියන්නේ එකම Effect එකක් නෙවෙයි. Sparks, Trails, Bursts වගේ දේවල් ගොඩක් එකතු වෙලා තමයි හැදෙන්නේ. අපි මේ loop() එක ඇතුලටම Functions කිහිපයක් හදලා, ඒ අතර මාරු වෙන්න පුළුවන් විදියට හදමු.
// Loop එක ඇතුලේ මේක පාවිච්චි කරන්න
void loop() {
// මල්වෙඩි Sparkle Effect එකක්
fireworksSparkle();
FastLED.show();
delay(20);
}
// Sparkle Effect එක වෙනම Function එකකට ගමු
void fireworksSparkle() {
fadeToBlackBy(leds, NUM_LEDS, 10);
int pixel = random(NUM_LEDS);
leds[pixel] = CHSV(random(256), 255, 255);
}
// තවත් Effect එකක් උදාහරණයක් ලෙස: Random Color Blink
void randomBlink() {
fill_solid(leds, NUM_LEDS, CRGB::Black); // මුලින්ම හැම LED එකක්ම Off කරනවා
int pixel = random(NUM_LEDS);
leds[pixel] = CHSV(random(256), 255, 255);
FastLED.show();
delay(50); // කෙටි වේලාවක් තියලා Off කරනවා
leds[pixel] = CRGB::Black; // ආපහු Off කරනවා
}
4.2. Push Button එකෙන් Mode වෙනස් කිරීම
අපි මුලින් කතා කරපු Push Button එකෙන් මේ Effects අතර මාරු වෙන්න පුළුවන් විදියට Code එක වෙනස් කරමු. ඒකට Button State එක කියවන්න Pin එකක් Define කරගන්න ඕනේ.
#define BUTTON_PIN 2 // Button එක සම්බන්ධ කර ඇති Digital Pin එක
int currentEffect = 0; // වර්තමාන Effect එක Track කරන්න Variable එකක්
unsigned long lastButtonPress = 0; // Button debounce එකට
const long debounceDelay = 200; // Debounce delay එක (ms)
void setup() {
// ... (ඉහත Code එකේ setup() එක එලෙසම)
pinMode(BUTTON_PIN, INPUT_PULLUP); // Internal Pull-up Resistor එක On කරනවා
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW && millis() - lastButtonPress > debounceDelay) {
// Button එක Press කරලා නම් (LOW වෙන්නේ Pull-up නිසා)
currentEffect++;
if (currentEffect > 1) { // ඔයාට Effects කීයක් තියෙනවද ඒ ගණනට වඩා 1ක් අඩු අගයක්
currentEffect = 0;
}
lastButtonPress = millis(); // අවසාන Button press එකේ වෙලාව Save කරනවා
fill_solid(leds, NUM_LEDS, CRGB::Black); // Effect මාරු වෙනකොට LED ටික Off කරනවා
FastLED.show();
}
// තෝරාගත් Effect එක Run කරනවා
switch (currentEffect) {
case 0:
fireworksSparkle();
break;
case 1:
randomBlink();
break;
// තව Effects තියෙනවනම් මේකට Add කරන්න
}
FastLED.show();
delay(20);
}
මේ Code එකෙන් Button එක Press කරන හැම වාරයකම currentEffect
කියන Variable එක වෙනස් වෙනවා. switch-case
Statement එකෙන් ඒ Variable එකේ අගය අනුව ඊට අදාළ Function එක Call කරනවා. millis()
සහ debounceDelay
පාවිච්චි කරලා තියෙන්නේ Button එක Press කරනකොට එක පාරක් පමණක් Signal එක ගන්න. (Debounce)
4.3. තවත් අදහස්
- Sound Sensor එකක් එකතු කිරීම: Sound Sensor එකක් Arduino එකට සම්බන්ධ කරලා, ශබ්දයට අනුව මල්වෙඩි ආලෝකය දැල්වෙන්න සලස්වන්න පුළුවන්. උදාහරණයක් විදියට අත්පුඩි ගැහුවම මල්වෙඩි දැල්වෙනවා වගේ.
- Potentiometer එකක්: Potentiometer එකක් පාවිච්චි කරලා Animation එකේ වේගය, දීප්තිය වගේ දේවල් Control කරන්න පුළුවන්.
- Animation Patterns වැඩි කිරීම: FastLED Library එකේ තියෙන අනිත් Functions ගැනත් ඉගෙනගෙන, තවත් ලස්සන Animations ගොඩක් හදන්න උත්සාහ කරන්න.
නිගමනය: ඔබේම මල්වෙඩි ආලෝක පද්ධතිය!
ඔන්න ඔහොමයි යාළුවනේ, Arduino එකයි Pixel LEDs ටිකයි පාවිච්චි කරලා, ගෙදරටම ලස්සන මල්වෙඩි ආලෝක පද්ධතියක් හදාගන්නේ. මේ Project එකෙන් ඔයාලට Electronics සහ Coding ගැන ප්රායෝගික දැනුමක් ලබාගන්න පුළුවන් වුණා කියලා මම හිතනවා. Hardware Components සම්බන්ධ කරගන්න විදිය, FastLED Library එක පාවිච්චි කරලා Animations හදන විදිය වගේම, Button එකක් පාවිච්චි කරලා Effects අතර මාරු වෙන විදියත් අපි කතා කළා.
මේක හරිම විනෝදජනක ව්යාපෘතියක්. ඔයාලට පුළුවන් මේක තවදුරටත් Customize කරන්න, Creative වෙලා ඔයාගේම අදහස් එකතු කරන්න. සමහරවිට ඔයාට Project Box එකක් හදලා මේක ලස්සනට හදලා Party Light එකක් විදියට පාවිච්චි කරන්නත් පුළුවන්.
ඉතින්, ඔයාලත් අදම ඔබේම මල්වෙඩි ලයිට් සිස්ටම් එකක් හදලා බලන්න! මේ Guide එක ගැන ඔයාගේ අදහස්, ප්රශ්න, නැත්නම් ඔයා හදපු Project එකේ පින්තූර පහලින් Comment කරන්න. අපිත් එක්ක එකතු වෙලා, තව තවත් අලුත් දේවල් ඉගෙන ගමු. ඔබේ අදහස් අපිට ගොඩක් වටිනවා!