Dr. Wummi's Stuff - Furby

Furby: Insane in the membrane

Some of you might have already seen my current project, the Contropatoid machine music thing.

 


Well of course you say, this contraption needs a Furby. And you would be right, so i got one:

 

 

It might be smart for a 2005 toy, but we gotta do one better and make it obey my commands!

So lets rip the fucker apart and have a beer or two:

 

This is a marvel of engineering, i tell ya! All of the furbies motions come from 2 (!) shoddy old DC motors. Magical!

It has a boatload of "sensors" (actually just switches). So how does it do it? Well:

The first motor is connected to a gearbox that switches output gears on changing direction: Forward moves the legs, backwards opens the mouth.

The second one drives the face - its just a clockwork type thingamabob that cycles trough all its facial expressions (inluding ear and eye movement).

Thats all it does with one motor. Magic!

But how?

The head has an encoder feedback! Neato! Also a contact indicating a "Zero" position.

 

The only not - sealed IC on the Control board is a  FAN8100N . We can use that. Furbster also operates on 4 AA Cells, so let's just assume it's gonna run well on 5V. What else has 5V? Our (t)rusty old Arduino, so let's use that!

So one look at the datasheet and voila! Power and 4 Pins is all we need to turn our 2 motors both ways. A furby is just a toy car after all!

Plan: Cut some traces, solder some wires and cook up some software!


Click to enlarge

You can see some modifications:

Top right is the motor controller with it's 4 new control leads. I cut the original traces like a tarantino character would, effecively paralyzing old furbster. Also seen here: i removed a (current limiting? dunno) resistor and connected the IC directly to VCC

The head-encoder didn't power up with a braindead furby, so i just connected it also straigt up to VCC (thats the wonky bodge-wire you see running across the left side)

I also connected 3 of the furbies switches straigt up to the arduino (Head zero position, feet counter, mouth-open sensor).

The encoder spits out a relatively clean A/B encoder signal, so were ready to go, furbster is now all zombied up!

 

 

Software

So we have a bog-stanard encoder, lets just use whats available from there =>  https://playground.arduino.cc/Main/RotaryEncoders/

One full head roatation is about 850 increments, and  precision is not something you get from chinesium plastic gears, so it takes about 10 increments to stop, so we just turn until wer'e about where we want so be:

As the rest of the Contraptoid (i'll wirte about this abomination too, sometime.. maybe) implements midi over serial, let's do the same thing for the furbster!

void parseControlMsg()
{
	byte operation = lastMidiMsg[0] >> 4; // first nibble
	byte channel = lastMidiMsg[0] & 0x0F; // last nibble
	byte controllerNr = lastMidiMsg[1];
	byte controllerVal = lastMidiMsg[2];


	switch (controllerNr)
	{

		case CHAN_FEET:
			digitalWrite(feet,controllerVal > 0);
			break;

		case CHAN_MOUTH:
		case CHAN_MOUTH2:
			mouthMove(controllerVal);
			break;

		case CHAN_HEAD:
			requestedHeadPos = controllerVal * 7;  // max 127 -> max ~850
	}
}

void mouthMove(unsigned int pitch)
{
	analogWrite(mouth,pitch*2);
}

Thats really all the magic, you can find the full .ino here if your'e interested. no it's not pretty but it works.

Now connect any Midi device or sequencer to your PC and pipe it straight down furbys new USB butthole and you get:

 

And of course, here you have it:
The famous testrun i did and reddit liked a lot: