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

Automated control for manual dial thermostats.

Stepper driveAngle sensing3 × AA

Case
173.5 × 136.4 × 53.5 mm
Link
Bluetooth Low Energy
Dial travel
180°
Battery
≈ 1.7 years*

* Calculated: alkaline cells, 4 moves every day of the year.

01 · How it works

Your thermostat stays.Model 01 turns its dial.

CommandMotorCordDial

Model 01 does not replace your thermostat. It takes the place of the snap-on cover and turns the dial shaft the way your hand turns the knob, so the thermostat still switches the heating itself. Press Move to ON and watch the drive turn the dial.

Interactive drive model · to scale
Capstan and sector, front view, to scale

Face marks, end stop and pointer as measured on the real thermostat. Shapes simplified; sizes from the v6 drive.

Drive readout · simulated
Dial travel
000°
Motor shaft turns
0.00
Motor half steps
0
Motor time, s
0.0

Thermostat off

The orange pointer shows where your knob's pointer would point: OFF just short of LO, ON from straight up. The keys run a move 10 times faster than the motor does. A full move is 3.15 turns of the motor shaft: about 12,840 half steps (4,076 per turn, through the motor's 63.68 : 1 gearbox) at 2.0 ms each, 25.7 s. The thermostat switches on 140° past its LO stop, 120° of travel from OFF. OFF sits 20° short of the LO stop, so the drive never presses the dial against it.

  1. Step 01

    Fit

    The thermostat's snap-on cover comes off. Model 01 snaps onto the metal plate in its place, two side screws take up the play, and a sector pushes onto the dial shaft where the knob was.

  2. Step 02

    Command

    Your Raspberry Pi sends ON or OFF over Bluetooth Low Energy. The XIAO nRF52840 inside receives it and switches on the angle sensor.

  3. Step 03

    Drive

    The stepper motor turns the capstan. The cord turns the sector, and the dial shaft with it, 6.30 times slower: 3.15 motor turns move the dial 180°, in 25.7 s.

  4. Step 04

    Confirm

    The AS5600 reads the shaft's angle, and the motor stops at OFF or ON. If the dial does not move, the motor stops and the unit reports it.

  5. Step 05

    Thermostat

    At ON, the thermostat's own mechanism switches the heating, as it does when the knob is turned by hand. Model 01 then switches off everything except the radio.

02 · Introducing Model 01

No buttons. No screen.No lights. By design.

Faceted enclosureModel 01

Model 01 holds every working part inside one faceted case: 45° corner clips, sides that angle in toward the wall, and a 3.0 mm shadow gap round the cover. Nothing to press, nothing to read, nothing lit. Your Raspberry Pi sends the command; Model 01 turns the dial. Pictures are path-traced renders of the CAD model.

  1. Battery access panelchange cells with the unit on the wall
  2. Grip indentsfive grooves for a fingertip hold
  3. Shadow gap3.0 mm wide, 2.6 mm deep, all round
  1. 45° corner clips16 mm, on all four corners
  2. Model tag01
  3. Facet markingEMBER THERMAL DRIVE TC-01
  4. EMBER wordmarkStop letterforms in a framed plate

Model 01 enclosure

173.5 × 136.4 × 53.5 mm · PLA · render of the CAD model

  1. AFrom below left: the sides angle in toward the wall.

  2. BRight side, with the facet marking.

  3. CTop port: the thermostat plate's edge stays open to the room, as with the original cover.

  4. DBottom port, matched to the top.

  5. EAccess panel off: three AA cells, changed in place. Cells shown in a stand-in pocket.

  6. FThree AA cells in series. Alkaline or NiMH.

  7. GModel 01 rendered into a photo of the thermostat's wall. Composite image; the unit is in development.

  8. HThe same wall from further back, above the light switch.

03 · Features

No more walkingto the dial.

Command linkAngle sensing3 × AA

Model 01 fits a line-voltage dial thermostat for electric in-floor heating and turns its dial to OFF or ON when your Raspberry Pi sends the command. The thermostat stays. The wiring stays. The dial turns on command.

04 · Inside Model 01 · cover off

Every part placed.Every wire routed.

Cover offFront viewFrom CAD

Lift the cover and this is Model 01: battery bay, motor and capstan, cord-driven sector, angle sensor and controller. Each part is placed in the CAD model, every wire is routed with its length, and the build script reports any overlap.

  1. ULN2003 driver boarddrives the motor's four coils
  2. Battery bay v1three AA cells in series
  3. 28BYJ-48 motor and capstan v642 mm left of the dial shaft
  4. Seeed XIAO nRF52840controller and radio; USB-C faces down
Line drawing of the case from the front with the cover off, showing the battery bay, motor, sector, sensor, controller board and wires.
  1. Side screwone each side, pressing a tongue onto the plate's edge
  2. AS5600 angle sensor2.0 mm in front of a magnet in the sector's hub
  3. Sector v6fixed to the dial shaft; the cord runs round its rim
  4. Wiringevery wire routed with its length

Model 01 · internals

From the CAD model · ULN2003 and XIAO sizes estimated

05 · Capstan drive · 6.30 : 1

Capstan drive.6.30 : 1 reduction.

0.50 mm braided cord180° travel

A grooved capstan on the motor shaft winds a 0.50 mm braided cord. The cord's ends are anchored to a sector on the dial shaft. The cord's centre runs at 5.66 mm from the motor shaft and 35.66 mm from the dial shaft. Result: the dial turns 6.30 times slower than the motor shaft, with 6.30 times its torque, less friction, over 180° of travel. The interactive model is in section 01.

  1. Twin-sled tensioninga screw pulls each sled to take up slack
  2. Cord clampa screw locks each cord end
  3. Level rim entrya round hole where the cord enters the rim
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.
  1. Capstangrooved for the 0.50 mm cord, with spare turns
  2. Cord face35.41 mm radius between two lips; cord centre at 35.66
  3. Sector180° of travel
  4. Push-fit hubD hole for the dial shaft

Capstan drive v6

Sent to the printer 2026-10-16 · fitting next

Development log · six drive versions
v1:
The cord slid off the edge of the sector: its face had no spare width.
v2:
Lips on the sector kept it there, but the cord slid along the capstan, piled up at one end and came off.
v3:
A lip at each end of the capstan.
v4:
A sector for the wall unit, whose D hole takes the whole D part of the dial shaft. Not printed.
v5:
Each 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.
v6:
A 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.

06 · Power system

Three AA cells.No charger. No regulator.

0.75 mAh per move20 µA standby

Model 01 runs straight from three AA cells: no charger, no regulator, no wall adapter. Between moves it switches off the motor coils and the angle sensor and keeps only the radio on, ready for the Pi's next command. Cells flat? The motor's gearbox holds the dial where it was, and the thermostat keeps regulating at that setting.

  1. Mounting tabone of three posts
  2. Keyed + contacta reversed cell cannot touch it
Line drawing of the battery bay with three AA cells, seen from the front left.
  1. ULN2003 driverbehind the bay
  2. Access panel screw boss
  3. 3 × AA in seriesabout 4.8 V new, alkaline
  4. Isolated contact pocketsPLA between pieces at different voltages

Battery bay v1

Modelled 2026-10-16 from estimates · not printed

Power system · Model 01
Cells:
3 × AA, alkaline or NiMH
Voltage:
about 4.8 V with new alkaline cells
Regulator:
none
One move:
0.75 mAh calculated
Between moves:
20 µA estimate
Usable charge:
81 % of an alkaline cell, to the motor's 3.3 V cutoff
Cell change:
unit stays on the wall
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 %

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

07 · Circuit

Three modules.Fifteen wires.

XIAO nRF52840ULN2003AS5600

One controller, one motor driver, one angle sensor, thirteen solder joints. The XIAO drives the motor through the ULN2003 and reads the AS5600 over I2C. The sensor draws power from two XIAO pins only while it reads, and motor current returns straight to the cells, never across the controller board.

Wiring schedule · from → to

Power

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

Angle sensor

XIAO D0 + D1
AS5600 VCC
socket
XIAO D4
AS5600 SDA
socket
XIAO D5
AS5600 SCL
socket
XIAO GND
AS5600 GND
socket
AS5600 GND
AS5600 DIR
soldered

Motor

XIAO D7 to D10
ULN2003 IN1 to IN4
jumpers
Motor plug
ULN2003 socket
plug

Spare pins: 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.

Engineering notes
Pad limit:
every part on the XIAO's battery pads is rated for at least 6 V; three new alkaline cells give about 4.8 V. Four cells (about 6.4 V) would be over it.
Routing:
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.
Wire stock:
female-to-female jumpers, cut in half where a wire has a socket at one end only.

08 · Design history

Thirteen versionsin one day.

v1 to v6.615 October 2026

The Model 01 case went through thirteen versions on 15 October 2026. Each one was built by its own script, saved as its own STEP file and reviewed in Autodesk Fusion. Verdicts are the ones given at the time; a lit lamp marks each version that was liked or carried forward.

  1. v1
    Line drawing of case v1.

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

    Verdict: too much like the 1980s, not enough futurism.

  2. v2
    Line drawing of case v2.

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

    Verdict: not reviewed; reference images came instead.

  3. v3
    Line drawing of case v3.

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

    Verdict: not interesting enough; wanted interesting edges and sides that angle in.

  4. v4
    Line drawing of case v4.

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

    Verdict: liked; saved as a favourite.

  5. v5
    Line drawing of case v5 seen from below.

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

    Verdict: interesting, but the angle is too steep and goes too far in.

  6. v6
    Line drawing of case v6 seen from below.

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

    Verdict: loved; saved as a favourite.

  7. v7
    Line drawing of case v7 seen from below.

    Three tries at a new direction: asymmetric cuts, a tower and pod, then a hull with a fin. Seen from below.

    Verdict: still too close to the earlier designs.

  8. v6.1 – v6.2
    Line drawing of case 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.

    Verdict: the design to go with.

  9. v6.3 – v6.5
    Line drawing of case v6.5.

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

    Verdict: looks good; wanted the screws on opposite sides.

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

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

    Verdict: right, and moving in the direction wanted.

09 · Technical data

Technical data.Model 01.

DesignCalculatedDatasheetEstimate

Every figure is marked with its source: design (the CAD model), calculated, datasheet, or estimate.

Ember 01 · environmental control unit
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:
3.15 motor shaft turns: about 12,840 half steps, 25.7 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

10 · Development status

Development status.17 October 2026.

DoneIn progressNot yet

Model 01 is in development. Lit lamp: done. Half-lit: in progress. Dark: not started or not tested.

Status board · Model 01
  • Motor on the deskESP32 and ULN2003 board: the motor turned both ways on 2026-10-13.
  • Cord sleds v5Printed and fitted on 2026-10-15.
  • Capstan v6 and sector v6Sent to the printer on 2026-10-16; not yet fitted.
  • Wall case v6.6Designed and fitted to the measured thermostat; not printed. The cover's fastening is not designed.
  • Battery bay v1Modelled from estimates; waiting for caliper values of a cell and the contacts.
  • WiringPlanned and routed in the model with every wire's length; not built.
  • Motor torque on three AA cellsNot tested on the real dial.
  • Battery lifeCalculated; not measured.