Inspiration

In February 2023, Tom Notti, 91, fell in his living room in Cloverdale, California. His phone was on a table he could not reach. He tried to get to it and its battery died. He lay on the floor for about five days. A Meals on Wheels driver heard he had gone quiet, walked around the back of the house and saw him through a window. He died in hospital a week later. His next door neighbor kept a key to his house, "just because he lives alone, and there's no one taking care of him."

The help was two doors away the whole time. Nothing connected the floor to the key.

That gap is common. More than 41,000 adults 65+ died from falls in 2023. In a BMJ study of people over 90 who fell, 80% could not get back up and 30% lay there for an hour or more, and call alarms were available but mostly unused in exactly those cases. Pendants have to be worn and pressed. Pull cords cannot be reached from the floor. Smartwatches need charging every day. None of them wakes up the neighbor with the key.

We did not want to build another alarm. We wanted to build the thing that reaches a person.

What it does

CareBot is a pan-tilt camera on a 3D printed tower that watches one room. It follows the resident, reads 17 body keypoints, and detects a fall or a slump.

When it sees one, it asks: "Sandy, I saw you fall. Are you OK? Say 'I'm OK' or 'help'." If he answers, nothing happens.

If he does not, three things fire in the same second. The nearest neighbors who opted in get a text, his son gets a call, and an agent calls 911 with a briefing. A laptop map shows who was contacted, who said yes, and their walking route drawing itself across Morningside Heights.

Two rules shape everything.

It only says what it saw. The 911 agent speaks from a fact sheet that code builds: what the camera saw, what was heard, who was contacted. Asked "is he breathing?", it answers "I don't know. The device only knows what its camera sees and what it hears." A filter checks every line before it is spoken. It never cancels 911. It reports what was said.

Silence is never OK. Standing back up does not close an incident, because people get up hurt and the person standing might not be the person who fell. Only Sandy's own spoken "I'm OK" closes anything.

And it is honest about its limits. A fall in another room is never seen. We say that on screen.

How we built it

Three of us, one domain each, so there was almost no integration work between people.

Software is Python 3.11. YOLO11n-pose with ByteTrack for bodies, YuNet and SFace to lock onto the resident's face, and a pure state machine with a unit test on every transition. Twilio for texts and calls. Claude for phrasing and for answering the dispatcher, but Claude never chooses an action, and code checks every line it writes. Text only. No camera frames ever leave the robot.

Hardware is a Raspberry Pi 5, a Logitech USB webcam, a Hitec D625MW servo on hardware PWM, a NeoPixel arc over SPI through a level shifter, a buzzer and one big button.

The body is eight printed parts: a chamber for the Pi and speaker, a snap-on lid carrying a three lug bayonet twist lock, a stem, and a head. Every part was generated from a Python script using trimesh and manifold3d, so a dimension change meant editing one constant and re-running. That mattered more than we expected.

Every hardware part sits behind an interface with a mock. The whole system runs on a laptop with no robot attached, which is how the state machine got tested while the printer was busy.

Challenges we ran into

The Raspberry Pi 5 broke every tutorial. RPi.GPIO does not work on it, because the GPIO moved to a separate RP1 chip and its /dev/mem access hits nothing. Neither does pigpio. Every servo guide online is written for a Pi 4. We lost time to this before switching to gpiozero on the lgpio backend, then wrote a diagnostic that checks each layer and prints the fix for its own failure, so nobody else on the team lost the same hour.

A battery that was three different things. We were handed a Turnigy pack labelled "1.2 V 5000 mAh". The box said 30 Wh. 30 divided by 5 is 6 V, so five cells in series, perfect for the servo. We measured it: 2 V. Then we found out the cells were wired in parallel, which makes it a 1.2 V pack with 25 Ah, which also equals 30 Wh. Same label, same box, completely unusable. Forty minutes gone. We ran the servo off a cut USB cable and a power bank instead.

The servos we were given did not fit the robot we had designed. The build assumed SG90 micro servos. What the hackathon had were Hitec D625MW: standard size, metal gear, five times the torque. We measured the head and found 54.5 mm of internal depth. A standard servo's mounting tabs span 54 mm. There was no material left to put a screw through. We killed the tilt axis and went pan only rather than burn 90 minutes on a bracket at 2 a.m.

That turned out to be right for a second reason. An SG90's plastic gears are a fuse. Drive one into a stop and you strip three dollars of nylon. A metal gear Hitec does not strip. It breaks the printed part instead.

One printer, first come first served. The lab allowed one machine at a time, required staff approval over 12 hours, and banned anything over 18. Our parts totalled nearly 10 hours of serial printing. So we scaled the body to 70%, and learned that scale is viral. The base, lid, stem and door all mate with each other, so they could shrink together. The servo plates could not, because servos do not scale. We ended up with a 70% tower, 100% plates, and one bridge part sized for a 70% cavity holding a full size servo.

A bayonet lock that could never lock. The twist lock has three lugs and three slots. The first version modelled each as a full diameter bar, which quietly produces six lugs and six slots at identical angles. Every twist position was an escape position. We caught it by probing the mesh point by point before printing instead of after.

Accomplishments that we're proud of

The honesty rule actually holds. The 911 agent can only speak from a fact sheet that code builds, and a filter rewrites any answer that strays. We red teamed it with dispatcher questions in every incident state, including "Is he breathing?", "Is he conscious?" and "Is he on blood thinners?", graded by the filter and a separate model.

It does not cry wolf. A grandson napping on the couch triggers nothing, because he is not the enrolled resident. Sitting still watching TV only counts after 20 minutes. Answer "I'm OK" and the next check waits twice as long.

We were willing to say no. Walking out of frame is not an emergency. A fall in another room is never seen. One robot watches one room, and we put that on screen rather than hiding it.

The change moment works. A neighbor replies YES, their route draws across a real street map, they arrive and press the button. Because the camera can see Sandy is still on the floor, the robot knows it is not him. "Who are you, and what's happening?" Their answer reaches 911 and his son word for word, with "the device can't confirm who they are" attached to it.

What we learned

Measure the part in your hand, not the spec sheet. Nearly every hour we lost came from trusting a label: the battery's voltage, the servo's size, the mounting hole spacing. Two minutes with calipers would have saved each one.

Generate geometry from code. When the servo changed at 1 a.m., the fix was editing one constant and re-running. In CAD it would have been an evening.

Validate before you print, not after. We checked watertightness, body count and clearances computationally. The six lug bayonet would have cost four hours to find physically.

Design for the demo you will actually give. A tilt axis would have made a nicer robot and a worse submission. A tower that stands and tracks beats a tower that nods.

What's next for CareBot

Right now one robot watches one room, and the honest limit of that is the Bathroom. It is where a lot of falls happen, and it is the one place we would never put a camera. The next version does not sit on a shelf. It drives.

A mobile CareBot follows the resident from room to room, keeps him in frame, and parks out of the way when he settles. That turns "one robot watches one room" into "one robot watches a person", which is what we wanted to build in the first place. It also means the robot is already beside him when he falls, instead of across the apartment.

The hard part is not the wheels. It is learning the floor plan well enough to navigate it, getting through doorways and over thresholds, never becoming the thing that trips him, and knowing to stop at the top of a staircase. Moving safely around someone who is unsteady needs a hard safety envelope in the controller, not a planner that usually behaves. It needs to dock and charge itself too, because a care device that goes flat is worse than no device at all.

After that, the work is turning an MVP into something a family could actually buy: an enclosure designed for manufacture instead of a 3D printer, a pilot in real homes with real consent, a proper NG911 data integration in place of a teammate's phone, and the certification any device that calls emergency services has to pass.

Built With

Share this project:

Updates

Submission history