### 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 **

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.

“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()

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.

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

...

...

// 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);