Proyek Lampu Sein Motor dengan Arduino & FastLED – Kalilandak Info

Pelajari cara membuat lampu sein motor interaktif menggunakan Arduino dan strip LED WS2812. Tutorial ini mencakup skema rangkaian, kode lengkap dengan

 

Skema Rangkaian Lampu Sein Motor dengan Arduino

💡 Proyek Arduino: Membuat Lampu Sein Motor dengan LED WS2812


Dalam dunia otomotif, keselamatan adalah hal utama. Salah satu komponen penting yang mendukung keselamatan pengendara adalah lampu sein—alat sederhana namun sangat vital untuk memberi tanda belok kepada pengguna jalan lain. Lalu, bagaimana jika kita membuat sendiri sistem lampu sein yang lebih interaktif dan menarik menggunakan Arduino?


Pada proyek kali ini, kita akan membahas bagaimana cara membuat lampu sein motor digital menggunakan Arduino UNO, LED Neopixel WS2812, dan push button. Proyek ini sangat cocok bagi Anda yang ingin menggabungkan dunia elektronik mikrokontroler dengan kendaraan bermotor, baik untuk modifikasi, hobi, maupun pembelajaran dasar sistem kontrol digital.


Tidak hanya sekadar nyala-mati, lampu sein ini akan menyala secara dinamis dan dapat diatur polanya menggunakan kode pemrograman di Arduino. Ditambah lagi, penggunaan LED WS2812 (Neopixel) akan memberikan tampilan yang lebih modern dan keren dibanding lampu biasa.

Melalui artikel ini, Anda akan mendapatkan:

Skema rangkaian lengkap

Penjelasan fungsi komponen


Kode Arduino siap pakai


Tips modifikasi dan pengembangan lebih lanjut

Yuk, langsung kita mulai proyek ini dan ciptakan lampu sein motor yang pintar dan estetik!

berikut codenya di bawah

#include "FastLED.h"

#define NUM_LEDS 16

CRGB leds[NUM_LEDS];

#define PIN 8

boolean exitFunction;

// LEDs and switchs


const byte ledPin1 = 10;


const byte ledPin2 = 11;


const byte ledPin3 = 12;

const byte buttonPin1 = 3;

const byte buttonPin2 = 4;

const byte buttonPin3 = 5;

// Booleans for input states

volatile bool D2_state = LOW;

volatile bool D3_state = LOW;

volatile bool D4_state = LOW;

int ledState = LOW;             // ledState used to set the LED

unsigned long previousMillis = 0;        // will store last time LED was updated


const long interval = 300;           // interval at which to blink (milliseconds)


// delay for button press


unsigned long delay_press = 400; // in milliseconds


unsigned long delay_press_last = 0;


void setup() {


  Serial.begin(9600);

  exitFunction = false;

  // Set LEDs as outputs


  pinMode(ledPin1, OUTPUT);

  pinMode(ledPin2, OUTPUT);

  pinMode(ledPin3, OUTPUT);


  // Set switches as inputs with pullups

  pinMode(buttonPin1, INPUT_PULLUP);

  pinMode(buttonPin2, INPUT_PULLUP);

  pinMode(buttonPin3, INPUT_PULLUP);

  FastLED.addLeds<WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );


  // Enable PCIE2 Bit3 = 1 (Port D)


  PCICR |= B00000100;


  // Enable PCINT18, PCINT19, PCINT20 (Pins D2 , D3 , D4)


  PCMSK2 |= B00011100;


  //             \\\\\___PIN D0


  //              \\\\


  //               \\\\___PIN D1


  //                \\\


  //                 \\\___PIN D2 (Enable)


  //                  \\


  //                   \\___PIN D3 (Enable)


  //                    \


  //                     \___PIN D4 (Enable)


}


 


void loop() {


  exitFunction = false;


  for (int i=0; i<NUM_LEDS; i++) {


    leds[i] = CRGB::Black;


    FastLED.show();


  }


 


  if (D2_state == HIGH) {


    pattern1();


  } 


  if (D3_state == HIGH) {


    pattern2();


  }



  if (D4_state == HIGH) {


    pattern3();


  }


}


void pattern1() {


  while(1)


  {


    if (millis() - previousMillis >= interval) {


      previousMillis = millis();


      // if the LED is off turn it on and vice-versa:


      if (ledState == LOW) {


        ledState = HIGH;


      } else {


        ledState = LOW;


      }


 

      // set the LED with the ledState of the variable:


      digitalWrite(ledPin1, ledState);


    }


    for (int j=1; j<=2; j++) {


      for (int i=NUM_LEDS-1; i>=0; i--) {


        if (exitFunction == true) return;


        if (j == 1) {


          leds[i] = CRGB::Orange; delay(40);


          FastLED.show();


        }


        if (j == 2) {


          leds[i] = CRGB::Black; delay(20);


          FastLED.show();


        }


      }


    }



  } // end while(1)


}


void pattern2() {


  while(1)


  {


    if (millis() - previousMillis >= interval) {


      previousMillis = millis();


      // if the LED is off turn it on and vice-versa:


      if (ledState == LOW) {


        ledState = HIGH;


      } else {


        ledState = LOW;


      }


 

      // set the LED with the ledState of the variable:


      digitalWrite(ledPin2, ledState);


    }



    for (int j=1; j<=2; j++) {


      for (int i=0; i<NUM_LEDS; i++) {


        if (exitFunction == true) return;


        if (j == 1) {


          leds[i] = CRGB::Orange; delay(40);


          FastLED.show();


        }


        if (j == 2) {


          leds[i] = CRGB::Black; delay(20);


          FastLED.show();


        }


      }


    }


    


  } // end while(1)


}

void pattern3() {


  while(1) {


    float r, g, b;


 


    // FADE IN


    for(int i = 0; i <= 255; i++) {


      if (exitFunction == true) return;


      r = (i/256.0)*255;


      g = (i/256.0)*0;


      b = (i/256.0)*0;


      fill_solid(leds, NUM_LEDS, CRGB(r, g, b));


      FastLED.show();


      delay(2);


    }


    // FADE OUT


    for(int i = 255; i >= 0; i--) {


      if (exitFunction == true) return;


      r = (i/256.0)*255;


      g = (i/256.0)*0;


      b = (i/256.0)*0;


      fill_solid(leds, NUM_LEDS, CRGB(r, g, b));


      FastLED.show();


      delay(2);


    }


  }


}


 


ISR (PCINT2_vect)


{


  // Port D Interrupt occured


 


  // prevent double execution at button keypress


  if( millis() - delay_press_last > delay_press ){


  


      // Check if this was D2 //////////////////////


      if (digitalRead(buttonPin1) == LOW) {


        digitalWrite(ledPin2, LOW);


        digitalWrite(ledPin3, LOW);


        //Pin D2 triggered the ISR on a Falling pulse


        D2_state = !D2_state;


        //Set LED 1 to state of D2_state boolean


        digitalWrite(ledPin1, D2_state);


      }


      if (D2_state == LOW) {


        exitFunction = true;


      } else {


        D3_state = LOW;


        D4_state = LOW;


      }


      //////////////////////////////////////////////

      // Check if this was D3 //////////////////////


      if (digitalRead(buttonPin2) == LOW) {


        digitalWrite(ledPin1, LOW);


        digitalWrite(ledPin3, LOW);


        //Pin D3 triggered the ISR on a Falling pulse


        D3_state = !D3_state;


        //Set LED 2 to state of D3_state boolean


        digitalWrite(ledPin2, D3_state);


      }


      if (D3_state == LOW) {


        exitFunction = true;


      } else {


        D2_state = LOW;


        D4_state = LOW;


      }


      //////////////////////////////////////////////


   

      // Check if this was D4 //////////////////////


      if (digitalRead(buttonPin3) == LOW) {


        digitalWrite(ledPin1, LOW);


        digitalWrite(ledPin2, LOW);



        //Pin D4 triggered the ISR on a Falling pulse


        D4_state = !D4_state;


        //Set LED 3 to state of D4_state boolean


        digitalWrite(ledPin3, D4_state);


      }


    


      if (D4_state == LOW) {


        exitFunction = true;


      } else {


        D2_state = LOW;


        D3_state = LOW;


      }


      //////////////////////////////////////////////


 


      delay_press_last = millis();


  }


}


Kalilandak Info – Tutorial Arduino & Proyek Elektronik Lengkap Bahasa Indonesia
NextGen Digital Welcome to WhatsApp chat
Halo! ada yang bisa saya bantu?
Type here...