Follow Bot


March 13, 2019

FollowBot is cute, pleasant in conversation (because he doesn't talk), and the most dangerous bot in the lab. A chat-controlled robot that lets viewers shoot ping pong balls, animate his radar, and draw/animate his eyes during live-streams.

Shoot ping pong balls during live streams.

Just getting started controlling FollowBot?

Setup your shot with the command generator, copy, paste into chat, enjoy the chaos.

In Development: Prototype 3

Final Release 60%

Reproduction plans (CC BY-SA) and limited release prototypes will be available after final.

Some products purchased through links may earn me a small commission to help fund further inventing to share with you. Thank you for your support.


The idea was to create a chat-controlled robot that could throw/shoot things to create chaos during live-streams. The bot started out throwing plastic BBs and evolved to shooting Ping Pong Balls (probably should have gone with a softer projectile). Leveraging from the PixelBot development, I added LED eyes that viewers can draw and animate. He is automatically resupplied from a 1000 ping pong ball hopper and air-feed system I designed.

The bot lets viewers target and shoot projectiles, animate the antenna, draw eyes, and salutes.

FollowBot stands at 55" (1.4 m).

A typical post-stream scene. There are plans to build a ball collecting bot.

A dedicated arduino driving the LEDs was needed for stability.


  • The ball launcher is a friction launcher using 2 spinning tires to grip and throw the ball. There are many ways to launch balls, but this kept the complexity low and allowed viewers to adjust the ball velocity for each shot.
  • UNO's are powered via USB, so only need onboard voltages for servos, DC motors, and eyes.
  • Body parts were created using laser cut 1/4" Birch Plywood with a removable front/back/side panels.
  • Legs were constructed from PVC with a steel pipe insert for weight and stability.
  • Tread/feet were constructed using laser cut 1/4" MDF, houses the power, and is full disassembleable.
  • To interface with an IRC other than Twitch, you'll need to replace the tmi module with a module designed to interface with other IRC. You'll also have to write interface functions to map the new module to the bot code.


  • NodeJS+ Johnny-Five module + TMI module (Twitch chat)
  • 2x, Arduino UNO
  • 2x, 180o Mini Servos
  • 2x, 180o Standard Metal Gear, High-Torque Servos
  • 1x, Continuous Rotation Servo
  • 1x, High Density WS2812B Addressible 144 LED Strip
  • Black LED Acrylic Sheet
  • 12V, 8A Power Supply
  • 3x, Adjustable Voltage Regulators

Notes on controlling FollowBot. Select a tab to learn more. All commands can be pasted directly into the live-stream chat field.

The Ping Pong Ball Bank of Earth.

Shoot up the lab while I stream! Either subscribe to my channel to shoot for free, or buy Ping Pong balls to add to your "Ping Pong Ball Bank Account" to use when desired.

Have Amazon Prime?

Twitch subscriptions are FREE!


  • During stream, cheer 25 bits or more to automatically add Ping Pong balls to your bank account.
  • Once you have Ping Pong balls in your account you can use "fire pattern" commands to create chaos.

Chat Commands:

  • !ppbb : displays current Ping Pong Ball cost and instructions.
  • !getppb : return number of ping pong balls you have in your account.
  • !giveppb : transfer 1+ ping pong balls to another user. Sharing is nice. :)
    • EG: !giveppb.4.billbob (Transfer 4 of your ping pong balls to billybob's account.)

Ping Pong Ball Bank account totals are saved across streams.


  • Waist, turret, speed commands can be in any order. EG: !
  • You do not have to "fire". You may simply move the waist and turret. EG: !fb.w90.t85
  • You may leave out waist, turret, speed commands to shoot at the current position. EG: !

Waist Angle

Turret Angle


Grid 8 is very popular for some reason. (Note: Accuracy may vary.)

Ball Speed

Fire Patterns

Fire : Single-shot | Subscriber only

Laser : Multi-shot | Requires Ping Pong Ball Bank Account

Spray : Full random | Requires Ping Pong Ball Bank Account

Cluster : Tight grouping | Requires Ping Pong Ball Bank Account

Pan Up : Pan up | Requires Ping Pong Ball Bank Account

Pan Down : Pan down | Requires Ping Pong Ball Bank Account

Pan Left : Pan left | Requires Ping Pong Ball Bank Account

Pan Right : Pan right | Requires Ping Pong Ball Bank Account

Draw and animate new FollowBot's eyes.

NOTE: Until we create an editor for the eyes, do the following:

  • Use Panel 1 in the PixelBot Editor to create art
  • Get the code for panel
  • Replace the "!pb1" with "!fb1".

Only the first two and last two columns in panel 1 are used.


  • !fb1d.[RLE code for panel1]
  • EG: !fb1d.2d8e4d8e4d8e4d8e4d8e2d2c8e4c8e2c2d8e4d8e4d8e4d8e4d8e2d (White eyes with blue pupils)


  • !fb1a.[optional time in ms].[RLE encoded frame1].[RLE encoded frame2].[RLE encoded frame3] on
  • EG: !fb1a.300.60e2a8e4a8e4a8e2a48e.61e1a9e2a9e1a2e1a9e1a48e.60e2a8e4a8e4a8e2a48e.60e1a9e1a2e1a9e2a9e1a49e (3x2 red eyes looking left and right)


  • !fb1x

Set Eye Color:

  • !fb1p.[hex color]
  • EG: !fb1p.#ff0000 (make eyes red)

Animate new FollowBot's radar.

  • !fb1r.[Speed][Direction][TimeDelay]
    • Speed = 0 - 9
    • Direction: r=right, l=left, s=stop
    • TimeDelay = ms
  • EG: !fb1r.3r300 (rotate to the right at a speed of 3 then delay 300ms and repeat)
  • You may stack commands to create a more elaborate animation sequence.
  • NOTE: for now, the "TimeDelay" only on the first command is used to determine animation rate, so the others do not need to be entered.
  • EG: !fb1r.3r500.3l.s (rotate right then left at a speed of 3, stop/pause and repeat. Animation rate is 500ms.)
  • EG: !fb1r.5r700.5l.s.5r.9l


Design notes on each version of PixelBot. Select a tab to learn more.



  1. Finish the FollowBot Command Generator tool (currently in beta). Should be mobile friendly and sort out a few bugs.
  2. Build new iteration of launcher:
    1. New motors and suspension system
    2. New loading servo and jam protection
  3. Draw/animation Editor for eyes tool. 
  4. Animation editor for radar tool.


Finished the body, and built 2 new iterations of the launcher to help increase DC motor lifespan. The latest launcher iteration has performed the best, but still needs work. Biggest addition is I built an automatic reloader system so I no longer have to reload (unless viewers shoot over 1000 shots). It uses a gravity-fed hopper and air exchange system to push the ping pong balls to the bot. It is complex enough that I will do a separate post on the system.

I finally ditched the BB throwing arm for a less-messy prosthetic arm.

Latest left arm. When he raises his arm the specially-designed wrist does a salute action.

Ditched the cross-bow design for a triad design that uses a top idler to maintain pressure against the ball during launch. This allowed me to lower the driving voltage on the motors extending the life a bit.

Split design so I can swap the front end out for a different design in the future.

Latest launcher being used. Back to cross-bow configuration, but Inverted the motors so I do not run them CCW. This helped a lot.

Ball feed - magazine coupling. It has a slip connection so magazine can rotate in the coupling.

The hopper. The top drum holds 1000 balls and has an agitator to force balls down the feed tube where a blower takes over to push balls to FollowBot.



  • The launcher still chews up motors over time. It appears that it is less brush wear and more bearings now. I purchased fancy motors from Out of Darts, and sketched up a spring suspension system for the motors that may give the launcher long life. If that fails I'll move to brushless motors.
  • Occassionally, I burn out the servo that pushes the ball into the launcher. Though I have code that protects against this it seems to be an astable edge condition on startup or shutdown of the node server. Consider adding spring action in the loader arm so it doesn't lock up. Also, the tactic servos are no longer available. Need to redesign mount for a more common size (EG: micro servo) and one that is cheaper since only requires low torque.


For the next iteration, hacking a PTZ camera system would have been easier (like Predator shoulder-mounted laser), but I wanted the bot to be large and highly animated for visual entertainment purposes. I designed a 30-shot magazine for the bot. It had to flex since he can pivot 180o. I came up with using 3D printed, modular, spring-like sections to form the magazine.

The body was built, LED eyes and the radar features added. Stuck with the same cross-bow POC launcher.

Even though I increased the magazine capacity, I was still spending most of my time reloading.

I kept the BB throwing arm for this iteration.


  • The body was initially built from 1/4" MDF. It was too heavy for stock, high-torque servos to direct drive the waist. Options were to add a gearbox, buy an expensive servo, or get the weight lower. I chose the latter to keep complexity and cost low. I rebuilt it from 1/4" Birch plywood and dropped the wieght by 60%. Works nicely.
  • The waist bearing system is pulled from an old, high-end security cam system that had a fancy slip-ring to pass signals/power through. For final I will need to redesign this for an off-the-shelf bearing.
  • I initially drove the LEDs with the same Arduino running the bot. When people animated the eyes it would cause shuddering and glitches in the bot performance. The data rate was too much for the single Arduino. I added a secong one to solve the issue for now. Eventually, the entire system will use a single-board computer like the Raspberrry Pi.
  • All body panels are removeable for future servicing and modification.


I built a proof of concept together using a cardboard box and a few other laser cut cardboard parts. As the code evolved more complexity was added.

The very first iteration sat on my desk and threw airsoft BB's when someone "Followed" my Twitch channel.

Next I added a rudamentary ping pong ball launcher. It used a single-wheel launcher system. Underpowered but functional.

Built a powerful cross-bow-style 3D printed launcher with a 6-shot capacity and added pan and tilt for targeting. This is where the chaos began.

The POC2 launcher. Still mostly hacked together. Ball sensor let's me know when to reload. Built a printed counter-balancing spring to support the weight at rest.

The ball feeder arm was the best part of the design. With 1 servo/action it will control the feed and push the ball into the rotating wheels.



  • The cheap brushed hobby motors will burn up over time. I run one of them CCW to maintain symmetry which is not good for the brushes. Need to consider this in the next design.
  • The 6-shot magazine is not big enough. I spend most of my time during stream reloading the bot. I need to expand the magazine and eventually consider an automatic reload system.
  • I probably will retire the BB throwing action. This works nicely when on my desk and people can see the mess it creates, but once moved to the back of the room it isn't visible.

More Goodies