131 lines
3.7 KiB
Markdown
131 lines
3.7 KiB
Markdown
# 光 Hikari
|
||
|
||
A custom WS2812 LED badge powered by a [Seeed XIAO (BLE/RP2040/ESP32C3/...)](https://wiki.seeedstudio.com/SeeedStudio_XIAO_Series_Introduction/) and written in [TinyGo](https://tinygo.org).
|
||
|
||
The PCB hosts 20 RGB LEDs arranged in a **4 rows × 5 columns** grid behind a frosted 3D-printed diffuser. A single button cycles through lighting effects.
|
||
|
||
|
||

|
||
|
||
|
||
---
|
||
|
||
## Hardware
|
||
|
||
| Component | Note |
|
||
|-----------|-----|
|
||
| Hikari PCB | in hardware/pcb folder |
|
||
| 3D printed files | in hardware/STL folder |
|
||
| Flathead screw 2.1x10 | 4x |
|
||
| 20 × WS2812 LEDs (4 rows × 5 cols) | D6 |
|
||
| Tactile button | D3 |
|
||
| Qwiic / StemmaQT connector | D4 & D5 (I²C) |
|
||
| Passive buffer | D7 |
|
||
|
||
---
|
||
|
||
## Effects
|
||
|
||
Each press of the button advances to the next effect. The sequence cycles endlessly.
|
||
|
||
| # | Name | Description |
|
||
|---|------|-------------|
|
||
| 1 | **Rainbow** | All 20 LEDs show the same colour; the hue cycles slowly through the full spectrum (~20 s per revolution) |
|
||
| 2 | **Row sweep** | One row lights up at a time and sweeps downward; the hue drifts continuously |
|
||
| 3 | **Column sweep** | One column lights up at a time and sweeps rightward |
|
||
| 4 | **Stars** | 8 LEDs at random positions fade in with a random colour then fade out; when a star dies a new one appears elsewhere |
|
||
| 5 | **Breathing** | All LEDs pulse with a triangular brightness envelope (~5 s per breath); the hue shifts slowly between cycles |
|
||
| 6 | **Rainbow rows** | Each row shows a different hue (90° apart on the colour wheel); all hues advance together |
|
||
| 7 | **Wave** | A bright column chases across the grid with a two-column fading trail |
|
||
|
||
---
|
||
|
||
## Flash
|
||
|
||
```bash
|
||
tinygo flash -target=xiao-esp32c3 -stack-size=8KB .
|
||
```
|
||
|
||
Requires TinyGo ≥ 0.41 and [`tinygo.org/x/drivers`](https://github.com/tinygo-org/drivers) v0.35.
|
||
|
||
---
|
||
|
||
## Build
|
||
|
||
### Step 1 — Bare PCB
|
||
|
||
The back side of the custom PCB. Footprints for the 20 WS2812 LEDs are arranged in the 4 × 5 grid.
|
||
|
||

|
||
|
||
---
|
||
|
||
### Step 2 — Qwiic / StemmaQT connector
|
||
|
||
We'll start with the SMD Qwiic / StemmaQT connector since it's the trickiest to solder. It is not really needed, but a cool way to extend the board with sensors. Use the help of some flux if needed.
|
||
|
||

|
||
|
||
---
|
||
|
||
### Step 3 — Soldering the button
|
||
|
||
The tactile switch is soldered to its footprint on top of the board. Easier than the stemmaQT.
|
||
|
||

|
||
|
||
---
|
||
|
||
### Step 4 — PCB fully populated
|
||
|
||
All 20 LEDs and the button in place. The XIAO BLE/RP2040/ESP32C3/... plugs in on the left edge. It's the easier one to do, and the last one to be done since it goes over one LED.
|
||
|
||

|
||
|
||
|
||
**NOTE**: Make sure all the LEDs are correctly soldered since once we solder the board there's no way to fix the LED behind it.
|
||
---
|
||
|
||
### Step 5 — PCB seated in the frame
|
||
|
||
The board drops into the back shell. The silkscreen on the rear shows the Go gopher pattern.
|
||
|
||

|
||
|
||
---
|
||
|
||
### Step 6 — 3D-printed back cover
|
||
|
||
The black back shell printed in PLA. The XIAO slides into the slot on the side for USB access. Use 4 screws on the holes.
|
||
|
||

|
||
|
||
|
||
---
|
||
|
||
### Step 7 — Frosted diffuser panel
|
||
|
||
A white PLA diffuser snaps onto the front of the frame to spread the light evenly across the grid. You could print different models of the diffuser!
|
||
|
||

|
||
|
||
---
|
||
|
||
### Step 8 — Finished
|
||
|
||
Fully assembled and running. The diffuser softens each LED point into a smooth glow.
|
||
|
||

|
||
|
||
---
|
||
|
||
## Showroom
|
||
|
||

|
||
|
||

|
||
|
||
|
||
## License
|
||
|
||
[MIT](LICENSE)
|