Lampu Pohon Natal yang bisa diprogram

Ini sebenarnya proyek yang saya lakukan tahun 2016, tapi setelah saya posting foto pohon Natal tahun ini dan membaca komentar di Bu Inge, sepertinya proyek kecil ini menarik juga untuk dituliskan. Ini bisa digunakan untuk mengajar pemrograman dan hardware.

Saya akan berusaha memberikan petunjuk generik, supaya bisa dipakai di aneka LED strip dengan aneka microcontroller, dan aneka bahasa pemrograman

Hardware yang dibutuhkan:

  • RGB LED Strip (individually addressable)
  • Power supply (opsional, tergantung seberapa banyak LED-nya)
  • Board microcontroller

LED Strip

Ada beberapa jenis LED Strip, yang kita cari adalah yang RGB (jangan yang satu warna) dan harus bisa dikontrol per LED-nya (individually addressable).

LED Strip ketika masih digulung

Jenis yang paling murah adalah WS2812/WS2812B. Versi yang B memiliki proteksi jika salah polaritas (terbalik positif dan negatif), jadi untuk belajar saya sarankan memakai versi B. Harganya mulai dari 1.3 USD untuk 30 LED dalam strip sepanjang 1 meter. Ada juga versi yang anti air (rating IP67 jika ingin dipasang di luar rumah). Versi lain adalah APA102/APA109B, harganya lebih mahal tapi warnanya lebih bagus. Berbagai jenis LED ini bisa dibaca di artikel Hackaday ini.

Perlu diketahui bahwa LED ini ada juga yang dijual dalam bentuk PCB dengan bentuk tertentu, misalnya ada yang melingkar. Cara pemrogramannya sama apapun bentuknya. Ini bisa dipasang di puncak pohon Natal.

LED yang sama tapi disurun melingkar

Power Supply

Hal yang perlu diperhatikan ketika bermain dengan LED strip adalah: tiap LED memerlukan sampai sekitar 50-60mA jika menyala dengan kecerahan yang paling tinggi. Artinya untuk satu meter saja yang memakai 30 LED maka dibutuhkan 1.5-1.8A. Jika ingin menggunakan power dari USB, kebanyakan hanya bisa memberikan 2A.

Tentu saja kita bisa memprogram supaya dalam satu waktu kita tidak menggunakan kecerahan maksimum, dan tidak menyalakan semua LED. Untuk pohon Natal biasanya kita tidak menyalakan semua lampunya sekaligus.

Microcontroller

Saat ini ada banyak board microcontroller misalnya:

  • Arduino (diprogram dengan Wiring yaitu varian C++ yang disederhanakan), harga mulai dari 3 USD per board
  • ESP8266 (diprogram dengan C/MicroPython/Lua), harga mulai dari 3 USD per board
  • Micro:Bit (diprogram dengan MicroPython), harga mulai 17.5 USD

Microcontroller apapun bisa dipakai, yang penting adalah ada librarynya untuk memudakan development. Memprogram LED secara low level bisa dilakukan, tapi ini cukup rumit terutama WS2182 yang timingnya harus tepat.

RGB LED yang addressable ini sudah populer sejak 2013, sehingga sekarang sudah ada librarynya untuk semua board yang saya tahu. Library WS2812B dan sejenisnya biasanya bernama neopixel. Atau jika tidak yakin: cari saja WS281b dan nama boardnya di google (misalnya “Micro:Bit WS2812B”) dan kita akan ketemu nama librarynya.

Tiap library biasanya akan menjelaskan bagaimana menghubungkan dengan LED-nya. Hanya ada 3 kabel yang perlu dihubungkan: tegangan positif, ground, dan data. Ini contohnya dari halaman dokumentasi Micro: Bit.

Perhatikan: jika ada lebih dari 8 LED, gunakan sumber daya terpisah.

_images/neopixel-croc.png
Sumber: https://microbit-micropython.readthedocs.io/en/latest/neopixel.html

Program

Program paling sederhana untuk menyalakan LED seperti ini di micropython (ini sudah program lengkap, bukan pseudocode, menyalakan 2 LED warna merah dan ungu):

import machine, neopixel
NUMBER_OF_LEDS = 8
np = neopixel.NeoPixel(machine.Pin(4), NUMBER_OF_LEDS)
np[0] = (255, 0, 0) #warna merah (red = 255)
np[1] = (255, 0, 255) # warna ungu (merah + biru)
np.show()

Untuk pohon Natal, intinya adalah: kita membuat infinite loop dan dalam loop kita menyalakan/mematikan lampu sesuai pola-pola tertentu (sekedar mengisi elemen array) lalu memanggil “show” untuk menampilkan isi arraynya. Beberapa contoh pola:

  • Berkedip (semua on, lalu semua off)
  • berkedip berselingan (misalnya semua LED ganjil on, semua genap off, lalu sebaliknya)
  • mengalir: hanya beberapa LED yang menyala, bergerak dari posisi pertama sampai terakhir
  • fade in/fade out

Dan masih banyak lagi pola-pola yang bisa dibuat. Jika tidak ingin pola statik juga bisa (menggunakan bilangan acak). Jika ingin memprogram yang lebih lanjut juga bisa, misalnya:

  • Lampu dikendalikan via WIFI (butuh microcontroller yang memakai WIFI, misalnya: ESP8266/ESP32)
  • Lampu menyala berdasarkan sensor tertentu (misalnya sensor suara, sensor kedekatan/proximity)
Mengontrol LED dengan ponsel

Penutup

Proyek ini menurut saya sangat sederhana, cukup menyenangkan. Bisa digunakan untuk mengajari loop dan juga array. Versi lebih kecil juga bisa dipakai dengan jumlah LED yang lebih sedikit. Tentunya ini tidak harus jadi hiasan pohon Natal, bisa juga jadi hiasan rumah atau bahkan di mobil.

Selamat Natal dari kami di Chiang Mai.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.