Siklus Warna LED RGB Raspberry Pi Pico (PWM 3 Kanal)
Satu LED, jutaan warna! LED RGB berisi 3 LED: merah, hijau, dan biru. Masing-masing digerakkan dengan kanal PWM Pico sendiri: merah + hijau = kuning, hijau + biru = cyan, ketiganya = putih. LED berputar melewati 8 warna. Pelajari beberapa kanal PWM, mendefinisikan fungsi (def set_color(...)), pencampuran warna RGB (cara kerja layar), konversi 8-bit → 16-bit (x257 memetakan 0–255 ke 0–65535), dan LED katoda bersama vs anoda bersama.

Video
Skema rangkaian

Kode sumber
1# ─────────────────────────────────────────
2# BlueGrays · bluegrays.com
3# Siklus Warna LED RGB Raspberry Pi Pico (PWM 3 Kanal)
4# ─────────────────────────────────────────
5# Pencampuran warna di LED RGB dengan tiga kanal PWM: LED berganti di
6# antara 8 warna, satu setiap 0.5 s. set_color() mengubah nilai 0-255
7# menjadi PWM 16-bit. Atur COMMON_ANODE = True untuk LED common anode.
8#
9# Pin:
10# GP13 -> LED RGB R (dengan resistor 220 ohm)
11# GP12 -> LED RGB G (dengan resistor 220 ohm)
12# GP11 -> LED RGB B (dengan resistor 220 ohm)
13# Common cathode -> GND
14
15from machine import Pin, PWM
16from time import sleep_ms
17
18COMMON_ANODE = False # True untuk LED common anode
19
20# ============ KANAL PWM ============
21r = PWM(Pin(13)); r.freq(1000) # Merah
22g = PWM(Pin(12)); g.freq(1000) # Hijau
23b = PWM(Pin(11)); b.freq(1000) # Biru
24
25# Mengatur warna: tiap kanal 0-255
26def set_color(red, green, blue):
27 # Ubah 0-255 menjadi 16-bit (x257)
28 for channel, value in ((r, red), (g, green), (b, blue)):
29 if COMMON_ANODE: # Dibalik untuk common anode
30 value = 255 - value
31 channel.duty_u16(value * 257)
32
33# ============ DAFTAR WARNA ============
34COLORS = [
35 (255, 0, 0), # Merah
36 (255, 165, 0), # Oranye
37 (255, 255, 0), # Kuning
38 (0, 255, 0), # Hijau
39 (0, 255, 255), # Cyan
40 (0, 0, 255), # Biru
41 (128, 0, 128), # Ungu
42 (255, 255, 255), # Putih
43]
44
45# ============ LOOP UTAMA ============
46while True:
47 # Tiap warna bertahan selama 0.5 s
48 for k, y, m in COLORS:
49 set_color(k, y, m)
50 sleep_ms(500)
51FAQ
Kenapa nilai warna 8-bit dikalikan 257?
Warna biasanya ditulis dalam rentang 0–255, sedangkan PWM Pico bekerja dalam rentang 0–65535. Karena 255 × 257 = 65535, mengalikan dengan 257 memetakan nilai 8-bit tepat ke rentang 16-bit.
Aku memakai LED RGB anoda bersama. Apa yang harus aku ubah?
Kaki bersama disambungkan ke 3,3 V dan kecerahannya bekerja terbalik: tulis nilai duty sebagai 65535 - value. Kalau tidak, warnanya akan tampak terbalik.
Kenapa warnanya tidak terlihat putih sempurna?
LED merah, hijau, dan biru tidak sama terangnya. Kamu bisa mengatur keseimbangan putih dengan memberi faktor terpisah untuk setiap kanal (mis. merah di 80%).
Bisakah aku membuat transisi halus antarwarna?
Ya, ubah nilai R, G, dan B sedikit demi sedikit dari satu warna ke warna berikutnya, dan kamu mendapat transisi halus seperti pelangi.
