Mechanical design
Weeks 9
Concept
Before we begin to talk about our specific project, we think it's important to say that we received the MTM kit last Thursday (April 13th) which put us in a situation where it was hard to get the project ready on time for this week. This said, the concept was already clear in our heads and even if we had the main files to build the axes, it was hard to figure the way it would move or space it'd take. We did as much as we could but we'd still need a bit of time to complete it and documents it completly.
Even with all that said, We still didn't speak about the concept! So, what we want to do for this assignment, and that we'll continue later on this week, is a automatized zen garden. It's sure that the concept is not the most innovative in the way that it does already exist and also that we probably did not push the concept that far upfront. Still, for us, at least, it's a great introduction to machines building and the final result seemed really awsome to us. As a reminder, we are still novice and we've already traveled a long way to arrive at that point where we could make such a machine!
To be more specific, we're going to use a magnet, mounted on X and Y axes. We want it to read Gcode, so it can draw something in the sand using a metal ball placed on a sandbox above the axes. Pretty simple you'd say ... well to us it's sound pretty awsome!
It seemed obvious to us at this point that we were going to use the MTM kit to build our machine and that the mechanical part of it would be limited to a 2 axes movement in X and Y. I guess there would be many different possibilities regarding the choice of a mechanical processes for this kind of project but since we have acces to those kits, why not use them !
Planning
Also, as a group assignement for this phase of the project we were pretty much both involved all the time. Here how we separated the tasks :

Matelrial list
Here what's going to be needed to build our zen garden :

Building the axes
As soon as we finally received the mtm kit we start building the machine. What a great design! Nadia and James really did a great documentation job and even tough some things was not up to date it was really easy to assemble the kit. One thing we really like about the kit is
the way it use cardboard, a cheap and super cool material for rapid prototyping. With cardboard mistakes are less stressful. The kit is modular and can be use to make machines that use linear and rotary stages. Like said above, for our zen garden, we only needed a two axes machine that can move on it's y and x axis, since it's not a plotter, no use to have a z-axis.
First step was to laser cut the cardboard part. The files that we found inside the documentation was in a .dxf format and when we tried to open them via inkscape it appears all weird and not complete. First thing we try was to open them with another computer, but the issu persisted. So we then tried to open it via another software than Inkscape, we use CorelDraw, and it worked! Since I never use Corel, I save the file as an svg and reimport it in Inkscape, everything was working fine after that.
The draw was made in two colors: blue for whats needed to be cut and red for the things that was supposed to be fold. After a few test, here is the parameters we uses on our speedy 300 60 watt trotec lasercutter:
Cutting settings : Power : 60 Speed : 1.75 Frequency : 1000
Folding settings : Power : 40 Speed : 2.25 Frequency : 1000
Once we had all the part we started to assemble the kit. We use glue and clamps to make sure everything stay in places, the design was super cool to assemble and we encounter no real issues during the process.
We simply follow the steps from the gif made my Nadia's team:
Soon enouph, the axis were made and everything seems good to go! Here are some snapshots of the process:
Rest of the taks on design week
This is pretty much it for me mechanical part of the MTM assignment. Our mechanical structure is definitely done and working manually, as Neil advised us to test. The tasks that remain and will be continued with the machine design week. First, I have to design the machine itself, meaning how to integrate the mechanical parts within a box with sand on top so it can draw on something. There are two challenges that I'll face for that. The axes together are bigger than our laser cutter. I'd have to come with an assembling solution to make it possible to make with the laser cutter. Also, it has to be fully closed, no cracks can remain because the sand would come down and block the mechanical parts. All the programming and electronics tasks will be done by ma colleague because his better at it.
Machine design
Weeks 11
News about the project
It has been about two weeks now that the project is going on. If you want a little reminder of what we're doing, here's a link to Mechanical design week. At that point, we decided to separate de tasks based on our main interest but also strength. I've always been more about design than coding. It seemed then obvious that I'd go on working on electronics integration and designing the casing of that zen garden. I'm not going to complicate myself that much in that design. I want it to be functional and simple but also I'll try to think about the finishes. As a former fashion designer, finishes are always very important even in prototyping. To me, it is as much part of prototyping than any other phase of my design process. This said, there two main things I should really think about doing designing that casing:
I guess you've already understood that my collegue will be in charge of the coding and programation of the machine.
Designing the case
First thing I need to do is to define the maximum distance the axes can reach in X and Y. As I want to make it very tight, because I find the machine to big already, I'll had only an inch on all side :

To plan the outside of the box, I used MakerCase as a base.

Then I modified it a little to make the side parts finished, to drop the top part by 1,5" and also I cutted de top and bottom part in half to make it fit in the laser cutter. To make them one again, I'll use some plastic screw that I 3D printed. I used 3D printed screws to anwser that problematic of having a magnet on top of my mahcine.


Finally, I needed to connect those separated top and bottom part. So, as you can see in the lasercut plans, I made some rectancular parts that are going to do that job. I made them in acrylic for better strenght.

This is pretty much everything I'll need to build the casing. I'll add to that a silicon paste so nothing can go through and that's it!
Building it
Once everything is planned, this phase is king of simple. I'll describe it in point form :
FabNet
The first part of my assigment was to produce the necessary PCB for our machine to work. In our case, this only meant I had to do the FabNet. The FabNet is a really simple electronic design that serve as a multi-drop network. It's also providing power to the motors and the gestalts nodes.
Like I said the board is a simple design and only need a handfull of component and material to produce, these are all extremely comon and can be find in the fabacademy inventory. Here is the BOM:
- FTDI Cable
- 12-24V Power Supply (amp depends on the motors you use, I recommend at least 4A)
-
-
-
Once I had everything, I milled the board using my newly acquired CNC at my house! I went and take the png file I found on the FabNet official website and did the same routine as always, using the fabmodules I create two Gcode, one for my PCB trace using a 1/64" mill and an other one for my outline using a 1/32" mill.
Soldering the board was a small and easy job since all I had to solder was a couple of wire, two resistance and some headers. here are the final results:
One thing I found is that the FabNet usually use two voltage supply, one at a high voltage (12-24v) that serves to power the motors and an other low voltage that is supposed to serve as a power source for the logic circuits of the nodes. I found that I didn't really need the low voltage power supply and could ignore it and power up my motors and my nodes on the same high power supply. Thats what I did.
Programming the Gestalt
First thing I did before trying to program my gestalt node was to read about them. I wanted to fully comprehend what they were, what was their purpose and what was inside them. I never worked with motor driver before and I was far from comfortable with my assigment.
I found that the gestalt nodes were a kind of driver motor that use high level programming languages such as python to controlled tool instead of the decades-old G-code standard. It was developped to automated machines via commonly aviable interface such as USB virtual ports. The Gestalt use a virtual machine to control a real machine. The virtual machine is computer-based that runs on the user's computer. Information such as machine configuration and state is stored into the virtual machine. We the work with two kind of nodes, the first one being the "virtual node" and the other one being the "physical node". The physical node talk in the language of gestalt and it's firmware do all the time-sensitive calculations,like when to take a step. The virtual node in the other end, can be programmed in programming languages such as python and is used to write complex firmware that will be read directly on the computer istead of inside a microcontroller like a typical motor driver.
This is a brief explanation of what I understand (please be aware that it is only MY comprehension of the concept)of what a gestalt nodes do, it basicly consist in a hardware/software interface that give you the possibility to write software and run it from inside your computer while the machine controller (physical node) talks to the actual hardware such as stepper and automated your machine.
Ok! all of this still seem a bit overwhelming, so let's look at a actual gestalt, what it looked like, what's it's pinout.
We can see here that the Gestalt pocess a connector for the motor, a 6 header pinout that strangly look like a ISP, and two 10 header pinout that have the purpose of allimenting the necessary voltage to the board and the motors and to transfer data to the motors. but why two? Well this is what we call a daisy chain, a daisy chain is a wiring scheme in wich multiple device are wired together in sequence. Daisy chain are used for power, analog signals and/or digital data communication. more info about daisy chaining here .
So you guessed it, we will use one gestalt per motor we will be using, there will be a master gestalt and then every next gestalt will be daisy chain to the one before. we can see it in this schematic:
On the 10 pin header, we will only use the 12V pins, the ground pins, and the RS-485-A and -B pins. The other ones seems useless for me.
So we now know how to connect our Fabnet to our Gestalt and ou motors to our Gestalts. Let's make it happen!
*One thing to remember is that you MUST never connect the power supply before anything else, the power is the last thing you want to turn on!
Now that we have a Gestalt wired, let's try to send some code to it. For that, there is a few steps we need to do. first we need to download the pygestalt librairie that you can find on the nadya peek github. Once this is acquired, you need to install the FTDI Drivers so you can communicate with your serial FTDI cable. This shoud already have been done in the embedded programming week, but who knows..
You'l also need a IDE to work with the code, since it"s python, I suggest Pycharm wich is a great IDE, but I will use VIM wich is a smart text editor that operate directly trought the linux terminal. I will use VIM since I really want to familiarize myself with its interface.
First thing I done is open and look at Nadya Peek example code: single_node.py
If we look at the code, we will see that the library required to run the code, then we can see the virtual machine I was talking about earlier.
I won't go trouph every single line of the code, but some are pretty interesting, first of all let's look at this one:
def initInterfaces(self):
else: self.fabnet = interfaces.gestaltInterface('FABNET', interfaces.serialInterface(baudRate = 115200, interfaceType = 'ftdi', portName = '/dev/ttyUSB0'))
We can read here that it is the place where we define which kind of serial read interface we will be using to communicate data (ftdi) and at wich baudrate we will sent those data (115200). Also, the last information can change depending on your computer, the portName is subject to variation depending on the hardware.
The lines that have a # before them are comment-out, this mean that we may want to use them for some purposes, but they are not part of the base code. Next we have all kind of information like the definition of our axis (only one for this example) and the measure system we are using in our array of coordinate (mm).
def initControllers(self):
self.xAxisNode = nodes.networkedGestaltNode('X Axis', self.fabnet, filename = '086-005a.py', persistence = self.persistence)
self.xNode = nodes.compoundNode(self.xAxisNode)
def initCoordinates(self)
self.position = state.coordinate(['mm'])
It is always interesting to see what we can find in a code that you didn't wrote yourself, I am still really new to the programming world, and I learn a lot just by peeking other people code. Once thing I see from Nadya code is that the Gestalt seem really modular and we can do pretty much what we want with them, it really seems like a nice and simple interface.
We can also see in the code this line:
supercoords = [[10],[20],[10],[0]]
This is an array, and it's our coordinate, for now we only have one number per movment since we only move our X axis, but I will use this syntax of array to draw my svg so now I know how I want to parse my files.
Ok enouph talk, let's test things! All I need to do is to wired my gestalt and fabnet, plug it into the computer and run the code.
It works! Now let's try with the xy_plotter.py code. I just need to daisy chain another Gestalt and plug another motor. For test purpose I use a switching power supply, set it to 12volt and jack up the current to be sure I have enouph, Each Gestalt can take up to 2 Amps, I test using a multimeter, my gestalt nodes use 0.25 A each and my motor on full drive use 1.7 A.
Ok this part was frustrading, I tough I was busting my Gestalt due to some kind of current overload when I was switching my power supply on or whatever, the daisy chain also seemed part of the problem since the first Gestalt was always good, but the second one was not responsive. Sometime not at all, sometime acting crazy. I troubleshoot for several hours, tried with different Gestalt, nothing seems to work...Finally, I realised that I was using BROKEN jumper!!! Always check your jumper before using them for testing purposes, that's what I learn!
Let's try again with working jumpers!
It works!!
Final result
There you go! Now, I have to what for programmation. But in the future, I'd like to finish it with some 3D printed paws at the bottom so it doesn't screw your floor or table and also paint it with ultra mat paint. I'd like to make it so black it looks like a black hole with white sand in it. Put that is going to be another project. I don't have time anymore.
Updates
During global evaluation, I received the comment that it's not possible to see what's the machine is actually. At first, I didn't understand why but then, I read it again and well ... yes, there no way to see what it is. Even if incomplete, I've made, I think a good integration and machine design. So, the deal was to complete the documentation so we can see what's the machine is doing and look like and also to update the Lab page, which is done too. I'll also present another video of the machine later on as we agree with my global evaluator. Still, I enjoy working on this a lot !. Here some updates in pictures that make it more comprehensive.
To put words on these photos, the machine as an X and Y axes that are the MTM kit develop by Nadia Peek. It's integrated into a machine that is designed to draw in the sand using a metal ball and a magnet on top of one of the axe. It'll use G-code to make simple shapes on the sand. Here's a video!