Introduction: Facebook Wall Robot

***UPDATE 4/28/2012***
I made a spray painting gondola, see step 11 for information.  This ends up being a nice upgrade since you can only write with a marker on certain walls, but you can spray paint on any wall (brick, cement, etc.) ;).  I've also added a video below

Not sure what happened to the W in this one, it worked great in the video on step 11
****************************

When I thought about what making something on a computer real one of the first things that came to my mind was Facebook wall posts.  Wouldn't it be cool if I could post them on a real wall.  Well now I can!

This robot draws posts to your virtual wall in Facebook, onto a physical wall.  To do this I looked at various drawbots that used two steppers and a pen to create large drawings.  You could easily do this with an Arduino, but I wanted to see what I could do with the EiBotBoard that came with my Eggbot.  I also harvested the motors off the Eggbot to make this happen.  Since I don't have a 3d printer yet (hint hint . . .) I made this with parts that don't need to be printed, but it could be improved on with a few 3d printer parts.

You could draw directly on the wall.  Since I'm married I'm not allowed to do that though so I have mine draw on a white board mounted to the wall ;).  The frame is portable so you can easily move it somewhere else, plug it in and go.  It supports multiple fonts (stolen from the Eggbot Hershey Text plugin for Inkscape)

Since this drawbot basically just draws text, it doesn't have to be from Facebook, any text you want it to render would work as well.

Step 1: Drawbot Basics

The basics of this drawbot is pretty simple.  You have two spools of string on two steppers that attach to a "gondola" in the middle.  If the stepper on the left reels in some string then the gondola moves left and up.  If the on on the right reels string it the gondola moves right and up.  By moving both steppers at the same time you can move the gondola in any direction.  To determine how long the string should be to get to a location you just the Pythagorean theorem.

a²+b²=c²

The length of the string is "c".  "a" is the distance from the motor down vertically to where you want to be (the Y coordinate).  "b" is the distance from the motor to where you want to be (the X coordinate).  Doing this calculation for both of the motors gets you the distance you want each of the two string to be to land on a certain point.  You want your frame to be much bigger than the area you're drawing on, because certain places are difficult to reach if it's not.  In the picture attached to this step you'll notice there are two triangles, one with A1, B1, C1 and the second with A2, B2, C2.  So:

A1² + B1² = C1²
and
A2² + B2² = C2²

And solving for C (the length of the string) we do:

C = square root of (A² + B²)

A decent write up on this can be found here http://www.marginallyclever.com/2012/02/drawbot-overvie/

Step 2: Parts

PVC frame.
  • I used 1/2 inch PVC, but almost any size should work.  I wanted mine to be adjustable, so I used two foot sections of PVC then used couplers to attach them (I didn't use glue so I could pull them apart to change the size if I wanted to ).  For the frame in the picture I used about 28 feet of PVC.
  • 2 PVC Elbows, one for each corner
  • Several Couplers (depending on the size of the frame and the length of your sections of pipe).
  • Rubber feet, I couldn't find any that fit on a 1/2 pipe, but they had some 1 inch feet at Home Depot that fit over the coupler to join two 1/2 pieces of PVC.
Gondola
  • I used the clear piece of plastic that comes when you buy a stack of CDs.  Anything about that size and flat should work.  Clear is nice because you can see what it's drawing, but it's not required.
  • Office supply clips.  I used two of these, a small one to hold the pen to the gondola and to tie the strings on from the motors.  I used a second one the the pen to weight it properly, so the gondola was flat against the wall.
  • Shaplock for some customization.  I needed something for the clip to clip onto, so I made it out of Shapelock, which is basically a bag of little plastic beads that melt in hot water so you can form then into whatever, then they harden when they cool.
Spools
  • I found string at the hardware store.  I wanted spools that were deep and I couldn't find anything so I made my own.  I used some tubing the fit over the stepper shaft tightly, then I glued a couple of pieces of cardboard to it for the sides.
Stepper Mount
  • I use some electrical box blank covers.  The hole in the middle of them fits the stepper motor perfectly (after you pop out the piece of metal).
Ethernet cables and connectors
  • This is how I connected the motors to the EiBotBoard.  Using Ethernet connectors and cables I could use longer cables for bigger frames.
Stepper Motors
  • Almost anything will work, these don't have to be particularly strong.  I used the ones that came with my Eggbot
Servo
  • This is used to lift the pen or marker off the board, almost any servo should work.
Motor Controller
  • EiBotBoard - This is a cool board, it's able to control two steppers and several servos at the same time.  Again, you could easily replace this with an Arduino (and I'll probably make an Arduino version as soon as I can find my Motor Shield). 

Step 3: Building the Frame and Mounting the Motors

The bulk of the frame is PVC pipe.  Mine is 4ft wide by about 7ft tall.  Most of my PVC sections are 2 feet long and I connected them with couplers.  Two elbows are used to make the three sided frame.  On the bottom of the legs I put a rubber foot.  This keeps the frame from sliding on hardwood floors.  I put the 1 inch foot around the 1/2 inch coupler, then put the coupler on the end of the leg.

Step 4: Stepper Motor Mount

You mount a stepper motor on each of the upper corners of the frame.  Get the electrical box cover, and pop out the round medal slug in the center.  Then create a template for the motor holes and mark them on the electrical box cover.  Then drill out the holes.  Now you should be able to use small screws to attach the stepper to the electrical box cover.  Now hold the electrical box cover in the corner of the frame and mark where the holes need to be to attach it to the frame (my cover had 2 holes pre-drilled).  Drill through the pipe, then use a small bolt to attach the plate to the pipe.  I put some electrical tape on the end of the bolt to make it less dangerous when it falls (both to me and the floor).

Step 5: Spools and String

I wanted deep spools and I couldn't find any so I made my own.  I found some tubing at the hardware store that fit snugly over the stepper motor shaft.  I also found some metal washers that fit snugly over the rubber tubing.  So, I put the metal washers over the tubing, then used some super glue to attach them.  Then I cut out some cardboard circles and glued those to the metal washer and the rubber tubing.  Next I hooked the string on the spool and let the stepper motor reel in a bunch of string.  While this works, I'll probably look at making better spools in the future.

Step 6: The Gondola

There are many different designs for gondolas around.  It really doesn't matter how you make it as long as you can attach to two strings from the stepper motors to it.  Many people like a large flat gondola because it helps stabilize the pen.  I used the clear plastic piece that comes with a stack of CDs when you buy blank ones.  I was hoping since it was clear I could see what it's drawing better, but I had to use some Shapelock to make it useable which made it less transparent.  I attached the string to a springy paper clip you can get from an office supply store and used it to hold the pen.  To get it to attach to my clear CD shaped piece of plastic I used Shapelock.  You basically put the Shapelock beads in hot water and they melt, then you can form them into whatever you need.  I put mine through the hole in the clear CD shaped piece of plastic, leaving enough room for the marker tip to go through.  Then I formed a small shaft coming out perpendicular to the plastic so the paper clip could clip on.  I also formed a plastic holder for my servo on the bottom.  I basically started forming it, then put the servo in, finished forming it, then let it cool.  The servo can be removed by pulling up on it.  I attached some Q-tips to the end of the servo so I could lift the gondola off the wall when I needed to move it without drawing (lifting the pen).  You may notice I have a triangle of Q-tips attached.  Really you just need one.  Q-tips are nice because they slide along the wall pretty easily.  The reason I have so many is I'm working on an eraser so it can clean the board off as well.

Step 7: Connecting the Motor Controller

I used the EiBotBoard off my Eggbot to control the motors.  You can use anything you'd like (an Arduino with a motor shield for example).  You need to be able to move both steppers at the same time.  The EiBotBoard is nice because it allows you to move two steppers, plus several servos.  To connect the motors I connected an Ethernet female connector to the motor leads and to the Eggbot board.  That way I can use an Ethernet cable between the motors and the controller board.  This is good because I can put longer or shorter cables in depending on the size of my frame.  When I bring it in to work with the big white boards I can make it wider and just use longer Ethernet cables.

To connect the server I used really light weight wire I found at Fry's.  That way the movement of the gondola isn't hampered by wire that's resisting the movement.  The is important since this is heavily reliant of gravity an the length of the two strings to get it to work accurately, other forces shouldn't be involved.

Step 8: Communicating With the EiBotBoard

To communicate with the EiBotBoard, you just send it simple serial commands (9600 baud).  It has an FTDI interface built in, so you just connect to it with USB.  Using a combination of reviewing their documentation and looking at the code from the Eggbot Inkscape plugin I figured out how it works.  I prefer Ruby to Python, so I wrote mine in Ruby (nothing's wrong with Python, just my personal preference).    The main commands you use are:

"EM,1,1\r" - enables the motors
"SC,4,[some number]\r" - sets the minimum value on the server (for pen down)
"SC,5,[some number]\r" - sets the maximum value on the server (for pen up)
"SP,1,100\r" - lifts the pen
"SP,0,100\r" - lowers the pen
"SM,[time to move],[motor 1 steps],[motor 2 steps]\r"

Step 9: Getting Your Facebook Wall Posts

I'm sure there are many ways to get your Facebook wall posts.  I thought about scraping the site, or using the API, but in the end I just turned on email notification and grabbed them out my gmail account as they came in.  The nice thing about this is once the post is marked read, I know I can ignore it.  I used a Ruby gmail library to log in and search Gmail.  Then I used some pretty simple searches and replaces to cut everything out of the email except for the things I wanted.  To turn on email notification in Facebook go to "Account Settings", then "Notifications", then UNCHECK "Send me important updates and summary emails instead of individual notifcation emails".  The Ruby file attached has the code

Step 10: Drawing the Text

Before I actually draw a word I send it through some test functions that will make sure the word will fit in the area I have available.  If it won't then I drop down to the next line.  I took the font data out of the Eggbot Hershey text plugin for Inkscape.  Right now my script has 3 fonts to choose from, but you could easily pull the rest over as well (it's just straight copy and paste).  The fonts are nice because they're just a listing of points and you draw straight lines to the next point.  To make a curve you do a lot of straight lines.  They also let you know when you need to lift the pen (when there's an M before the coordinates, an L means to draw the line).  I had to do some work to translate the relative points to absolute points on the wall, but it's a basic translation (you add where you're at the the points given in the font to get the translation)


Step 11: Spray Painting!

Adding the ability to spray paint lets you write on walls you couldn't with a marker (brick, concrete, etc).  In fact, I can't think of any wall you could write on where spray paint wouldn't work ;).

I took an empty large can of olives and cut the bottom off and cut arches on opposite ends with tin snips (watch out, the metal is sharp after you cut it).   Then I drilled a hole near the top to put a bolt through to hook the arm on to push the sprayer down on the spray paint can valve.  i used Shape Lock to form the plastic holder that the bottom of the paint can clicks into.  I tried this first with full sized paint cans, but it was too heavy for my steppers.

The curved arm that pushes down the spray paint valve is also made out of Shape Lock.  There are several other ways to make the arm including using a hanger, like this silly string shooting Instructable.  There are also plans for 3D printed versions of this, but alas, I have no 3D printer to print them on (wink wink).

As you can see I had to make the frame wider, I just added 6 feet of pipe.  I also made the letters bigger, since small letter in spray paint just look like a blob of nothing readable.

The rest is the same as before, the steppers move the spray painting gondola around and the servo with the arm turn spray paint where it's needed..



Step 12: Future Plans

My future plans include:
  • Erasing what it has to draw the next set of text
  • A lid so the marker doesn't dry out  (several people have suggested a retractable dry erase marker, like the Expo click, I'm looking itno that) OR
  • Use a wax crayon instead of a marker
Robot Challenge

Participated in the
Robot Challenge

Make It Real Challenge

Participated in the
Make It Real Challenge