Introduction: Arduino Ouija Board
What goes better with Halloween (other than candy) than talking to the spirit world through a Ouija Board? This is part of a large and growing home built animatronics display set up by my family. Originally conceived by my daughter as an homage to Stephen King, it has grown to include many memorable scenes and references to classic horror and Halloween films. Click here to visit us on the web.
The board can be controlled through the Arduino's USB port with the IDE serial monitor, a PS2 keyboard, or through the book which passes random pre-stored phrases through the serial ports which allows it to operate unattended. Since we usually have large crowds, the LCD title page also allows more people to see what is being spelled out without needing to be right next to the board. It is a separate unit which is not required to run the Ouija.
Our goal here was to do something really cool on the cheap. We did not want to spend hundreds of dollars on CNC controllers, linear rods and the like. Ideally we wanted to spend around $80 not including bench stock like wire etc. Trolling the net yielded few options to use as a guide. They were either really expensive, not replicable (custom circuits and hardware), or just randomly moved a planchette around a board. We have a fully controllable, yet moderately budgeted alternative.
Other than the obvious electronic parts, a trip to Home Depot will provide just about everything required. That said, the linear motion is delivered through cabinet drawer slides; around five bucks each. Version 2 will probably upgrade to linear rods and pillow blocks but that will push us over our initial target.budget.
The overall size of the enclosure came about mainly by chance. Scrap plywood measuring just under 24"x18" determined the physical size and the Hasbro Ouija Board Game fit that nicely. We used their board and planchette; make your own, buy a different one or use the Hasbro. Size the enclosure so the mechanicals have room to work outside the working area under the board. Regardless of what you choose, the overall size of the enclosure needs to be larger than the Ouija itself to allow space for the motors and controllers and to allow the planchette to extend beyond the physical size of the board.
Ouija Board Game from Hasbro. There are two versions. One uses batteries and has a lighted planchette (the triangle pointer). That's the wrong one. Get the basic version, no batteries. It worked perfectly with Home Depot magnets.
Just to reiterate, these are our dimensions. There is nothing magical about them. Use Craigslist and get an old coffee or end table instead of building one. Build the gantry so the top is almost up to the underside of the Ouija. You want it close but not rubbing as it moves.
- 24"x18"x 1/2" MDF for the bottom. Its cheaper than most alternatives and is easy to work with. We found 24" square and cut it down. The scraps were used to build the carriage.
- 24"x18"x 1/8" overlayment, plywood, or equivalent. This needs to be rigid enough not to flex but not so thick that the magnets have trouble working.
- 24"x18"x .096" plastic to cover the board. Before we did this, the planchette started to leave marks on the Ouija and it slides better on the plastic anyway.
- 5"x1"x8' for the sides of the enclosure. These dimensions use 7 linear feet of board so there is minimal waste. The 5" board width worked out as the perfect height of the enclosure.
- #6 or #8 x 1 1/2" wood screws. Use what you have. Its not that important.
- Whatever you want for legs for freestanding or keep it as a tabletop model. It will be heavier than you think. We used a 4x4 8' pressure treated post that was in the garage.
- Corner braces, brackets, and supports. Depending on materials and your skills, these come in handy for joining pieces, tying off the timing belt and supporting the top. I used small 1"x1" brackets as well as 1x3 and 2x2 flat brackets. Most were leftovers from old projects. They all come with small flat head wood screws.
- Cabinet drawer slides x3. They are typically sold in pairs so you end up with an extra. 14" to 16" will work depending on how they are made. Try them in the store. Remember you will be mounting these horizontally (flat) so make sure whatever you pick works when its not vertical. Pick a spot on the slide and make sure it has a range of motion that covers your board. The Y axis is a little shorter than the X so try out both. The easier they slide the less strain on the motors. Alternatively, go for linear rods and pillow blocks. Super precision is not required here. You don't need CNC level accuracy.
- Magnets. You need 9 total. The six for the planchette need to be ring shaped. The three on the gantry can be solid.
- Timing belt. This turned out to be the best solution and was pretty cheap. 8ft 2.5m 2GT GT2 Timing Belt & 2X Pulley, 2X Idler, 4X Tensioner. Included pulleys and tensioners. Too easy.
- Felt stick on furniture pads. The planchette has plastic push-on feet. They worked ok but the felt worked better. And they are quick and easy and cheap to replace if they wear. I only found square so punched round ones out of them.
- Arduino UNO R3. We used the Microcenter clone since it was on sale for $5.99.
- Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit - v2.3 . Well worth the 20 bucks. We tried some other stepper drivers but this shield was just too easy to work with, it did everything and really cleaned up the wiring.
- Stepper motor - NEMA-17 size - 200 steps/rev, 12V 350mA. x2. These are too easy to use regardless of how you drive them. Plenty of power and minimal current draw at 12V.
- 12V 2A power supply. Power the motor shield and set the jumper for the Uno to draw power from it. No need for a second power supply. FYI we power the book with a separate 9V supply.
- Limit switches x2. You can manually zero the planchette each time you start but why bother. We used NTE 54-403 switches but use whatever fits your model. We mounted the X switch to the base and attached the Y to the moving carriage for no particular reason.
Step 1: Prep and Pretest
Before cutting any material, make sure your selections of magnets and tops will work.
- Slide two ring magnets onto each leg of the planchette
- Attach the feet
- Layer the top plywood, game board, and plastic
- Hold the planchette against the sandwich
- "Attach" a solid magnet to each of the three feet on the opposite side
- Move the planchette. All three solid disks should move freely. The planchette should feel solid against the plastic but still be able to move. If its too tight, don't worry. You can remove a magnet later if needed. The solid disks won't be in contact with the board when assembled
If the magnets don't hold, you may need thinner material or stronger magnets.
Step 2: Lay Out the Enclosure
In this step, we prep the base and figure out where things need to go so the undercarriage can cover the full size of the Ouija and not try to run outside the confines of our enclosure. It is possible that you can build this with a central rail down the center for the X axis. We did not try it.
- Cut your base to size. We used 24"x18". Up to you but practically you can't go much smaller and still have room for everything inside. Bigger is ok and makes everything easier since you just need to position the slides without cutting them. Rough estimate says that 30"x24" will allow you to mount the drawer slides without cutting them to fit the enclosure.
- Mark the sides on the base. Our side boards (the walls of the enclosure) are 1"x5" pine boards. Therefore we need to mark off room for them. They are 3/4" thick and will attach to the base with screws driven in through the bottom. Right now we just need lines to show us where they will be so we don't try to build anything there. Don't attach the sides; just mark their location.
- Mark the Ouija's location. It won't actually attach here; it will be on the top but its much easier to work your layout if you know where it will be. Center the cardboard Ouija horizontally and vertically. Draw an outline around it.
- Draw a line down the center of the board parallel to the X-axis. This will be a reference line when installing the belts later.
- Position the X axis drawer slides. For reference, we use 16" on the long X axis and 14" on the shorter Y axis. The blue plastic mechanism is an automatic closer. It can be disabled by pushing the red slotted area with a screwdriver. Ultimately we just took them out with a screwdriver and hammer as they don't help here. The goal here is to find a point on the inner (3rd) rail that covers the entire area of the outlined board. Specifically, one of the attachment points (the group of holes for a screw) is where the gantry will attach. Now open the slide all the way and see what works. Ignore for now that the third rail will extend beyond the enclosure. Once you decide which holes work, repeat for the other side.
- Extend both rails fully. If they are too long, mark them just shy of where they hit the line for the sidewall. Flip the rails over and disconnect them from the slides. Ours used a black plastic clip. Cut the third rail with a hacksaw. The leading edge is discarded; keep the part with the clip mechanism so it can reattach. For reference, we kept about 7" of the innermost rail.
- Lay the Y axis slide across the two X axis slides. Repeat the process to determine the best hole to use.
- Mark the location of the X axis slides by marking a few spots thru the screw holes in the outermost part of the slide. NOTE: They should be close, but not snug to the sidewalls. Give yourself a half inch or so of clearance.
- You can reassemble the slides and recheck fit, etc. at this point. Don't permanently attach the slides yet.
Step 3: Build the Mechanicals
In this step, we attach the rails and build the gantry for the Y axis. The stationary part of the slide is AWAY from the X=0 point. In other words, when at the lower left of the Ouija Board, the X axis slides are extended from right to left. I know it's counter intuitive, and if you don't like it, you can do it differently. We found that it makes triggering the X=0 switch easier to deal with and gives room for the X axis motor and Arduino.
- Take the third rail out if you reinstalled it. From the back of the third rail, attach a small block of wood through the hole. We used scrap 1"x2" about 2" in length.
- Attach the third rail with the block attached to the slide. Mount the closed end of the slide to the base. Don't overtighten. You want to be able to adjust its position. Repeat for the other side.
- Close both slides fully. Attach a piece of wood between the two blocks. Again we used 1"x2" pine. Just use one screw on each side for now.
- Fully open the slide by pulling both from the middle. Align them as closely as possible to parallel to the sidewall reference line.
- Add a second screw to each X axis slide.
- Add a second screw to each end of the gantry board.
- Work the mechanism a few times and ensure there is no binding.
- If you have access to an additional screw hole in the X axis slides, go ahead and use another screw.
- Attach the Y axis slide to the gantry board using two or three screws.
Now we can build the carriage which attaches to the Y axis. The top of our carriage is made with leftover MDF and is about 3 3/4"x51/4". This is a nice size as it has plenty of room to mount the magnets without getting too close to the edge. The carriage top can be mounted directly to the third rail on the Y axis. I suggest you mount a wooden block to the axis as it's easier to adjust the position of the carriage by screwing the top to a block as opposed to going from underneath. Once the sidewalls are on it's basically not possible to get the third rail out without taking down a sidewall. Our carriage has a third level because the original build used a threaded rod to move it and it ran through the center of the carriage. Fewer levels is smaller sidewalls. I would go with two levels which will yield about a 4" sidewall as opposed to the 5" we ended up with, but it's your call. Be creative here; 3D print it if you can.
Start with the top of the carriage.
- Place the planchette on your top piece and mark where the three legs are.
- Drill three counter-syncs for the magnets to rest in. We used a 3/4" speed bit and only went in about 1/8".
- Mount the top to the block on the Y axis. Pay attention to orientation. The wider side of the planchette (two magnets) is oriented to where GOODBYE appears (Y=0). Ensure your positioning allows the planchette to travel beyond the edges of the board you drew on the base. Use the planchette to visualize how it will move and what it will cover.
- Put a solid magnet in each hole. Make sure the magnets can fit flush with the top.
- Cut a piece of scrap plastic or thin plywood the same size as the carriage top.
- Mount this thin piece over the magnets to create a sandwich. Drill pilot holes; thin material, especially the plastics, split easily.
Step 4: Add the Electronics
UPDATE HALLOWEEN 2018: The serial comm between the book and the board has been problematic. Now the self running mode is managed within the board and the words are just sent out to the book for display. Updated (V4) code attached; change the NOSERIAL flag for keyboard and serial input
Now it's time to add the drive system and controller. There is a lot of art here as it is very dependent on what motor, mounts, and drive system you chose.
- Attach the toothed pulley to the motor shaft and the motor to the bracket for both motors.
- Mount the X axis motor first with the pulley over the reference line.
- At the opposite end is the idler pulley. Its mounted with two L shaped corner brackets and a long screw from Home Depot. Nothing fancy. There are two nuts on the axle to ensure it doesn't come apart. Again the pulley is over the reference line.
- Attach an L bracket to either side of the gantry board. We use 3/4"x3/4" corner brackets from Home Depot. They have just one hole on each leg. Once again, center them over the reference line.
- Loop the timing belt through a hole in the L bracket. Tie it off with a cable tie.
- Run the belt over the pulley, under the gantry, around the other pulley and loop it through the other L bracket. Pull it snug and tie it off with a cable tie. Add a tensioner as close to one of the L brackets as you can get it.
- Mount the Y axis motor to the side of the gantry. This is a little trickier as there is limited space to work with. Again, be creative. We mounted the motor in a mount to a flat steel plate and screwed that to the side of the gantry.
- Mount the idler pulley opposite the motor on the gantry.
- Mount a 3/4"x3/4" corner bracket to the carriage.
- Loop the timing belt through a hole in the L bracket. Tie it off with a cable tie.
- Run the belt over the pulley, down the side of the gantry, around the other pulley and loop it through the L bracket. You can use two brackets if you want. Pull it snug and tie it off with a cable tie. Add a tensioner as close to the L bracket as you can get it.
You should be able to smoothly move the carriage in both directions and feel only the resistance from the motors.
Now its time to mount the limit switches. The switches we used had 3/16" connectors on them. I bought 3/16" crimp on female connectors at Home Depot and crimped them to jumper wires.
- Move the gantry to the left (X=0)
- Pick a spot where the inner third rail on the slide extends beyond the reference board you traced and the planchette/carriage will reach the letters on the left of the Ouija.
- Mount the switch to the base.
- Mount a second switch to the carriage with the trigger facing the sidewall. We needed to add a bracket to the carriage to get it positioned right.
Finally, we get to the Arduino.
- Attach the motor shield to the Arduino.
- Connect the X axis motor to MOTOR 1.
- Connect the Y axis motor to MOTOR 2.
- Note the color orientation on the motor connections. Red, Yellow, Green, Grey. If you get the same motor, it may or may not have the same colors. Follow the directions for identifying pairs on your stepper
- Connect the X switch to Arduino pin 8 and ground.
- Connect the Y switch to Arduino pin 9 and ground.
- If adding the PS2 keyboard, connect 5V and ground to the keyboard. Connect PS2 pin 1 (DATA) to Arduino D4. Connect PS2 pin 5 (CLOCK) to D3.
- The book connects to the RX/TX 0 and 1 pins on the UNO along with ground.
Make sure your wires do not interfere with the movement of the gantry or carriage. We used 12" jumpers and heat shrink tubes (without shrinking them) to keep things clear.
Important safety tip: If powering the Arduino from the motor shield (jumper setting), you can inadvertently power the shield (and the two motors) from the Arduino when you connect the USB cable. Connect the 12V supply to the shield before attaching the USB cable or power them independently until you get the bugs worked out.
- Connect 12V power to the shield.
- Connect the USB cable.
- Upload the Ouija code.
The carriage should move slightly up and to the right then head for the (0,0) origin. If it doesn't get there quite right, press the X then Y switches to stop it. You will need to press the Y switch since there is no wall for it to contact.
Make any adjustments to cables, belts, etc. You can test operation from the serial monitor. You won't know where it exactly is but should see smooth motion.
Step 5: Complete the Enclosure
Power down before finishing up.
- Attach the four sidewalls through the bottom of the base. On the side where the Arduino will lie, drill a hole for power/USB cables.
- Verify that the gantry and carriage continue to move freely.
- Attach the printed Ouija Board to the top plywood. We used double side tape.
- Place the plywood over the top of the enclosure. The carriage should be close but not rubbing against the underside of the plywood. We added flat brackets to the top edge of the walls to give just a hair more clearance. Stick on velcro works great.
- Place a sheet of plastic/plexiglass over the board. Attach it to the wall with at least one small screw. It's important that the board is in the same physical place every time.
- Place the planchette over the plastic and slide it around. You should feel solid contact when the magnets engage.
Stain or paint your enclosure as desired.
Step 6: Build the XY Grid
You need to do some math to figure out the XY grid so the stepper motors know where they are and where they want to go. We use (0,0) as the lower left of the Ouija Board and as the point at which the planchette sets upon startup. All of your measurements should be from that point. The X axis is the long side of the board; Y is the short and both go positive from the origin.
First you need to know how many steps are required to move your planchette 1 inch. This is a function of the motor step size, belt size, pulley size, or threads per inch if using threaded rod or a lead screw. In our config its 127 steps/inch. If you don't know how to do it, PRUSA printers has a great online calculator for this. All the specs you need are on what you bought. Use single step; no need to microstep in the calculator. Remember the result is steps per mm; multiply by 25.4 to get inches.
The spreadsheet will get you started.
- Enter your calculated steps/in in highlighted cell B2.
- Measure from the origin to each letter on the board and enter the horizontal distance (inches) in the highlighted inch X column (E).
- Measure from the origin to each letter on the board and enter the vertical distance (inches) in the highlighted inch Y column (L)
When done, copy columns G and N into the ino file where the arrays are defined. Column Q has the definition for a two dimensional array if you want to change the code to support it. I would have preferred to do it that way but opted for two vectors instead. For reasons unknown, the two dimensional array did not reliably produce the right coordinate.
This is your starting point. In the next step you will test each letter and adjust the vectors accordingly.
Step 7: Tune and Tweak
The simplest way to do this is to use the IDE and serial monitor and test each letter. If you've attached the PS2 keyboard, that works as well. Special characters will move to the YES (<), NO(>), GOODBYE(:) and origin (;) locations on the board. There is no SPACE on the Ouija, and spaces are not inserted between words.
As you type each letter, check the planchette. If its not quite where you want it, change the value for that letter in the code. In our build, with 127 steps per inch, that means a change of 10 results in a movement of less than 1/10th of an inch. You can overwrite the cell value in the spreadsheet and recopy, but remember that wipes out the calculation for that cell.
Also, I've noticed that the planchette settles differently depending on which direction it approached the letter, how much play is in the magnets, how slippery the board is, how new the feet are etc. In short, it won't always line up exactly the same, but the view glass is big enough that it's always obvious where it is. If it lands between letters, reboot it to re-zero and blame the spirits.
Step 8: The Book
The book was added as a means of allowing viewers to see what the spirits were writing without the need to be up to the Ouija and looking through the planchette. As letters are highlighted on the board, the spirits also write them in the book. The small LCD shield is directly mounted to a Mega 2560 board which is mounted in a $5 hollow book from Target. All told it's ~$20 worth of stuff.
We also wanted the main board to operate with or without the book, so it is completely independent. If it's there, it displays whatever is being done on the Ouija. We added an extra hook to it. Controlled by a switch in the book, turns it into a transmitter of pre-stored Halloween phrases (I See Dead People, Come Play With Us, etc), effectively letting it drive the Ouija without any manual intervention.
The code on the main board doesn't care where its input comes from. It processes the queue on the USB, serial ports, and/or PS2 keyboard until that string is processed then scans all three for the next.
Not an integral part but important for us so we can greet our Halloween guests. While it's cool to let people ask questions and then type in an appropriate answer, its also kind of creepy and requires constant attention.
We'll share the book at a later time.