

Duckjaws
A set of basic SAOs with glowing rubber duckies
- Size
- 40.1 × 50 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 26
- Nets
- 30
- Pads
- 81
- Tracks, vias
- 211, 49
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 14 Oct 2024
- Updated
- 13 Jan 2025
Overview
Duckjaws is an open-source printed circuit board by astuder, from the astuder/duckglow repository on GitHub. It is a 2-layer board of 40.1 × 50 mm with 26 parts on 30 nets, routed with 211 tracks and 49 vias.
It is built around the ME2188A33M3G. Its parts include 10 resistors, 5 diodes, 4 capacitors, 2 ICs and 1 connector. It belongs with the RISC-V boards of this library.
Main components
1README
README.mdduckGLOW SAO
duckGLOW is an SAO with a glowing rubber duck, lit up by an RGB or UV LED, controllable over I2C, or like an addressable LED following the WS2812 'standard'.
See hackaday.io for more information.
See examples folder for sample code to run on the SuperCon 8 SAO badge, or an Arduino.
I have a few assembled units of the duckJAWS variant for sale on Tindie.
I2C Interface
The LED of the duckGLOW SAO can be controlled over I2C.
The SAO has four channels: red, green and blue for the duck LED, and on the duckJAWS variant, red background lightning.
The SAO implements smooth fading configurable per channel. The LED brightness fades between max and min value, at the chosen speed. If speed is 0, the LED will steadily glow at the configured maximum. The phase parameter sets the offset in the fading waveform.
The mode register can be used to select the interface for LED control (auto-detect, I2C or WS2812), and to check what type of LED was detected (RGB or UV).
The current settings can be stored as power-on preset by writing decimal 42 to the save register. The power-on presets can be factory reset by writing 24 to the save register.
I2C Address
The default I2C address of the duckGLOW SAO is 0x6C. The address can be
changed by closing solder jumpers on the back of the circuit board.
| SJ1 | SJ2 | Address |
|---|---|---|
| O | O | 0x6C |
| C | O | 0x6D |
| O | C | 0x6E |
| C | C | 0x6F |
I2C Registers
Register are accessed by first writing the 8-bit register address, and then reading or writing register data. The register address will auto-increment and multiple registers can be read or written within a single I2C transaction.
For example to read the max RGB colors with an Arduino:
Wire.beginTransmission(0x6C);
Wire.write((uint8_t) 0xEC);
Wire.endTransmission(false);
Wire.requestFrom(0x6C, 3);
while (Wire.available()) {
char c = Wire.read();
Serial.println(c, HEX);
}And to set the red LED to maximum brightness:
Wire.beginTransmission(0x6C);
Wire.write((uint8_t) 0xEC); // red led max brightness
Wire.write(0xff);
Wire.endTransmission();
Wire.beginTransmission(0x6C);
Wire.write((uint8_t) 0xF4); // animation speed
Wire.write(0x0);
Wire.endTransmission();| address | name | description |
|---|---|---|
| 0x00 | docs | some info about the add-on |
| 0xEC-EF | max | max brightness for red, green, blue and background channels |
| 0xF0-F3 | min | min brightness for red, green, blue and background channels |
| 0xF4-F7 | speed | fading speed per channel, 0 = set LED to max value (no fading) |
| 0xF8-FB | phase | offset within fading animation per channel |
| 0xFC | mode | bits 0..1: LED ctrl 0=auto, 1=I2C, 2=WS2812 bit 4: LED type 0=RGB, 1=UV |
| 0xFD | save | write 42 to save current register values as new default write 24 for factory reset |
| 0xFE | debug | error codes for debugging firmware |
Parts
26| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 680R | Resistor_SMD:R_0603_1608Metric | R4, R5, R6, R7 |
| 4 | LED | LED_SMD:LED_Kingbright_APA1606_1.6x0.6mm_Horizontal | D2, D3, D4, D5 |
| 3 | 100R | Resistor_SMD:R_0603_1608Metric | R1, R2, R3 |
| 3 | 22uF | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3 |
| 2 | 10K | Resistor_SMD:R_0603_1608Metric | R10, R11 |
| 2 | ADDR | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP1, JP2 |
| 1 | 100nF | Capacitor_SMD:C_0603_1608Metric | C4 |
| 1 | 1K | Resistor_SMD:R_0603_1608Metric | R9 |
| 1 | 22uH | Inductor_SMD:L_Changjiang_FNR3012S | L1 |
| 1 | CH32V003FxUx | Package_DFN_QFN:QFN-20-1EP_3x3mm_P0.4mm_EP1.65x1.65mm | U1 |
| 1 | LED_RAGB | footprints:LED_D5.0mm-4_RGB_single-side | D1 |
| 1 | ME2188A33M3G | Package_TO_SOT_SMD:SOT-23 | U2 |
| 1 | SOA | Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical_SMD | J1 |
| 1 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP1 |
More from astuder/duckglow
1- 2 layers40 × 20 mm

Similar boards
- 2 layers57.3 × 19 mm

- 2 layers98 × 59.5 mm

MCP23017 PCB
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
26 parts915 - 2 layers142.9 × 98.5 mm

- 2 layers86.1 × 86.1 mm

- 2 layers103.8 × 50 mm

Galagino pcb set
harbaum/galagino
A Galaga, Pac-Man and Donkey Kong arcade emulator for the ESP32
26 parts558 - 2 layers20.3 × 34.8 mm

L0 ESP32
Luos-io/luos_engine
Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.
26 parts546MIT - 2 layers40.6 × 50.8 mm

WALTsm
google/walt
A device for measuring latency of physical sensors and outputs on phones and computers
26 parts474Apache-2.0 - 2 layers158.5 × 75 mm

Questions
How big is the Duckjaws PCB?
It measures 40.1 × 50 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Duckjaws use?
26 parts, built around the ME2188A33M3G. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Duckjaws KiCad files?
From the astuder/duckglow repository on GitHub, at the commit this page was made from: the board is duckjaws/duckjaws.kicad_pcb and its schematic duckbath/duckbath.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Duckjaws design in my own project?
Its repository states no licence, so its author keeps all rights: ask astuder before reusing the design.