Twenty Minutes. Twenty Dollars. Build a Bot.
- Have you always wanted to build a robot but didn't have the time, money, or know how?
- Do you need an inexpensive and easy to build robot project for your maker space, classroom, or camp?
- Are you preparing for the robot revolution and need to build your personal robot army?
Follow these instructions to build a robot you can remote control, or let it wander around autonomously. The parts are easy to find online and at your local craft store, and will cost around $20. I'll provide links to parts that I've used to build the 2020 Bot.
2020 Bot Features
- Arduino Nano Microcontroller
- Infrared LED and Infrared Receiver, for remote control and proximity sensing
- Differential drive with (2) DC Brush Motors and Gearboxes
- Dual Motor Driver
- 4xAA Battery Box with On/Off Switch
- Solderless Breadboard with room for expansion
- Foam Board and Double Stick Tape Construction
- Re-use all the parts for your own robot design - just buy more foam board and tape!
The 2020 Bot project has a long history, but you're not here for history, you want to build something! For those who are interested, head over to my blog (RoboJay.us) and read through the 2020 Bot posts.
These build instructions are primarily video based. Each step will show a few images of the process along with some extra notes.
Let's get started!
Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.
Step 1: Parts and Tools
Here are the parts and tools you'll need. The links will take you to parts I've bought and tested. Some items can only be purchased in multiple pieces, which will push the total cost higher. Team up with some friends to help keep costs down!
To build the 2020 Bot completely from scratch does require soldering and some specialized tools (i.e. heat gun or pin crimper). The ultimate goal is to find suppliers who have already performed some of the prep work on parts.
If you're buying parts to use for a class or group project, you might want to prep parts beforehand. The "Twenty Minute" build time assumes all the prep work has been completed.
- Foam Board (approx. 8.5″ x 11″)
- (2) Yellow 1:120 Gearboxes with 6V Motors plus Wheels
- (4) 0.1uF Capacitors
- 4xAA Battery Box with Switch
- 400 Point Solderless Breadboard
- Ping Pong Ball
- L9110S Dual Motor Driver
- IR Remote Control Package (Remote + Receiver Module + IR LED)
- Arduino Nano with USB cable (the latest version with the CH340G is recommended)
- 1K Resistor
- (9) 20cm Male-Female Jumper Wires
- (6) 10cm Male-Male Jumper Wires
- Double sided tape (3M VHB or similar)
- Soldering Iron
- Solder Wick
- Wire Strippers
- Wire Cutters
- Small Screwdriver
- Needle Nose Pliers
- Small File
- Pin Crimper Tool
- Heat Gun
- Small Vise
Step 2: Motor Prep
The motors don't come with wires attached. We'll add them.
These motors are DC brush motors, which tend to create a fair amount of electrical "noise" that can cause problems with our circuits (especially sensors!) and nearby radio receivers. One way to reduce the noise is by adding a small capacitor between each motor terminal and the motor case. We'll add those too.
Step 3: Battery Box Prep
The battery box normally comes with wires attached (yay!), but if we want to reliably insert them into our solderless breadboard, they need pins added (boo!).
Two methods are shown in the video. One uses crimp pins, the other uses solder pins. If you're building just one 2020 Bot and don't already own a pin crimp tool, I'd go with the solder method. However, if you're putting together a bunch of 2020 Bots, or already own a crimper, that method results in a cleaner looking end product.
Step 4: Motor Driver Prep (OPTIONAL)
Update January 2018: This step is now OPTIONAL. Read this section, and see the note at the end.
This is the trickiest out of all the prep work. Although it is OPTIONAL (was HIGHLY RECOMMENDED) that you do this step, if you're a bit squeamish working with surface mount components, you could skip it.
The motor driver inputs have pull-up resistors. They are connected to the same voltage we drive the motors with, which in this design is 6V from the 4xAA batteries. The problem is that the Arduino uses 5V, and creates this from the 6V batteries using a voltage regulator. If we apply 6V to the Arduino pins, current will flow into the Arduino, and could possibly damage it. Additionally, any noise from the motors could leak into the Arduino regulated 5V and cause troubles for us.
On the plus side, the pull-up resistors limit the amount of current that will flow, so damage probably won't occur in our design. But, it is possible. There can be large voltage spikes when motors stop or change direction.
January 2018 note: I took a closer look at the motor driver signals both with and without the pull-up resistors installed. The motor driver has a voltage clamping circuit on its inputs, which prevents the pull-ups from pulling the signal lines too high. There's still the possibility of noise from the unregulated power going back through to the Arduino, but removing the pull-ups is probably over kill.
Step 5: Chassis Cutout
Now we'll start making some real progress!
Click on this link, Chassis Template PDF, to download the template used to cut out the chassis. It's a good idea to cut on a proper surface like a cutting board, and PLEASE BE CAREFUL using the hobby knife.
Step 6: Chassis Assembly
Build the chassis!
Take your time to align pieces before sticking them to the double sided tape. Depending on the tape you use, you may only get one chance (at least without tearing the foam board).
Step 7: Attach Electronics to the Chassis
Here's where you'll mount the Motor Driver, IR Receiver, and Solderless Breadboard to the chassis. Just like with the chassis assembly, take your time aligning the pieces before touching the tape.
Step 8: Wiring
Hook it all up!
Take your time... Pay attention to which holes the wires insert into on the Solderless Breadboard.
Refer to the video, wiring diagram, and wiring checklist.
Note: The diagram has a couple breadboard locations that are different than what are called out in the video and checklist, but they are functionally equivalent.
Click for the Wiring Checklist PDF.
Step 9: Programming
If you followed along with the Wiring video, I skipped over the details of how to upload the demo program to the 2020 Bot. This section needs an entire video and screencast Instructable all of its own!
When building 2020 Bots for a class or group project, similar to the prep recommendation, you may want to pre-load all your 2020 Bots with the demo software.
Here are the basics...
The microcontroller board used in the 2020 Bot is compatible with the Arduino family of microcontroller products based on the Atmel ATmega328. Specifically, we're using an Arduino Nano. Using an Arduino compatible board lets us take advantage of all the software and libraries written for these devices. You will need software running on your personal computer (Mac, Windows, or Linux) that allows you to write (or at least download) software for the Arduino Nano on the 2020 Bot.
Plenty of resources exist that help you get started with Arduino:
and many more (Google is your friend!)
The typical steps to follow are:
- Download and install the Arduino IDE from Arduino.cc
- You may need drivers to communicate with the Arduino Nano. If you purchased the CH340G version of the Nano through my suggested link, Windows 10 folks are all set, but Mac users need this driver. If you're running Linux, you should be able to figure out what you need ;-)
- Download the .ZIP file for the Timer One Library from GitHub
- Download the .ZIP file for the 2020 Bot Library and Demo Code from GitHub
- Start the Arduino IDE.
- Select Sketch->Include Library->Add .ZIP Library...
- Select the .ZIP file you downloaded for the Timer One Library
- Repeat for the .ZIP file you downloaded for the 2020 Bot Library
- Plug the 2020 Bot Arduino Nano into your computer via the USB cable
- Tell the Arduino software you are using a Nano by selecting Tools->Board->Arduino Nano
- Select your Arduino Nano's port under Tools->Port
- Load the Demo code by selecting File->Examples->_2020Bot_Library->_2020Bot_Demo
- Send it to the 2020 Bot by selecting Sketch->Upload
Although the Demo software shows off the 2020 Bot features, it is difficult for beginners to understand. I will be adding simpler examples to the 2020 Bot Library over time.
Step 10: Running the Demo Code
The 2020 Bot Demo lets the robot be either remote controlled, or operate in autonomous mode.
When you power on the robot, it starts in remote control mode. Pressing the arrow keys on the IR remote will drive the robot in the different directions. Pressing the "OK" button in the middle of the arrow keys will stop the robot. Don't hold the buttons down, just press and release. Each time forward or reverse is pressed, the robot will drive in that direction for a short time. While it's diving, you can always press another button (like OK to stop). The left and right buttons will have the robot pivot the robot in place just a little.
Robots really should be free to do what they want, and that's what happens in autonomous mode. To start autonomous mode, press the # key on the remote. The robot will start wandering around, using it's IR LED and IR Receiver to detect obstacles. It's a simple sensor, and won't always detect things. When the robot needs your help, press the * key to go back to remote control mode.
Step 11: Don't Stop Now!
Ok, you've built the 2020 Bot, now what?
- Learn how to code, or, if you already know, learn how to code with a real robot!
- Add more electronics for sensing or interacting with the world.
- It's only made of foam board and tape. Have a cool design idea? Build it!
I truly believe so much can be learned using easy to find, inexpensive parts, along with a bit of creativity. Follow further developments of the 2020 Bot at 2020bot.com and other projects on my blog RoboJay.us
If you build a 2020 Bot, I'd love to hear from you! Let me know where I can make the instructions better. Thanks!
Participated in the
Robotics Contest 2017
1 Person Made This Project!
jsmb made it!