Skip to content

A creepy animated puppet-doll powered by RP2040: AI generated voice clips lip-synced to servo control, with soft-latch power saving, a FreeCAD 3D-printed enclosure, and smooth mouth motion via phoneme mapping.

Notifications You must be signed in to change notification settings

hessfab/animate-puppet-doll

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Animate Puppet Doll

Introduction

An old puppet doll was acquired at a garage sale and creepily "animated" for a family member. The doll originally had a series of strings protruding from the back of the neck where the user could control the motion of the mouth. This function was replaced with a servo motor and additional electronics to facilitate the doll speaking with sound. This was a quick project lasting less than a week where I was able to learn about 2d animation with regards to speaking and soft latch circuits for automatically cutting power to the device after a predetermined period of time to conserve battery life.

Intro Video

Sound Generation and Animation

Sound clips were generated of an AI boy's voice using speechify. These clips were then imported into papagayo-ng, manually processed to align phonemes with particular frames of the sound clip, and the result exported in moho format (.dat).

Papagayo Screenshot

A python script was used to convert the phonemes to mouth positions according to the following table generated by an LLM.

Phoneme Table

The contents of the sound files were as follows:

Filename Transcript
0001.wav Let's be best friends... forever... and ever... and ever... until your bones creak like mine!
0002.wav I drew a picture of us! You’re the one screaming....
0003.wav They locked me in a box... but now I’m out and ready to play!
0004.wav Every time you blink, I get a little closer...
0005.wav I'm not blinking because I like watching you breathe...
0006.wav Close your eyes, sleepyhead, Tuck you in your cozy bed. Monsters wait beneath the floor, But don’t you fret, they want no more… Than one small toe, or maybe two, They only come if I tell them to. So snuggle tight and count to ten… And don’t look under there again

Electronics

A diy generic stuff animal sound kit was acquired on amazon, hoping to be a quick solution for this project. However, the controls for the button didn't seem to have the configuration desired, and using this board with a separate mcu for servo control wouldn't be a straight forward task in terms of syncing the servo with the sound clips aesthetically. Components from this kit (speaker, button, battery holder, etc.) were salvaged and combined with a XIAO RP2040 board, generic dfplayermini and 9g servo motor.

General Circuit

This general configuration was then modified to incorporate a soft latch circuit to reduce power consumption when not in use. Simulations for this circuit were generated using Qucs-S on a shortened time scale for proof-of-concept with multiple button presses.

Soft Latch Circuit Sim

After a lot of testing with only the dolls head, and being somewhat disturbed by the result, everything was soldered on to a prototype board.

Finished Electronics

Code

The functionality of the doll was as follows: push a button, wake device if needed, then play a sound clip while moving the servo in sync. Each subsequent button press will play the next clip/animation in a "run all loop" type manner. If 5 minutes have passed without a button press, the device will shut itself off until interacted with again via the button. The control of the servo occurs on the second core of the rp2040, while the main core monitors button events and communicates with the dfplayermini. The device was programmed using vscode + platformio.

CAD

Using FreeCad, an enclosure was designed and 3d printed to hold the finished electronics (aside from the servo and battery holder). Additionally, a mount for the servo was designed to secure it to the base of the doll's neck. The servo arm was secured to the mouth with thread, and a flexible thread was secured from the mouth to the back of the neck to assist with the actuation.

Combined Image

CAD Images

About

A creepy animated puppet-doll powered by RP2040: AI generated voice clips lip-synced to servo control, with soft-latch power saving, a FreeCAD 3D-printed enclosure, and smooth mouth motion via phoneme mapping.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published