BS ECE · Carnegie Mellon · May 2028

zhaojinchu@cmu.edu github.com/zhaojinchu linkedin.com/in/zhaojinc


AN-010 · Fun · Finished
Started Sep 2025

Switcherooni: flicking the dorm lights from bed


1.0Abstract

I wanted to turn the dorm lights off from bed, so I built a Bluetooth-controlled servo that clamps onto the light switch using its existing screws. Three versions later, Mk3 runs about four days on three AA cells and doesn’t chatter the switch.

At a glance

Parameter Value
Status Finished
When and where Sep 2025, my dorm
Built with Arduino Nano RP2040 Connect with BLE, an HS-311 servo on a boosted 6 V rail, 3 × AA rechargeable cells; Fusion 360, PETG on a Bambu Lab X1 Carbon
Mk1 → Mk3 An ESP32-S2 and a micro servo on USB (torque-starved), then an HS-311 in a stiffer enclosure, then the RP2040 with BLE and batteries
Battery life About four days, advertising every 3 s
Control Two hex commands (0x01 / 0x00) over BLE select debounced servo pulse-width presets
Switcherooni Mk2: a black 3D-printed plate embossed “Switcherooni Mk2”, with a servo mounted above the cutout for the light-switch toggle, on a wooden desk
Mk3 clamped onto the dorm light switch.

Mk1: baseline

Took inspiration from James Hobson’s build but refactored the arm geometry to keep torque inline with the toggle. An ESP32-S2 prototype drove an S51 micro servo straight from USB power, enough to prove the concept, but torque-starved. Fusion 360 CAD printed on a BambuLab X1 Carbon in PETG, with a quick-release mount so I could iterate overnight.

Mk2: refinements

Upgraded to an HS-311 for headroom and reworked the enclosure for rigidity and better clamp distribution. Learned the hard way that off-the-shelf servo CAD is rarely accurate. Shimmed with washers to recover clearance and captured those tolerances in the next revision. Separated the bracket from the electronics bay to isolate vibration and make servo swaps painless.

Mk3: battery and BLE

An Arduino Nano RP2040 Connect handles BLE, advertising on a three-second interval to stretch battery life to about four days on three AA rechargeables. Hex commands (0x01 / 0x00) fire position presets; firmware maps them to servo pulse widths with debounce logic so the switch never chatters. A boost converter gives the servo a stable 6 V rail while the microcontroller stays happy at 3.3 V.

Switcherooni Mk3 attempting to flick a light switch over BLE

Mk3 demo of the BLE-controlled throw (albeit failing).
Switcherooni CAD assembly
Final CAD assembly with servo bay, clamp, and adjustable horn.

What broke

  • Mk1 couldn’t throw the switch reliably: not enough torque from an S51 on USB power.
  • The HS-311’s published CAD didn’t match the part; the clearance came back with washers and a note to never trust a servo model again.
  • The clip above is a failed throw, kept in on purpose.

What I’d do differently

Design the PCB first. Power management and BLE on a perfboard is what makes Mk3 look like a science fair project instead of a product.

What’s next

Control is currently a bare-bones mobile BLE terminal; a proper UI, scheduling, and multi-device support are next. Then swapping the Nano for an nRF52 and a Li‑ion pack to push battery life into multi-week territory, and a PCB that consolidates power and BLE so the project can be packaged for other lazy light-switch aficionados.

← All projects