Skip to content

Charli, a tabletop pet that guards your phone so you can stay focused

Tangible interaction · Physical computing · One-week sprint · NID Bengaluru 2026

Charli concept render

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
Title card of the Charli demo film: Project Brief, Tabletop Pet to Reduce Phone Distraction. Course: Digital Fabrication. Faculty: Allwin Williams. Akhil Cleatus, IxD - 25

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.

  • Sketch of the shadow seeker

    Reacts to light

    Shadow seeker

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

  • Sketch of the swarm cubes

    Reacts to each other

    Swarm cubes

    Small cubical bots that navigate independently and join together to form larger, collective structures.

  • Sketch of the shy insect

    Reacts to people

    Shy insect

    A bot with mechanical legs. When it recognises human movement, it instinctively scurries away.

  • Sketch of the phone guard dog

    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.

  • Sketch of the amoeba light

    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.

  • Box-dog concept sketch
    First form: a box dog with a tail, wheels and a phone slot on top.
  • Labelled component sketch
    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.

  • OLED face: resting

    Waiting

    When No phone in the cradle.

    Charli Resting face, belly dark.

  • OLED face: happy

    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.

  • OLED face: eating

    Eating

    When The focus timer is counting down.

    Charli Face switches between a chewing animation and the countdown; belly shows minutes left.

  • OLED face: angry

    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.

  • OLED face: happy

    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 motor

    Servo

    Tail-wag hello

    The tail swings for three seconds when a phone is docked.

  • Rotary encoder

    Rotary encoder

    The knob is food

    One click feeds one minute. Turning it feels like portioning a meal.

  • MAX7219 8×8 LED matrix

    MAX7219 8×8

    A belly that counts

    One LED per minute, draining as the meal is eaten.

  • SH1106 OLED display

    SH1106 OLED

    A face that chews

    A pellet animation alternates with the countdown every 3 s.

  • HC-SR04 ultrasonic sensor

    HC-SR04

    Eyes that notice hands

    The ultrasonic eyes check for a hand within 12 cm.

  • Rotary encoder

    DC motors

    Lunge and retreat

    A short charge forward and back, then a 4 s cool-down.

  • Buzzer

    Buzzer

    Growl and chime

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

  • VL53L0X time-of-flight sensor

    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.

  • Bench wiring
  • Breadboard tests
  • Arduino and driver
  • Sensor wiring

02

Getting it to move

A two-motor chassis on the floor, so the guard reaction could lunge forward and back away.

  • Chassis on the floor
  • Moving chassis
  • LED matrix test
  • Face and eyes on the chassis

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.

  • Flat-pack layout drawing
  • Laser-cut body
  • Cardboard shell
  • Cardboard shell, side

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.

  • Week-one Charli in the room
  • Side view
  • Three-quarter view

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 eating

Circuit

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.

INPUTS

HC-SR04 ultrasonic

Eyes · hand within 12 cm

HC-SR04 ultrasonic sensor
TRIGECHO

VL53L0X time-of-flight

Cradle · phone under 5 cm

VL53L0X time-of-flight sensor
SDASCL

Rotary encoder

Knob · 1 click = 1 min

Rotary encoder
CLKDTSW

CONTROLLER

Arduino

Microcontroller · six-state mood machine

A2D2A4A5D3D4D5A4A5D10D13A3D9D6D7D8D11D12

OUTPUTS

SH1106 OLED

Face · I2C 0x3C

SH1106 OLED display
SDASCL

MAX7219 8×8 matrix

Belly · minutes left

MAX7219 8×8 LED matrix
DINCLKCS

Servo

Tail · wags hello

Servo motor
SIG

Buzzer

Voice · growl & chime

Buzzer
+

Motor driver → 2 DC motors

Legs · lunge & retreat

Motor driver
IN1IN2IN3IN4

5V and GND run to every module and are left out for clarity. Pin map from charli.ino.

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.

  • 3D-printed shell
    Printed shell with the servo, Arduino and LED matrix going in.
  • 3D-printed shell, head
    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.