# digitan > The notebook of an apprentice: a desk robot that learns to recognise, listen and behave. What I tried, what happened inside the machine, what the numbers said. By Tanguy Mignot (https://digitan.fr/about/). Robot: Z330wl ("zee-owl"), a Reachy Mini. 24 skills learned, 26 logs. Machine-readable facts: https://digitan.fr/agent/site.json. Human-readable page for agents: https://digitan.fr/agent/. ## Skill map - [Sight](https://digitan.fr/systems/sight/): The camera in its face, and what it makes of it. - [Hearing](https://digitan.fr/systems/hearing/): Its microphones, and the art of not jumping at every noise. - [Movement](https://digitan.fr/systems/movement/): Head, neck and body: nine motors that must agree. - [Manners](https://digitan.fr/systems/manners/): How it behaves with the people around it. - [Energy and sleep](https://digitan.fr/systems/energy/): The battery, and going to bed properly. - [Brain](https://digitan.fr/systems/brain/): The Raspberry Pi inside, and where its time goes. - [Hardware](https://digitan.fr/systems/body/): Screws, cables and the box it came in. - [Remote control](https://digitan.fr/systems/remote/): Driving it from something other than a laptop. ## Logs - [Log 1: Why I put a robot on my desk](https://digitan.fr/posts/why-a-robot-on-my-desk/): Where this project comes from: an AI assistant that lives in text files, a small open-source robot ordered on 6 September 2026, and a plan. - [Log 2: Before the first screw: what a support channel taught me](https://digitan.fr/posts/before-the-first-screw/): On delivery day I read the robot's community support channel before opening the box: about 8,700 messages, ten months of other people's mistakes. - [Log 3: Unboxing, assembly, first boot](https://digitan.fr/posts/unboxing-assembly-first-boot/): Two sittings, about two hours and twenty minutes of filmed assembly, a first boot that worked, and the first things I changed. - [Log 4: It recognises me: how a face becomes a fingerprint](https://digitan.fr/posts/it-recognises-me/): Face recognition with two small OpenCV models, measured: 180 correct verdicts out of 184 sitting at my desk, and a surprise when I stood up. - [Log 5: Without the computer: moving the program onto the robot](https://digitan.fr/posts/without-the-computer/): A desk robot should not need a laptop. Benchmarks on the Raspberry Pi CM4 inside, a first launch on board, and the antenna that starts everything. - [Log 6: Why my robot's body was twitching: ±0.4° at 3.4 Hz, and the gain that fixed it](https://digitan.fr/posts/the-body-that-trembled/): A tiny left-right oscillation after some movements. Measured, explained as a limit cycle of the body's servo, and fixed by lowering one gain from 200 to 120. - [Log 7: A working cat, not a startled puppy](https://digitan.fr/posts/a-working-cat-not-a-puppy/): 291 reactions in 56 minutes. How thresholds, rest periods and habituation brought my desk robot down to one reaction every 35 seconds, and why that was still too much. - [Log 8: 96% CPU: where a robot's processor actually goes](https://digitan.fr/posts/96-percent-cpu/): My desk robot's Raspberry Pi CM4 was at 96%. A budget, thread by thread, about 750 ms of work per image, and a one-line change that halved my program's load. - [Log 9: The identity follows the person, the pace follows the situation](https://digitan.fr/posts/identity-follows-the-person/): Stop recognising every image: follow each face as a track, name it once, check it every three seconds, and look less often when nothing happens. Measured: a third less load. - [Log 10: A desk companion: modes, a badge, a sleep mode, and antennas that ask for attention](https://digitan.fr/posts/desk-companion-modes-badge-sleep-antennas/): Before teaching more tricks, a frame: modes I choose, states the robot works out, a badge that always says which, a real sleep, and a way to call me without a word. - [Log 11: Say hello once, then purr](https://digitan.fr/posts/greeting-and-purr/): Teaching a desk robot manners: a greeting when I look at it, at most every 20 minutes, and a purr where the antennas beat ±4 degrees in 0.15 s. - [Log 12: It bumps its own shell: measuring where the head can really go](https://digitan.fr/posts/it-bumps-its-shell/): A tilted head, no reaction, a restart. The maker's 3D model was off by 10 to 15 degrees, so I measured the limits on the robot: −40° on one side, +75° on the other. - [Log 13: Twenty hours standing: when an error does not put the robot to bed](https://digitan.fr/posts/twenty-hours-standing/): A rare timing error, a program that only knew how to catch network errors, and a robot left with its motors powered for about twenty hours. Two rules since. - [Log 14: What the official app costs](https://digitan.fr/posts/what-the-official-app-costs/): With its camera view open, the maker's desktop app pushes the robot's load to 7 on 4 cores. Closed, it drops back to 2.4. Measurements and one simple rule. - [Log 15: Three silent days: it was a cable](https://digitan.fr/posts/three-silent-days-a-cable/): No network, not a single LED on the head board, restarts that changed nothing. I thought the board was dead. It was the power cable from the base, out of its connector. - [Log 16: Reading the battery from the motors](https://digitan.fr/posts/reading-the-battery-from-the-motors/): The robot does not show its battery level. Its nine motors, though, know the voltage that feeds them. One reading, an energy tile, and a trap while charging. - [Log 17: Its name is Z330wl](https://digitan.fr/posts/its-name-is-z330wl/): Z330wl, read ZEEOWL, said "zee-owl". You can hear the owl in it. How the name came about, and what helps it stick. - [Log 18: A real night](https://digitan.fr/posts/a-real-night/): Sleep mode now really puts the robot to bed: head tucked in, motors off, woken by a push on an antenna. And why it does not restart on its own after a power cut. - [Log 19: Usage statistics, on by default](https://digitan.fr/posts/usage-statistics-on-by-default/): Since version 1.13.0, the robot software sends anonymous usage statistics, switched on by default. What the code says, and how to turn them off. - [Log 20: How long it lasts: four discharges and a gauge](https://digitan.fr/posts/how-long-it-lasts/): About three hours asleep, between 1 h 35 and 2 h 23 awake. A gauge right within a few minutes, a green LED that lies, and an empty battery that makes it reboot in a loop. - [Log 21: When the head gets stuck: two causes, four safeguards](https://digitan.fr/posts/when-the-head-gets-stuck/): Four lock-ups in one week. A gesture that copied the wrong position, a start that was too abrupt: how to free the head, and what stops it from happening again. - [Log 22: The 1.14.0 update: what changes for your app](https://digitan.fr/posts/update-1-14-0-for-your-app/): Two movements requested at once no longer blend: the second is refused. And when an app stops, the robot no longer goes to bed by itself. Two changes to account for. - [Log 23: A 2011 screen for my robot: bringing a Galaxy Note back to life with Linux](https://digitan.fr/posts/a-screen-from-2011/): A 2011 phone, a new battery, a recent Linux installed without a USB cable, and a pen the kernel had to be told about. The goal: give the robot a screen. - [Log 24: A remote control for my robot, in a 2011 phone](https://digitan.fr/posts/a-remote-in-my-pocket/): The revived Galaxy Note becomes the robot's remote: a small app written for it that drives the robot over Wi-Fi and shows what its camera sees, thanks to a Raspberry Pi. - [Log 25: When someone else puts the robot to bed](https://digitan.fr/posts/when-someone-else-puts-it-to-bed/): Put to bed by someone else, the robot kept tracking my face and making noises. It now understands it has been put to bed, and a startle no longer makes it lose my face. - [Log 26: It recognises me from the side, and now it doubts me](https://digitan.fr/posts/it-recognises-me-from-the-side/): I kept the robot from recognising me in profile, sure it could not. Measured: 78 faces out of 78. Letting it try gave it a new habit: doubting me. ## Optional - [The week of 19 to 25 October 2026](https://digitan.fr/posts/week-of-19-october-2026/) - [The week of 26 October to 1 November 2026](https://digitan.fr/posts/week-of-26-october-2026/) - [The week of 2 to 8 November 2026](https://digitan.fr/posts/week-of-2-november-2026/) - [The week of 9 to 15 November 2026](https://digitan.fr/posts/week-of-9-november-2026/) - [About the author](https://digitan.fr/about/) - [zarumbatus](https://zarumbatus.com/): Teaching a machine to draw like him