Arduino LED Animation Tutorial dan Penjelasan


Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan LED sebagai indikator output. Tutorial akan disusun secara bertahap mulai dari dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Delapan buah LED tersebut dirangkai secara common cathode, dimana cathode dari setiap LED disambungkan ke ground Arduino Uno. Sedangkan anode dari 8 buah LED memperoleh arus dari pin 0 hingga 7 Arduino Uno, yang terlebih dahulu melalui resistor sebagai pembatas arus. Resistor pembatas arus tersebut bisa bernilai 330 ohm atau 470 ohm, semakin besar nilai hambatan resistor maka semakin redup nyala dari LED tersebut. Rangkaian LED secara common cathode ini dimaksudkan karena untuk program yang akan dibuat menggunakan prinsip active high, dimana bila diberikan logika high 1, LED akan menyala. Demikian sebaliknya, nyala LED akan padam bila diberikan logika low 0.
Langkah kerja untuk project Arduino sederhana ini ialah sebagai berikut ini.
  • Rangkai komponen yang dibutuhkan seperti pada gambar wiring diagram dengan board Arduino
  • Sambungkan board Arduino dengan connector USB ke komputer
  • Buka Arduino IDE, dan tulis source code (sketch) program
  • Lakukan Verify untuk memastikan program telah ditulis dengan benar
  • Selanjutnya Upload program tersebut ke board Arduino
  • Lakukan percobaan dan amati hasilnya




Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

<img src="common_cathode.png" alt="common_cathode">


Berikut ini adalah source code (sketch) untuk LED animation, nyala LED bergeser dari LSB (Least Significant Bit) ke MSB (Most Significant Bit), yang mana dikonfigurasikan bahwa pin 0 Arduino Uno sebagai LSB dan pin 7 sebagai MSB.

/*
Program LED animation

LED menyala dari LSB ke MSB
Loki Lang
*/


void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int lang = 1; lang <= 7; lang++)
  {
    PORTD = dataLed << lang;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • DDRD (Data Direction Register D) digunakan untuk mendefinisikan PORTD apakah sebagai input atau output, disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable dataLed dalam byte (8 bit), dengan nilai awal adalah 1, atau B00000001, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable lang, dari 1 hingga 7, untuk pergeseran nilai bit ke kiri
  • Setelah itu nilai dataLed akan digeser ke kiri sesuai dengan nilai variable lang, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 1, B00000001, digeser satu kali ke kiri (lang = 1), maka nilai dataLed menjadi 2, atau B00000010
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kiri sama saja seperti mengalikan nilai bit dengan pengali dua
  • Nyala LED akan berubah mulai LSB, pin 0 Arduino Uno, menuju MSB, pin 7
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delay(), semakin besar nilai yang diberikan maka akan semakin lama durasinya. Adapun source code (sketch) cara lain dengan hasil nyala LED animation bergerak dari MSB ke LSB, atau dari LED yang terhubung dengan pin 7 Arduino Uno ke pin 0.

/*
Program LED animation

LED menyala dari MSB ke LSB 
Loki Lang
*/


void setup()
{
  DDRD = 255;
}

void loop()
{
  byte dataLed = 1;
  PORTD = dataLed;
  delay(1000);
  for(int lang = 1; lang <= 7; lang++)
  {
    PORTD = dataLed >> lang;
    delay(1000);
  }
}

Penjelasan program ialah sebagai berikut ini.
  • DDRD digunakan untuk mendefinisikan PORTD apakah sebagai input atau output. Disini DDRD diberikan nilai 255 atau sama seperti B11111111, yang mana delapan buah pin diberi nilai 1, artinya PORTD tersebut didefinisikan sebagai port output, sementara itu bila diberikan nilai 0, maka pin atau port tersebut didefinisikan sebagai input
  • Untuk variable dataLed dalam byte (8 bit), dengan nilai awal adalah 128, atau B10000000, dimana dataLed merupakan representasi nilai data yang akan digunakan untuk mengatur LED mana yang menyala dan padam
  • Dengan perulangan menggunakan variable lang, dari 1 hingga 7, untuk pergeseran nilai bit ke kanan
  • Setelah itu nilai dataLed akan digeser ke kanan sesuai dengan nilai variable lang, yang akan diberikan ke PORTD sebagai nyala LED
  • Sebagai contoh dengan nilai dataLed awal adalah 128, B10000000, digeser satu kali ke kanan (lang = 1), maka nilai dataLed menjadi 64, atau B01000000
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
  • Sebagai catatan informasi tambahan, bahwa pergeseran nilai bit satu kali ke kanan sama saja seperti membagi nilai bit dengan pembagi dua
  • Nyala LED akan berubah mulai MSB, pin 7 Arduino Uno, menuju LSB, pin 0
Selanjutnya ialah source code (sketch) lain dengan hasil nyala LED animation bergerak dua arah, satu nyala LED dari MSB menuju LSB, dan satu lagi dengan arah sebaliknya dari LSB menuju MSB.

/*
Program LED animation

LED menyala dari dua arah 
Loki Lang
*/


void setup()
{
  DDRD = 255;
}

void loop()
{
  int lsb = 0b00000001;
  int msb = 0b10000000;
  int i = 0;
  for(i = 0; i < 8; i++)
  {
    PORTD = ((lsb << i) | (msb >> i));
    delay(1000);
  }
}

Pada dasarnya sama seperti dua source code (sketch) sebelumnya, yakni nyala LED dari MSB dan LSB, yang kemudian digabungkan. Untuk mendapatkan hasil gabungan pergeseran bit dari LSB menuju MSB dan sebaliknya, digunakan operasi bitwise OR. Hasil operasi bitwise OR baru kemudian ditampilkan sebagai output. Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking.

Bila ada sesuatu yang belum jelas dan ingin tahu lebih dalam seputar project Arduino, pemrograman, dan elektronika, bisa bertanya pada bagian comment atau melalui page Facebook berikut.