Charli, a tabletop pet that guards your phone so you can stay focused
Tangible interaction · Physical computing · One-week sprint · NID Bengaluru 2026

Intro
We rarely pick up our phones because we need to. Charli is a small robotic pet that holds your phone, eats the focus minutes you feed it, and gets grumpy if you try to take the phone back early.
Charli started as a one-week sprint in the Digital Fabrication course. Instead of a lock or an app blocker, it borrows something we already respond to: a pet’s mood. In seven days I went from sketches to a working prototype: electronics on the bench, a moving chassis, laser-cut and cardboard bodies, and a white week-one body that runs the full loop. The project is still in progress. The next version, Pooni, is being 3D printed now.
- Role
- Concept, electronics, code, fabrication
- Timeline
- One-week sprint
- Faculty
- Allwin Williams
- Course
- Digital Fabrication, NID Bengaluru
- Status
- Week-one prototype done; v2 in progress

The problem
We reach for our phones by reflex, not by need. App blockers fight that reflex with rules, and rules are easy to switch off. Charli puts a small, living reason between the hand and the phone: a pet that is eating, and doesn’t like being interrupted.
Ideation
Five autonomous creatures, and the one that earned a place on the desk
The brief asked for an object that senses its surroundings and responds on its own. I sketched five creatures that react to light, to people and to each other.

Reacts to light
Shadow seeker
Hides in the shadows. It finds the areas with the lowest light and moves toward them on its own.

Reacts to each other
Swarm cubes
Small cubical bots that navigate independently and join together to form larger, collective structures.

Reacts to people
Shy insect
A bot with mechanical legs. When it recognises human movement, it instinctively scurries away.

Selected concept · reacts to people + phone
Phone guard dog
A small pet-like dog guards the phone stand. When someone tries to pick the phone up, it barks and circles to discourage use.

Reacts to people
Amoeba light
A floating installation inspired by an amoeba. When a person comes near, it glows and expands toward them.
Refining
Putting the phone inside the dog
A dog that circles a phone sounded charming on paper. Building it raised three problems, so the phone stand moved inside the dog: dock the phone, turn a knob to set a feeding time, and Charli guards it until the meal is done.

First form: a box dog with a tail, wheels and a phone slot on top. 
Mapping parts to the body: ultrasonic eyes, OLED face, LED matrix belly, rotary knob, tail and wheels.
Constraint
Too small to fabricate
A dog that moves around the phone has to be tiny, and every millimetre lost makes the body harder to build.
Constraint
Charging
A pet that roams needs its own battery and a charging routine.
Constraint
Cables
A wired version would drag and tangle around the phone in everyday use.
Interaction model
Six states, one mood at a time
Charli runs as a finite state machine. Every state has its own face on the OLED, a pattern on the LED belly and a movement, so you can read how the pet feels from across the desk.
Waiting
When No phone in the cradle.
Charli Resting face, belly dark.
Hello
When The time-of-flight sensor reads a phone closer than 5 cm.
Charli Happy face, tail wags for 3 seconds.
Choosing the meal
When You turn the knob. Each click is one minute, up to 64.
Charli Belly LEDs fill one by one, the face shows the minutes. Starts 3 s after the last turn.
Eating
When The focus timer is counting down.
Charli Face switches between a chewing animation and the countdown; belly shows minutes left.
Guarding
When Ultrasonic eyes see a hand within 12 cm.
Charli Angry face and a growl. Lunges for 1.5 s, retreats for 1.5 s, waits 4 s, then goes back to eating.
Full
When The timer reaches zero.
Charli Happy face and a chime. Turn the knob to start another meal.

Reset
Lift the phone out at any moment and Charli stops its motors, clears its belly and goes back to Waiting. Taking the phone is always possible; it just costs you the pet’s good mood.
Key interactions
Every sensor has a personality, not just a job

Servo
Tail-wag hello
The tail swings for three seconds when a phone is docked.

Rotary encoder
The knob is food
One click feeds one minute. Turning it feels like portioning a meal.

MAX7219 8×8
A belly that counts
One LED per minute, draining as the meal is eaten.

SH1106 OLED
A face that chews
A pellet animation alternates with the countdown every 3 s.

HC-SR04
Eyes that notice hands
The ultrasonic eyes check for a hand within 12 cm.

DC motors
Lunge and retreat
A short charge forward and back, then a 4 s cool-down.

Buzzer
Growl and chime
A low 400 Hz growl warns you; a bright chime ends the meal.

VL53L0X
Lift to reset
Time-of-flight sensing knows when the phone leaves.
Build
Seven days, four passes
I built Charli in short loops: get one part working, put it in a body, see what breaks, then rebuild. Each pass below fed the next.
Electronics on the bench
Wiring the Arduino to the ultrasonic sensor, OLED face, LED matrix, rotary encoder, servo tail and buzzer, and testing each reaction on its own.
02
Getting it to move
A two-motor chassis on the floor, so the guard reaction could lunge forward and back away.
03
Giving it a body
Flat-pack drawings, a laser-cut body to check fit, and quick cardboard shells to see the electronics inside a real form.
04
Week-one Charli
A white body with ears, a phone cradle on its back and the knob up front, running the full dock, feed and guard loop.
Code
A sketch that reads like a pet’s day
I wrote the Arduino code around the pet’s states instead of its sensors, so every reading becomes a change of mood rather than a raw event.
charli.ino
/* ===== FSM ===== */
enum State { IDLE, PHONE_DETECTED, TIME_SELECTION,
TIMER_RUNNING, INTRUDER_ALERT, TIMER_COMPLETED };
#define PHONE_DIST_THRESHOLD 50 // mm, phone in cradle
#define TAIL_WAVE_MS 3000
#define AUTO_START_MS 3000
#define ALERT_COOLDOWN_MS 4000
case TIME_SELECTION:
if (digitalRead(PIN_ENC_DT) != clk) ledCount++;
else ledCount--;
ledCount = constrain(ledCount, 0, 64); // 1 LED = 1 min
updateMatrix(ledCount);case TIMER_RUNNING:
if ((now / 3000) % 2 == 0) drawDogFace("EATING");
else drawCountdown(rem);
long d = (duration / 2) / 29.1; // ultrasonic, cm
if (d > 1 && d < 12) startAlert(); // hand nearby
case INTRUDER_ALERT:
drawDogFace("ANGRY");
if (t < 1500) moveBothCCW(); // lunge
else if (t < 3000) moveBothCW(); // retreat
else if (t < 3000 + ALERT_COOLDOWN_MS) stopMotors();
else currentState = TIMER_RUNNING; // back to eatingCircuit
Everything runs from one Arduino
Inputs on the left sense the phone, the hand and the knob. Outputs on the right give Charli its face, belly, tail, voice and movement. The OLED and time-of-flight sensor share one I2C bus.
Next · in progress
Pooni: a rounder, friendlier pet
The second version keeps the same behaviour but rethinks the body. Pooni is a soft, rounded pet with the phone docked on its back, a glowing mouth for a face and an LED belly. When a hand reaches in, it backs away instead of charging.

Printed shell with the servo, Arduino and LED matrix going in. 
Ultrasonic eyes and LED belly mounted in the new head.
Reflection
What one week taught me
Working in short build loops meant every day ended with something I could hold and test, and each version exposed the next problem. Charli also showed me that emotion can nudge harder than restriction: you can always take the phone back, the pet just won’t be happy about it. Designing the behaviour as states first kept its personality consistent while the body kept changing. Next, I’m finishing Pooni’s printed body, then running focus sessions with students to see how long the pet holds their attention.


















