Introduction: Remote Controlled Tricycle-Riding Puppet

About: I run the Maker Project Lab blog, and a weekly video series called Maker Update. Email me at donald@makerprojectlab.com

In this guide I’ll show you how to make a remote controlled tricycle. To make it extra fun, you can strap a puppet to it, but it’s also kinda creepy just riding around with nothing on it. Just don’t put an actual kid or animal on it.

Backstory & References

My original inspiration for this idea came from seeing a remote controlled Kermit the frog on a Radio Flyer tricycle at the 2018 New York Maker Faire. That project was made by Possibility Studios, and you can see it in action here

It’s funny how some projects stay with you. I probably saw 100 interesting projects at that Maker Faire that were far more advanced in terms of their technology or engineering. Why did an RC Kermit on a tricycle carve itself so deeply into my project wish list?

Maya Angelou said “I've learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel.” I think the same can be said for projects. 

The Kermit project gave me all the feels. Despite being able to quickly unravel the project technically, a combination of nostalgia and wonder hijacked my brain and made me want to believe in a world where this little green guy would pedal around. I was suddenly an extra in a muppet movie, and it was an extraordinary gift. It didn’t matter that I knew how the magic worked – it was still magic. 

So it made my project list, not because I wanted to possess it, but because I wanted to recreate that feeling for other people. It felt like a gift I couldn’t keep to myself. 

What really pushed me over the edge was seeing RC Jedi’s Bike Riding Skeleton Instructable. It’s a different vibe, obviously, but still has a kind of reality-bending whimsy that I remember from Kermit. More importantly, it included all the nuts and bolts of the construction. It also has this shot of a pint-sized companion skeleton riding a Radio Flyer tricycle, just like Kermit. 

I took it as a sign.

Supplies

Don’t be scared off by the list of materials here and the prices. There’s a ton of room for cutting down costs here. 

For example, kids are always outgrowing their Radio Flyer tricycles, so it should be pretty easy to find them cheap on Craigslist or yard sales. 

Not feeling like paying upwards of $90 for a professional-grade puppet? Use an old teddy bear, or halloween skeleton, or try your hand at making your own puppet using online guides.

The second biggest budget item is the $70 high-torque servo I used for steering. I suspect it’s way overpowered for what’s really needed here. I happened to already have it on hand and I wanted to try it out. Not only would a smaller servo be less expensive and more discreet, but it probably wouldn’t require its own 24 volt power supply like mine did and would free you up for a creeper battery solution too.

So please play around with part substitutions and don’t write this project off just because of cost. And if you find something that works, I would really appreciate you leaving a comment with your solution so all of us can benefit.

Step 1: Modifying the Tricycle

One of my goals with this project was to try and keep the tricycle as stock as possible. Bigger wheels on the back would have offered more clearance. Baskets on the front or boxes on the back would have provided more places to conceal electronics. Hoverboard hub motor wheels would have provided a more elegant, modern solution. But all of those options would have altered the iconic look of the tricycle and distorted the illusion. 

The first thing you’ll want to do is replace the back axle with threaded rod. This will provide some extra length to set the wheels a little further apart so you can squeeze in the belt gear. 

Threaded rod also allows you use nuts to hold the ends together instead of the push-on caps that come included. This means you can undo the ends more easily to service and modify the axle. Those push-on caps are really meant to just go on once and stay put.

Two thick plastic washers come included with the tricycle, to go on the axel between the wheel and the tricycle body. I reused those as spacers by putting them both on the wheel that doesn’t have the gear. It keeps things looking even.

For the geared side, you’ll need to attach the gear directly to the wheel. I did this by drilling four matching holes in both the wheel and the gear, applying a generous amount of 5-minute epoxy between the two parts, stacking them on top of each other, and dropping a few small bolts into the drilled out holes for added strength. 

The bolts don’t need to thread in or fit snugly. The epoxy should hold them in place. Nails or even dowels or chopsticks would work too. The idea is just to more fully fuse the gear with the wheel and not rely entirely on the layer of epoxy to do the job.

Next, you’ll want to mount the motor to the tricycle. More importantly, you’ll want to mount the motor in such a way that there’s not much slack in the timing belt. 

I did this by mounting the motor bracket to a length of aluminum bar (easy to find at any local hardware store), placing the motor in the bracket, attaching the belt, and marking the position everything needed to be for it to fit right.

Once that’s worked out, you go back, drill some holes, cut and shape the aluminum bar for your needs, paint it, and then attach it all using whatever method you’re comfortable with. I used some M3 button head bolts and lock nuts. 

If you get the fit a little wrong, don’t sweat it. You can nudge things by carefully bedding the aluminum bar in or out to adjust the motor position, or getting a slightly bigger or smaller belt, or getting a slightly bigger or smaller gear for the motor. 

While we’re down here near the bottom running board, think about how you’re going to mount all the other elements down here. It’s a tight fit, and the axel awkwardly runs through everything. Plus, you can’t have things dangling too low or they risk dragging on the ground.

How you end up fitting and attaching it all is up to you. Here’s a photo of how I organized things. In some cases (like the battery) I riveted mount-head zip ties to the tricycle frame and then zip-tied the components into place.

Your Arduino will need to go in a mountable case of some kind. Here’s the one I used. It’s a 3D printed design by Alex Torres.

Once everything’s dialed in, remember to add some hot glue on the wiring connections to keep them in place and create some strain relief. You can always remove the hot glue with isopropyl alcohol later if you need to do repairs.

At some point you’ll need to mount the servo push rod to the front wheel’s fork. That’s pretty much just drilling a hole and loosely attaching a rod end with a bolt. By using a nut on both sides of the fork, you can get the bolt to stick out a bit, which provides just a little extra turning radius.

You’ll also want to run some threaded rod up through the seat when you’re ready to mount your pupper. I believe I used ¼-20 rod, but use whatever’s convenient. The length you’ll need really depends on the size of the puppet you’re using. Because the seat comes off, it’s really easy to make adjustments, and saw the rod down bit by until you have something you like.

Also, I added a tennis ball to the top of the seat rod. Not only does this help prevent the puppet’s head from slipping around but it also makes it less likely that someone will fall onto the tricycle and impale themselves.

Finally, you’ll want to ad some weights to the pedals. Without something to keep them weighed down slightly, they’ll tilt back and forth as the wheel turns and you lose some of the illusion of feet pressing down on them. 

I had some Simpson Strong-Tie Bearing plates in my junk pile that worked well for this, though something smaller would be better. I filed the plastic pedals down a bit for a more flush surface and painted the plates red to match. Then I glued and clamped the plates on with E6000. 

The unintended upside of using these bearing plates is that they come with a hole in the middle, which is handy once you’re zip-tying puppet feet to the pedals.

Step 2: Electronics, Code and Wiring Diagram

Let me state right away that I’m certain there is a better, more efficient way to do all this. Please help me (and others) by constructively offering your suggestions in the comments.

What I’m showing you is the result of me raiding my stash of electronics to create a functioning prototype with what I had available. I agree that using a full-size Arduino is completely overkill. 

In fact, using an Arduino to behave like an electronic speed controller (ESC) is arguably silly when there are ESCs out there that are better and cheaper. But I don’t have a drawer full of ESCs. I do have a drawer full of Arduino’s though. So here we are.

A big thanks to Shawn Hymel for creating this video (and code) used to make the Arduino translate the RC throttle signal into a PWM signal the motor driver could use. My modification of the code that worked well with the particular RC transmitter I used can be found below, though I encourage you to explore more efficient ways to accomplish this.

/**
 * One Channel Receiver
 * Author: Shawn Hymel (SparkFun Electronics)
 * Date: Aug 17, 2017
 * 
 * Connect a TB6612FNG and RC (PWM) receiver to the Arduino.
 * Only works 1 channel for forward and back drive.
 * 
 * This code is beerware; if you see me (or any other SparkFun 
 * employee) at the local, and you've found our code helpful, 
 * please buy us a round! 
 * Distributed as-is; no warranty is given.
 * Video demo: https://www.youtube.com/watch?v=u0Ft8SB3pkw
 * 
 * 6-17-22 mods by Donald Bell to adapt for different boards and FS-Gt2 RC control.
 */


// Controller pins
const int CH_2_PIN = 3;


// Motor driver pins
const int STBY_PIN = 7;
const int AIN1_PIN = 12;
const int AIN2_PIN = 11;
const int APWM_PIN = 10;
const int BIN1_PIN = 1;
const int BIN2_PIN = 2;
const int BPWM_PIN = 5;


// Parameters
const int deadzone = 40;  // Anything between -40 and 40 is stop


void setup() {


  // Configure pins
  pinMode(STBY_PIN, OUTPUT);
  pinMode(AIN1_PIN, OUTPUT);
  pinMode(AIN2_PIN, OUTPUT);
  pinMode(APWM_PIN, OUTPUT);
  pinMode(BIN1_PIN, OUTPUT);
  pinMode(BIN2_PIN, OUTPUT);
  pinMode(BPWM_PIN, OUTPUT);


  // Enable motor driver
  digitalWrite(STBY_PIN, HIGH);
}


void loop() {


  // Read pulse width from receiver
  int ch_2 = pulseIn(CH_2_PIN, HIGH, 25000);


  // Convert to PWM value (-255 to 255)
  ch_2 = pulseToPWM(ch_2);


  // Drive motor
  drive(ch_2, ch_2);


  delay(5);
}


// Positive for forward, negative for reverse
void drive(int speed_a, int speed_b) {


  // Limit speed between -255 and 255
  speed_a = constrain(speed_a, -255, 255);
  speed_b = constrain(speed_b, -255, 255);


  // Set direction for motor A
  if ( speed_a == 0 ) {
    digitalWrite(AIN1_PIN, LOW);
    digitalWrite(AIN2_PIN, LOW);
  } else if ( speed_a > 0 ) {
    digitalWrite(AIN1_PIN, HIGH);
    digitalWrite(AIN2_PIN, LOW);
  } else {
    digitalWrite(AIN1_PIN, LOW);
    digitalWrite(AIN2_PIN, HIGH);
  }


  // Set direction for motor B
  if ( speed_b == 0 ) {
    digitalWrite(BIN1_PIN, LOW);
    digitalWrite(BIN2_PIN, LOW);
  } else if ( speed_b > 0 ) {
    digitalWrite(BIN1_PIN, HIGH);
    digitalWrite(BIN2_PIN, LOW);
  } else {
    digitalWrite(BIN1_PIN, LOW);
    digitalWrite(BIN2_PIN, HIGH);
  }


  // Set speed
  analogWrite(APWM_PIN, abs(speed_a));
  analogWrite(BPWM_PIN, abs(speed_b));
}


// Convert RC pulse value to motor PWM value
int pulseToPWM(int pulse) {

  // If we're receiving numbers, convert them to motor PWM
  if ( pulse > 1000 ) {
    pulse = map(pulse, 1000, 2000, -500, 500);
    pulse = constrain(pulse, -255, 255);
  } else {
    pulse = 0;
  }


  // Anything in deadzone should stop the motor
  if ( abs(pulse) <= deadzone ) {
    pulse = 0;
  }


  return pulse;
}


The particular Pololu TB67H420FTG Dual/Single motor driver board I used was again, the result of me raiding my parts bin, and not careful research. It works, though, so long as you combine it into single-channel mode for extra power. 

The board also features built-in protection against under-voltage, over-current, and over-temperature conditions, with reverse-voltage protection (up to 40 V). I took that as reason enough not to add a fuse into the design, but let me know if I’m being reckless here.

I’m also assuming the fancy TalentCell rechargeable battery I’m using has some sort of protection against over-current or over-draining the battery, but maybe that’s wishful thinking. It’s a pricey battery compared to a basic LiPo brick, but it does the neat trick of providing 5, 12, and 24v simultaneously, which at the time seemed necessary for this project.

In hindsight, I suspect I could have powered everything from 12v, using the servos regulated 5v output to power the Arduino and receiver. But it’s one of those situations where I hesitate to go back and monkey with a design that’s working, even if logically I believe there’s a way for it to be more efficient. I’ll leave it to you (or until version 2).

Because Fritzing doesn’t specifically include the TB67H420FTG motor driver board, I substituted something similar in this diagram. 

Same goes for the ASMC-04B servo, which has an impressive amount of input pins and options unlike any servo I’ve used before. It’s represented in the diagram as a basic servo, but that’s hardly the case in reality.


Step 3: A Closer Look at the ASMC-04B Servo

As I mentioned, the servo I used to steer this thing is entirely overkill for the job. It’s too big, has too much torque, and the power requirements make the whole project more complicated than it needs to be.

That said, this servo is pretty badass. I’ve never used anything like it before. And for some unfortunate reason there doesn’t seem to be much documentation for it online. So, in this section I just want to spend a minute sharing what I learned. 

The included images are a dump of different spec sheets I collected online. These are super valuable for making sense of all the modes available through the jumper pins. 

I’ve also included a photo showing the jumper configuration I’ve used, which matches with the RC Mode (1ms Pulse) configuration shown on the spec sheet. 

One thing the spec sheet doesn’t make clear is that you really don’t need to run a positive line from your RC receiver to the input section. Only the signal and negative lines need to connect there. Power comes separately from the DC power input screw terminal block, which is where I’m feeding in 24v power from the battery pack. 

Another unique aspect to this servo are the two adjustment pots (little white crosses in blue squares that you can adjust with a small screwdriver). Pot A adjusts the sensitivity of the servo, which I dialed in for a smoother (if slower) response. Pot B adjusts the width of the rotation angle. In my design, only 180 degrees are needed. Anything more could potentially damage the tricycle frame.

There’s also a pair of voltage output pins in the input sedition (covered by a red jumper). I hadn’t noticed until now, but potentially these offer a regulated 5v output you could use to power other stuff (like the Arduino) and simplify the wiring. Definitely measure and test the output before using it though.

Step 4: Puppet Prep

It’s difficult shopping for tricycle riding puppets. For starters, most puppets don’t have legs. Those that do (like Kermit) are typically at a smaller scale that’s natural for puppeteering, but not quite toddler size. 

Some puppets (like the one I eventually purchased) have a toddler-scale torso and head, but the legs are comically short. They look perfect in the context of puppeteering, but they’re half as long as you’d want for riding a tricycle.

But in order to have any sense of what size puppet you’ll really need, it’s best to just mock one up. I did this by buying some pipe insulation from my local hardware store (think pool noodle, but softer, thinner, and sadder). By slicing the insulation lengthwise, you not only double the amount of material, but you get a more flexible material that’s closer to the width you’re likely to see in a puppet.

Using just the insulation and a handful of zip ties for creating joints, cinching pieces together, and attaching bits to the bike, I was able to mock up a placeholder puppet in under 30 minutes. 

Not only will this placeholder provide the rough measurements you’ll want for the final puppet, but it provides a functional stand-in for testing how the puppet will move. If everything else on the bike is functional at this point, you can scoot this foam stick figure around and terrify your pets.


Step 5: Puppet Modification

After figuring out what size puppet you’ll need, you’re left with two options. You could either order something custom, spending hundreds of dollars, and get exactly what you’re looking for. Or, you could find an option that will get you close enough with some minor modifications. 

For this first stab at things, I opted for the close enough option. After looking around I ordered the Jasper model of puppet from a business called Pubbets. I found them through Etsy. I have no affiliation with them. I just reached out to them over email with the dimensions of puppet I was looking for and they said that Jasper was one of their largest puppets and the closest match to the dimensions I was looking for. 

My biggest expense (at around $90), I was nervous that if it didn’t work out I would have to take up puppeteering as a hobby to justify the purchase. Fortunately, the size was perfect aside from the length of the legs, and the overall quality of the puppet was even better than I expected.

I was nervous to modify the puppet’s perfectly good legs. What I learned though is that it’s really, really easy to whip together some “good enough” puppet legs. In fact, in the end, you really don’t even need the legs and the torso to be connected. I ended up zip tying the legs to the seat of the tricycle and dropping the torso over it, held up by the rod sticking up from the seat. A bit of velcro to stick the puppets shirt and pants together is enough to create the illusion that it’s all one continuous puppet.

More specifically, I took scissors to the puppets legs and chopped them clean off. Let me warn you, though, that you’ll never felt more like a child-murdering psycho than when you’re cutting the legs off a toddler-sized puppet. Maybe have someone keep you company during this process and help you laugh through the tears. 

With the legs and pants chopped off, glue or sew each leg to a length of the split pipe insulation. Use a length of insulation that’s more than you think you’ll need so that you can make adjustments and cut off any extra once you’ve dialed in the fit.

Get your puppet some new pants. Heck, get a whole outfit if you’re feeling inspired, but new pants are a must. I went with a glow-in-the-dark skeleton print outfit, size 4.

Step 6: Making the Legs Work

Slip your puppet’s new surgically lengthened legs into the pants and just start awkwardly adjusting them into place on the bike. You can attach the feet (or shoes) of your puppet to the pedals using zip ties or velcro. 

Make sure the legs are long enough to create a good bend at the knee when the pedal is all the way up. If the leg ever has to stretch out too much, it looks unnatural.

Once you’ve dialed in a good leg length, you can just zip tie the legs together to form a V in the crotch. Then zip-tie that crotch bundle (there’s got to be a better way to say that) to the base of the rod coming up from the seat (seriously, I need to distance myself from that whole sentence). It won’t look pretty, but the puppet torso will cover it all up. 

As I mentioned, I also added some velcro to the waistline of the pants and the bottom of the torso. Not only does this close up any gap between the top and bottom of the puppet, but it makes it easier to pull off the torso to make repairs, without undoing the legs and feet.

Step 7: Attaching the Arms

Let’s also not forget the arms and hands. Part of this whole illusion is the sense that the puppet is steering with its arms. 

Fortunately, I didn’t have to modify Jasper’s arms or hands in any way. And unlike the legs, it’s actually better to have the arms relatively taught. This way, as the handlebars turn, Jasper’s shoulders, body, and head turn slightly too, providing an exaggerated yet convincing motion.

To attach the hands to the handlebars, I initially made a couple incisions on one finger and ran a zip tie through. I wouldn’t recommend it, though, because the fleece on the fingers isn’t made to take that kind of strain.

Instead, I recommend using a small clear zip tie to create a ring around one (or multiple) fingers, and then loop another zip tie through that ring to attach it to the handlebar grip. Not only is this method non-destructive, but it’s relatively invisible.

Another cool thing about this Jasper puppet is that they include armature wire in the fingers that you can bend and shape the hand, creating a loose grip. I imagine this feature is common to other models of Pubbets, but it’s worth asking if you’re thinking about ordering one. 

I don’t think that having a gripping hand on your puppet will make or break the illusion, but it’s nice to have. Without the armature wire, you could probably cheat it with extra zip-tie rings.

Step 8: Taking It Further

If I revisit this project the first thing I’d like to do is work out how to simplify the electronics. I expect there’s an existing RC combo of ESC, generic LiPo pack and high-powered (but smaller) servo that can dramatically simplify things. If you have suggestions, please let me know.

But to really push it further, I’d like to explore adding sound (either through audio playback, or remotely ringing a mechanical bike bell) and adding some actual animatronic elements, such as head turning or mouth movement.

Another direction I’d like to explore is to graduate from the tricycle to something like a Power Wheel or small pedal car. Not only would it lend itself better to motorization and steering, but you really wouldn’t need a lower half of the puppet to pull it off.

Step 9: Parting Thoughts

It’s been a long time since a project really put a smile on my face like this one has. Before making it, it occurred to me that I'd been making too many projects that just end up on my shelf, collecting dust. I think that the antidote to this sort of rut is making something that requires an audience of some kind.

So if you’re wondering what kind of project to make next, I encourage you to consider making something you can “perform” in some way and engage with people. Not only is it a useful creative prompt, but it's a great excuse to get out in the world.

Make it Move Challenge

Participated in the
Make it Move Challenge