Arduino Vesak Decorations | වෙසක් සැරසිලි 🎊☸️

Introduction

Vesak is a season of light and creativity. While traditional paper lanterns (Vesak Kudu) are beautiful, adding an Arduino can bring them to life with dynamic patterns, color-changing effects, and even sound.

In this tutorial, we will look at how to use an Arduino to create a Smart Vesak Lantern and a Digital LED Chaser for your home decorations.




The Multi-Pattern Lantern

Instead of a single bulb inside your lantern, you can use a circle of high-brightness LEDs. By using the "10 LED Patterns" logic we discussed in a previous post, you can make the lantern appear to rotate or pulse.



Required Hardware:

  • Arduino Nano (Small enough to fit inside a lantern)
  • High-Brightness LEDs Or 230v Bulbs.
  • 4 Channel Relay Module: for controll lights.



Circuit Diagrams

        



The Arduino Code

Copy and paste the code below into your Arduino IDE.


CODE

#define delay50 500

int relays[] = {2, 3, 4, 5}; //relay Pins
int num_of_relays;

void setup() {
  num_of_relays = sizeof(relays) / sizeof(int);
  for (int i = 0; i < num_of_relays; i++) {
    pinMode(relays[i], OUTPUT);
  }
}

void loop() {
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(500);

  relayOn();
  delay(50);
  relayOff();
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(50);
  relayOn();
  delay(50);
  relayOff();
  delay(50);
  
  for (int i = 0; i < 5; i++) { pattern1(); }
  for (int i = 0; i < 5; i++) { pattern2(); }
  for (int i = 0; i < 5; i++) { pattern3(); }
  for (int i = 0; i < 5; i++) { pattern4(); }
  for (int i = 0; i < 25; i++) { pattern5(); }
  for (int i = 0; i < 5; i++) { pattern6(); }
  for (int i = 0; i < 15; i++) { pattern7(); }
  for (int i = 0; i < 15; i++) { pattern8(); }
  for (int i = 0; i < 5; i++) { pattern9(); }
  for (int i = 0; i < 5; i++) { pattern10(); }
  for (int i = 0; i < 50; i++) { pattern11(); }
  for (int i = 0; i < 50; i++) { pattern12(); }
  
  relayOff();
  delay(5000);
}

//TURN ON ALL RELAYS
void relayOn() {
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], HIGH);
  }
}

//TURN OFF ALL RELAYS
void relayOff() {
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], LOW);
  }
}

//LEFT TO RIGHT
void pattern1() {
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], HIGH);
    delay(delay50);
    digitalWrite(relays[i], LOW);
  }
}

//RIGHT TO LEFT
void pattern2() {
  for (int i = num_of_relays; i > 0; i--) {
    digitalWrite(relays[i - 1], HIGH);
    delay(delay50);
    digitalWrite(relays[i - 1], LOW);
  }
}

//LEFT TO RIGHT FILL
void pattern3() {
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], HIGH);
    delay(delay50);
  }
  for (int i = num_of_relays; i > 0; i--) {
    digitalWrite(relays[i - 1], LOW);
    delay(delay50);
  }
}

//RIGHT TO LEFT FILL
void pattern4() {
  relayOn();
  delay(delay50);
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], LOW);
    delay(delay50);
  }
  for (int i = num_of_relays; i > 0; i--) {
    digitalWrite(relays[i - 1], HIGH);
    delay(delay50);
  }
  relayOff();
}

//ALTERNATE RELAYS
void pattern5() {
  for (int i = 0; i < num_of_relays; i = i + 2) {
    digitalWrite(relays[i], HIGH);
    if (i + 1 < num_of_relays) digitalWrite(relays[i + 1], LOW);
  }
  delay(delay50);
  for (int i = 0; i < num_of_relays; i = i + 2) {
    digitalWrite(relays[i], LOW);
    if (i + 1 < num_of_relays) digitalWrite(relays[i + 1], HIGH);
  }
  delay(delay50);
}

//OSCILLATING RELAYS
void pattern6() {   
  for (int i = 0; i < num_of_relays; i++) {
    digitalWrite(relays[i], HIGH);
    delay(delay50);
    digitalWrite(relays[i], LOW);
  }
  delay(delay50);
  for (int i = num_of_relays; i > 0; i--) {
    digitalWrite(relays[i - 1], HIGH);
    delay(delay50);
    digitalWrite(relays[i - 1], LOW);
  }
}

//INSIDE OUT
void pattern7() {
  for (int i = 0; i < num_of_relays / 2; i++) {
    digitalWrite(relays[i], HIGH);
    digitalWrite(relays[num_of_relays - 1 - i], HIGH);
    delay(delay50);
    digitalWrite(relays[i], LOW);
    digitalWrite(relays[num_of_relays - 1 - i], LOW);
  }
}

//OUTSIDE IN
void pattern8() {
  for (int i = (num_of_relays / 2) - 1; i >= 0; i--) {
    digitalWrite(relays[i], HIGH);
    digitalWrite(relays[num_of_relays - 1 - i], HIGH);
    delay(delay50);
    digitalWrite(relays[i], LOW);
    digitalWrite(relays[num_of_relays - 1 - i], LOW);
  }
}

//LEFT TO RIGHT 3 RELAYS
void pattern9() {
  for (int i = 0; i < num_of_relays + 3; i++) {
    if (i < num_of_relays) {
      digitalWrite(relays[i], HIGH);
    }
    if (i > 2) {
      digitalWrite(relays[i - 3], LOW);
    }
    delay(delay50);
  }
}

//OSCILLATING 3 RELAYS
void pattern10() {
  for (int i = 2; i < num_of_relays; i++) {
    if (i == 2) {
      digitalWrite(relays[0], HIGH);
      digitalWrite(relays[1], HIGH);
    }
    digitalWrite(relays[i], HIGH);
    digitalWrite(relays[i - 3], LOW);
    delay(delay50);
  }
  for (int i = num_of_relays - 4; i > -1; i--) {
    digitalWrite(relays[i], HIGH);
    digitalWrite(relays[i + 3], LOW);
    delay(delay50);
  }
}

//RANDOM EFFECT 1
void pattern11() {
  int randomnum = random(0, num_of_relays);
  digitalWrite(relays[randomnum], HIGH);
  delay(delay50);
  digitalWrite(relays[randomnum], LOW);
  delay(delay50);
}

//RANDOM EFFECT 2
void pattern12() {
  int randomon = random(0, num_of_relays);
  int randomoff = random(0, num_of_relays);
  digitalWrite(relays[randomon], HIGH);
  digitalWrite(relays[randomoff], LOW);
  delay(delay50);
}

                      



⚠️Safety Tips for Outdoor Decorations

  1. Rain Protection: If you are hanging your decorations outside, wrap your Arduino and battery in a waterproof plastic container or a sealed "Ziploc" bag.

  2. Current Limits: Addressable LED strips can draw a lot of current. If you use more than 50 LEDs, do not power them directly through the Arduino. Use a separate 5V power adapter.

  3. Short Circuits: Ensure no exposed wires are touching the bamboo or wooden frame of the lantern.



Conclusion

Combining traditional craftsmanship with modern electronics is a great way to celebrate Vesak. Whether it’s a simple pulsing LED or a complex rainbow-chasing strip, an Arduino gives you the power to make your decorations stand out in the neighborhood.

Wishing you all a very Happy and Bright Vesak!

إرسال تعليق

Post a Comment (0)

أحدث أقدم