Instructables
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.

 
Remove these adsRemove these ads by Signing Up
skearney3 months ago

Functionally, I wonder if you could have color-coded cubes that correspond to user-definable parts, i.e. PVC pipes; If each block had input/output on all six sides that could be really interesting (not that it isn't).

Bryan Cera (author)  skearney3 months ago

Yes! Assignable cubes would be too cool. And definitely, six-sided connections would be a huge improvement. Unfortunately this is tricky - maybe impossible - to accomplish using the voltage divider approach. The cubes may need to have more sophisticated electronics to communicate that kind of data. Any ideas? :)

Well, your system would have to mechanically grow a bunch to accomodate the higher complexity electronics, but the first thing that comes to mind is a daisy-chained communications system (as opposed to a standard parallel system like SPI or I2C). This way, a device is addressed (to determine stack height) via its position in the daisy chain. Each voxel/cubelet/whatever could then be fully customizable with respect to its virtual representation.

Might be a simpler way to do this, but this is the first thing I thought of.

Bryan Cera (author)  samurai12003 months ago

@Samurai my thoughts exactly. Any insight on what sort of chip might do this? I've heard of old computer networks working like this...

I made a cursory glance at google when I was writing that but didnt find anything that specific for cheap (for instance, daisy chain communication is common in battery pack management ICs, but are large, expensive, and would have too much unused functionality).
The obvious answer here is to choose a small, cheap microcontroller with something like two of the same peripheral (like two separate spi ports): one would face the previous block and one would face the next block. Then you write a little bit of management code to concatenate or strip messages traveling from one peripheral to the next. I think this functionality could be had for less than a dollar w.r.t. the microcontroller.
Bryan Cera (author)  samurai12003 months ago

I wonder if I can get that sort of functionality out of an ATTINY? With a soft serial library for comm. I'll have to play around with this over the summer!

Possibly. The tricky part is having 2 identical comm peripherals that can be configured physically (e.g. by jumpers when you plug into a cube/have a cube plugged into you) and are on separate pins. For that reason soft serial is your best bet for minimizing cost per cube.

Maybe you can get this sort of distinguishing by using different values of resistor for each color. The trick could be the use of prime numbers roots, to make unique combinations.

Bryan Cera (author)  rtudeschini3 months ago

Ah, If only stacking resistors in parallel yielded a linear progression! Even still, there would be the issue of sensing the order of "different" block types in a stack... though Kavi and I are currently working on a way of tracking that in software. Really good thought though, I might have to play with this.

The easy solution is to add a simple switch in each block with a projection in the bottom of the next block up to break it. Then, in each block, one contact connects to the resistor, the other side of which is connected to the contact receptacle for the next block up, and the switch. The other side of the switch is connected to the return contact for the block below and the receptacle for the block above.

Plug the first block in: the switch is closed, so current flows into the resistor, through the switch to the return contact, one resistor, in series.

Plug in the second block: the projection breaks the switch in the block below. Current flows into the resistor in the bottom block, through the connection to the receptacle to the block above (and not through the switch, which is open) where it continues to flow through the resistor. That switch is closed, so the current continues to the return contact, through the return contact in the block below, and on to the return terminal of the measuring loop: two resistors in series.

If you mistrust the mechanical switch/projection, substitute a magnet for the projection and use a very small reed switch (NC, opens in Magnetic field) in the bottom of each block.

This allows a couple of resistor schemes, and doesn't rely on prime resistor values:

1) stick to the E tables. Chose a tolerance that your measuring system can differentiate without question. (Consider E6 for a simple example: these are 20% resistors, 100ohm, 120ohm, 130, 150, 160 etc. check the tables and info at http://logwell.com/tech/components/resistor_values...). E tables are designed to provide a standard value within the tolerance range on either side of any standard value, covering the entire range. So skip every other value, and you have a "guard band" between possible values. Now, assign one type/color/size/value whatever, to each value.

Since you can constantly read the stacks faster than anyone can add blocks, you can tell which block is added next: this requires that the user not pre-stack blocks.

2) Choose resistance values based on their tolerance, and your ability to turn the decimal digits within the tolerance into binary numbers. For 1% resistors, you can count on fifty values which fit within seven bits. Organize them based on leading digit into 7 classes, with increasing numbers of sub-class. For instance, if you have only one interconnect (pipe, wire, etc) assign that 1. Use 2 (which will only have one, because of the need to skip values for the 1% tolerance) assign another singular value, maybe ground? Power to 4 (plus and minus), semiconductor type to 8 (BJT, JFET, diode, 3-terminal regulator), capacitor to 16, resistor to 32, connector type to 64 (decreasing number of choices because you can't count to 127 and you're still throwing away every other resistance value). Probably a weak example, but with well-chosen values, you could make a radio!

Anyway, once you have the ability to stack resistors and ensure a return path without forcing an additional capping piece to keep track of, the rest is pretty much your own choice of encoding.

Clarification of last paragraph:

Once you have the ability to maintain a series connection of a continuously-increasing stack of resistors...

jwflammer3 months ago

Very Cool Project! If you could incorporate other shapes, that would extend the functionality and creativity. Try using an open source CAD programme like QCAD instead of Processing, the way you have presented this Instructable is very nice. Throw this on KickStarter, its totally worth it! I would love to pay and play with your prototype soon :)

l19bal3 months ago

Absolutely brilliant I love the way it works! Keep up the good work! :)

repkid3 months ago

Awesome project, I love it.

francisroan3 months ago

one of the most coolest innovative stuff I have ever seen... heads up. and BTW try it on kick starter.. along side with a 3d printer... it'll be sweet.

marty6053 months ago

Awesome work Bryan! How about a Lincoln Log edition?

DoxxRoxx3 months ago

Dude!

You need to hook up with Minecraft publisher Mojang straightaway! I see some serious potential to implement your design into a physical based building platform to enhance Minecraft gameplay. Think Skylanders for Minecraft. Wow, my mind has been blown!

Nice job.


Bryan Cera (author)  DoxxRoxx3 months ago

My nephew is obsessed with Minecraft... I am hoping to do some user testing with him soon!

I may just make one and do some Minecraft mods with some friends to work with this. Great project I love it!!! Defiantly voted for you. Good luck on the contest.

PC-GUY3 months ago

good job. i wish i had your skills.

Oh my God. This is the future. I'm not even kidding.

caltemus3 months ago

Imagine integrating this into legos, with molded in resistors that could work with one of the lego cad programs out there.

metrowave3 months ago

This is very clever and original. Well done!

Honus3 months ago

Wow- what an incredibly cool project!

critopadolf3 months ago
Exactly! If you did this for mine craft you would need pieces that act as different mine craft blocks, you could even make them look like the blocks themselves
Bryan Cera (author)  critopadolf3 months ago

Love your idea. 'Cubecube: Minecraft edition' has a nice ring to it!

critopadolf3 months ago
Awesome! Is it possible to do this with legos? And could you modify pieces so the cad software knows not to include them so you can have gaps in the 3D models?

Yeah, that's a great idea. Like, "black" pieces that when set, the software treats it as a hollow but will respect the space.

Bryan Cera (author)  ffcabral3 months ago

Agreed! Great idea. I am hoping, in the future, to add a feature that allows one to toggle through different block "types" - including your suggestion of the 'hollow' one. I included an extra button switch and LED on the board for stuff, like this, that can be developed down the line...

IMG_2333.jpg
Jan_Henrik3 months ago

Very Nice!

versos-tk3 months ago

very clever, hat raised.