Cubecube: a Tangible CAD Interface.

by Bryan Cera in Circuits > Art

39914 Views, 352 Favorites, 0 Comments

Cubecube: a Tangible CAD Interface.

Introducing: Cubecube
IMG_2564.JPG
IMG_2567.JPG
pyramid_processing.jpg
dogHead_processing.jpg
dogHead_ADPU.jpg
dogFixed.jpg

Cubecube - an open-source hardware project - is a tangible, tactile interface for CAD (computer-aided design.) As open source design platforms continue to emerge, there is an opportunity to explore new possibilities in how we create. The Cubecube project aims to investigate the question: If there were a platform for using your hands to build three-dimensional computer models, what might it look like?

Essentially, I wanted to create a system that married one of my childhood passions - building tiny things with my hands - legos, constructs, etc - and my more recent obsession with creative coding and digital fabrication. So, this is a system that allows you to generate CAD geometry by stacking lego-like blocks!

Cubecube is open source. Source code for firmware and software, along with hardware designs and schematics, are available for free download on the internet. The current prototype is built completely around open-source creative platforms: its hardware is designed in Fritzing and connects with an Arduino Nano; its firmware is written in Arduino; its software is written in Processing. Full build instructions have been published on Instructables.com, which include step-by-step instructions with photos, a bill of materials, necessary files, and useful links to anyone interested in participating in this project.

Concept and Design.

cad02.png
pcb01.png
cad01.png
IMG_2373.JPG
IMG_2650.JPG
IMG_2651.JPG

The system behind Cubecube is simple. Its building blocks each contain a tiny resistor, and as they are stacked in parallel over a voltage divider, a change in voltage can be read by a microcontroller. Four analog multiplexers break the Nano’s inputs out into 64 discrete channels. Each channel, arranged into an 8x8 grid, reads a changing voltage determined by the number of cubes in the stack. The current prototype supports up to 640 cubes.

The Cubecube firmware and software, written by Kavinath Laud, was built in Arduino and Processing. The Cubecube Processing app utilizes Marius Watz’s Modelbuilder libraries to facilitate export of STL (stereo lithograrphy) format files. This makes it easy to interface directly with any 3-D printer system, and allows a user to extend Cubecube’s functionality with third party CAD environments.

The back-end of Cubecube is versatile. While designed as a CAD interface, it can be modified for any number of hardware-interface projects or experiments. Because it is designed with accessibility in mind, Cubecube can easily be hacked, iterated, appropriated or otherwise repurposed. The open source framework it was built around gives anyone the tools to make Cubecube their own.

Cubecube makes creating simple 3-D computer models as simple as building with blocks. The simplicity of its front-end allows for anyone who can grasp and stack objects the ability to engage with digital fabrication methodologies, and the accessibility of its back-end provides a starting point for further experimentation in the realm of tactile CAD interfaces. Cubecube offers a different way of thinking about computer-aided design, and provides a strange but familiar platform for creating.

Required Tools.

Before we get started, I'd just like to mention that as this project involves potentially dangerous tools, it is important to take appropriate safety measures (use a solder fan, wear safety glasses!) I'm safe. I'm set.

For this project, you will need:

- soldering iron ($22.00 from Adafruit, here)
- solder
- solder wick
- tweezers ($2.73 from Amazon, here)
- Small fillips-head screwdriver
- Jeweler's saw ($24.56 from inventables, here)
- M2 tap ($20.03 from Amazon, here)
- Computer capable of running latest version of Processing (see system requirements here)
- "Third hand" soldering stand ($6.00 from Adafruit, here)

Additionally, it may be helpful to own or have access to:

- 3D Printer (ideally with a .4mm or smaller diameter nozzle)
- Laser cutter
- Soldering Flux
- Sandpaper

If you don't have access to a 3D printer, you might consider ordering prints from an online service. See "Step 6: 3D Printed Parts" for more information.

Bill of Materials.

ISO_02.jpg

To build Cubecube, you'll first need to aquire the following materials and components:


Electrical (build plate):

- [x64] 1x2 Pin 0.1" Female Header ($0.05 from mdfly, here)
- [x3] 200 ohm 0603 SMD resistors ($0.10 from digikey, here)
- [x64] 499 ohm 0603 SMD resistors ($0.43 from digikey, here)
- [x1] Surface-mount RGB LED ($0.50 from Sparkfun, here)
- [x1] DC Barrel Power Jack ($0.95 from mdfly, here)
- [x1] Slide Switch ($0.75 from Sparkfun, here)
- [x4] SMD 16-Channel Analog Demultiplexer (from Digikey, here)
- [x1] SMD tactile switch ($0.75 from Digikey, here)
- [x1] 5v SMD voltage regulator ($0.74 from Mouser, here)
- [x1] SMD indicator LED ($0.46 from digikey, here)
- [x3] SMD 1x10 Pin 0.1" Female Header ($0.75 from Sparkfun, here)
- [x1] SMD 1uf capacitor ($0.46 from Digikey, here)
- [x1] SMD 10uf capacitor ($0.49 from Digikey, here)
- [x1] Arduino Nano (or compatible) micro controller board ($16.50 from Amazon, here)
- [x1] 12v 1A DC power supply ($5.20 from Amazon, here)
- [x1] Cubecube Circuit Board ($103.00 from Fritzing here - See 'Step 5: Fritzing Printed Circuit Board' for more info)


Electrical (Building Blocks):

- 2.2k Ohm 0603 SMD Resistor ($0.43 rom Digikey, here)
- 1x2 Pin 0.1" Female Header ($0.05 from mdfly, here)
- 1" Tall Female Stackable Header ($1.60 from hobbypartz, here)

Hardware/fastening:

- [x7] 16mm M2 standoffs ($4.69 from Ebay, here)
- [x7] M2 bolts ($4.80 from Amazon, here)
- [x4] adhesive-backed rubber feet ($2.79 from Amazon, here)

Building Materials:

- ABS plastic filament for printing components ($28.00 from Amazon, here)
- 3/16" Acrylic sheet ($5.99 from Inventables, here)
- Double-sided solder breadboard PCB ($5.12 from Amazon, here)

Printed/fabricated Components:

- [x1] Cubecube Array Plate

- [x1] Cubecube bottom base plate
- [x?] Cubecube building blocks (however many you wish to make!)

See 'Step 6: 3D Printed Parts' for more information on printed components.

Files to Download.

All of the files for Cubecube (designs, schematics, code) are completely free and open source. You'll need them if you'd like to build a Cubecube! You can find links to everything you'll need below:

Cubecube circuit board (made in Fritzing):
http://fritzing.org/projects/cubecube-v01

Cubecube design files (to be 3D printed and/or laser cut):
http://www.thingiverse.com/thing:321759

Cubecube software and firmware (Processing Source Code):

https://github.com/alter3go/Cubecube/releases/tag/v0.1


Fritzing Printed Circuit Board

fritzingz.jpg
IMG_2149.jpg
IMG_2157.jpg
IMG_2179.jpg

Cubecube was designed in Fritzing, a free and easy-to-use PCB editor. In addition to allowing you to output SVG and Gerber files to fabricate your own boards, Fritzing offers a PCB fabrication service.

While I make a lot of my own prototype PCBs, this one would be tricky as it has very tiny traces and incredibly small vias. So the best route for me was to simply order a board.

The board costs around $100.00 and ships from Germany. It is high quality and arrived in excellent condition in just over a week from the time I placed the order.

To order, simply follow this link:
http://fritzing.org/projects/cubecube-v01

And click on the "Fabricate This..." option. Fritzing will take you through the rest!

From there you can also download the Fritzing design file, in the event you'd like to check it or modify the design!

3D Printed Parts.

IMG_2142.jpg

Cubecube is comprised partly of 3D printed parts. These include the array plate (the plate you build upon), the bottom base (though in this build I use a laser cut part for this), and the cubes themselves (the Cubecube building blocks.)

I printed these parts on an Up! 3D printer, as well as on a homebrew Prusa i3 reprap printer. You'll want to make sure your using a .4mm diameter nozzle, as anything larger will most likely fail to yield the resolution you'll need for these tiny parts.

Alternatively, if you do not own or have access to a 3D printer, I suggest trying out a 3D printing service like Shapeways or Ponoko. These services allow you to upload a 3D model, and for a fee it will be printed and shipped to you.

All of the designs and STL files for these parts can be found on thingiverse:

http://www.thingiverse.com/thing:321759

Soldering SMD Components.

Fritzing Fab SMD soldering

Most of the electrical components in this build are a surface mount (SMD) package. That means they are tiny, and often tricky to solder. I highly recommend watching this video from Fritzing, where they go over in detail tips and techniques on soldering these tiny and intricate circuits. This video taught me everything I know about SMD soldering... and the host has an awesome German accent to boot.

SMD soldering takes a bit of practice, especially with the really small components, but is definitely something I notice I keep getting better at!

The Voltage Regulator Circuit.

IMG_2631.JPG
vRegSchem.png
vRegCircuitPCB.png
IMG_2286.jpg
IMG_2291.JPG
IMG_2296.JPG
IMG_2298.JPG

The first step of populating the Cubecube circuit board is the voltage regulator circuit.

I started by soldering the slider switch, barrel jack and regulator, then added the capacitors. Take care to make sure the caps are properly placed and oriented, like in the photo here!

For the most part, Cubecube can run directly from the USB port on my laptop. The external power supply is an extra precaution (that I highly recommend) to keep the system from hogging too much of your computer's precious USB power.

The regulator circuit consists of a surface-mount 5v regulator chip, and two electrolytic filtering capacitors (these keep electrical noise around the analog circuitry to a minimum!) A DC barrel jack connects to the power supply (I recommend a 6-9v supply - the one I mention in the Bill of Materials works great!) and the slide switch opens and closes the external power circuit.

Tacticle Switch and Indicator LEDs.

IMG_2632.JPG
BUTTONZ.jpg
ledButtonPCB.png
IMG_2299.JPG
IMG_2325.JPG

Next up: soldering the indicator LED and the (very minimal) button interface.

The indicator LED just confirms that the board is getting power. The RGB led and tactile button are for additional functionality that will be added later as the Cubecube project develops (for example, to toggle different "types" of blocks).

Arduino Nano + Headers.

IMG_2304.jpg
IMG_2663.JPG
IMG_2666.JPG
IMG_2665.JPG
IMG_2667.JPG
IMG_2671.JPG
IMG_2672.JPG
IMG_2305.jpg
nanoPinsPCB.png
IMG_2306.jpg
IMG_2312.jpg
IMG_2317.jpg
IMG_2321.jpg
IMG_2323.JPG

'Making' the headers:

It was tricky to source SMD female headers in the right configuration for the arduino Nano, so I made my own!

I purchased 10-position headers from Sparkfun (see Bill of Materials) and cut them with a Jeweler's saw.

Be sure to cut slowly - it will help you stay steady and means less time trying to clean up your cuts with sandpaper.

Soldering the headers:

Once your headers are cut, and you've made sure they line up properly with the pads labeled "MICRO" on the cubecube board, you are ready to solder.

With the female headers pushed onto the male headers on the Nano, place the Nano over the correct pads on the Cubecube board (see image).

Solder the outside leads, then (carefully) remove the Arduino Nano from the female headers so you can solder the inside traces. When all is soldered, relplace the Arduino, and you're ready to move on!

Quick Test Run...

cubecube: power test.

At this point a good portion of the board is complete and you are ready for a test run. Follow the video here. If the indicators on the Cubecube board or the Arduino Nano don't light up, check your solders joints and make sure you didnt forget to solder any leads!

Analog Mux Chips

IMG_2625.JPG
demux.png
mucPCB.png
IMG_2331.JPG
IMG_2333.jpg

To break the Arduino Nano's pins out to 64 analog inputs, I used four 16-channel surface-mount multiplexor/demultiplexor chips (often referred to as a "mux" or "demux".)

Buildr has a great writeup about these chips - this is where I began my experimentation with them! I highly recommend it:

http://bildr.org/2011/02/cd74hc4067-arduino/

These can be very tricky to solder, so I recommend following along slowly with the Fritzing video from 'Step 7: Soldering SMD Components'.

Voltage Divider Resistors.

IMG_2624.JPG
pcbFixed.png
vDiv_PCB.png
IMG_2334.jpg

This is where the magic happens on the Cubecube board. These resistors create a voltage divider between the blocks and the analog inputs on the Cubecube array. That means that by stacking blocks, which basically add resistors in parallel to the divider, we can read a change in voltage to the analog input. Cubecube takes that information, and maps to to display a changing number of blocks on the computer! Simple, yet precise.

Each spot on the grid needs its own 499 ohm resistor, so you've got 64 of these to solder! By the time you're done you'll be a SMD-soldering pro.

Assembling and Soldering the Cubecube Array.

cubecube: 'array' assembly.
IMG_2208.jpg
IMG_2623.JPG
IMG_2371.JPG
IMG_2229.jpg
IMG_2372.JPG
IMG_2642.JPG

The Cubecube 'array' is very simple to construct. After printing the array plate, simple populate it by inserting the *regular length* two-position female headers into the slots of the plate. See the video here for more information.

Once populated, the leds of the female headers will align perfectly with the holes in the Cubecube circuit board. Simply pop them through and solder!

Cubecube Platform: Final Assembly.

IMG_2202.jpg
IMG_2564.JPG
IMG_2638.JPG
IMG_2639.JPG
IMG_2640.JPG
IMG_2648.JPG
IMG_2644.JPG
IMG_2645.JPG
IMG_2646.JPG

We're almost done with the Cubecube platform! It's time for finishing touches. You'll need: The bottom plate, your 16mm m2 standoffs, an m2 tap and some rubber feet.

First, thread the 7 holes in the base plate with your m2 tap.

Next, screw the standoffs' "bolt" sides into each hole.

The Cubecube PCB should perch nicely atop the standoffs. Mount in in place with your m2 bolts.

The last (and my favorite) step is adding your adhesive-backed rubber feet!

Your Cubecube platform is complete! Only thing left now is to make some cubes...

Building Cubecubes.

IMG_2647.JPG
cubecube: cube assembly
cad01.png
IMG_2536.JPG
IMG_2660.JPG
IMG_2652.JPG
IMG_2654.JPG
IMG_2655.JPG
IMG_2658.JPG
IMG_2662.JPG
IMG_2530.JPG
IMG_2531.JPG
IMG_2533.JPG
IMG_2534.JPG
IMG_2545.JPG
IMG_2550.JPG
IMG_2557.JPG

The cubes are tricky, but something you'll get quite good at after making the first handful.

Creating the header:

I was unable to source a two-position stacking female header, so I again decided to make my own.

I instead bought 10-position stacking female headers and two-position "regular" female headers (see Bill of Materials). I simply removed the legs from each using a pliers, and swapped them!

This might seem like a waste - but if you take the time to put the unused legs back into the unused housings, you'll have some spare 10-position "regular" female headers for a future project.

Creating the tiny PCB

Next you'll need to cut a tiny little two-position PCB from your double-sided solder bread board (See Bill of Materials.) I used a Jeweler's saw to cut them apart - they saw through PCB like butter.

Soldering and assembling the cube:

Once the PCB is cut and placed on the female header's legs, you're ready to solder the 2.2k ohm resistors between the leads. I found it is actually easiest to solder the sides of the resistor along with the sides of the header. See the video here for a walk-through.

Arduino Firmware.

ard001.png

The firmware for Cubecube was written in - and runs on - Arduino, an open-source hardware platform and framework of libraries for creative coding (see http://arduino.cc for more information).

The arduino software is pretty straight forward - just plug in your Arduino Nano, open the file titled "cubecube_firmware" (from the cubecube_arduino.zip) in Arduino, and upload.

If it uploaded properly the RGB led should hold a steady RED.

Processing Software.

pro001.png

The software for Cubecube was written in Processing, an open-source hardware platform and framework of libraries for creative coding (see http://www.processing.org/ for more information).

The processing software uses Marius Wattz' "Modelbuilder" library, so be sure to move it into your processing library directory.

The only other step you'll need to take is to change the port number at the beginning of the processing sketch to the correct number (this will depend on the number of serial devices connected to your machine.) Mine was port 0.

With those two things checked, you're ready to run Cubecube!

Output.

cubecube: output
dogHead_meshLab.jpg
dogHead_processing.jpg
dogHead_ADPU.jpg
Screen shot 2014-05-03 at 10.57.01 PM.png
Screen shot 2014-05-03 at 11.00.18 PM.png
dogFixed.jpg

To output an STL file, simply press the space bar at any time while the Cubecube Processing sketch is running. A file named "output.stl" will be generated in the Cubecube software's sketch folder.

Watch the video in this step for more information on outputting from Cubecube and extending it's functionality with 3D printers and 3rd party modeling environments!

Demonstration!

IMG_2565.JPG
IMG_2569.JPG
IMG_2572.JPG
Cubecube: Demonstration.

I always loved building with Legos, and I've more recently found a passion for CAD. I couldnt have guessed how fun it would be to combine the two...

This project is still very much in progress... And I sincerely invite anyone interested to iterate, add to, and/or improve this design!

For more information, visit http://cubecu.be

Thanks for reading, and please vote for this instructable!