// Flex Sensor - units in cm width=40; min_width=5; height=0.1; length=100; gap=2; struts=0; strut_height=height; endcap_run_ratio=0.5; /* How large are joined sections compared to run width */ term_diameter = 1.628; term_side = sqrt(term_diameter*term_diameter/2); term_distance = 5; term_offset = 15; nozzle_width = 0.4; sewable = 0; $fn = 100; // DNE leg_width = (width - gap) / 2; gap_span = leg_width*2+gap; module cap_model () { difference () { circle(width / 2); translate([-width / 2, -width]) square(width); } } module Cap () { translate([width / 2, length - width / 2, 0]) difference () { linear_extrude (height) cap_model(); translate([0, 0, 0.2]) difference () { linear_extrude (height) offset(r=-0.5) cap_model(); linear_extrude (height) offset(r=-1) cap_model(); } } } module Leg() { term1_x = abs(width - term_distance) / 2; t_total_width = min_width; difference () { union () { linear_extrude(height) polygon([[0, length - width / 2], [leg_width, length - width / 2], [term1_x + term_side / 2 + gap/2, 0], [term1_x + term_side / 2 + gap/2 - min_width, 0]]); translate([term1_x + term_side / 2 - min_width + gap/2, 0, 0]) cube([min_width, 2, term_side/2]); linear_extrude(term_side/2) polygon([[term1_x - term_side/2, -term_side * 4], [term1_x + term_side / 2 + gap/2, 0], [term1_x + term_side / 2 +gap / 2 - min_width, 0]]); } translate([0,0, 0.2]) difference () { linear_extrude (height) offset(r=-0.5) polygon([[0, length - width / 2], [leg_width, length - width / 2], [term1_x + term_side / 2 + gap/2, 0], [term1_x + term_side / 2 + gap/2 - min_width, 0]]); linear_extrude (height) offset(r=-1) polygon([[0, length - width / 2], [leg_width, length - width / 2], [term1_x + term_side / 2 + gap/2, 0], [term1_x + term_side / 2 + gap/2 - min_width, 0]]); } } } module Terminal() { translate([-term_side/2, 0, 0]) cube([term_side, term_offset, term_side]); } module Terminals() { Terminal(); translate([term_distance, 0, 0]) Terminal(); } union() { // Legs union () { Leg(); translate([width, 0, 0]) mirror() Leg(); } // Terminals translate([-(term_distance-width)/2, -term_offset, 0]) Terminals(); Cap(); // End Support *translate([0, length-leg_width/4, 0]) cube([gap_span, leg_width/4, height*1.5]); // Edge Supports *cube([nozzle_width, length, height * 1.5]); *translate([width - nozzle_width, 0, 0]) cube([nozzle_width, length, height * 1.5]); }