Computer Aided Design

Model (draw, render, animate, simulate, ...)

 

EXPERIMENTATION

These week, we have to try different softwares.

2D

I frequently use tools, such as, Illustrator and Photoshop for my work, however, we often have the problem that high school students don’t have access to this kind of software. For that reason, I wanted to explore other open source platforms.

GIMP: is very similar to Photoshop and I find it a good software to introduce in schools, and also in the Universities.

Commands:

Pan: space

Z : zoom

Colors:

Assignment:I scanned my hand, doing a photo montage, with a model of an existing low cost Prosthesis (Maker Magazine Vol 43 Feb/Mar 2015)

I have some difficulties to cut and editing the layers.

Thumbnail Image 1 Thumbnail Image 1

 

 

INKSCAPE

As well as INKSCAPE as an open source platform, provide a big amount of functions, as assignment I vectorized the model of a glove which will be used for a cutting pattern in the laser cutter. This exercise is part of the micro assignments of my final project exploring the interaction and movement of the hand.

Thumbnail Image 1

 

I looked for a pattern for making gloves you can find here: you can find more details for the design a Gloves.

This pattern ist developed from ruano 2002 Copyrights (“glove_p.gif (GIF-Grafik, 700 × 1000 Pixel).” [Online]. Available: http://sew-ing.com/up/glove_p.gif. [Accessed: 09–Feb-2016].

IMPORTANT: it is important that you use a pattern in order to make a 3D volume of your hand in a 2D draw, this is the pattern that you will cut, afterward sawing and building a Volumen.

http://sew-ing.com/make/gloves.html

After the editing of the picture I proceeded to use illustrator which is the program disponible for the Laser cutter. I adjust the patter of my hand, previously, I did the scan of my hand , and left some space for the sewing space around 15 mm. Afterwards the adjustment of the pattern I proceeded to cut it in the laser cutter.

 


Thumbnail Image 1

3D

I have some experience in different softwares for modelling. For educative purposes in the school we use 123D Design and Blender, and for more advanced applications Rhino/Grasshopper, Autocad and Solidworks. In this assignment, I wanted to explore another software which would allow parametric design, so I could edit the models for the future ideas. Parallel I could use an open source program.

.

OpenSCAD

Thumbnail Image 1 I watched some tutorials for OpenScad which explained the basic use of the program. Afterwards, I intended to model a robotic hand, for integrating some movements and mechanics of the prosthesis. This is still “work in progress” For simulating the movements,V-Rep is recommended in the tutorial. Give Yourself a (Robotic) Hand by dgpreston

In the following links you can find some information about this tutorial:

https://www.youtube.com/watch?v=sckGmaXChxk

http://www.instructables.com/id/Give-Yourself-a-Robotic-Hand/

About the program: Openscad is a free Constructive Solid Geometry (CSG) “programming” tool. This program works with coordinates similar to Rhino, furthermore, in this platform you can edit only the “code” parameters but not the volume.  (Maker Magazine Vol 43 Feb/Mar 2015)

The unit, as well as in other programs, is Millimeters.

A little bit similar to the Processing

You can find some information of the commands and documentation, in the following link OpenSCAD User Manual

About the exercise: I drew my hand and each knuckle of each finger and the thumb. Afterwards, I used the digital calipers to measure (in millimeters) and made notes on the drawing of things like the width of each finger at the location of each joint. Having a basis of the hand size.

Thumbnail Image 1

“These measurements start to give you a sense of scale that you'll need when thinking about creating the model in the computer. dgpreston's Instructables” As dgpreston's explains, It is also good for me to begin my own modelling of an idea.

After that I began with the design of the basis of a knuckle studying the following parameters:

Commands: sphere() translate() and cylinder()

Commands: hull() and scale()

Commands: difference() and scale()

Thumbnail Image 1 Thumbnail Image 1 Thumbnail Image 1

 

 

Afterwards, I tried to design the unions (linear axis) for each knuckle. It was a more difficult task, because I had to think in the coordinates working with the other components.

Thumbnail Image 1 Thumbnail Image 1

 

After that, I applied the pattern of the holes for the wires. Furthermore, I couldn't continue with this step, I will try to finalize this assignment in the next week.

First code: 

//sphere(r=10);

//translate ([20,0,0])
//cylinder (h=40,r=15)
//translate ([20,0,0])
//cylinder (h=15,r=5);
/*
difference() {
//positive
   % hull() {
        scale ([1,1.5,1])
        sphere(r=10);
        translate ([20,0,0]) scale ([1,1.5,1]) sphere(r=10);
            }
// negative
 #scale ([1.2,0.8,0.8]) hull() {
    scale ([1,1.5,1])
    sphere(r=10);
    translate ([20,0,0]) scale ([1,1.5,1]) sphere(r=10);
                               }
}


difference() {
*/
difference() {
 scale ([1,1.5,1])
 cylinder(  10,    4.5,    9, false);
    
   #scale ([0.8,0.8,1]) 



 Initializing code for one phalange. 
 
                     

 

Designing the whole PHALANGES .

In this part I took some of the part of the code, developed from the G. Preston , visualizing which if the part generated the movement Adapting this to a fir finger that I could print in the 3D printer

Thumbnail Image 1

...

Thumbnail Image 1

...

Thumbnail Image 1

// Copyright 2012 Douglas G. Preston All Rights Reserved 
// This work has not yet been assigned a Restricted Use License
// You are free to study and modify this code for your own personal 
// entertainment until a Licensed version is released.   
// edited  by Adriana Cabrera for educational purposes for design an Orthosis
 
//////////////////////////////////////////////////////////////////////

$fn = 35;
mingap = 0.33;
wireRadius = 0.75;


// pinJoint
module pinJoint(R=12,T=1,pinRadius = 4, pinWidth = 20, veePin = true, ) 
{
collarLength=2*(R-T+1);
trimDepth=15;

    difference() {
        rotate(a = 90, v = [1, 0, 0]) cylinder(h = pinWidth, r = pinRadius - .05, center = true);
        rotate(a = 90, v = [1, 0, 0]) cylinder(h = (pinWidth * 5 / 7) + (2 * mingap), r = pinRadius + mingap, center = true);
    }

    rotate(a = 90, v = [1, 0, 0]) cylinder(h = pinWidth, r = pinRadius / 2, center = true);

    difference() {
        union() {
            rotate(a = 90, v = [1, 0, 0]) cylinder(h = (pinWidth * 5 / 7), r = pinRadius, center = true);

// please change the boolean variable to false to se the geometries that compose this form. 


            if (veePin) { * translate([-7, 0, 0]) scale([pinWidth / 4, pinWidth / 2, 1]) cylinder(h = pinRadius, r = 1, center = true); * translate([-7, 0, 0]) scale([pinWidth / 2, pinWidth, pinWidth / 2]) sphere(r = 0.5, center = true);
                difference() {
                    translate([-pinWidth / 4, 0, 0]) rotate(a = -90, v = [0, 1, 0]) scale([1, 1.5, 1]) cylinder(h = pinWidth - pinRadius, r1 = pinWidth / 7, r2 = pinWidth / 3, center = true);
                    translate([-pinWidth / 4 - 4, 0, 0]) rotate(a = -90, v = [0, 1, 0]) scale([1, 1.5, 1]) cylinder(h = pinWidth - pinRadius, r1 = pinWidth / 7, r2 = pinWidth / 3, center = true);
                    translate([0, 0, 0]) cube([pinWidth * 1.8, 6, pinWidth], center = true);
                }
            } else {
                // Attachment Pin
                rotate(a = -90, v = [0, 2, 0]){
                  difference(){
                    union(){
                    cylinder(h = pinRadius + collarLength-1, r = 4.5-mingap);
                    translate([0,0,pinRadius+collarLength-0.5])cylinder(h=2,r1=4.5,r2=3,center=true);
                    }
                    difference(){
                      translate([0,0,pinRadius])cylinder(h = collarLength-1, r = 6);
                      translate([0,0,pinRadius])cylinder(h = collarLength-1, r = 3.5);
                    }
                    translate([0,0,pinRadius+collarLength])cube([3,10,trimDepth],center=true);
                    translate([0,-3,pinRadius+collarLength])cube([10,3,trimDepth],center=true);
                    translate([0,3,pinRadius+collarLength])cube([10,3,trimDepth],center=true);                                          
                  }                  
                }
            }
        }
        if (veePin) {
            translate([-8, 0, 0]) { * scale([pinWidth / 5, pinWidth / 2 - mingap, 1]) cylinder(h = pinRadius + mingap, r = 1, center = true); * translate([-5, 0, 0]) scale([pinWidth * 1.1, pinWidth, pinWidth]) sphere(r = 0.5, center = true); * translate([-10, 0, 0]) sphere(r = 12, center = true);
            }
        } else {

        }
        rotate(a = 90, v = [1, 0, 0]) cylinder(h = pinWidth + (2 * mingap), r = (pinRadius / 2) + (mingap), center = true);
    }
}

////////////////////////////
// Wire Vias
module wireVias(scaleFactor = 1) {
    for (d = [[1, 0, 0],[0, 1, 0],[0, 0, 1]], x = [5, -5], y = [5, -5], z = [5, -5]) 
    {translate(scaleFactor * [x, y, z]) rotate(a = 90, v = d) cylinder(h = 30, r = wireRadius, center = true);}
}

////////////////////////////
// Three-Part Finger
module glump( R=12,T=2,
              dims = [[26, 21, 16],
                      [18, 19, 14],
                      [16, 17, 12]], 
              curl = [0, 0, 0], 
              diams = [12, 10, 8, 0],
              thumb=false,showJoints=true,showSegments=true) 
{
    //sphere(0.5);
    backset = [3.3, 2.8, 1.8];

    // 1st segment
    //  Pin Joint
    if(showJoints)pinJoint(R=R,T=T,pinRadius = 4, pinWidth = 21, veePin = false);
     
    *color("red") sphere(11);
    rotate([0, curl[0], 0]) {
        translate([diams[0] / 2, 0, 0]) {
            if(showSegments)difference() {
                hull() {
                    scale([diams[0], dims[0][1], dims[0][2]]) sphere(0.5, center = true);
                    translate([dims[0][0], 0, 0]) {
                        scale([diams[1], dims[1][1], dims[1][2]]) sphere(0.5, center = true);
                    }
                }
                scale([1.1, 0.8, 0.8]) hull() {
                    scale([diams[0], dims[0][1], dims[0][2]]) sphere(0.5, center = true);
                    translate([dims[0][0], 0, 0]) {
                        scale([diams[1], dims[1][1], dims[1][2]]) sphere(0.5, center = true);
                    }
                }

                //  Joint Clearance
                translate([-(diams[0] / 2) - backset[0], 0, 0]) scale([1, 1, 1]) sphere(11);
                translate([dims[0][0] + diams[1] / 2 - backset[1], 0, 0]) scale([1, 1, 1]) sphere(10);

                //  Wire vias
                translate([diams[0], 0, 0]) wireVias(.9);
            }

            translate([dims[0][0] + diams[1] / 2, 0, 0]) {

                if(showJoints)pinJoint(pinRadius = 4, pinWidth = 19);

                // 2nd segment   
                *color("red") sphere(10);
                rotate([0, curl[1], 0]) {
                    translate([diams[1] / 2, 0, 0]) {
                        if(showSegments)difference() {
                            hull() {
                                scale([diams[1], dims[1][1], dims[1][2]]) sphere(0.5, center =true);
                                translate([dims[1][0], 0, 0]) {
                                    scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                }
                            }
                            scale([1.1, 0.8, 0.8]) hull() {
                                scale([diams[1], dims[1][1], dims[1][2]]) sphere(0.5, center = true);
                                if(!thumb)translate([dims[1][0], 0, 0]) {
                                    scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                }
                            }

                            //  Joint Clearance
                            translate([-(diams[1] / 2) - backset[1], 0, 0]) scale([1, 1, 1]) sphere(10);
                            if(!thumb){translate([dims[1][0] + diams[2] / 2 - backset[2], 0, 0]) scale([1, 1, 1]) sphere(9);}

                            //  Wire vias
                            translate([diams[1] - 4, 0, 0]) wireVias(.6);

                        }         
                        
                        
                        
                        // optional third joint                                                                                                
                        if(!thumb){
                            translate([dims[1][0] + diams[2] / 2, 0, 0]) {
    
                                //  Pin Joint
                                if(showJoints)pinJoint(pinRadius = 4, pinWidth = 17);
    
                                // 3rd segment
                                *color("blue") sphere(9);
                                rotate([0, curl[2], 0]) {
                                    translate([diams[2] / 2, 0, 0]) {
                                        if(showSegments)difference() {
                                            hull() {
                                                scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                                translate([dims[2][0], 0, 0]) {
                                                    scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                                }
                                            }
                                            scale([0.8, 0.8, 0.8]) hull() {
                                                scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                                translate([dims[2][0], 0, 0]) {
                                                    scale([diams[2], dims[2][1], dims[2][2]]) sphere(0.5, center = true);
                                                }
                                            }
    
                                            //  Joint Clearance
                                            translate([-diams[2] / 2 - backset[2], 0, 0]) scale([1, 1, 1]) sphere(9);
    
                                            //  Wire vias
                                            translate([diams[2], 0, 0]) wireVias(.6);
    
                                        }
                                    }
                                }
                            }      
                        }
                                                                        
                    }
                }
            }
        }
    }
}
tD=[[24.5, 21, 16],[18.0, 19, 14],[16.0, 17, 12]];
iD=[[16.5, 21, 16],[19.0, 19, 14],[16.0, 17, 12]];
mD=[[17.5, 21, 16],[21.0, 19, 14],[16.0, 17, 12]];
rD=[[27.0, 21, 16],[18.0, 19, 14],[16.0, 17, 12]];
pD=[[20.5, 21, 16],[18.0, 19, 14],[16.0, 17, 12]];

translate([0,0,0]) glump(R=14,T=2,dims=tD,thumb=true);

 
                     

Modelling the MYOrthotic arm

These week, we have to try different softwares.

/*

Starting with 360 Fusion (Autodesk)

  

I Beginning with the modell of my hand and looking different references of models and tutorials

In the beginning of the project, I joined to the e-nable Community thinking in an opportunity to learn some skills in the medical and mechanical design of prosthetics and orthotics.

I found some references to the the modelling with 360 fusion special for this issues you can find mor of this information in the following link: GETTING STARTED IN FUSION 360

2

in the first trial I tried to do the model of the the distal phalanx, doing the modelling from the first step

1. scketch

2. construct the form using Extrude and Loft

3  using the mirrow to optimace the proces

4. refine the model usig filet

5. use of parameter CHANG PARAMETer, thinking in parametrc design to adap for other people.

 

ASSAMBLY and KINEMATICS

second trainning Link

For this area we use joint factor rotate (revolve)

crating movement

 

WORKING WITH MESH

adecuation thr mesh (3D Scanning modeling in the geometries)

after the 3D Scanning and making an optimal model you can work with 360 Fusion making with the panel create for.

other good feature is the possibility to work with the CAD file , if you want to import this file you can go to you website an inport the model as CAD format , afterward you can modifi the object as cad design.

the Mech can be moved