Monday, May 30, 2016

HELP -- My Arduino Headers Don't Have Gaps!

In another post I wrote about orienting yourself to the Arduino pins using tactile landmarks such as the gaps in the left and right header blocks. Unfortunately, the header blocks on some Arduino boards are manufactured without gaps between sections. Instead, both right and left headers are continuous blocks that include both upper and lower sections. Where the gap would be on most boards is simply a double-wide space on the header with no hole at all.

You can orient yourself the hard way using a probe such as a jumper pin, wire, or stylus to feel your way along the top of the header to find the spot where there is a wider gap between holes. This is the break between the upper and lower sections. While this is doable, it’s definitely a pain to do every time you need to find a particular pin.

To make navigation easier on these notchless boards, use a serrated dinner knife or a metal nail file to cut a notch between upper and lower sections that is easily detectable by touch. Guide the knife or file by placing male jumper cables on either side of the gap, that is, in the bottom hole of the top section and the top hole of the bottom section. Placing the knife or file between the two jumpers, gently saw back and forth to cut a small notch in the plastic header. Be sure to hold the Arduino by the header, not the board, to avoid straining the joint between the header and the board. The notch doesn’t need to be deep in order to be easily felt. Five to ten strokes with the knife or file should be enough. Check to be sure you can feel it and continue if necessary.

If you don’t want to permanently mark your header you can use a probe to find the gap and place a temporary landmark such as a flexible plastic toothpick or male-female jumper cable in one of the adjacent holes. The main consideration here is not to use anything which might accidentally break off or create a short.

Wednesday, May 25, 2016

What is the Blind Arduino Blog?

There is nothing new about blind makers -- we have a long history of creativity and innovation in order to get access to the information we need to do the things we want to do. We also have a long history of sharing how-to information among ourselves in order to support our community in achieving our goals and potential. The Blind Arduino Blog follows in this proud tradition.

Bob Gunderson's Braille Technical Press was a great, mid-century example of blind people supporting other blind people in building the tools they need. It largely focused on amateur radio tools and techniques, but it was an early pioneer in the blind DIY electronics genre. Bob worked as an electronics teacher at the New York Institute for the Blind and published the Braille Technical press in the 1950s as a way of documenting the accessible tools he and his students developed so that other blind hams could build and use them.

More recently in the 1980s and 90s, Bill Gerrey at The Smith-Kettlewell Eye Research Institute (where I happen to work) published the Smith-Kettlewell Technical File -- a publication inspired by Gunderson's earlier magazine. In addition to publishing instructions for building all kinds of useful accessible test equipment and refining the technique of circuit description, the Technical File published a series of excellent tutorial articles on techniques for blind solderers, also available at the previous link to the Technical File.

With the advent of open-source, relatively standardized, microprocessor-based project kits like Arduino, the kinds of devices that can be built by the casual maker at home have become quite sophisticated. In fact, Arduino is an ideal platform for creating a variety of accessibility devices which blind makers and users might find useful. For example Arduino would be perfect for building tools like audio and tactile meters and gauges which could be driven by any manner of sensors and detectors. From accessible scales to timers, range finders, multimeters and beyond, Arduino could make it relatively easy to design and share accessible tools which can be endlessly modified, adapted, and improved to meet a wide range of applications and needs.

A little googling reveals that there are designs for a number of Arduino-based accessibility devices scattered across the net. However, none that we have found are intended to be built by blind people, Nor is the documentation necessarily accessible. Furthermore, the fact that they are from all over the place means that they are inconsistently documented and occasionally hard to find.

The Blind Arduino Blog is another step along the road paved by Gunderson and Gerrey. Its intent is to provide a public clearing house for blind makers who want to build accessible devices with Arduino. The project has two main objectives:

  1. To provide clear instructions and accessible resources for blind people who want to develop for Arduino, and
  2. To Assemble a library of accessible project descriptions for devices that might be of particular use for blind people.

Before we can begin assembling our library of accessible Arduino devices for blind makers, there are a number of hurdles to be overcome. We can build on Bill Gerrey and Bob Gunderson's hardware-assembly description techniques to document how to build the Arduino hardware, but the coding component needs some R&D. First we need to identify and document the accessible tools and resources for learning, writing, and uploading code to the Arduino itself.

There are many different Arduino boards and accessories, and many different software tools available for coding, uploading, and debugging. Thus, the first posts to this blog will document our investigations into which boards, tutorials, and other tools are most accessible, as well as any work-arounds or tricks for getting the most out of them as a blind user. Once we have a nice foundation of accessible tools for Arduino development on which to build, we can move on to our long-range plan of collecting and developing accessible instructions for building a wide variety of accessibility devices based on Arduino. My own personal interest is in duplicating a number of devices from the S-K Technical File recast in Arduino. As our group learns and grows, I have confidence that the depth and diversity of projects will expand well beyond what I currently imagine.

Some Comments on Platforms, Screen Readers, and Browsers

Arduino software development can be done on Linux, Mac, Windows, and other platforms. This blog will focus on identifying tools that are Windows based. For folks who are comfortable in Linux, I suspect that is the easiest and most accessible path for Arduino development. However, most people are a little intimidated by Linux. While Apple has done great work with VoiceOver, the vast majority of blind users are still on Windows. For these reasons, we are committed to charting an accessible Arduino-development path through Windows. This doesn't mean that we won't include some posts on tools for other platforms, it just means that the emphasis here will be on tools for Windows.

In addition, in making our judgements about accessibility of tools and informational resources, we will assume the default screen reader/browser combination of NVDA and Firefox. Certainly there are other screen readers and browsers and preferences will vary, but web site performance will as well. Since we can't test all combinations, we will generally stick to NVDA and Firefox when we test Arduino resource sites for accessibility.

Monday, May 23, 2016

Visual Studio Community: a free, accessible IDE for Arduino

Thanks to Ken Perry for investigating and recommending Visual Studio Community 2015 as an accessible Windows environment for programming Arduino. This method requires some time and effort to set up, but once it’s done it offers screen-readable line numbering, error reporting, serial monitoring and code completion, among other advantages. I found that JAWS 17 and NVDA 2016.1 work equally well with Visual Studio Community. If you’d like to give VSC a try, here’s how:


Arduino IDE
You’ll still need to start out by downloading the Arduino IDE; you won’t be opening or coding in this IDE, but a Visual Studio plug-in needs to use the Arduino compiler behind the scenes. If you already have the IDE, check to make sure it’s the latest version; if it isn’t, download the current version before moving on. (Note: at this writing, the current version is 1.6.9. It’s of course possible that a future version will be incompatible with VSC. A quick Google search of the current IDE version and VSC version should let you know whether they’re working together). It’s a good idea to put the Arduino folder at the root of your hard drive: by default it installs within C:\Program Files, which can cause problems with permissions down the line. If you already have the IDE installed, you can just copy the whole Arduino folder from C:\Program Files to C:\.
Visual Studio Community 2015
Visual Studio Community is available as a free download. While the initial download is relatively small, budget some time (it took me around 45 minutes with a decent wifi connection) for the VSC installer to acquire and configure additional files, and make sure you have 12 gb of free storage space (8 for VSC, 4 for Visual C++) before you begin the setup process. The necessary controls to move through installation are readable with both JAWS and NVDA. To monitor the progress of installation, use the touch cursor (JAWS) or object navigation (NVDA). You may notice some “phantom controls” above the progress information that refer to ending a session, cancelling setup, and choosing an installation location. Don’t worry about those; keep your attention on the reassuring movement of the files being installed and the progress percentage.
Note: Before you start the installation, read ahead to the section of Visual C++. If you choose a custom install for VSC, you can skip an extra step later on: however, I haven’t tested this myself so I’ll be describing the (probably longer) path I took.
When setup is done, activate the “Launch” button. You’ll be prompted to sign in or create an account to connect to developer services, but you can tab and choose “Not Now, Maybe Later” if you’d rather not.
Next, you’ll be prompted to choose your development settings (the default, “General”, is fine) and a color theme. Tab and choose to “Start Visual Studio”, and go make a cup of tea or something; it takes about two minutes for VSC to configure itself.
You are now in a world of buttons leading to tutorials, news, videos and more. You can tab through these if you’d like to explore them.
Visual C++
You’ll need to install Visual C++ before programming your Arduino. If you didn’t do this when you first installed VSC, navigate to the File Menu>New>Project. In the dialog box of extension providers that appears in focus, choose Visual C++. Tab several times to a list of extensions and choose “Install Visual C++”. This installation took me about 15 minutes and all screens were readable, although I encountered “phantom messages” similar to the ones I described when installing VSC.
The Arduino Plug-in
Navigate to Tools>Extensions and Updates to install the Arduino Plug-in, otherwise known as “Visual Micro”.
Within the Extensions and Updates dialog box, shift-tab once and change the combo box from “Installed” to “All” (sorry, this box’s label seemed unreadable by NVDA). Then, tab to the search box and type in “Arduino”. Tab to the table of extensions, where “Arduino IDE for Visual Studio” should be your top hit. Tab once more to Download, and press enter to initiate download and installation. (You may need to say “Yes” to a User Account Control at this point”). One more dialog box will appear; choose Install, and follow the prompt to restart VSC. (If you receive an error message stating that “per user extensions” could not be loaded, close VSC; set its properties to always run as an administrator; and reopen it.
When VSC restarts, you’ll be placed in a dialog box to configure IDE locations. (You’ll also be shown a window containing the Arduino for Visual Studio documentation). Choose your Arduino IDE version and the installation path for your Arduino IDE, then tab and choose OK. At this point, I was presented with a message reading “toolchain reloaded” and the only way to dismiss it was to close and reopen VSC.

Getting ready to program

Select your toolbars
Navigate to View>Toolbars and select all four Micro toolbars (Boards, Project, Programmer, Serial Communications).
Configure VSC to work with your board
Visual Studio Community can work with a wide variety of microcontrollers, including Arduino. You need to specify your board and how it’s connected before you can write programs to your Arduino.
Connect your Arduino and find out what com port it’s using. To do this, open your Device Manager and expand the “Ports, Com and LPT” section.
In VSC, navigate to the “Micro Boards” toolbar (you can do this by pressing Alt for the menu bar and then pressing Control+Tab until you find the toolbar). The first combo box you find, Micro Applications, will specify your IDE version. Tab once to the Board combo box and choose your Arduino model. (Pro tip: the first choice here is “Arduino Yún” which sounds a lot like, but emphatically is not, the same thing as “Arduino Uno”. Do not waste time choosing this option and failing to program your Uno: I’ve already done that for you).
After you choose your board, navigate to the Micro Serial Communications toolbar and choose your board’s com port.

Writing a Program

To create your first project, navigate to File>New>Arduino Project. Give your project a name and press enter. A blank sketch is always populated with lines for “Void Setup” and “Voic Loop”, along with comments (bracketed by /* and */) explaining what those sections mean. If you’re writing code by hand, leave these in place; if you’re pasting in a code example that already has these sections, select and delete the existing text before you paste.

Uploading the Program

To upload your program, press Control+F5. If VSC finds errors, it will list them for you, by line and column number. If not, it will let you know whether the program finished uploading. In either case, to dismiss the message and get back to your code, press Escape.

Closing and re-opening your program

VSC refers to programs, which can include your Arduino sketch and any associated files, as “Solutions”. Navigate to File>Close Solution when you’re done working with a program, and follow the prompt to save or discard changes. To open a program you’ve previously created, navigate to File>Open>Arduino Project.

Saturday, May 7, 2016

Blind Arduino Booth at Maker Faire Bay Area 2016

Maker Faire Bay Area has been growing in size and coolness ever since it started a few short years ago. At this giant festival makers of all kinds get together to show off their stuff, swap ideas, and encourage each other to greater heights of collaborative creativity.

This year the faire will be even cooler because the Blind Arduino Project will be running a booth – showing off awesome accessible gadgets, answering questions about how blind people build stuff with Arduino, demoing blind soldering techniques, and more.

Look for us in Zone 2, booth 2420. We will be in among amny other Arduino-related booths, so please enjoy the process of finding us and telling them you're looking for the Blind Arduino Booth.

Maker Faire 2016 takes place at the San Mateo Event Center, May 21-22, with a
convenient shuttle connecting from Millbrae BART.

Please tell your friends about it and come visit our booth at Maker Faire Bay Area to learn all about blind makers and how blind people work with Arduino!

If you are tweeting about your Maker Faire experience, please remember to use #BlindArduino and #mfba16 in your posts.

Looking forward to seeing you there!

Tuesday, May 3, 2016

A (Very New) Beginner's Guide to Hobby Electronics and Robotics

  • absolutely no background in robotics, electronics, or programming needed
  • some assembly required
  • use of eyes NOT required
  • batteries not included 
Laura's robot: the Luna Moth Bot
My first robot, the Luna Moth Bot, on exhibit at the Pittsburgh Mini Maker Faire 2011. The microcontroller, motor control circuit, breadboard, and tank treads are housed under a repurposed SMILA BAGGE plastic lamp enclosure from IKEA that is about 12 by 9 inches. The photoresistor sensors (more on those later) are sized to fit perfectly into the winged bug’s eye sockets. Note that my nail polish matches the robot enclosure. The neon light green color is similar to that of a luna moth, the inspiration for the project. Photo credit: Larry Rippel

Pfft... you think I could build a robot?

There is a certain mystique surrounding the word robot. For some it can conjure up delightful images of a friendly companion who is always eager to serve you; for others it causes fear of the unknown. When I think about robots, I think about machines that react to sensors. I tend to consider whether the functionality of a machine seems to be greater than the sum of all of its parts. Yes, that’s vague, but robotics is an incredibly diverse field and I couldn’t possibly hope to address it all. So, I’d like to focus on a very specific and accessible branch of robotics: hobby robotics. I’ll define a hobby robot as a robot built for fun or entertainment. It should mostly be an instructional device or something that you just think performs a cool function in some way.

Recent advances have made hobby robotics accessible to anyone with an interest, regardless of background or past experience. All you might need is a little bit of information about the hobby robotics community, a little background information that will make beginner guides more accessible, and a plan for moving forward. Though this guide is for anyone, I’ll be giving special attention to the readers interested in getting into electronics who are blind or have vision impairment by including comments on accessibility and links to other parts of this blog.

Getting started: a journey of a thousand miles begins with a single step

You might be considering whether you want to start out with a walking robot that will fetch you a can of pop from the fridge or perhaps instead a giant mechanical suit that will stomp around town and bring you to work while you sleep in. By the end of reading this guide, I hope that you can begin to get an appreciation for the complexity of such machines. The truth is that some of our world’s best and brightest are still working on just tiny facets of those kinds of ideas. Several companies might be sending out test fleets of self-driving cars, but machines still have a long way to go before they can perceive the world with the same level of ability as your pet cat. Robots built by professionals have many layers of complexity. Manufactures have cost and material concerns and all use kinds of technology that are advanced beyond the scope of this guide. I’ll just be talking about starting very small with a little programmable rover robot and focusing on having fun. An example of a rover robot is a small mobile robot like the one pictured above, the quintessential beginner's project.

A fun place to begin outside of a school is in a makerspace, any one of the physical locations that comprise the “maker movement”. Makers (in this context) are folks who want to make the things around them better through modification and experimentation. A maker is the type of person who might build a robot or use a 3D printer, laser cutter, or even yarn to make an interesting item. A makerspace comes into existence when makers get together to create a community of collaboration, fun, and adventure. In a way, makers can be thought of as amateur hobbyist engineers, proving that you do not need a fancy degree to fulfill geeky aspirations. The community and resources of a makerspace should be available to anyone. In my experience in Pittsburgh and in traveling to other shops, I have always found them to be welcoming places. I was lucky enough to find some robotics experts to mentor me. Some people love to talk about their work and will tell you more than you ever wanted to know while others might direct you to someone else who could help you. You could really hit the jackpot and live in a town that has a makerspace specializing in robotics such as the Dallas Personal Robotics Group. Makerspaces can pool together at Maker Faires around the country to collaborate and show off new projects which the Blind Arduino group will be doing in 2016. Another nice thing about makerspaces is that if you do not have one in your town, you are free to start one yourself!

If you prefer a more solitary learning path, or there are no resources for a makerspace in your hometown, there are some books and online resources that are available to help you. I have found a few problems with these materials that I hope to help you, as a (very) new beginner, overcome. First, since technology changes at a seemingly ever more rapid pace, printed material of any kind can become outdated or obsolete. Second, some “beginner's” books are still too advanced for someone who is brand new to electronics or robotics. I certainly remember feeling my eyes gloss over while trying to read some of these things. I am writing this guide as a possible solution to these issues. I will be discussing hobby robotics in very broad terms so that as the specifics change, the general principles will hopefully still be helpful to you. I will also discuss how to select resources for further learning and experimentation on your own. I encourage you to supplement all of this instruction with free resources, including your local public library or websites like which offer free step-by-step outlines of projects. There are plenty of self-education podcasts and videos that are helpful once you know what you don’t know.

Here are some rules about hobby robot building I learned from my mentor at the time, Ed Paradis. He doesn’t take credit for them, so I guess that means their origins are now steeped in lore and mystery.
1) Avoid building a robot you can’t outrun. (I always get a comical image in my head when I think about this one.)
2) Avoid building a robot heavier than you can lift.
3) Avoid building a robot that can’t fit in a car or out your main door.

I’m adding a few rules myself:
1) Don’t feel intimidated. It is unlikely that you will seriously injure yourself with a rover kit or unwittingly unleash a maniacal destruction bot upon the world. Everyone started somewhere and once knew nothing about robotics! With the creator’s permission, feel free to pick robots up and play with them to your heart’s content.
2) Do whatever makes you excited. Hobby robotics is all about having fun. Leave behind whatever doesn't make you happy.
3) Create a memorable robot. Give it a name or make it appeal to your senses. I personally like to make cute robots that evoke a smile instead of looking fearsome.

Robot parts!

The Arduino (aka Braaaaaaaaaains)
Though hobby robotics has been a pastime for decades, I think that a specific technological invention has welcomed even the most beginning robot builder to the field, the Arduino microcontroller. With a little ingenuity and a few tips from our blog, it's accessible to people with disabilities, too. A microcontroller can be thought of as the brain of a robot. It makes judgments based on what you tell it to do and directs the rest of the robot part's based on conditions around it. Around 2005, a group of researchers put together a project that would allow novice electronics users to easily get started using computer code and a small device to control the world around them. The result was the Arduino, which has been improved upon several times since then. One aspect of the Arduino's appeal is that there is a huge community of people around the world using it and sharing their knowledge to help others get started. Arduino has become a bit of a common language, if you will, among beginning and advanced electronics users alike. Thanks to its open-source hardware design, there are tons of variants available as well. Here is just a sample of the many projects that use Arduino

The Arduino itself is a small board of electronics with a processor like the one in your computer except that its processor is slower and smaller. It comes with some software that allows you to write programs to run on it and this article discusses ways to make the software accessible. On one end, you connect the board to your computer using a USB cable and on the computer end, you can send the board "sketch" - a script that gets transferred to the Arduino via that cable. The script that will be running on the Arduino starts as an idea in your head, then as a text outline of your program, then a script written with help from the Arduino programming guides.  At that point, you press a button to compile that script, that is, turn your human-readable script into a machine-readable file. (Beginning programmers might argue against the script being “human readable” but I assure you that it gets more and more so with practice.) This machine-readable file is sent via serial communication to your Arduino where it is stored. If you disconnect your cable, your program will still run because it is saved in the Arduino’s memory. You can only store one program at a time on the Arduino. If you want to change what the Arduino does, you just write a new script and overwrite the one you had on there before. If you want to add some new functionality, you can purchase some additional hardware that sits on top of the Arduino called a shield. There are many shield designs available for sale online for different purposes. Because the Arduino is “embedded” in the robot, this type of programming is called embedded programming. Something I just love about this kind of programming is knowing that an idea I had in my head is now actually running a robot even if I am not physically present. 

While I am talking about programming the Arduino, I’d like to add more information on learning to program for the first time. When working with an Arduino, a script is called a “sketch”. There are more details in the Getting Started Guide on the Arduino website. There is also a ton of great advice on the AdaFruit website. In general, it is a good idea to start with a plan and break it into small steps. Execute each small step, testing as you go, and you will have built your first program. Be sure to add lots of comments to your sketch. Comments are notes that you add to a program that are ignored when your sketch is compiled. I recommend using these comments to first create an outline and then fill in each section little by little. 

As for the Arduino board itself, you connect to it via wires going to and coming from the other parts of the robot. The main thing that I’d like to encourage you to remember is that the Arduino is concerned with changes in voltages. Voltage is a somewhat abstract concept that has to do with the way that electric circuits work. A change in voltage can occur by changing the amount of electric current flowing through a circuit or the resistance of the components in that circuit. I don’t care to go into the details of these concepts, so I’m trying to be as general about this as possible. I only mention them because it shows that looking for changes in voltages in a circuit is a good way to tell that something somewhere else in that circuit has changed. You can learn more about these terms by studying Ohm’s law in physics or by picking it up as you go along while you build a robot. The bottom line is that your Arduino uses voltages to communicate your commands to your motors or read in information from your sensors. This is opposed to actually running the motors (usually) or making the sensors sense things. Other parts of the robot are responsible for those tasks. 
The Sensors: sensitive kind of guys 
If the Arduino is the robot’s command center, the sensors are its spies. The sensors collect information about the world and report it back to headquarters. There are a variety of low-cost sensors available that can give your robot some cool features. For example, potentiometers are sensors that have a little dial on top that can be turned to cause different effects within the circuit. Photoresistors or photodiodes can detect light. Infrared (IR) or sonar sensors can detect whether other objects are near or far from the robot. These sensors will probably be pretty small on a hobby robot. You can come up with clever applications such as using a pair of sensors and comparing their readings to guide the robot’s navigation. For example, if you have two light sensors, you could have your robot steer towards whichever one has more light shining on it, which is what my robot did. Sonar or IR sensors can be placed on the bottom of your robot as a means of detecting the edge of the table. You can tell the robot to stop whenever it senses that an object suddenly gets much further away. That is, you would watch for when the sensor goes from reading the table top close by to the floor far away. Here is more information about an accessible way of reading those numbers. There are sensors that can track just about anything about their place in the physical world, including the speed of travel, movement in any direction, or if they have twisted or turned in any dimension. The possibilities are almost limitless so it is a good idea to start out with just a few sensors of one type and expand from there. Note that when you are comparing the readings of two sensors, each sensor might report slightly different numbers from the others. You will need to calibrate these sensors, that is, make adjustments to your hardware or software to compensate for these differences. You can learn more about accommodating these sensors in the Arduino guides or as a part of building your first robot. 
Power! Muhahaha!!
You will want some batteries to run your robot because a roving robot that is plugged into the wall might end up being no fun. The power requirements for your robot depend on things like your motor sizes, required running time before it dies, and the amount of cool things you want to hook up. Given all that variability, I wouldn’t be able to cover all cases in this guide so I will refer you to a kit, or to someone who will design your first robot for you. The main thing to know is that you should only use a battery of the specified size and type. This should be marked on the battery itself. Know that a fresh battery right out of the box or charger will cause different behavior than one that has been used a lot. If your robot is acting strangely, try swapping in new batteries. Also, if you are just using something like a few AA batteries, you don’t have to worry too much about electric shocks. Hobby robotics is not an extreme sport.
Motors and gears: he's going the distance, he's going for speed 
I once used the terms “engine” and “motor” interchangeably which left an inquisitive engineer aghast that there was an “engine” (thinking of an engine in a car) in a tiny vehicle (that most certainly did not run on gasoline!). I now know that there is actually some debate regarding the exact meaning of those two terms depending on historical context and other factors and that other people use them interchangeably, too. The fact of the matter is that if you want to get into robotics, you will encounter a confusing array of technical terms and you will definitely make some mistakes in using them along the way. Don’t let that deter you. While you may encounter that one person eager to put you down, my experience has shown that there will be far more people even more eager to help you along. In my case, the engine/motor confusion just led to a good laugh for all. I’m just going to call them motors for the rest of this guide. That’s how I refer to them in the context of hobby robotics in conversation now. I am clearly not an expert on motors, so I will tell you what I’ve learned about some very specific yet common motors, hobby DC motors, and how to avoid destroying them. The most basic thing to know is that when it comes to working with motors, it is important to know what the motor needs to run and what kind of result you should expect from running it. I know that I needed my Arduino to tell the motors when to run, and I’ll go into that more in the next section on motor controllers. I also needed those motors to turn my robot’s wheels. Specifically, I had model tank treads that just had a sprocket, or a wheel with teeth, that was responsible for turning the entire tread. I had a total of two motors, one for each sprocket/tread combination on either side of the robot. (I spent most of my life thinking that the term ‘sprocket’ was a made up term for the Jetsons and wasn’t a real thing. You never know what you’ll learn when you try new things!)

In the case of my robot, I had motors that had a metal shaft sticking out of one end with a little gear attached to it that would spin when the motor had electricity flowing through it. That small gear was connected to other gears in such a way that I could take advantage of what are called gear ratios. You can read more about gear ratios online and see lots of interesting physics discussions. I’ll summarize the basics. A gear ratio is determined by comparing the size or number of teeth of one gear to another. A smaller gear can make its rotation faster while a larger gear is  capable of outputting more turning force, or torque. Torque has an interesting unit of measure because it is a combination of a force (or mass) unit and a distance unit. Something that took me a while to figure out is that torque isn’t just a force, or a distance between the center of a gear and its teeth, it is the combination of both of those things together. It is a little like velocity or speed. Velocity isn’t just the time it takes to travel a distance, and it isn’t just that distance that is traveled, it is both the time and the distance together in one measurement. I recommend that you start out working with gears that are selected for you and then experiment to see which sizes yield different results. This is another area where you can just keep going deeper and deeper with the details so start at the most general case and keep studying if you are interested. You can’t learn everything in robotics! That is an impossible task for one human. The specific problem that was solved by my gears was that I had a small motor that was capable of spinning that small gear really fast but was a weakling when it came to spinning around something heavy. The sprockets didn’t need to go as fast as the motor but they needed to turn with more torque than the motor alone could deliver. By putting gears between them and taking advantage of the increasing size of each gear compared to the rest of the gears in the gear train, the fast turning motor’s movement could be translated into the turning force I needed to turn the tank treads.

 Motor Controllers: Control freaks
So you’ve got a motor, some gears, and some sweet wheels and you are ready to use them. Congratulations, you now have a toy car that will drive in one direction at one speed until you disconnect the power! If you want some control over your motor, you need something called a motor controller, oddly enough. Some people call them motor drivers or point out that they are just an example of a larger concept that is called a control system. If you buy one off the shelf, you would just hook it up to one of the pins of your Arduino on one end and your motors on the other according to its specifications. My first robot didn’t use an off the shelf motor controller and instead used a bunch of individual electronics parts put into what is called a breadboard, or electronics prototyping board. While this was a learning experience, I also nearly destroyed my whole robot because I accidentally hooked it up incorrectly the first time. I lucked out there, but if I didn’t, I could have just replaced some of the robot parts because they were pretty cheap. Use whichever motor controller is recommended to you or is a part of a kit you have purchased.

Chassis: bringing everything together
This section is about the exterior shell of your robot. You could say that it provides protection and structure for your robot, and I would agree, but I’d also consider it a place to stuff your somewhat ugly parts or hastily made assembly mistakes so that you don’t need to see them anymore. If you want a rover type robot, you would look for a chassis that can accept your wheels and has enough room to hold a microcontroller, some motors, some batteries, and some sensors. You may need to add some holes in which to situate sensors or to allow heat to escape so you might want to choose a somewhat easy to cut material. You can find many designs online that are inexpensive because they are composed of parts that come in a kit that you can assemble.  These kinds of kits are commonly made out of wood or plastic and they were likely made using a tool called a laser cutter that can cut plastic and other materials on demand. A laser cutter allows for rapid prototyping and creation of a design. Really, though, you could put just about anything together as long as you think it looks cool. The chassis for my first robot was an old Ikea lamp I found at a thrift store. I took out the light bulb and cord and put in the electronics and wheels. There are even electronics that can be sewn into soft items like a stuffed animal but I’d be likely to recommend against that because it might just turn out to be creepy. Let’s delight, not traumatize, the children.

Time to build: the whole kit and caboodle 

The best kit is a bunch of parts selected for you and handed to you by someone who can help you assemble them. Eventually, you’d learn enough that you could start making your own kits. Not everyone can get that, though, so you can consider many options available online. Look for something that accepts a common microcontroller like an Arduino and contains parts for everything I’ve described here. A good beginning kit should allow you options to customize it and make it do a variety of things as opposed to just one purpose. It’s a good thing if you should have to assemble it somewhat. I’m partial to this kit from DFRobotShop because it contains a lot of the features I like in a robot including a built-in motor controller, plenty of documentation, and a price under $90 as of this writing. As time goes by, these kits will be replaced by newer and cooler things. Embrace the change, just get started with something, join the community, and have fun!


Special thanks to Meagan H. Houle for her copyediting services and to countless friends for playing with robots with me. 

Arduino software accessibility overview by OS

The Arduino software is used to write a "sketch" - basically a script - compile it, and send it to your Arduino board. It is also used to receive data from the Arduino board in the form of the Serial Monitor. Here is a download link for the software and an overview of making it accessible.

Software Setup

If you are using a screen magnifier:

No adjustments needed. You may like the Arduino O&M post for more details on the smaller parts of the board.

If you are using a screen reader:

  • If you are using OS X, VoiceOver has been reported to work with the Arduino Integrated Development Environment (IDE) without modification. 
  • If you are using Windows, see this post about setting up the software on Windows
  • If you are using Linux, the Windows setup post may be helpful but we do not have further details at this time. 

Learn to code resources