Author Archives: bmayton

Printing Functional Objects with the Form 1

3D-printed microphone clip

3D-printed microphone clip and custom-built microphone.  Please excuse the messy desk in the background.

The idea of starting with a digital model of a 3D object and having a physical representation in your hands a few hours later is certainly kind of magical.  I remember when my department at UW got its first 3D printer (which cost about as much as a nice car and was the size of a refrigerator) I spent hours staring through its window, watching it build up objects a layer at a time.  Amazingly, just a few years later, there are now several desktop-sized printers available at a fraction of the cost.  With the recent availability of these “personal” 3D printers, it’s been interesting to see the resulting models that people have printed.  I’ve yet to see one that doesn’t have a few chess pieces and an Eiffel Tower or two sitting next to it, showing off its capabilities.

While these intricate models are definitely cool, 3D printing isn’t just about models that look nice.  To me, the real value of 3D printing is being able to print out physical models that are functional, that wouldn’t otherwise be easy to obtain.  I’ve recently been working with the Form 1, which is a recent desktop-sized 3D printer capable of some pretty impressive prints.  While I’ve certainly printed a few things that are just for looking at, I’ve also been using it to make functional objects.  And so far, I’ve been pretty happy.

One of the models I’ve printed is a custom microphone clip (pictured above.)  I’ve recently gotten into building custom microphones (which I’ll write more about in a later article) starting with some that are fairly unique.  One of my current research projects involves audio recording and streaming at an outdoor site (you can listen in live, here).  I needed some microphones that were relatively inexpensive, sensitive enough to pick up quiet sounds, and wouldn’t get destroyed after months of being exposed to the elements.  I’ve arrived at the design you see above, which packs a nice electret microphone capsule and the circuitry for it into a weather-resistant XLR connector (what you’d normally find at the end of a microphone cable.)  They’ve been working great outdoors, where they are hanging from trees and tied to shrubs.

It turns out that they actually make great omnidirectional microphones for more traditional recording applications, too.  But few pianos that I’ve encountered have convenient overhanging tree branches to tie the microphones to.  So, they need to go on stands, and for that, I need microphone clips.  And these microphones are too small to work in most standard microphone clips.  And, if you go to buy microphone clips, you discover that clips are either sold for specific microphones (which are generally overpriced—I guess the manufacturers figure that if you’re spending $1000 on a microphone you’re willing to pay $40 for a piece of plastic that holds it) or they’re sold as “universal,” which basically means that it fits any microphone as long as it’s an SM-58.


So, faced with either expensive clips that might or might not fit my microphones, or cheap universal ones that almost certainly would be too loose, I fired up my CAD software and sketched one out.  It’s two pieces—the base that screws onto the stand (including 3D printed threads—US microphone stands use really weird 5/8″-27 threads) and the clip that holds the microphone itself.  The two parts fasten together with a bolt & nut, which, when tightened down loosely, creates a friction hinge allowing the angle of the microphone to be adjusted.


Here’s the Form file.  I haven’t quite figured out how to do the supports for the base.  I’ve actually had best results printing the base without supports (it’s a little bit of a challenge to get it off of the build platform, but it keeps the surface finish on the outside nice.  I’d love to support it from the bottom, but the current PreForm software really wants to put supports inside that get just a little bit too close to the threads (one of my earlier prints has a support that fused into the threads.)

Overall, it turned out great!  For a few dollars in material, I have some perfectly functional mic clips, with working threads and everything.  (The threads did require some careful cleaning with tweezers after the print finished to remove a little bit of gunk.)  The material actually has just the right amount of flex in it that the microphone snaps in and out of the clip easily but stays put when it’s in the clip.  The pair I made worked great for recording inside of a piano!

This is the stuff that I think is really cool about desktop 3D printing.  In a couple of hours I was able to draw up and have in my hands an accessory that works perfectly with a device that I built—something that I really can’t just go on Amazon and buy.

The ZigBoard (working title)

3D PCBComputer rendering of prototype board. Created with Altium Designer 6.9; components modeled in SolidWorks 2009

Many small projects seem like they would benefit from low-power, low-bandwidth wireless connectivity. Commercial modules such as the excellent XBee series of devices exist, but are relatively large, expensive, and seem better suited to tinkering with the technology than integration into a finished project. Single-chip RF transceiver solutions are small and inexpensive, but require a fabricated PCB for every design. My goal with this project is to develop an inexpensive and small RF transceiver module that is flexible enough to use in the prototyping stages of a project while not being so general and large that it’s wasteful to use in a finished work.


  • Communications Protocol: 802.15.4, provided by the AT86RF230 transceiver chip and MAC implemented in firmware
  • Microprocessor: ATmega168 or ATmega328 (same footprint, more memory)
  • Antenna: 2.4 GHz board antenna design from TI application note
  • Matching network: Integrated 2.4 GHz chip balun for Wi-Fi and Bluetooth applications
  • Interfaces: RS232 and I2C exposed at board edge, SPI exposed in programming connector
  • Additional I/O: 2 digital GPIO lines with PWM, 3 GPIO lines with analog inputs
  • Dimensions: 1.25″ by 0.6″

Key Design Goals

  • Low cost: $10-20 per board
  • Hand-assemblable (minimal component count, low component density, and oversized pads for the 0402 components)
  • Possible to integrate into an existing microcontroller-based system in addition to providing sufficient I/O and computing to drive external hardware, sensors, etc. (It’s basically a low-cost 8-bit wireless mote.)
  • Small size
  • Inexpensive board fabrication: 2 layers, 0.006″ minimum trace/spacing, 0.015″ minimum hole size
  • Can be paired with an FTDI TTL RS-232-to-serial module ($15) to provide a computer-to-802.15.4 interface.


The boards are completed and functional, but I haven’t had a chance to properly document them here yet. For an example of the boards in use and firmware/software code, please refer to this project on my MAS 863.10 page.

Partially assembled prototype
Partially assembled prototype board.

An Electric Field Pretouch System for Grasping and Co-Manipulation

Pretouch is a sense that is longer range than touch, but shorter than vision. Using electric field sensing hardware that I designed to fit inside a robot’s fingers, several robotic manipulation tasks are made easier or possible.

Human-to-robot and robot-to-human handoff

In this work, the robot is programmed to accept an object from a human, and then hand it to another human.

  • First, the e-field pretouch sensors are used to detect the presence of an object that a human is holding up and track the object to center the robot’s hand on it as a human might be moving around.
  • Once the sensors detect that the object has stopped moving, the sensors are again used to servo the positions of the fingers to equal distances from the object’s surface, about a centimeter away. This ensures that when the fingers close, they will make simultaneous contact to avoid displacing the object.
  • After grasping the object, the robot waits for the human to let go before trying to move away. The human holding onto the object provides an AC path to ground, which the e-field sensors can detect. When the human lets go, this current path goes away and is easily observed in the sensor readings.
  • The robot moves its arm to hand the object to another human. Again, the e-field sensors are used to detect whether the human has accepted the object so that it does not let go prematurely.

Picking up stationary objects

We also demonstrated the use of the e-field pretouch sensors to pick up stationary objects from surfaces when only the approximate position of the object is known. Using closed-loop controllers, the sensor inputs are used to correct the positioning of the arm and fingers to facilitate reliable grasps.


This technology has been featured in several high-profile demos, including:

  • CeBIT opening ceremony, Hannover, Germany March 2009
  • Intel Developer Forum, San Francisco, CA, September 2008
  • Intel Developer Forum, Taipei, Taiwan, October 2008


Grasping various objects with and without e-field pretouch sensing

E-field handoff demo at the CeBIT 2009 opening ceremony, with Intel Chairmain Craig Barrett, Governor Schwarzenegger, and Chancellor Merkel

Relevant Publications

Mayton, B., LeGrand, L., and Smith, J. 2009. An Electric Field Pretouch System for Grasping and Co-Manipulation. IEEE International Conference on Robotics and Automation, 2010.


Enabling Robots to Plug In to Unmodified Electrical Outlets

Using electric field sensing hardware that I designed, I enabled Marvin, Intel Labs Seattle’s mobile manipulation research platform, to plug itself in to ordinary, unmodified electrical outlets. The robot only needs to know the approximate location of an outlet on its 2D map to drive up to it and precisely align the prongs with the holes in the socket by sensing the emitted 60Hz electric field.

Relevant Publications
Mayton, B.D., Legrand, L., and Smith, J. 2009.  Robot, Feed Thyself: Plugging In to Unmodified Electrical Outlets by Sensing Emitted AC Electric FieldsIEEE International Conference on Robotics and Automation, 2010.

Media Coverage
Gizmodo: Intel Robot Finds Wall Socket, Plugs Self In
Seattle Times: Intel Robot’s New Trick

Weekend Project: The Message Box

Having a small character LCD hooked up to a computer isn’t really a novel idea. They became popular on servers, which often run without monitors attached, to convey vital system status information to technicians. In more recent years, they have become popular in custom-built PCs. I wanted one on my desk because there are often small notifications that I want to be accessible at all times, but not the center of my attention. On-screen notifications, such as icons in the GNOME panel, the Windows system tray, or Growl on Mac OS X work fairly well, but only if I’m sitting at my computer and have the monitors turned on. An external notification device is able to convey this information without a large display.

I could have purchased a pre-built unit; they exist both as displays that fit into an empty expansion bay on the front of a PC, or separate desktop units. However, my aesthetics don’t always match up with the PC-modding community (I tend to prefer things simple and understated rather than bright and flashy; I don’t want my PC to look like the typical “gaming rig”).

Building things yourself is great because you get to decide exactly how it’s going to look and work. I also chose to add 3 RGB LEDs to the device—many small bits of information are binary, such as having a new e-mail message. The LEDs provide a great way to convey information like this, and they’re meaningful from across the room. Using RGB LEDs makes them customizable, or allows information to be encoded in the color of the indicators.

The message box.
The completed message box.


  • Enclosure: Recycled Apple power adapter packaging
  • LCD: 2 line by 16 character display, using the ubiquitous HD44780 controller
  • Microcontroller: ATmega168, using the internal RC oscillator
  • Interface: USB, using the FT232R chip for USB-to-serial
  • LEDs: 3 RGB T1-3/4 LEDs


Rather than designing a custom PCB and fabricating a custom enclosure, I decided that I’d put together the Message Box as a true weekend project, using only materials I had around in the parts bin. The enclosure that I chose is the plastic box that Apple uses to package their chargers for the iPhone/iPod touch. It was perfect for re-use in a project like this.
Plastic box.
The Apple plastic box.

I started by cutting a piece of perfboard to fit the inside of the box. I drilled four holes in the corners of the board and the box so that the board could be mounted on standoffs. I soldered a USB mini-B jack to the edge of the board, then drilled and filed out an opening for it in the plastic.

After confirming the fit of the board in the box, I placed all of the large components on the board: the LCD, the ATmega168, and the 3 LEDs. I checked the fit in the box and then soldered them down.

The FTDI chip that I used to provide the USB interface is only available in surface-mount form. There’s a nice evaluation board with the chip and a USB port on it that I’ve used before in other projects, but I didn’t have any sitting around. The prefabricated evaluation board also adds about $20 to a project, where the chip itself and a USB connector can be sourced for a couple of bucks.

To use the surface mount chip, I placed a piece of Kapton tape on the bottom of the perfboard to keep the pads from shorting out the pins on the chip, and epoxied the chip to the tape. The whole board is wired point-to-point using 30-gauge wire. Soldering the wire directly to the pins of the chip takes a reasonably fine iron tip and a little bit of practice, but it’s really not bad once you get the hang of it.

USB interface.
The USB jack and FTDI chip.

I then proceeded to wire up the rest of the board. For the passive components, I used 0603-size surface mount resistors and capacitors. These are actually great for point-to-point work like this, because they fit perfectly between pins with the standard 100-mil through-hole spacing. The bypass capacitors fit neatly between the power and ground pins on the chips, and the LED resistors take up hardly any space at all. You just need a good pair of tweezers for placing them accurately.

Point-to-point wiring on the back side of the board.

Firmware and Software

I wrote the firmware for the device in C, using the avr-gcc toolchain. There is a 6-pin ISP socket on the back of the board to enable the microcontroller to be programmed.

The device appears under Linux as a standard USB serial port (/dev/ttyUSB0). I set up the protocol so that any text written to the port appears on the display. I also implemented a very limited subset of the VT100 terminal command set for operations such as clearing the display and positioning the cursor. To control the LEDs, I added a few custom escape sequences.

On the PC end, I wrote a Python script that updates the information on the display. It periodically polls a variety of sources such as RSS feeds, e-mail inbox message counts, instant message clients, and music players, and then updates the text on the LCD and the state of the LEDs accordingly.


The Message Box is a great little device; I’m glad I spent the time building it. I’m still tweaking the code to make it do different things and customize the functionality, but that’s what’s great about having a custom-built solution—in the end, it will do exactly what I want it to do.