Desk lamp robot that senses the room and shows feelings

Oct 11, 2026 Last reply: 1 day ago 2 Replies
Jump to replies (2)

The first version of this lamp had a camera and a mic, and that was it. Two months on, deebuildsthings has turned it into something closer to a desk companion: it picks up on the air in the room and shows how it feels, and the maker says it is now more than a fun decoration.



Hardware-wise, the arm has five degrees of freedom and runs on STS3215 bus servos off a single 12V cable. A Sensirion SEN63C sits on the I2C bus and reports four sizes of particulate matter plus temperature, humidity, and true CO2. The head's ring light quietly mirrors the lamp's mood, and a USB DAC is there to kill ground noise. For listening, an on-device emotion model called emotion2vec reads the feeling in speech.



The software is where the two months of updates show. Flat TTS gave way to ElevenLabs v4 Turbo for real pitch, cadence and pauses. The personality lives in a markdown file the agent parses every turn, and editing a few bullet points changes the character without touching code. The agent backend is decoupled in config, and moving from Hermes to OpenClaw took a single setting change while keeping the same voice and quirks plus everything learned. The agent layer queries abstract keys like pm, co2, and temperature, which keeps the sensor side swappable, and events fire only when metrics drift over time rather than on every raw sample. The HAL caches the latest sensor snapshot in RAM while a background OS worker polls, and readings are exposed read-only over Web and MQTT. The project is open source.



Standout result: the lamp noticed a room getting stuffy during cooking downstairs before the maker did. Out of the box it comes across as warm and curious and skips tech jargon. One open item: hardware stays as is for at least a couple of months before any v2 gets considered.



Project by u/deebuildsthings. Original post:

formatting link


Curious about how the arm actually moves. Do the STS3215 servos feed position data back into the motion itself, or is the easing handled separately from whatever the servos report?

The maker has covered this one. Motion starts from the real Present_Position and Present_Load values read off the servo bus, and that bus data gets used for clamping at joint limits, lean-back clamping, and stopping on contact or overload. The easing itself is a separate critically damped smoothing layer built on smooth_damp with a deadband and resampled motion clips.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required