Skip to content

Marble Machines

As i’ve been working on my animatronic head, i’ve been realizing that i’d like a project that is more mechanical and simpler, less like the software i do for my job… which is when i came across marble machines. There are several current ones that anyone interested in the genre should know about.


The first is Matthias Wandel’s machines and blog. He’s got some great work! There is software for designing involute gears, and has documented several marble machines including the details.

One in particular is Ronald Walter’s, with an ingenious lift mechanism. There is also a very simple lift by RPKnikker.

There is a group in Japan that has been making several marble machines, one of which is a quad marble machine. They have several interesting parts: the latches with reset to split the balls initially, componentized design, and one of the components has a latch for one marble that allows later ones to roll over it, then get reset.

There is an interesting multiple AND gate. Knikkerbaan has some notes on making various parts of a marble machine.

Of course, no current marble machine list would be complete without mentioning Wintergatan’s Marble Machine X.

Upcoming designs

I’ve been floating some sketches around that mixes some of these ideas with Arduino… Stay tuned for a couple of upcoming projects.

Posted in Make, Robotics.

Tagged with , , .

Book: Design for 3D Printing

Design for 3D Printing: Scanning, Creating, Editing, Remixing, and Making in Three Dimensions
Bernier Samuel N,‎ Luyt Bertier, Reinhard Tatiana
This book is a must read for anyone getting into 3D printing. It is a very comprehensive overview of the tools, techniques, and services available at the moment. It contained many that I hadn’t previously had of.
That said, it isn’t a tutorial. It will start the reader in the right direction, but most of the information is too cursory to be anything but a start. Of course, if this book were comprehensive, then it would be a huge tome for the breadth of the subject it covers.
My rating: 9


Posted in Books.

Tagged with , .

Book: Getting Started with 3D Printing

Getting Started with 3D Printing: A Hands-on Guide to the Hardware, Software, and Services Behind the New Manufacturing Revolution

authors: Kloski Liza Wallach, Kloski Nick

A decent overview of 3D printing. The sections introducing the types and getting and fixing models are fairly up to date. The intro to CAD is understandably very cursory, covering Tinkercad, Mesh mixer, and Fusion 360. There are many good tips to help models turn into better printed objects.
The last chapter or two are unfortunately weak. These seem like it was tossed in so that the book didn’t end with the details of the CAD tutorials. However, the content is a bit cursory and could use many more details of what is currently happening to support the speculation.
My rating 7

Posted in Books.

Tagged with , , , , , .

Book: Learning Robotics Using Python

Good book. Interesting intro with some background that was me to me, even though I’ve built several robots before. I particularly like the historical notes. It is setup as a project that the author goes through, starting by discussing the requirements: it is to act as a hotel waiter. There is good intro to various tools: 3D design, simulation, hardware design. It covers actuators, sensors, and algorithms to make these work well. Larger topics include AI, speech synthesis, speech recognition, vision, and mapping and navigation. The basis is ROS, which is very convenient for anyone wanting to undertake complex robotics.
My rating: 7/10

Posted in Books.

Tagged with , , , , .

Level-up your OpenSCAD skills

Inspired by Joe Walnes’ tweet and post on OpenSCAD, here’s some tricks that i’ve used in OpenSCAD.


For 3D printing, it is often helpful to design parts assembled but to be able to easily lay them flat for printing. Another Kwartzlabber Dave has been using this technique for quite a while. He uses if statements. Compared to the following technique, if statements are long winded and restrictive.

To use optional assembly, define a variable that takes on values {0, 1}.

// Assemble: 0 for printing, 1 for visualization

Then, specify transforms for each, for example:

module placed_brick() {
    rotate(assemble*[90,-90,0]) {
        toybrick(2, 4);

The assemble transformation will apply only when assemble=1. The (1-assemble) transformation will apply only when assemble=0.

The idea came from a concept presented in Andrew Ng’s Machine Learning course, applied to a different domain. In both cases, the goal was to replace a conditional function with one that is a standard (non-conditional) function. In machine learning, this technique is applied to the cost function for logistic regression. Here, we can choose one of two transforms to apply by having the other one multiply to 0.

This technique will work for both translations and rotations.


A very similar trick can be used for movement. With y animatronic eye, it is helpful to see the lids open, closed, and sometimes in between. In this case, i want to move from 0 to 45 degrees. Also note how the tricks are combined so the transformation only applies when assemble is specified.

Instead of closed range [0, 1] it would also be possible to used degrees directly, if desired.

// Lid opening: range [0, 1]


module lid_upper() {

This isn’t animation, but does let you easily see the parts in different poses. Of course, if you do want to animate you can use $t. For details, see the Instructable on animation in OpenSCAD.

Define what matters

In quickly building models, it is sometimes easy to loose track of what matters. Sometimes you just add parts based on what is already drawn. Define what matters and work from there.

A good example occurred when building my eye. In this case, the distance from the edge to the screw hole is critical as it must align with another model. This wasn’t obvious in my initial drawing, since i wasn’t yet even sure how i would mount it or what i would connect the parts to. As the model progressed, the interfaces between the parts became critical. (Starting to sound a lot like software…) So i refactored the calculations to make the distance from the plate edge to the mounting hole a parameter rather than have it fall out of calculations (like the hole being half way from the center of the alignment block to the extent of the bracket — neither of these other dimensions are important).


Here, you’ve learned how to optionally assemble the model, create a bit of movement, and define the model in terms of what’s important. Hope this helps you in your own OpenSCAD modeling!

Posted in Make, Robotics.

Tagged with , , , , , , .

Aye eye

I’ve been making some good progress with the eye. After it is printed (thanks for helping Russ!), it was evident that some design tweaks were needed.

The eye mounting plate didn’t print well. I’ve removed some complexity and flipped it so that it sits on the platform mostly. The gimbal had some parts that were too thin. There were also lots of bugs in the calculations which became evident once parts were resized. The lids printed surprisingly well given the overhangs and complexity.

Here’s a rendering of what it is like:



New OpenSCAD files posted:


Posted in Make, Robotics.

Tagged with , , .

Book: Raspberry Pi Robotics Projects

This book is more like a basic blog than a project book. It is really targeted at someone who knows nothing about Raspberry Pi, robotics, or programming. The first 60 pages could have been omitted with a reference to a getting started book. Many of the coding example were really screenshots — it seems like the author couldn’t figure out how to embed code examples.

There are a few helpful instructions for audio and speech processing in chapter 3. Maybe i thought this because it is one of the few things in this book i haven’t actually done yet…

The book glosses over most topics of robotics, but doesn’t go into enough details of any of these. For example, it goes over how to hook up robotics legs and make these move; it falls short of even mentioning how to make these move in a useful way (training, inverse kinematics, poses, synchronization, etc).

By chapter 10, it finally mentions some more interesting topics, like ROS.

On the upside, it does introduce a lot of good ideas, products for makers, and links to open source software.

My rating: 4/10


amazon page

Google Books page

Posted in Books.

Tagged with , , , .

Animatronic eyes

There are quite a few animatronic eyes on Thingiverse. Though these only include the stl files, not the original design files. Here’s a sampling:

There are a few problems using these directly for this project. Some thoughts:

  • These aren’t resizeable to the desired dimensions for this creature. The ET one is close.
  • These often add mechanical complexity to save a motor; often the eyes must be the same vertical rotation and the blink happens to both eyes at once. It is desirable for this creation to be able to control these independently; for example, rotating the eyes in opposite directions would give a cartoonish dazed look.
  • The base plate is often 3D printed. It would be easier and more reliable to laser cut this.

We unfortunately lost the design files for our original prototype a few months ago due to a computer failure. So over the past week or so, i’ve been working from scratch to redesign it based on what we know so far…

Posted in Make, Robotics, Uncategorized.

Tagged with , , .

Book: Make: Fun!

Recounts modern history of games and toys, and provides lots of ideas and some instructions on how to make your own, as well as how to make tools to make things. All-round an interesting read

My rating: 8/10



amazon page

Google Books page

Posted in Books, Make.

Tagged with , , , .

Animatronics: robotics progress

So, i’ve been making slow but steady progress… not fast enough to warrant more frequent blog posts. Some accomplishments:

  • use multiple ROS nodes to synchronize and control movement; both blinks and eye rolls are currently performed
  • optionally activate motor controller, which is the Adafruit Servo Hat
  • use the Raspberry Pi camera and OpenCV to locate faces and broadcast this on a ROS topic
  • connect ROS on a VirtualBox VM to a master running on a Raspberry Pi
  • create an overly-simplistic URDF model of the head with eyes — no moving joints yet


Using OpenCV Haar Cascades filter is pretty compute intensive for the Raspberry Pi, and it would be good to at least decouple the camera IO from the image processing.


There’s a tutorial for how to use ROS with multiple machines. Here’s the brief summary: connect them over IP and on the other nodes, export this variable:

export ROS_MASTER_URI=http://your_ros_master_ip:11311

Now you can skip a tutorial!

Yet to-do (short term)

  • figure out how to use tf2 to transform the seen face to eye direction
  • convert eye direction to servo position
  • build a head, mount eyes and camera
  • use a ROS camera source to decouple the IO from the OpenCV processing, which can speed up

Posted in Make, Robotics.

Tagged with , , , , , , , .