The Ember unit on a wall in warm lamp light and low sun: an off-white faceted case with a black 01 tag and an orange EMBER wordmark in a black frame.
EMBER, Environmental Control Unit ENVIRONMENTAL CONTROL UNIT

Fits over a dial thermostat and turns the dial on command.

Case
173.5 × 136.4 × 53.5 mm
Power
3 × AA cells
Link
Bluetooth Low Energy
Dial travel
180°
Battery life
≈ 1.7 yearsAlkaline cells, 4 moves a day, calculated
01
01

Section 01 · The unit

No buttons. No screen. No lights.

The shape carries the style: cut edges, clipped corners, sides that angle in toward the wall, a gap where the cover meets the base, and the EMBER wordmark. Every picture here is path-traced from the CAD model with Mitsuba 3, and lit like the room the unit is for: a lamp on the left and low sun from the right.

In the room it is for

The render placed into two photos of the thermostat's wall, in place of its original cover, under the photos' own light. These are composites: the unit is not built yet.

Fig. 8 Render in photo IMG_0201.
Fig. 9 Render in photo IMG_0203, with the light switch below.
02

Section 02 · What it does

Turns the dial you already have.

Ember fits on a line-voltage dial thermostat that switches electric in-floor heating. It has one job: turn that dial to off, or to on, when the Raspberry Pi tells it to.

03

Section 03 · Inside

Everything in its place.

Front view with the cover off, drawn from the CAD model of wall case v6.6. Every part below is placed in the model, and the build script reports any overlap between them. Choose a number to find the part.

Line drawing of the case from the front with the cover off, showing the battery bay, motor, sector, sensor, controller board and wires.

Wall case v6.6 · front · cover off · 173.5 mm wide

  1. 1Battery bay v1 Three AA cells in series. Each contact sits in its own pocket, and the + pads are keyed so a cell put in backwards cannot touch them.
  2. 2ULN2003 driver board Switches the motor's four coils. The XIAO's pins cannot supply that current themselves.
  3. 328BYJ-48 motor and capstan v6 42 mm left of the dial shaft.
  4. 4Sector v6 On the dial shaft. The cord runs round its rim, and two sleds and two screw clamps hold the cord's ends.
  5. 5AS5600 angle sensor Centred on the dial shaft, its chip 2.0 mm in front of a magnet in the sector's hub.
  6. 6Seeed XIAO nRF52840 Bottom left, pins to the front, with its USB-C socket 0.2 mm from the bottom wall.
  7. 7Wires Every wire routed in the model with its length, and kept clear of every part.
  8. 8Side screws One each side, 35 mm above the dial. Each pushes a plastic tongue onto the edge of the thermostat's plate.
04

Section 04 · Cord drive

6.30 turns of the motor for one turn of the dial.

The motor turns a small grooved capstan. A braided cord 0.50 mm across is wrapped round the capstan, and its two ends are held on a sector (a slice of a disc) fixed to the dial shaft. The cord sits at a radius of 5.66 mm on the capstan and 35.66 mm on the sector, so the dial turns 6.30 times slower than the motor and gets 6.30 times its torque, less friction.

Capstan and sector, front view, to scale

Drawn to scale from the v6 numbers, shapes simplified. Shaft spacing 42 mm. Scale: degrees of travel from OFF.

Dial travel000°
Capstan0.00turns
Half steps0
Motor time0.0s

Thermostat off

The buttons play a move 10 times faster than the motor makes it. A full move is 12,902 half steps at 2.0 ms each: 25.8 s. The thermostat switches on 140 degrees past its LO stop, which is 120 degrees of travel from OFF. OFF is 20 degrees short of the LO stop, so the drive never presses the dial against it.

Line drawing of capstan drive v6 from the front: the round capstan at the top, the sector below it with two sleds and the hub.
Capstan drive v6 · front view · from capstan_drive_v6.py

Drive log

Six versions to keep a cord on a drum.

  1. v1The cord slid off the edge of the sector: its face had no spare width.
  2. v2Lips on the sector kept it there, but the cord slid along the capstan, piled up at one end and came off.
  3. v3A lip at each end of the capstan.
  4. v4A sector for the wall unit, whose D hole takes the whole D part of the dial shaft. Not printed.
  5. v5Each cord end tightened by a screw-driven sled. Fitted on 2026-10-15: the sleds' 3.6 mm of take-up left about 5 mm of slack.
  6. v6A capstan groove sized for the 0.50 mm cord, with spare turns, and a screw clamp for each cord end. Sent to the printer on 2026-10-16; not yet fitted.
05

Section 05 · Power

Three AA cells, no charger, no regulator.

The cells feed the XIAO's battery pads and the motor driver directly. Between moves the motor coils and the angle sensor are switched off; only the radio stays on, so the Pi can connect.

Battery life, alkaline cells

2.4years

864 days at 4 moves a day, October to April

Charge on a day with moves
3.7 mAh
Share taken by the motor
81 %

Years of battery life by moves a day

Choose a bar. Calculated by battery_model.py from Energizer's published discharge curves for the E91 cell and the circuit's currents; not yet measured on the real unit.

06

Section 06 · Circuit

Fifteen wires, thirteen solder joints.

A Seeed XIAO nRF52840 drives the motor through a ULN2003 board and reads the AS5600 sensor over I2C. The sensor is powered from two XIAO pins, only while it reads. The motor's current returns straight to the cells, not across the XIAO's board.

Power

  • Battery +XIAO BAT+soldered
  • Battery +ULN2003 +socket
  • Battery −XIAO BAT−soldered
  • Battery −ULN2003 −socket

Angle sensor

  • XIAO D0 + D1AS5600 VCCsocket
  • XIAO D4AS5600 SDAsocket
  • XIAO D5AS5600 SCLsocket
  • XIAO GNDAS5600 GNDsocket
  • AS5600 GNDAS5600 DIRsoldered

Motor

  • XIAO D7ULN2003 IN1jumper
  • XIAO D8ULN2003 IN2jumper
  • XIAO D9ULN2003 IN3jumper
  • XIAO D10ULN2003 IN4jumper
  • Motor plugULN2003 socketplug

Spare D2 · D3 · D6

Take one cell out before connecting USB

The battery pads also feed the XIAO's lithium charger. With USB connected it would try to charge the AA cells, which can make them leak.

  • Three fresh alkaline cells give about 4.8 V. Every part on the XIAO's battery pads is rated for at least 6 V, so there is about 1 V to spare. Four cells (about 6.4 V) would be over that limit.
  • The step signals use D7 to D10. The sensor wires leave along the XIAO's USB-C end and the motor wires from the top of the other row, so the two groups do not cross.
  • Wires with a socket at one end are female-to-female jumpers cut in half, so no other hookup wire is needed.
07

Section 07 · Design history

Thirteen versions in one day.

On 2026-10-15 each version of the case was built by its own script, saved with its own STEP file, opened in Autodesk Fusion and reviewed. The verdict on each card is the one given at the time. The lamp is lit on each version that was liked or carried forward.

  1. Line drawing of case v1.

    v1

    One box: slanted front, three colour stripes, a grille and a ring panel over the dial.

    Too much like the 1980s, not enough futurism.

  2. Line drawing of case v2.

    v2

    Separate raised forms: a battery pod and an eight-sided dial pod.

    Not reviewed; reference images came instead.

  3. Line drawing of case v3.

    v3

    A flat cover in a deeper base, a large plain disc over the dial, round vent holes.

    Not interesting enough: wanted interesting edges and corners, and sides that angle in.

  4. Line drawing of case v4.

    v4

    The sides angle in toward the wall; the front edges are cut by different amounts; an L-shaped battery cover.

    Liked. Saved as a favourite.

  5. Line drawing of case v5 seen from below.

    v5 seen from below

    No disc. Top and bottom angle in steeply, leaving the plate's edges open to the room.

    Interesting, but the angle is too steep and goes too far in.

  6. Line drawing of case v6 seen from below.

    v6 seen from below

    Flat top and bottom, with a port over each of the plate's edges.

    Loved. Saved as a favourite.

  7. Line drawing of case v7 seen from below.

    v7 seen from below

    Three tries at a new direction: asymmetric cuts, a tower and pod, then a hull with a fin and a drum over the dial.

    Still too close to the earlier designs.

  8. Line drawing of case v6.2 seen from below.

    v6.1 – v6.2 seen from below

    Back to v6: EMBER on the front, finger indents, an open gap where cover meets base. Then the Stop letters in a frame.

    The design to go with.

  9. Line drawing of case v6.5.

    v6.3 – v6.5

    Fitted to the thermostat as measured with calipers; side screws; the same 16 mm clip on all four corners.

    Looks good; wanted the screws on opposite sides.

  10. Line drawing of case v6.6 from the front.

    v6.6 working version

    One side screw each side, directly opposite; a lip and a 3.0 mm gap all round. Changed in place from here on.

    Right, and moving in the direction wanted.

08

Section 08 · Specifications

Data plate.

Each value is marked with where it comes from: the design (the CAD model), a calculation, a datasheet, or an estimate.

EMBER · MODEL 01 01
Case
173.5 × 136.4 × 53.5 mm; 157.5 × 122.4 mm on the wall
design
Fits
859M line-voltage dial thermostat, in place of its snap-on cover
design
Mounting
On the thermostat's metal plate; two M3 side screws press plastic tongues onto its edges
design
Motor
28BYJ-48 stepper, ULN2003 driver board
datasheet
Drive
Capstan and sector, 0.50 mm braided cord (85 lb), ratio 6.30 : 1
design
Dial travel
180° from OFF; OFF is 20° short of the LO stop
design
One move
12,902 half steps, 25.8 s at 2.0 ms per half step
calculated
Controller
Seeed XIAO nRF52840
datasheet
Radio
Bluetooth Low Energy, commands from a Raspberry Pi
design
Angle sensor
AS5600 magnetic, 12-bit: 0.088° per count
datasheet
Power
3 × AA, alkaline or NiMH, about 4.8 V with new alkaline cells
datasheet
Charge per move
0.75 mAh on average
calculated
Between moves
20 µA
estimate
Battery life
2.4 years at 4 moves a day, October to April; 1.7 years at 4 moves every day (alkaline)
calculated
Material
PLA, printed on a Bambu Lab P1S with a 0.4 mm nozzle
design
Fasteners
M3 screws into brass heat-set inserts, 5 mm across, 4 mm long
design
Units
One to three to be built
plan
09

Section 09 · Status · 2026-10-17

Where it stands.

Ember is in progress. A lit lamp is done, a half-lit lamp is under way, and a dark lamp is not started or not tested.