14. Mechanical design, machine design

"make a machine, including the end effector, build the passive parts and operate it manually
automate your machine"
page contents:
FTDI cable
Gestalt nodes
installing firmware
installing pyserial
code for endstops
frame

Group documentation for this project can be found here. Below are notes from my individual contributions.

With the group we have been working on a 4-axis foam cutter using the design from Nadya at MIT. We also found James's page which at some points is a bit clearer on how to use the designs and the code. A group document was made to plan the work.

FTDI cable

To connect with the Gestalt nodes I used the design from github to make the FABNET board and FTDI cable. The design of that board is on the github and on the pages mentioned above.

Note: during milling and before cutting out the board, I always use the multimeter to check the integrity of the traces. That way, if the milling was not deep enough it is easy to run the milling job again.
checking the traces before cutting the board
finished fabnet

Gestalt nodes

The machine we are building is made with stages: open source cardboard designs that give some strength to a machine and that hold a motor to drive motion. The motor is controlled by a Gestalt node. MIT delivered four of them to us at De Waag to work with.
With Natalia and Till, I started working on getting the code for the Gestalt nodes working. We needed to download the Gestalt software from Nadya's github page. Also, we had to get the firmware for the nodes from Moyer's github page.

Installing the firmware

Go to the folder '086-005-master'. The code that you download from the github pages contains a Makefile which you need to edit.
Open it (for instance via the Terminal with 'open Makefile -e' or 'open Makefile -a Brackets') and check that the MCU and FREQ are correct. The Gestalt nodes use an Atmel Mega 328P controller and FREQ should be 18432000.
At te bottom of the code, there is a section with two 'program-...' functions. In the code they use 'avrisp2'. Because we use the FabTiny*ISP, change 'avrisp2' to 'usbtiny'.
Copy the file called '086-005-master.hex' to the folder with the firmware. In terminal, use 'make program-usbtiny-fuses' and then 'make program-usbtiny'.

Install pyserial 2.7

Download pyserial from https://pypi.python.org/pypi/pyserial. In the terminal, go to the folder where you saved it and use: 'python setup.py install'.

Testing Gestalt node code

The code that you download from github contains code to use with the gestalt nodes. We used 'single_node.py' to try our nodes. To use the code, there are two things you need to do. First, copy the '086-005a.hex' file to the folder containing the code.
Open 'single_node.py' in an editor. Connect the FTDI cable. In terminal type 'ls /dev' and look for the address of the FTDI cable. Copy it and paste it into the python file where it says [portName = '/dev/tty.usbserial-xxxxxxx' (replace tty.... with the address of your cable)].
Next, use 'python single_node.py'. in terminal. The node should respond by turning the motor a few times.

Working on code for endstops

The stages do not have endstops. We decided to include them in our machine because they could be used to prevent the machine from running out of bounds and also to set the zero for each axis. Loes made a circuit with two switches and a connector. With a lot of help from Zaerc I created this code to test them working:

      #include avr/io.h
      void setup() 
      {
        DDRB = (1 << DDB3);   //PB3 output
        PORTB = (1 << DDB4);  //PB4 pullup
        PORTB = (1 << DDB5);
      }
      
      void loop() 
      {
        if (PORTB & (1 << DDB4)) || (PORTB & (1 << DDB5))
          (PORTB |= (1 << DDB3));
        else
          (PORTB &= ~(1 << DDB3));
      }
      
      int main() 
      {
        setup();
        while (1)
            loop();
      }
It worked! (but only for one switch...need more testing).

Building a frame for the machine

For our first demonstration of the foam cutter, I made a frame to hold the 4 stages together. I needed to measure the width of the stages and the distance between the stages. don't worry, I know how to hold a hammer... a solution to hold stages in places frame in action during our first demo added the ductape to make movement a little smoother "should it move smoothly? add ductape :-)"