Skip to content

Releases: owahltinez/coaster

Coaster v0.3.1

Choose a tag to compare

@owahltinez owahltinez released this 07 Jul 01:06

First non-rc release of the v0.3 coaster hardware. The board is identical to
v0.3.0-rc3
(the package the first batch was ordered from); what's new is the
v0.3.1 enclosure — a print-tested rework of the donut-piston lid and tray — and a
firmware/tooling addition for hands-free batch programming. Supersedes the v0.3.0 rcs.

Changes since v0.3.0-rc3

  • Enclosure lid (Top): anti-stick drainage, v0.3.1. A printed test showed a sweating
    glass capillary-bonds to the smooth lid and lifts the coaster with the glass; a recessed
    bump field made it worse (floods and seals into a suction cup). The fix is drainage:
    12 radial channels (2.0 mm wide at the glass face, 0.8 mm uniform depth, ~40°
    self-supporting tapered walls) run from the center out to r42, stopping ~3 mm short of
    the rim so the face-down print keeps a clean first-layer edge. The channels cross the
    outer flexure hinge over 12 discrete underside backing bars, so the press click is
    preserved. The plain flat lid is kept in-tree as enclosure/coaster-v0.3.FCStd.
  • Enclosure shell: thinned and snap arms reworked. The shell is 1 mm thinner
    (assembled height 8.1 mm), with a reworked snap-arm ring and a 1.6 mm snap-arm beam.
  • Enclosure tray (Bottom): 0.6 mm board-seat floor. The seat floor is now three full
    print layers (was an awkward 2.5) via a 0.1 mm shallower recess; board seat and overall
    height are effectively unchanged.
  • Firmware: post-flash confirm blink. The flashing station arms a one-shot EEPROM
    flag as the last verified programming step; the next boot plays a distinct rapid
    blink and clears it. A good flash shows on the board itself, once, and never in the
    field. 540 bytes (was 422).
  • Tooling: hands-free flashing station. make flash-loop flashes + fuses + verifies
    each board as it's plugged onto the UPDI jig, edge-triggered on insertion — flash a
    stack of boards without watching the screen.
  • No PCB change. Board, BOM, CPL, and gerbers are identical to rc3/rc2 (KT-0603W
    LEDs, 100 Ω).

Reproducibility

Regenerated (content) from the tagged source with the pinned, digest-locked toolchains:

Toolchain Pin
Commit b9e46ef822af68df23c23ea734fe0f7638f931bd
KiCad (board, fab bundle) kicad/kicad@sha256:165c81785b2df23a09892f4cc53bc0095a83b469bfbbe07989670d64049677a7 (10.0.2)
avr-gcc (firmware) debian@sha256:1275c5673a6135ff07b289ddafe4e2270dceb08eda14c0c69bb1b93ee25a9416 (trixie, gcc-avr 14.2.0)
FreeCAD (enclosure) FreeCAD 1.1.1 headless on the same trixie base

Verify downloads with sha256sum -c SHA256SUMS.

Assets

Asset What it is
…-gerbers.zip, …-bom.csv, …-cpl.csv The three JLCPCB uploads (identical to rc3)
…-board.png, …-1to1.pdf, …-board.step Fab review: render, 1:1 paper fit-check, 3D model
…-firmware.hex ATtiny202, 540 bytes. Fuse bodcfg=0x06 (1.8V BOD, sampled)
…-{top,bottom}.{step,stl} 3D-printed shell: v0.3.1 drainage-channel lid + base tray
SHA256SUMS Checksums over every asset above

Ordering (JLCPCB)

Qty 30, Economic SMT, top side, white soldermask. ≈ $0.74 USD parts/board;
≈ $100–105 AUD shipped. Boards arrive blank — flash over UPDI (make fuses once, then
make flash, or make flash-loop for a batch) and drop in a CR2016.

Carried-over caveat from rc3: ROTATION_CORRECTION is still empty (raw KiCad angles).
On a fresh order, verify orientations on the assembly preview — BT1's mouth faces
WEST
and LED cathodes (pad 1) face board center — before paying; a fix is
CPL-only, gerbers don't change.

Coaster v0.3.0-rc3

Coaster v0.3.0-rc3 Pre-release
Pre-release

Choose a tag to compare

@owahltinez owahltinez released this 16 Jun 08:23

Third release candidate of the v0.3 coaster hardware, and the package the first
batch is ordered from. Pre-release: no v0.3 unit has been physically built or
validated yet. Once a first article passes the checklist below, this is promoted to a
final v0.3.0. Supersedes rc1 and rc2.

Changes since v0.3.0-rc2

  • Enclosure synced to the v0.3 donut-piston Top. The repo had been carrying the old
    v0.2.1 spiral-flexure shell (three bodies, including a clear-PETG Shield). v0.3 is a
    solid donut-piston: a continuous top skin that deflects as a whole on a ring of snap
    arms, with no spiral cuts — so there's no open liquid path and the shield is gone. The
    enclosure now exports Top + Bottom only.
  • No PCB change. The board, BOM, CPL, gerbers, and firmware are identical to rc2
    (KT-0603W LEDs, 100 Ω). If you already uploaded rc2's files, the order side is unchanged.

(rc2's enclosure assets were the stale v0.2.1 shell. They were not edited in place — that
would have broken the tag↔asset match — hence this fresh rc3 built entirely from one commit.)

Reproducibility

Regenerated (content) from the tagged source with the pinned, digest-locked toolchains:

Toolchain Pin
Commit 3d5e6c1106e6273d5e300500e26f0aba5337dce1
KiCad (board, fab bundle) kicad/kicad@sha256:165c81785b2df23a09892f4cc53bc0095a83b469bfbbe07989670d64049677a7 (10.0.2)
avr-gcc (firmware) debian@sha256:1275c5673a6135ff07b289ddafe4e2270dceb08eda14c0c69bb1b93ee25a9416 (trixie, gcc-avr 14.2.0)
FreeCAD (enclosure) FreeCAD 1.1.1 headless on the same trixie base

Verify downloads with sha256sum -c SHA256SUMS.

Assets

Asset What it is
…-gerbers.zip, …-bom.csv, …-cpl.csv The three JLCPCB uploads (identical to rc2)
…-board.png, …-1to1.pdf, …-board.step Fab review: render, 1:1 paper fit-check, 3D model
…-firmware.hex ATtiny202, 422 bytes. Fuse bodcfg=0x06 (1.8V BOD, sampled)
…-{top,bottom}.{step,stl} 3D-printed shell: donut-piston lid + base tray (no shield)
SHA256SUMS Checksums over every asset above

Ordering (JLCPCB)

Qty 30, Economic SMT, top side, white soldermask. ≈ $0.74 USD parts/board;
≈ $100–105 AUD shipped. Boards arrive blank — flash over UPDI (make fuses once, then
make flash) and drop in a CR2016.

Before promoting to final v0.3.0

  • Assembly preview orientation — ROTATION_CORRECTION is empty (raw KiCad angles).
    Verify BT1's mouth faces WEST and LED cathodes (pad 1) face board center. A fix
    is CPL-only; gerbers don't change.
  • First-article checklist — programming; sleep < 5 µA; show plays, press costs no
    measurable charge; brightness through a real glass (100 Ω start — toward 68 Ω if dim,
    150 Ω if it drains fast); worn-battery degrades gracefully; button behaviors; splash test
    (the solid piston lid sheds water — nothing reaches the PCB).

Coaster v0.3.0-rc2

Coaster v0.3.0-rc2 Pre-release
Pre-release

Choose a tag to compare

@owahltinez owahltinez released this 16 Jun 08:01

Second release candidate of the v0.3 coaster hardware (ATtiny202 board), and
the package the first batch is ordered from. Pre-release: no v0.3 board has been
physically built or validated yet. Once a first article passes the checklist below,
this is promoted to a final v0.3.0.

Changes since v0.3.0-rc1

  • LEDs: XL-1608UWC-04 → KT-0603W (C2290). rc1's LED was chosen on a rationale that
    didn't hold up against the datasheet: XL-1608UWC-04 is 130 mcd @ 20 mA, while the
    KT-0603W is 360 mcd @ 5 mA. White LEDs are all ~2.7–3.4 V Vf and a CR2016 gives only
    ~0.3 V of headroom, so these LEDs run at a few mA — never 20 mA — and light-per-mA at
    low current is what matters. At the operating point the KT-0603W is ~11× brighter,
    and it's a Basic part (no $3 feeder fee).
  • R1–R4: 150 Ω → 100 Ω (C22775). A little more current now that the efficient LED,
    not the resistor, sets brightness. Starting value — tuned on the first article.

The gerbers and drill are content-identical to rc1 (component values live on F.Fab,
not the silkscreen). If you already uploaded rc1's board files, re-upload only
bom.csv and cpl.csv
— the board itself is unchanged.

Reproducibility

Regenerated byte-for-byte (content) from the tagged source with the pinned, digest-locked
toolchains — no host tools:

Toolchain Pin
Commit a916536ae044a2cb3cfe55eca43189cd01696a02
KiCad (board, fab bundle) kicad/kicad@sha256:165c81785b2df23a09892f4cc53bc0095a83b469bfbbe07989670d64049677a7 (10.0.2)
avr-gcc (firmware) debian@sha256:1275c5673a6135ff07b289ddafe4e2270dceb08eda14c0c69bb1b93ee25a9416 (trixie, gcc-avr 14.2.0)
FreeCAD (enclosure) FreeCAD 1.1.1 headless on the same trixie base

Rebuild from a clean checkout of the tag with make build && make fab. Verify downloads
with sha256sum -c SHA256SUMS.

Assets

Asset What it is
…-gerbers.zip, …-bom.csv, …-cpl.csv The three JLCPCB uploads (gerbers == rc1)
…-board.png, …-1to1.pdf, …-board.step Fab review: render, 1:1 paper fit-check, 3D model
…-firmware.hex ATtiny202, 422 bytes. Fuse bodcfg=0x06 (1.8V BOD, sampled)
…-{top,bottom,shield}.{step,stl} 3D-printed shell: flexure lid, PCB tray, membrane shield
SHA256SUMS Checksums over every asset above

Ordering (JLCPCB)

Qty 30, Economic SMT assembly, top side, white soldermask. Per-board parts
≈ $0.74 USD (LED feeder fee now gone); ≈ $100–105 AUD shipped. Boards arrive blank —
flash over UPDI (make fuses once, then make flash) and drop in a CR2016.

Before promoting to final v0.3.0

  • Assembly preview orientation checks — ROTATION_CORRECTION is empty (raw KiCad
    angles). Verify: BT1's insertion mouth faces the WEST board edge, and the LED
    cathodes (pad 1) face the board center
    (the KT-0603W is a new part, so re-confirm its
    orientation). A fix is CPL-only — gerbers don't change.
  • First-article checklist — programming works; sleep current < 5 µA; show plays and a
    press costs no measurable charge; brightness through a real glass (100 Ω is a start
    — toward 68 Ω if dim, toward 150 Ω if it drains fast); worn-battery degrades gracefully;
    press-during-show / long-press / double-press behave; splash test.

Coaster v0.3.0-rc1

Coaster v0.3.0-rc1 Pre-release
Pre-release

Choose a tag to compare

@owahltinez owahltinez released this 14 Jun 23:42

First release candidate of the v0.3 coaster hardware (ATtiny202 board). This
is the manufacturing package the first batch is ordered from. It is a pre-release:
no v0.3 board has been physically built or validated yet. Once a first article passes
the checklist below (and any orientation/brightness fix is folded in), this is promoted
to a final v0.3.0.

What v0.3 is

A ground-up redesign of the v0.2 board (ATtiny13A, EasyEDA), now KiCad with the circuit
defined as data in pcb/design.py. Highlights, each tracing to a v0.2 lesson:

  • ATtiny202 MCU — real brown-out detector, UPDI single-wire programming, ~1µA sleep.
  • Button on a GPIO with pin-interrupt wake — presses cost ~0 µAh (v0.2 woke by
    dead-shorting the cell, ~11 µAh/press).
  • Low-side MOSFET driver + one series resistor per LED — LED current set by design.
  • Brighter LEDs (XL-1608UWC-04, ~3× the light) and a slimmer CR2016 holder.
  • 3-pad UPDI header — programming can't collide with the LEDs.

Reproducibility

Every artifact below is regenerated byte-for-byte from the tagged source with the
pinned, digest-locked toolchains — no host tools involved:

Toolchain Pin
Commit f23d66c4d8e4dcc178d2df05738b99fc2744633d
KiCad (board, fab bundle) kicad/kicad@sha256:165c81785b2df23a09892f4cc53bc0095a83b469bfbbe07989670d64049677a7 (10.0.2)
avr-gcc (firmware) debian@sha256:1275c5673a6135ff07b289ddafe4e2270dceb08eda14c0c69bb1b93ee25a9416 (trixie, gcc-avr 14.2.0)
FreeCAD (enclosure) FreeCAD 1.1.1 headless on the same trixie base

Rebuild from a clean checkout of the tag with make build && make fab (see tools/).
Verify downloads with sha256sum -c SHA256SUMS.

Assets

Asset What it is
…-gerbers.zip, …-bom.csv, …-cpl.csv The three JLCPCB uploads — the exact manufacturing inputs
…-board.png, …-1to1.pdf, …-board.step Fab review: render, 1:1 paper fit-check, 3D model
…-firmware.hex ATtiny202, 422 bytes. Fuse bodcfg=0x06 (1.8V BOD, sampled)
…-{top,bottom,shield}.{step,stl} 3D-printed shell: flexure lid, PCB tray, membrane shield
SHA256SUMS Checksums over every asset above

Ordering (JLCPCB)

Qty 30, Economic SMT assembly, top side. Upload the gerbers/BOM/CPL; set
white soldermask (the board face is the reflector behind the LEDs). Per-board parts
≈ $0.74 USD; ≈ $100–105 AUD shipped. Boards arrive blank — flash over UPDI
(make fuses once, then make flash) and drop in a CR2016 (cells are not part of the
JLCPCB order).

Before promoting to final v0.3.0

Nothing here has touched real hardware. Open items:

  • Verify part orientations on the JLCPCB assembly preview — ROTATION_CORRECTION
    in design.py is empty, so the CPL angles are raw KiCad angles. The one that bites:
    BT1's insertion mouth must face the WEST board edge. Record any fix and re-run
    make fab before paying.
  • First-article checklist (validate one unit before committing the batch):
    programming works; sleep current < 5µA; show plays and a press costs no measurable
    charge; brightness through an actual glass (150Ω is a starting value — may rework to
    100Ω); worn-battery degrades gracefully with no reset loop; press-during-show /
    long-press / double-press behave; splash test.

Coaster v0.2.1

Choose a tag to compare

@owahltinez owahltinez released this 11 Jun 01:17

Final release of the v0.2 board line. The hardware design has moved on to v0.3 (see pcb/ on main), so this release wraps up everything needed to build, flash, and print the v0.2 coaster.

Changes since v0.2.0

  • Firmware: long-press brown-out fix — the show now plays only on a true power-on reset (PORF), making a worn-battery reset-relight loop impossible, with a soft-start settle phase so a cell depressed by a long press recovers before the bright phase.
  • Enclosure: first release of the 3D-printed shell. The FreeCAD source (enclosure/coaster.FCStd) is now in the tree with a headless STEP/STL export build (make -C enclosure build).

Assets

Asset Notes
coaster-v0.2.1-firmware.hex ATtiny13A, 282 bytes. Fuses: lfuse=0x6A, hfuse=0xFD (1.8V BOD). Flashing recipe and gotchas in the README at this tag
coaster-v0.2.1-schematic.{svg,png} Schematic renderings of the v0.2 board
coaster-v0.2.1-schematic.net Protel netlist (canonical machine-readable circuit)
coaster-v0.2.1-{top,bottom,shield}.stl 3D printing assets: spiral-flexure lid, PCB tray, thin insert between PCB and lid
coaster-v0.2.1-{top,bottom,shield}.step Same bodies as STEP, for CAD interference checks

The schematic assets describe the v0.2 board and are carried over from tag v0.2.0 (the v0.2 EasyEDA design source lives in the tree at that tag); the pcb/ directory at this tag already contains the in-development v0.3 KiCad design.

v0.2.0 — first stable firmware for the v0.2 board

Choose a tag to compare

@owahltinez owahltinez released this 06 Jun 04:48

First stable firmware for the v0.2 coaster board.

  • Fixes the reset-relight loop on worn batteries (BOD at 1.8V + crash cookie in .noinit SRAM)
  • Breathing glow effect with perceptually-corrected fade-out
  • PWM-capped LED current for longer battery life (~13 µAh per show, ~6 years standby)

Flashing (USBasp): make fuses && make install, or with just avrdude using the attached hex:

avrdude -c usbasp -p attiny13a -B 32kHz -U hfuse:w:0xfd:m -V -U flash:w:main.hex
avrdude -c usbasp -p attiny13a -B 16kHz -U flash:v:main.hex

Required fuses: lfuse=0x6A (factory default), hfuse=0xFD (BOD at 1.8V — required, see README).