First try

This commit is contained in:
Jhodi 2025-12-02 16:13:28 +01:00
commit 06c2feef41
31 changed files with 125940 additions and 0 deletions

View file

@ -0,0 +1 @@
,fablab,fablab,02.12.2025 15:54,file:///home/fablab/.config/libreoffice/4;

BIN
Budget-Ruche-Connectee.ods Normal file

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 428 KiB

BIN
Parts/Printed/601-602.3mf Normal file

Binary file not shown.

BIN
Parts/Printed/601-602.stl Normal file

Binary file not shown.

4
Parts/README.md Normal file
View file

@ -0,0 +1,4 @@
# Othor : Jhodi #######
Ce répertoire contient les fichiers .dxf et .svg relatif à la conception de la balance mécanique du projet OpenBeeLab
En prince si vous êtes ici c'est que vous avez lu le fichier Buget-Ruche-Connectee.ods

12
README.md Normal file
View file

@ -0,0 +1,12 @@
# mechanic
Openscad model (and 2D blueprints, to come...)
Importants files :
parameters : all the dimensions/positions we want to define only once, and all the rest is based on that
standardParts : the model of the parts we buy on the market
customParts : all the parts we build specifically for this project, laser cut inox, aluminium profiles, and very few 3D printed parts.
assembly : all previous parts assembled together to view the subassemblies and final model
cncDrill, drilling : the tools to drill the profiles
views : exploded views, mainly to make the assembly manual
functions, timing_belts, : various helpers

18
animation.scad Normal file
View file

@ -0,0 +1,18 @@
include <assembly.scad>
//animation = 46;
animationPerPart(animation);
module animationPerPart(animation) {
if (animation >= 41) {
cadreSup(animation - 41); //5
} else if (animation >= 33) { // 33 -> 40
assemblageTriangle1(animation - 33); //7
} else if (animation >= 24) { // 24 -> 32
assemblageTriangle2(animation - 24); //8
} else if (animation >= 10) { // 10 -> 23
translate([longueur-xBrasSecondaire,largeur/2+largeurBras/2,zBrasSecondaire]) rotate([0,0,180]) brasSecondaire(animation - 10); //13
} else if (animation >= 0) {
cadreInf(animation); // 9
}
}

752
assembly.scad Normal file
View file

@ -0,0 +1,752 @@
include <parameters.scad>
include <functions.scad>
include <customParts.scad>
include <standardParts.scad>
/////////////////////////////////////////////////
///// Assemblages /////
/////////////////////////////////////////////////
module motorPulley() {
translate([0,-8,-19]) stepper28BYJ();
color("SILVER") translate([0,0,2.5]) pulley();
}
//assemblageGlobal();
//cadreInf();
//translate([0,0,2]) brasSecondaire();
//translate([0,0,-2.0]) brasSecondaire();
//laser252();
//brasSecondaire();
//assemblageTriangle1();
//assemblageTriangle2();
//cadreInf();
//brasSecondaire([2,4,7]);
module brasSecondaire(animation=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],moveInFinalPlace=true,offsetContrepoids = 250) {
xContrePoids = xMotor + offsetContrepoids;
xTensionner = xMotor + 400 - offsetContrepoids;
xFinal = moveInFinalPlace ? longueur-xBrasSecondaire : 0;
yFinal = moveInFinalPlace ? largeur/2+largeurBras/2 : 0;
zFinal = moveInFinalPlace ? zBrasSecondaire : 0;
rzFinal = moveInFinalPlace ? 180 : 0;
translate([xFinal,yFinal,zFinal]) rotate([0,0,rzFinal]) {
///////////////arbre/////////////////
if (search(0,animation)) {
color("red") translate([23,largeurBras/2,8]) tube(10,6,lBrasSecondaire-23);
}
if (search(1,animation)) {
translate([xContrePoids,largeurBras/2,8]) rotate([0,90,0]) LM10UU();
}
if (search(2,animation)) {
translate([xContrePoids,largeurBras/2,15]) rotate([0,0,180]) laser213();
}
if (search(3,animation)) {
translate([xContrePoids-6,largeurBras/2,8]) rotate([90,0,90]) serflex213();
translate([xContrePoids+6,largeurBras/2,8]) rotate([90,0,90]) serflex213();
}
if (search(4,animation)) {
for (x=[-12,12]) {
for (y=[-12,12]) {
translate([xContrePoids+x,largeurBras/2+y,17]) screwNut(4,50,46);
translate([xContrePoids+x,largeurBras/2+y,-13.8]) nut(4);
}
translate([xContrePoids+x,largeurBras/2+12,14.8]) nut(4);
}
}
if (search(5,animation)) {
translate([xContrePoids,largeurBras/2,-23]) laser281();
translate([xContrePoids,largeurBras/2,-29]) laser281();
}
if (search(6,animation)) {
difference() {
translate([xMotor-9,9,zMotor]) belt();
translate([xTensionner-5.8,8,0]) cube([11.6,10,6]);
}
translate([xTensionner,9,2]) {
tensionner();
translate([-5.8,0,-1]) rotate([0,-57,0]) cube([7.6,6,1]);
translate([5.8,6,-1]) rotate([0,-57,180]) cube([7.6,6,1]);
translate([0,6,4.2]) rotate([90,0,0]) intersection() {
difference() {
cylinder(d=6.1,h=6,$fn=20);
translate([0,0,-1]) cylinder(d=4,h=8,$fn=20);
}
translate([-5,1,-1]) cube([10,10,10]);
}
}
}
if (search(7,animation)) {
translate([xContrePoids,largeurBras/2-12,10.2]) rotate([0,0,180]) laser211();
translate([xContrePoids,largeurBras/2-12,13]) rotate([0,0,180]) laser212();
translate([xContrePoids,largeurBras/2-12,17]) screwNut(3,10,6.8);
translate([xContrePoids,largeurBras/2-12,12.2]) rondelle(3,6);
}
if (search(8,animation)) {
translate([xPulley,16,zMotor]) rotate([90,0,0]) f623zz();
translate([xPulley,8,zMotor]) rotate([-90,0,0]) f623zz();
translate([xPulley,0,zMotor]) rotate([90,0,0]) screwNut(3,20,16);
translate([xPulley,2,zMotor]) rotate([-90,0,0]) rondelle(3,8,5);
}
if (search(9,animation)) {
translate([xMotor,0,zMotor]) rotate([-90,30,0]) motorPulley();
translate([xMotor+fixMoteur1X,-0.5,zMotor+fixMoteur1Y]) rotate([90,0,0]) screwNut(4,10,2.5);
translate([xMotor-fixMoteur2X,-0.5,zMotor+fixMoteur2Y]) rotate([90,0,0]) screwNut(4,10,2.5);
//translate([xMotor,4,zMotor]) rotate([-90,0,180]) laser251();
translate([xMotor,3,zMotor]) rotate([-90,0,0]) rotate([0,0,-60]) printed602();
}
if (search(10,animation)) {
translate([xCouteauIII,largeurBras+spacer108,zCouteauBrasSecondaire]) rotate([90,0,180]) laser108();
translate([xCouteauIII,-epaisseurCouteau-spacer108,zCouteauBrasSecondaire]) rotate([90,0,180]) laser108();
for (x=[xCouteauIII+10,xCouteauIII-20]) {
translate([x,largeurBras+4.8,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) screwNut(4,10,6.8);
translate([x,-4.8,zCouteauBrasSecondaire+13]) rotate([90,0,0]) screwNut(4,10,6.8);
translate([x,largeurBras,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) rondelle(4,8,0.8);
translate([x,0,zCouteauBrasSecondaire+13]) rotate([90,0,0]) rondelle(4,8,0.8);
}
}
if (search(11,animation)) {
translate([23,largeurBras/2-21,28]) rotate([180,0,90]) SK10();
translate([lBrasSecondaire-14,largeurBras/2-21,28]) rotate([180,0,90]) SK10();
for (x=[30,lBrasSecondaire-7],y=[-16,16])
translate([x,largeurBras/2+y,30]) screwNut(5,12,8);
}
if (search(12,animation)) {
profile306();
}
if (search(13,animation)) {
translate([lBrasSecondaire,largeurBras,0]) rotate([0,0,180]) profile305();
}
if (search(14,animation)) {
translate([longueur-xBrasSecondaire-xObturateur+0.5,0,5]) rotate([90,0,-90]) laser252();
translate([longueur-xBrasSecondaire-xObturateur,epaisseurTole,17]) rotate([-90,0,0]) screwNut(4,10,4.5);
}
if (search(15,animation)) {
render() translate([xMotor,58-0.8,zMotor]) rotate([90,0,0]) 625zz();
translate([xMotor,58-0.8,zMotor]) rotate([90,0,0]) serflex625zz();
for (xz=[[xMotor,zMotor+8+1.5],
[xMotor-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5],
[xMotor+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5]]) {
x = xz[0];
z = xz[1];
translate([x,largeurBras,z]) {
rotate([-90,0,0]) screwNut(3,10,7.8);
translate([0,-2,0]) rotate([90,0,0]) rondelle(3,8,0.8);
}
}
}
if (search(16,animation)) {
translate([xMotor+1,3.5,zMotor-19.3]) rotate([0,0,-90]) endstop();
translate([xMotor+5,-5,zMotor+7]) rotate([-90,0,180]) laser216();
translate([xMotor,-1,zMotor]) rotate([90,0,0]) serflex216();
}
if (search(17,animation)) {
translate([xMotor,8,zMotor]) arbre321();
}
//Exploded views
if (search(50,animation)) {
translate([xCouteauIII,largeurBras+spacer108,zCouteauBrasSecondaire]) rotate([90,0,180]) laser108();
//translate([xCouteauIII,-epaisseurCouteau-spacer108,zCouteauBrasSecondaire]) rotate([90,0,180]) laser108();
}
}
}
//brasSecondaire();
module assemblageCouteau3(animation) {
if (search(19,animation)) {
laser207();
translate([6,4,0]) rotate([-90,0,0]) screwNut(4,10,5.7);
}
if (search(20,animation)) {
translate([0,-50,0]) laser207();
translate([6,4+20,0]) rotate([-90,0,0]) screwNut(4,10,5.7+70,true);
}
}
/*module assemblageContreCouteauIII(animation) {
translate([0,0,0]) rotate([90,0,0]) laser105();
translate([0,-epaisseurCouteau,0]) rotate([0,90,0]) assemblageCouteau3(animation);
}*/
//cadreInf();
module cadre(animation=[0,1,2,3]) {
if (search(0,animation)) {
profile301();
translate([longueur,largeur,0]) rotate([0,0,180]) profile301();
}
if (search(1,animation)) {
translate([longueur,0,0]) rotate([0,0,90]) profile302();
translate([0,largeur,0]) rotate([0,0,-90]) profile302();
}
if (search(2,animation)) {
laser206();
translate([longueur,largeur,0]) rotate([0,0,180]) laser206();
translate([longueur,0,0]) rotate([0,0,90]) laser206();
translate([0,largeur,0]) rotate([0,0,-90]) laser206();
}
if (search(3,animation)) {
for (x=[26,48,longueur-26,longueur-48],y=[10,largeur-10])
translate([x,y,0]) rotate([180,0,0]) screwNut(4,10,4);
for (x=[10,longueur-10],y=[26,48,largeur-26,largeur-48])
translate([x,y,0]) rotate([180,0,0]) screwNut(4,10,4);
}
}
module cadreSup(animation=[0,1,2,3,4,5,6]) {
translate([0,largeur,zPlateau]) rotate([180,0,0]) cadre(animation);
if (search(4,animation)) {
translate([longueur-xCouteauSuperieur,eCorniereCadre,zPlateau-epaisseurTole-eCorniereCadre]) rotate([-90,0,0]) laser101();
translate([longueur-xCouteauSuperieur,largeur-eCorniereCadre-epaisseurCouteau,zPlateau-epaisseurTole-eCorniereCadre]) rotate([-90,0,0]) laser101();
for (y=[eCorniereCadre+epaisseurCouteau,largeur-eCorniereCadre])
translate([xCouteauSuperieur,y,zPlateau-epaisseurTole-eCorniereCadre]) rotate([-90,0,180]) laser102();
}
if (search(5,animation)) {
for (x=[xCouteauSuperieur,xCouteauInferieur]) {
translate([longueur-x,largeur,zPlateau-12])rotate([-90,0,0]) screwNut(4,10,6);
translate([longueur-x,0,zPlateau-12])rotate([90,0,0]) screwNut(4,10,6);
}
translate([xCouteauSuperieur,0,zPlateau-12])rotate([90,0,0]) screwNut(4,10,6);
translate([xCouteauSuperieur,largeur,zPlateau-12])rotate([-90,0,0]) screwNut(4,10,6);
}
if (search(6,animation)) {
translate([2,yMediane,zPlateau-2]) protection701();
for (x=[10,longueur-10],y=[y303+2-10,y304-2+10]) {
translate([x,y,zPlateau])rotate([0,0,0]) screwNut(4,10,2.6+0.8);
translate([x,y,zPlateau-2.6-0.8]) rondelle(4,10,0.8);
}
}
}
module cadreInf(animation=[0,1,2,3,4,5,6,7,8,9,10,11]) {
cadre(animation);
if (search(4,animation)) {
translate([2,y304-2,2]) profile303();
translate([498,y303+2,2]) rotate([0,0,180]) profile304();
}
if (search(5,animation)) {
translate([xBrasSecondaire2,y303,z]) rotate([0,0,0]) rotate([90,0,0]) laser105();
translate([xBrasSecondaire2,y304,z]) rotate([0,0,180]) rotate([90,0,0]) laser105();
for (x=[xBrasSecondaire2+8,xBrasSecondaire2-8]){
translate([x,y303+2,14])rotate([-90,0,0]) screwNut(4,10,6);
translate([x,y304-2,14])rotate([90,0,0]) screwNut(4,10,6);
}
}
if (search(6,animation)) {
//obturateur
translate([xObturateur,y304+4,4]) rotate([90,0,180]) {
for (x=[-6.5,15.5]) {
translate([x,9,-6]) rotate([180,0,0]) screwNut(4,16,8);
translate([x,9,-4]) rondelle(4,8,4);
//for (z=[0:4]) translate([x,9,-1-z]) rondelle(4,8,1);
}
laser203();
translate([0,26.4,epaisseurTole/2]) rotate([-90,180,0]) endstop();
translate([-9.5,31,1])rotate([-90,30,0]) screwNut(3,12,8.6);
for (x=[-9.5,9.5],z=[0,0.8]) {
translate([x,24.8+z,0])rotate([-90,0,0]) rondelle(3,8);
}
}
}
if (search(7,animation)) {
for (x=[10,longueur-10],y=[y303+2-10,y304-2+10])
translate([x,y,0])rotate([180,0,0]) screwNut(4,10,4);
}
if (search(8,animation)) {
for (y=[eCorniereCadre,largeur-eCorniereCadre-epaisseurCouteau]) {
translate([xCouteauInferieur,y+epaisseurCouteau,epaisseurTole+eCorniereCadre]) rotate([90,0,0]) laser101();
translate([longueur-xCouteauInferieur,y,epaisseurTole+eCorniereCadre]) rotate([90,0,180]) laser101();
}
}
if (search(9,animation)) {
for (x=[xCouteauInferieur,xCouteauSuperieur,longueur-xCouteauInferieur,longueur-xCouteauSuperieur]){
translate([x,0,12])rotate([90,0,0]) screwNut(4,10,6);
translate([x,largeur,12])rotate([-90,0,0]) screwNut(4,10,6);
}
}
if (search(10,animation)) {
translate([x308,largeur-l308309-2,4]) rotate([0,0,90]) profile308();
translate([x309,largeur-2,4]) rotate([0,0,-90]) profile309();
for (x=[x308-10,x309+10]) {
translate([x,largeur-l308309-2+8,2]) rotate([180,0,0]) screwNut(4,10,4);
}
}
if (search(12,animation)) {
translate([x309+2,largeur-90,6]) cube([100,68,50]);
}
//if (search(11,animation) || search(20,animation)) {
translate([xBrasSecondaire2,y303,z]) rotate([0,0,0]) translate([0,-epaisseurCouteau,0]) rotate([0,90,0]) assemblageCouteau3(animation);
translate([xBrasSecondaire2,y304,z]) rotate([0,0,180]) translate([0,-epaisseurCouteau,0]) rotate([0,90,0]) assemblageCouteau3(animation);
//}
}
module assemblageContreCouteau(inversion,animation) {
rotX = inversion ? -90: 90;
transZ = ((inversion == 1) ? epaisseurCouteau : 0); //inversion ? -epaisseurCouteau:2*epaisseurCouteau;
transY = ((inversion == 0) ? epaisseurCouteau : 0);
transYCentrage = ((inversion == 0) ? epaisseurCouteau : -epaisseurCouteau);
transYFixation = ((inversion == 0) ? -epaisseurTole : epaisseurTole);
rotZ = ((inversion == 0) ? 180 : 0);
if (search(0,animation)) {
translate([-36,transY,-14]) rotate([90,0,0]) laser106();
}
//if (search(1,animation)) {
translate([0,transYCentrage,0]) rotate([0,-90,rotZ]) assemblageCouteau3(animation);
translate([offsetCouteau,transYCentrage,0]) rotate([0,90,rotZ]) assemblageCouteau3(animation);
//}
if (search(2,animation)) {
translate([-22,transYFixation,10]) rotate([0,0,rotZ+180]) laser201();
translate([-22,transYFixation,-10-epaisseurTole]) rotate([0,0,rotZ+180]) laser201();
}
if (search(20,animation)) {
translate([0,transYCentrage,0]) rotate([0,-90,rotZ]) {
translate([0,-20,0]) laser207();
translate([6,4+80,0]) rotate([-90,0,0]) screwNut(4,10,5.7+100,true);
}
}
if (search(21,animation)) {
translate([offsetCouteau,transYCentrage,0]) rotate([0,90,rotZ]) {
translate([0,-20,0]) laser207();
translate([6,4+80,0]) rotate([-90,0,0]) screwNut(4,10,5.7+100,true);
}
}
//if (search(22,animation)) {
translate([0,transYCentrage,0]) rotate([0,-90,rotZ]) assemblageCouteau3(animation);
//}
//if (search(23,animation)) {
translate([offsetCouteau,transYCentrage,0]) rotate([0,90,rotZ]) assemblageCouteau3(animation);
//}
}
//assemblageTriangle1([0,1,2,3,8,9,10,11]);
module assemblageTriangle1(animation=[0,2,3,4,5,6,7,8,9,10,11,12,19]) {
//contre couteaux
translate([longueur-xCouteauInferieur, largeur-epaisseurTole, zPlateau/2]) rotate([0,0,180]) assemblageContreCouteau(0,animation);
translate([longueur-xCouteauInferieur, epaisseurTole, zPlateau/2]) rotate([0,0,180]) assemblageContreCouteau(1,animation);
if (search(3,animation)) {
translate([longueur-6,0,zPlateau / 2 - 10]) rotate([0,0,90]) tube311();
}
if (search(4,animation)) {
translate([longueur/2,y312+10+spacer104+epaisseurCouteau,zPlateau / 2]) rotate([90,0,0]) laser103();
for (x=[21,-21]) {
translate([longueur/2+x,y312+10,zPlateau / 2]) rotate([-90,0,0]) rondelle(4,8,spacer104);
translate([longueur/2+x,y312+10+4+spacer104,zPlateau / 2]) rotate([-90,0,0]) screwNut(4,30,24+spacer104);
}
}
if (search(5,animation)) {
translate([longueur-26,y312-10,zPlateau / 2+10]) rotate([0,180,0]) tube312();
}
if (search(6,animation)) {
translate([longueur-xCouteauInferieur+32,y312+10,zPlateau / 2 + 10 + 2]) rotate([180,0,-90]) laser215();
translate([longueur-xCouteauInferieur+32,y312+10,zPlateau / 2 - 10]) rotate([180,0,-90]) laser215();
}
if (search(7,animation)) {
translate([longueur-xCouteauInferieur+32-10,y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-30,y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-90,y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-10,y312-40,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
}
if (search(8,animation)) {
translate([longueur/2,largeur-y312-10-spacer104,zPlateau / 2]) rotate([90,0,0]) laser103();
for (x=[21,-21]) {
translate([longueur/2+x,largeur-y312-10,zPlateau / 2]) rotate([90,0,0]) rondelle(4,8,spacer104);
translate([longueur/2+x,largeur-y312-10-4-spacer104,zPlateau / 2]) rotate([90,0,0]) screwNut(4,30,24+spacer104);
}
}
if (search(9,animation)) {
translate([longueur-26,largeur-y312-10,zPlateau / 2+10]) rotate([0,180,0]) tube312();
}
if (search(10,animation)) {
translate([longueur-xCouteauInferieur+32,largeur-y312-10,zPlateau / 2 - 10 -2]) rotate([0,0,90]) laser215();
translate([longueur-xCouteauInferieur+32,largeur-y312-10,zPlateau / 2 + 10]) rotate([0,0,90]) laser215();
}
if (search(11,animation)) {
translate([longueur-xCouteauInferieur+32-10,largeur-y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-30,largeur-y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-90,largeur-y312,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([longueur-xCouteauInferieur+32-10,largeur-y312+40,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
}
if (search(12,animation)) {
translate([longueur-16, 12, zPlateau/2+12]) screwNut(4,30,24);
translate([longueur-16, largeur-12, zPlateau/2+12]) screwNut(4,30,24);
}
}
//assemblageTriangle1();
//assemblageTriangle2([0,1,2,3,4,5,6,7,9,10,11,12,14]);
//4
module assemblageTriangle2(animation=[0,19,2,3,4,5,6,7,8,9,10,11,12,13,14]) {
zTubeCarre = zPlateau / 2 - 10;
//if (search(0,animation)) {
//contre couteaux
translate([xCouteauInferieur,epaisseurTole,zPlateau/2]) assemblageContreCouteau(0,animation);
translate([xCouteauInferieur,largeur-epaisseurTole,zPlateau/2]) assemblageContreCouteau(1,animation);
//}
if (search(3,animation)) {
translate([xCouteauInferieur-12,0,zTubeCarre]) rotate([0,0,90]) tube313();
}
if (search(4,animation)) {
translate([xAppuiLong,y314+10,zTubeCarre+10]) rotate([90,0,90]) laser209();
translate([xAppuiLong,y314+10,zTubeCarre+10]) rotate([0,0,90]) laser208();
for (x=[10,-10])
translate([xAppuiLong+x,y314-10,zTubeCarre+11]) rotate([90,0,0]) screwNut(4,25,22);
}
if (search(5,animation)) {
translate([26,y314-10,zPlateau / 2-10]) tube314();
}
if (search(6,animation)) {
translate([6,y314+10,zPlateau / 2 + 10]) rotate([0,0,-90]) laser215();
translate([6,y314+10,zPlateau / 2 - 10-2]) rotate([0,0,-90]) laser215();
}
if (search(7,animation)) {
translate([6+10,y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+30,y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+90,y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+10,y314-40,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
}
if (search(8,animation)) {
translate([longueur/2,y314-10-spacer104,zPlateau / 2]) rotate([90,0,0]) laser104();
for (x=[8,-8]) {
translate([longueur/2+x,y314-10,zPlateau / 2-4]) rotate([90,0,0]) rondelle(4,8,spacer104);
translate([longueur/2+x,y314-10-4-spacer104,zPlateau / 2-4]) rotate([90,0,0]) screwNut(4,30,24+spacer104);
}
}
if (search(9,animation)) {
translate([xAppuiLong,largeur-y314-10,zTubeCarre+10]) rotate([90,0,-90]) laser209();
translate([xAppuiLong,largeur-y314-10,zTubeCarre+10]) rotate([0,0,-90]) laser208();
for (x=[10,-10])
translate([xAppuiLong+x,largeur-y314+10,zTubeCarre+11]) rotate([-90,0,0]) screwNut(4,25,22);
}
if (search(10,animation)) {
translate([26,largeur-y314-10,zPlateau / 2-10]) tube314();
}
if (search(11,animation)) {
translate([6,largeur-y314-10,zPlateau / 2 + 10+2]) rotate([180,0,90]) laser215();
translate([6,largeur-y314-10,zPlateau / 2 - 10]) rotate([180,0,90]) laser215();
}
if (search(12,animation)) {
translate([6+10,largeur-y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+30,largeur-y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+90,largeur-y314,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
translate([6+10,largeur-y314+40,zPlateau / 2 +12]) rotate([0,0,0]) screwNut(4,30,24);
}
if (search(13,animation)) {
translate([longueur/2,largeur-y314+10+spacer104+epaisseurCouteau,zPlateau / 2]) rotate([90,0,0]) laser104();
for (x=[8,-8]) {
translate([longueur/2+x,largeur-y314+10,zPlateau / 2-4]) rotate([-90,0,0]) rondelle(4,8,spacer104);
translate([longueur/2+x,largeur-y314+10+4+spacer104,zPlateau / 2-4]) rotate([-90,0,0]) screwNut(4,30,24+spacer104);
}
}
if (search(14,animation)) {
translate([16, largeur-12, zPlateau/2+12]) screwNut(4,30,24);
translate([16, 12, zPlateau/2+12]) screwNut(4,30,24);
}
//Exploded views
if (search(50,animation)) {
translate([xAppuiLong,y314+10,zTubeCarre+10]) rotate([90,0,90]) laser209();
translate([xAppuiLong,y314+10,zTubeCarre+10]) rotate([0,0,90]) laser208();
}
}
module serflex213() {
r1 = 19/2;
r1ext = r1+1;
r2 = 2;
r2ext = r2+1;
h = r1-r2+1;
translate([0,0,-1.5]) {
difference() {
union() {
cylinder(r=r1ext,h=3);
translate([-r1ext+r2ext,h,0]) cylinder(r=r2ext,h=3);
translate([-r1ext,0,0]) cube([r1ext*2,h,3]);
translate([-r1ext+r2ext,h,0]) cube([r1ext*2-r2ext,r2ext,3]);
}
translate([0,0,-1]) cylinder(r=r1,h=5);
translate([-r1+r2,h,-1]) cylinder(r=r2,h=5);
translate([-r1,0,-1]) cube([r1*2,h,5]);
translate([-r1+r2,h-1,-1]) cube([2*r1-r2,r2+1,5]);
}
translate([r1,h+r2-1,-1]) cube([3,3,5]);
translate([r1,h+r2,0]) cube([5,1,3]);
}
}
module serflex625zz() {
linear_extrude(5) {
difference() {
offset(delta=1) hull() {
translate([0,0]) circle(d=16);
for (xz=[[0,0+8+1.5],
[0-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-zMotor+3.5],
[0+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-zMotor+3.5]]) {
translate(xz) circle(d=3,$fn=32);
}
}
hull() {
translate([0,0]) circle(d=16);
for (xz=[[0,0+8+1.5],
[0-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5-zMotor],
[0+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5-zMotor]]) {
translate(xz) circle(d=3,$fn=32);
}
}
//#translate([5.8,6.8]) rotate(43) square([4,4]);
}
translate([3.4,8.5]) square([4.5,1]);
}
translate([4,7.5,-1]) cube([3,3,7]);
}
module serflex216_0() {
projection()
intersection() {
rotate([-90,0,0]) translate([0,1,0]) {
translate([1,3.5,0-19.3]) rotate([0,0,-90]) endstop();
translate([5,-5,0+7]) rotate([-90,0,180]) laser216();
translate([0,0,0]) rotate([-90,30,0]) motorPulley();
}
translate([-50,-50,0]) cube([100,100,1]);
}
}
module serflex216() {
linear_extrude(4)
difference() {
offset(1) hull() serflex216_0();
hull() serflex216_0();
}
}
//serflex216() ;
//assemblageGlobal();
//assemblageTriangle2([0,1]);
/*a = [1,2,3];
function add(v, i = 0, r = 0, lim) = (i < lim) ? add(v, i + 1, r + v[i]) : r;
output = add(a,0,0,3);
echo(output);*/
module assemblageGlobal(animation=64) {
numSteps = [12,17,15,13,7];
numStepsCumul = [12,29,44,57,64];
if (animation >= 0) {
for (i=[0:min(animation,numStepsCumul[0]-1)])
cadreInf([i]);
}
if (animation >= numStepsCumul[0]) {
for (i=[0:min(animation,numStepsCumul[1]-1)-numStepsCumul[0]])
brasSecondaire([i]);
}
if (animation >= numStepsCumul[1]) {
for (i=[0:min(animation,numStepsCumul[2]-1)-numStepsCumul[1]])
assemblageTriangle2([i]);
}
if (animation >= numStepsCumul[2]) {
for (i=[0:min(animation,numStepsCumul[3]-1)-numStepsCumul[2]])
assemblageTriangle1([i]);
}
if (animation >= numStepsCumul[3]) {
for (i=[0:animation-numStepsCumul[3]])
cadreSup([i]);
}
}
//cadreSup();
/*
cadreInf();
brasSecondaire();
#cube([60,300,100]);
*/

BIN
assembly_manual.pdf Normal file

Binary file not shown.

25
balance_v4.8.scad Normal file
View file

@ -0,0 +1,25 @@
include <parameters.scad>;
include <standardParts.scad>;
include <functions.scad>;
include <customParts.scad>;
include <assembly.scad>;
//incl
//percage100x();
//percage101x();
//percage102x();ude <views.scad>;
assemblageGlobal();
//brasSecondaire();
//percage1024();
//cadreInf();
//dxf20alu();

293
cncDrill.scad Normal file
View file

@ -0,0 +1,293 @@
include <customParts.scad>
/////////////////////////////////////////////////
///// Perçages CNC /////
/////////////////////////////////////////////////
module baseCNC() {
color("red",0.3) render(convexity=2) translate([0,0,-20]) tubeCarre(20,220,2);
//cube([220,20,20]);
#translate([-2,-5,-20]) cube([2,30,25]);
}
module trou(x,y) {
//color("blue")
#translate([x,y,-20]) cylinder(r=2,h=30);
echo(str("G0 X" , x, " Y",y));
}
module percage1001() {
echo(";1001, sur les pièces 301 et 302");
baseCNC();
render() translate([500,-2,2]) rotate([0,180,0]) profile301();
trou(26,8);
trou(48,8);
}
module percage1002() {
echo(";1002, sur les pièces 301 et 302");
baseCNC();
render() translate([0,22,2]) rotate([180,0,0]) profile301();
trou(26,12);
trou(48,12);
}
module percage1003() {
echo(";1003, uniquement sur les pièces 301 (et pas 302)");
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
render() translate([0,-2,2]) rotate([-90,0,0]) profile301();
trou(38,10);
trou(58,10);
}
module percage1003bis() {
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
render() translate([500,22,2]) rotate([90,180,0]) profile301();
trou(38,10);
trou(58,10);
}
module percage1004() {
echo(";1004, sur pièce 303");
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
//render()
//translate([0,22,2]) rotate([180,0,0]) profile303();
render() translate([496,-2,2]) rotate([180,0,180]) profile303();
trou(10,10);
}
module percage1004bis() {
baseCNC();
render() translate([0,22,2]) rotate([180,0,0]) profile303();
trou(10,10);
}
module percage1005() {
echo(";1005, sur pièce 303");
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
//render()
//translate([0,22,2]) rotate([180,0,0]) profile303();
render() translate([496,22,2]) rotate([-90,0,180]) profile303();
trou(498-xBrasSecondaire2-8,10);
trou(498-xBrasSecondaire2+8,10);
}
module percage1005bis() {
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
//render()
//translate([0,22,2]) rotate([180,0,0]) profile303();
render() translate([0,-2,2]) rotate([-90,0,0]) profile307();
trou(498-xBrasSecondaire2-8,10);
trou(498-xBrasSecondaire2+8,10);
}
module percage1006() {
echo(";1006, sur pièce 302");
baseCNC();
render() translate([430,-2,2]) rotate([0,180,0]) profile302();
trou(174,10);
}
module percage1006bis() {
baseCNC();
render() translate([0,22,2]) rotate([0,180,180]) profile302();
trou(174,10);
}
module percage1007() {
baseCNC();
//translate([0,-2,2]) rotate([-90,0,0]) cadre();
render() translate([0,-2,2]) rotate([-90,0,0]) profile303();
trou(58,9);
}
module percage1010() {
echo(";1010, sur pièce 312");
baseCNC();
render() translate([0,0,-35]) rotate([90,0,0]) tube312();
trou(11,-10);
trou(41,-10);
trou(71,-10);
}
module percage1011() {
echo(";1011, sur pièce 312");
x1 = l312 - (longueur/2 - 26) + 21;
x2 = l312 - (longueur/2 - 26) - 21;
baseCNC();
render() translate([l312,-20,-35]) rotate([90,0,180]) tube312();
trou(x1,-10);
trou(x2,-10);
}
module percage1012() {
echo(";1012, sur pièce 314");
baseCNC();
render() translate([l314,-20,-35]) rotate([90,0,180]) tube314();
trou(13,-9);
trou(33,-9);
}
module percage1013() {
echo(";1013, sur pièce 314");
baseCNC();
render() translate([l314,0,-15]) rotate([-90,0,180]) tube314();
//render() translate([0,-20,-35]) tubeCarre(20,370,2);
// pour visu, à ne pas mettre en gcode
trou(138,-6);
trou(154,-6);
trou(13,-11);
trou(33,-11);
}
module percage1015() {
echo(";1015, sur pièce 311");
baseCNC();
render() translate([0,-20,-35]) tube311();
trou(12,-10);
trou(y312,-10);
}
module percage1016() {
echo(";1016, sur pièce 313");
baseCNC();
render() translate([0,-20,-35]) tube313();
trou(12,-10);
trou(y314,-10);
}
module percage1017() {
echo(";1017, sur pièce 311 et 313");
baseCNC();
render() translate([largeur,-0,-35]) rotate([0,0,180]) tube311();
trou(12,-10);
}
module percage1020() {
echo(";1020, sur pièce 305");
baseCNC();
translate([0,-2,-28]) profile305();
trou(7,12);
}
module percage1021() {
echo(";1021, sur pièce 305");
baseCNC();
translate([lBrasSecondaire,22,-28]) rotate([0,0,180]) profile305();
trou(7,8);
}
module percage1022() {
echo(";1022, sur pièce 306");
baseCNC();
translate([lBrasSecondaire,28,2]) rotate([-90,0,180]) profile306();
//9 , 21
trou(lBrasSecondaire-xPulley,28-zMotor);
}
module percage1023() {
echo(";1023, sur pièce 306");
xt = 35 / 2;
yt = 8;
xt1 = xt * cos(30) - yt * sin(30);
yt1 = xt * sin(30) + yt * cos(30);
xt2 = -xt * cos(30) - yt * sin(30);
yt2 = -xt * sin(30) + yt * cos(30);
baseCNC();
translate([0,-8,2]) rotate([-90,0,0]) profile306();
trou(xMotor,-8+zMotor);
trou(xMotor-xt1,-8+zMotor+yt1);
trou(xMotor-xt2,-8+zMotor+yt2);
trou(xCouteauIII-10,-8+zCouteauBrasSecondaire+17);
trou(xCouteauIII+10,-8+zCouteauBrasSecondaire+17);
}
module percage1024() {
echo(";1024, sur pièce 305");
baseCNC();
translate([lBrasSecondaire,28,2]) rotate([-90,0,180]) profile305();
trou(xCouteauIII-20,28-zCouteauBrasSecondaire-13);
trou(xCouteauIII+10,28-zCouteauBrasSecondaire-13);
}
module percage100x() {
s = -50;
percage1001();
translate([0,1*s,0]) percage1002();
translate([0,2*s,0]) percage1003();
translate([0,3*s,0]) percage1003bis();
translate([0,4*s,0]) percage1004();
translate([0,5*s,0]) percage1004bis();
translate([0,6*s,0]) percage1005();
translate([0,7*s,0]) percage1005bis();
translate([0,8*s,0]) percage1006();
translate([0,9*s,0]) percage1006bis();
translate([0,10*s,0]) percage1007();
}
module percage101x() {
s = -70;
translate([0,0*s,0]) percage1010();
translate([0,1*s,0]) percage1011();
translate([0,2*s,0]) percage1012();
translate([0,3*s,0]) percage1013();
translate([0,4*s,0]) percage1015();
translate([0,5*s,0]) percage1016();
translate([0,6*s,0]) percage1017();
}
module percage102x() {
s = -70;
translate([0,0*s,0]) percage1020();
translate([0,1*s,0]) percage1021();
translate([0,2*s,0]) percage1022();
translate([0,3*s,0]) percage1023();
translate([0,4*s,0]) percage1024();
}
percage101x();

980
customParts.scad Normal file
View file

@ -0,0 +1,980 @@
include <parameters.scad>
include <functions.scad>
include <standardParts.scad>
/////////////////////////////////////////////////
///// Pièces unitaires /////
/////////////////////////////////////////////////
module laser206() {
color(color200)
translate([2,2,2])
difference() {
cube([62,62,2]);
translate([62,18,0]) rotate([0,0,-45]) translate([-80,0,-1]) cube([90,90,4]);
translate([24,8,-1]) cylinder(d=drillM4, h=4, $fn=fnCylindre);
translate([46,8,-1]) cylinder(d=drillM4, h=4, $fn=fnCylindre);
translate([8,24,-1]) cylinder(d=drillM4, h=4, $fn=fnCylindre);
translate([8,46,-1]) cylinder(d=drillM4, h=4, $fn=fnCylindre);
translate([28,28,-1]) cylinder(d=drillM8, h=4, $fn=fnCylindre);
}
echo(str("206"));
}
correctionHauteurImpression = pourImpression3D ? 1 : 0;
module laser101() {
marge = 6;
hTrou = 5;
lTrou = 4;
largeurCouteau = 12;
longueurCouteau = offsetCouteau + 2 * marge;
hauteurBaseCouteau = lIntCornierCadre - epaisseurTole;
color(color100)
render(0)
translate([-marge,0,0]) difference() {
union() {
cube([longueurCouteau,hauteurBaseCouteau,epaisseurCouteau]);
translate([marge,hauteurBaseCouteau+hauteurCouteau-largeurCouteau+correctionHauteurImpression,0]) toleTriangulaire(largeurCouteau,largeurCouteau,epaisseurCouteau);
translate([marge-largeurCouteau/2,hauteurBaseCouteau,0]) cube([largeurCouteau,hauteurCouteau-largeurCouteau+correctionHauteurImpression,epaisseurCouteau]);
//translate([marge,hauteurCadre,0]) cube([offsetCouteau/2+5,hTrou+2,epaisseurTole]);
}
translate([marge,hauteurBaseCouteau/2,-1]) cylinder(epaisseurCouteau+2,d=diametreRivet, $fn=fnCylindre);
translate([longueurCouteau-marge,hauteurBaseCouteau/2,-1]) cylinder(epaisseurCouteau+2,d=diametreRivet, $fn=fnCylindre);
//translate([longueurCouteau/2-lTrou/2,hauteurCadre,-1]) cube([lTrou,hTrou,epaisseurTole+2]);
translate([marge-2,hauteurBaseCouteau+hauteurCouteau-15,-1]) cube([lTrou,hTrou,epaisseurCouteau+2]);
}
echo(str("101"));
}
module laser102() {
marge = 6;
hTrou = 5;
lTrou = 4;
largeurCouteau = 12;
longueurCouteau = offsetCouteau + 2 * marge;
hauteurBaseCouteau = lIntCornierCadre - epaisseurTole;
color(color100)
render(0)
translate([-marge,0,0]) difference() {
union() {
translate([0,2,0]) cube([largeurCouteau,hauteurBaseCouteau-2,epaisseurCouteau]);
translate([marge,hauteurBaseCouteau+hauteurCouteau-largeurCouteau+correctionHauteurImpression,0]) toleTriangulaire(largeurCouteau,largeurCouteau,epaisseurCouteau);
translate([marge-largeurCouteau/2,hauteurBaseCouteau,0]) cube([largeurCouteau,hauteurCouteau-largeurCouteau+correctionHauteurImpression,epaisseurCouteau]);
//translate([marge,hauteurCadre,0]) cube([offsetCouteau/2+5,hTrou+2,epaisseurTole]);
}
translate([marge,hauteurBaseCouteau/2,-1]) cylinder(epaisseurCouteau+2,d=diametreRivet, $fn=fnCylindre);
translate([marge-2,hauteurBaseCouteau+hauteurCouteau-15,-1]) cube([lTrou,hTrou,epaisseurCouteau+2]);
}
echo(str("102"));
}
module laser207() {
l = 28;
hCorps = 12;
h = hCorps + epaisseurCouteau;
zm = -epaisseurTole/2-1;
color(color200)
render(0) difference() {
translate([-14,-hCorps,-epaisseurTole/2]) cube([l,h,epaisseurTole]); //tole de base
translate([-11,0,zm]) cube([l - 3 - 2,h - 2,epaisseurTole+2]); //décroché
//translate([14-2,0,zm]) cube([3,epaisseurCouteau+1,epaisseurTole+2]); // coin gauche
translate([-11,-1,zm]) cube([7,2,epaisseurTole+2]); //decroché2
translate([-15,3.5,zm]) cube([7,2,epaisseurTole+2]); // on enlève 5/10 pour ne pas avoir de frotement sur le montage bras secondaire
intersection() { //décrohé biais
translate([-5,-1,zm]) cube([7,2,epaisseurTole+2]);
translate([0,0,zm]) rotate([0,0,20]) translate([-7,0,0]) cube([8,2,epaisseurTole+2]);
}
translate([4,-hCorps+4,zm]) cube([4,9,epaisseurTole+2]); // trou boulon
translate([6-7/2,-hCorps+7,zm]) cube([7,3.4,epaisseurTole+2]); // emplacement écrou
}
echo(str("207"));
}
module laser106() {
l = 64;
h = 28 ;
hauteurTriangle = h/2+1;
baseTriangle = hauteurTriangle * 4;
color(color100)
render(0)
difference() {
//tole de base
cube([l,h,epaisseurCouteau]);
//premier emplacement contre couteau
intersection() {
translate([36,-1,-1]) rotate([0,0,0]) toleTriangulaire(baseTriangle,hauteurTriangle,epaisseurCouteau+2);
translate([28,-1,-1]) cube([16,h/2+1,epaisseurCouteau+2]);
}
//second emplacement contre couteau
intersection() {
translate([56,h/2+hauteurTriangle,-1]) rotate([0,0,180]) toleTriangulaire(baseTriangle,hauteurTriangle,epaisseurCouteau+2);
translate([48,h/2,-1]) cube([17,h/2+1,epaisseurCouteau+2]);
}
//Trou carré pour le tube
translate([4-laserSlack/2,4-laserSlack/2,-1]) cube([20+laserSlack,20+laserSlack,epaisseurCouteau+2]);
translate([4+epaisseurTole,4-epaisseurTole-laserSlack,-1]) cube([20-2*epaisseurTole,20+2*epaisseurTole + 2 * laserSlack,epaisseurCouteau+2]);
//Trous pour les tôles de centrage
translate([36,h/2+4+2,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
translate([56,h/2-4-2,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
translate([36-epaisseurTole/2,h/2+12-laserSlack,-1]) cube([epaisseurTole,2+1,epaisseurCouteau+2]);
translate([56-epaisseurTole/2,-1+laserSlack,-1]) cube([epaisseurTole,2+1, epaisseurCouteau+2]);
}
echo(str("106"));
}
module laser201() {
color(color200)
render(0)
difference() {
translate([-10,0,0]) cube([20,2+epaisseurCouteau+12,epaisseurTole]);
translate([-11+laserSlack,epaisseurTole-laserSlack/2,-1]) cube([epaisseurTole+1,epaisseurCouteau+laserSlack,epaisseurTole+2]);
translate([10-epaisseurTole-laserSlack,epaisseurTole-laserSlack/2,-1]) cube([epaisseurTole+1,epaisseurCouteau+laserSlack,epaisseurTole+2]);
translate([0,2+epaisseurCouteau+6,-1]) cylinder(d=drillM4,h=epaisseurTole+2, $fn=fnCylindre);
}
echo(str("201"));
}
module laser103() {
l = 54;
lt = 30;
color(color100)
render(0)
difference() {
translate([-l/2,-14,0]) cube([l,24,epaisseurCouteau]);
translate([-lt/2,-11,-1]) cube([lt,15,epaisseurCouteau+2]);
translate([-lt/2,-12,-1]) cube([lt,16,epaisseurCouteau+2]);
translate([-lt/2+4,-15,-1]) cube([lt-8,4,epaisseurCouteau+2]);
translate([-21,0,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);//oblong(4,2,6);
translate([21,0,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);//oblong(4,2,6);
}
translate([0,7,0]) rotate([0,0,180]) toleTriangulaire(7,7,epaisseurCouteau);
echo(str("103"));
}
module laser104() {
l = 26;
h = 12;
color(color100)
render(0)
difference() {
//tole de base
translate([-l/2,-10,0]) cube([l,h,epaisseurCouteau]);
//Trou carré pour le tube
translate([-5,0,-1]) cube([10,3,epaisseurCouteau+2]);
//Trous
translate([-8,-4,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
translate([8,-4,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
}
echo(str("104"));
}
module laser209() {
color(color200)
render(0)
translate([-3,-13,-epaisseurTole/2]) difference() {
cube([28,26,epaisseurTole]);
translate([-1,3-laserSlack/2,-1]) cube([4,20+laserSlack,epaisseurTole+2]);
intersection() {
translate([29,14,-1]) rotate([0,0,-45]) translate([-35,0,0]) cube([40,20,epaisseurTole+2]);
translate([0,17,-1]) cube([50,20,epaisseurTole+2]);
}
translate([11-laserSlack,13,-1]) cube([20,epaisseurTole,epaisseurTole+2]);
//#intersection() {
translate([24,11,-1]) rotate([0,0,45]) translate([-40,-20,0]) cube([40,20,epaisseurTole+2]);
translate([24,13,-1]) rotate([0,0,-20]) translate([0,-20,0]) cube([40,20,epaisseurTole+2]);
//translate([0,-1,-1]) cube([50,15,epaisseurTole+2]);
translate([24,13,-1]) rotate([0,0,0]) translate([0,-20,0]) cube([40,20,epaisseurTole+2]);
//translate([0,-1,-1]) cube([50,15,epaisseurTole+2]);
//}
}
echo(str("209"));
}
module laser208() {
color(color200)
translate([0,0,0]) difference() {
translate([0,-16,0]) cube([25,32,epaisseurTole]);
for (z=[-10,10]) {
translate([-1,z-4/2,-1]) cube([8,4,epaisseurTole+2]); // trou boulon
translate([2,z-7/2-laserSlack/2,-1]) cube([3.4,7,epaisseurTole+2]); // emplacement écrou
}
translate([-1+laserSlack,-epaisseurTole/2,-1]) cube([9+laserSlack,epaisseurTole,epaisseurTole+2]);
translate([20,5,-1]) rotate([0,0,-45]) translate([-20,0,0]) cube([20,30,epaisseurTole+2]);
translate([20,5,-1]) cube([20,12,epaisseurTole+2]);
translate([20,-5,-1]) rotate([0,0,45]) translate([-20,-30,0]) cube([20,30,epaisseurTole+2]);
translate([20,-5-12,-1]) cube([20,12,epaisseurTole+2]);
}
echo(str("208"));
}
module laser107() {
l = 32;
h = 14;
marge = 6;
hTrou = 5;
lTrou = 4;
largeurCouteau = 10;
longueurCouteau = offsetCouteau + 2 * marge;
hauteurBaseCouteau = lIntCornierCadre - epaisseurTole;
color(color100)
render(0)
difference() {
union() {
translate ([-l/2,10,0]) cube([l,h,epaisseurCouteau]);
translate([0,largeurCouteau,0]) rotate([0,0,180]) toleTriangulaire(largeurCouteau,largeurCouteau,epaisseurCouteau);
}
translate([-10,10+h/2,-1]) cylinder(epaisseurCouteau+2,d=diametreRivet, $fn=fnCylindre);
translate([10,10+h/2,-1]) cylinder(epaisseurCouteau+2,d=diametreRivet, $fn=fnCylindre);
//translate([longueurCouteau/2-lTrou/2,hauteurCadre,-1]) cube([lTrou,hTrou,epaisseurTole+2]);
translate([-lTrou/2,10,-1]) cube([lTrou,hTrou,epaisseurCouteau+2]);
}
echo(str("107"));
}
module laser108() {
l = 46;
h = 29;
marge = 6;
hTrou = 5;
lTrou = 4;
largeurCouteau = 7;
longueurCouteau = offsetCouteau + 2 * marge;
hauteurBaseCouteau = lIntCornierCadre - epaisseurTole;
color(color100)
render(0)
difference() {
translate ([-16,-10,0]) cube([l,h,epaisseurCouteau]);
translate ([-17,-11,-1]) cube([27,18,epaisseurCouteau+2]);
translate ([20-16/2,-7,-1]) cube([16,14,epaisseurCouteau+2]);
translate([-10,13,-1]) cylinder(epaisseurCouteau+2,d=drillM4, $fn=fnCylindre);
translate([20,13,-1]) cylinder(epaisseurCouteau+2,d=drillM4, $fn=fnCylindre);
//translate([longueurCouteau/2-lTrou/2,hauteurCadre,-1]) cube([lTrou,hTrou,epaisseurTole+2]);
translate([-lTrou/2,10,-1]) cube([lTrou,hTrou,epaisseurCouteau+2]); //trouCarre
}
color(color100) translate([0,largeurCouteau,0]) rotate([0,0,180]) toleTriangulaire(largeurCouteau,largeurCouteau,epaisseurCouteau);
color(color100) translate([20,-largeurCouteau,0]) toleTriangulaire(largeurCouteau,largeurCouteau,epaisseurCouteau);
echo(str("108"));
}
module laser105() {
l = 26;
h = zCouteau - 4 + 5;
hauteurTriangle = h/2+1;
baseTriangle = hauteurTriangle * 4;
hauteurSousCouteau = zCouteau - 4;
color(color100)
render(0)
difference() {
difference() {
//tole de base
translate([-l/2,-hauteurSousCouteau,0]) cube([l,h,epaisseurCouteau]);
translate([7,-hauteurSousCouteau + 18,-1]) cube([10,30,epaisseurCouteau+2]);
translate([-17,-hauteurSousCouteau + 18,-1]) cube([10,30,epaisseurCouteau+2]);
}
//premier emplacement contre couteau
//intersection() {
translate([0,hauteurTriangle,-1]) rotate([0,0,180]) toleTriangulaire(baseTriangle,hauteurTriangle,epaisseurCouteau+2);
// translate([-8,0,-1]) cube([16,h/2+1,epaisseurCouteau+2]);
//}
//Trous pour les tôles de centrage
translate([-epaisseurTole/2-laserSlack,-14-laserSlack,-1]) cube([epaisseurTole+2*laserSlack,2+2*laserSlack,epaisseurCouteau+2]);
translate([-2,-17,-1]) cube([4,3,epaisseurCouteau+2]);
translate([0,-4-2,-1]) cylinder(d=4,h=epaisseurCouteau+2, $fn=fnCylindre); //boulon
translate([-8,-hauteurSousCouteau+10,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
translate([8,-hauteurSousCouteau+10,-1]) cylinder(d=drillM4,h=epaisseurCouteau+2, $fn=fnCylindre);
}
echo(str("105"));
}
//!laser105();
module oblong(d,lLiberte,h) {
color(color100)
hull() {
translate([-lLiberte/2,0,0]) cylinder(h,d=d, $fn=fnCylindre);
translate([lLiberte/2,0,0]) cylinder(h,d=d, $fn=fnCylindre);
}
echo(str("oblong", d, h));
}
//!toleCentrageCouteau3();
module drill205(h) {
translate([35,10,-1]) cylinder(d=diametreRivet,h=h, $fn=fnCylindre);
translate([65,10,-1]) cylinder(d=diametreRivet,h=h, $fn=fnCylindre);
translate([95,10,-1]) cylinder(d=diametreRivet,h=h, $fn=fnCylindre);
}
module laser205() {
l = 105;
h = 28;
hauteurTriangle = h/2+1;
baseTriangle = hauteurTriangle * 4;
color(color200)
render(0)
difference() {
//tole de base
linear_extrude(epaisseurTole)
difference() {
hull() {
translate([0,-4]) square([28,28]);
translate([95,10]) circle(r=8);
}
translate([4-laserSlack,0-laserSlack]) square([20+2*laserSlack,20+2*laserSlack]);
//for (x=[4.4,23.6],y=[0.4,19.6])
// translate([x,y]) circle(r=0.8, $fn=20);
}
drill205(epaisseurTole+2);
}
echo(str("205"));
}
module laser202() {
color(color200)
render(0)
difference() {
cube([20,20,epaisseurTole]);
translate([10,10,-1]) cylinder(d=diametreRivet,h=epaisseurTole+2, $fn=fnCylindre);
}
echo(str("202"));
}
module laser210() {
wHole = sqrt(pow(19/2,2)-pow(7,2)) * 2;
w = 46;
l = 59;
color(color200)
render(0)
linear_extrude(height=epaisseurTole) {
difference() {
translate([0,-w/2]) square([l,w]);
translate([2,-wHole/2]) square([55,wHole]);
for (x=[4.5,54.5],y=[-12,12])
translate([x,y]) circle(d=drillM4,$fn=fnCylindre);
//for (x=[13,43],y=[-16,-12,10,14])
for (x=[11,41],y=[-12.5,10])
translate([x,y]) square([5,2.5]);
translate([l/2,12]) circle(d=3,$fn=fnCylindre);
}
}
echo(str("210"));
}
module laser213() {
w = 46;
l = 33;
wHole = sqrt(pow(19/2,2)-pow(7,2)) * 2;
color(color200)
render(0)
linear_extrude(height=epaisseurTole) {
difference() {
translate([-l/2,-w/2]) square([l,w]);
translate([-l/2+2,-wHole/2]) square([29,wHole]);
for (x=[-l/2+4.5,-l/2+28.5],y=[-12,12])
translate([x,y]) circle(d=drillM4,$fn=fnCylindre);
//for (x=[13,43],y=[-16,-12,10,14])
//for (x=[-l/2+8,-l/2+20],y=[-12.5,10])
for (x=[-6-2.5,6-2.5],y=[-12.5,10])
translate([x,y]) square([5,2.5]);
translate([0,12]) circle(d=3.1,$fn=fnCylindre);
}
}
echo(str("213"));
}
module laser211() {
color(color200)
render(0)
linear_extrude(height=epaisseurTole) {
difference() {
translate([-4.5,-2.5]) square([9,11]);
for (x=[-3.5:2:3.5])
translate([x,2.5]) square([1,7]);
translate([0,0]) circle(d=3.1,$fn=fnCylindre);
}
}
echo(str("211"));
}
module laser212() {
color(color200)
render(0)
linear_extrude(height=epaisseurTole) {
difference() {
translate([-4.5,-2.5]) square([9,11]);
translate([0,0]) circle(d=3.1,$fn=fnCylindre);
}
}
echo(str("212"));
}
//projection() laser203();
module laser203() {
hBase = 24.8;
color(color200)
render(0)
difference() {
union() {
translate([-14,0]) cube([36,hBase, epaisseurTole]) ;
translate([9.5-sqrt(1.25),hBase-1,0]) cube([sqrt(1.25)*2,7.2,epaisseurTole]); //ergot centrage
translate([15,0,0]) cube([7,70,2]);
translate([-4,66,0]) cube([26,4,2]);
}
translate([-9.5-(3+jeuPourImpression)/2,hBase-8,-1]) cube([3+jeuPourImpression,10,epaisseurTole+2]); // trou boulon
translate([-9.5-(5.6+jeuPourImpression)/2,hBase-5,-1]) cube([5.5+jeuPourImpression,2.6+jeuPourImpression,epaisseurTole+2]); // emplacement écrou
//fixation holes
translate([-6.5,9,-1]) cylinder(d=drillM4,h=epaisseurTole+2, $fn=fnCylindre);
translate([15.5,9,-1]) cylinder(d=drillM4,h=epaisseurTole+2, $fn=fnCylindre);
}
if (pourImpression3D == 1) {
translate([-13.5,hBase-9,0]) cube([30,18,0.2]);
}
echo(str("203"));
}
module laser252() {
linear_extrude(height=1/*epaisseurTole*/) {
difference() {
union() {
translate([0,-10-3]) square([12,28+3]);
translate([-2,4-sqrt(4)-jeuPourImpression/2]) square([2,sqrt(4)*2-jeuPourImpression]);
//translate([-3,-13]) square([5,13]);
}
translate([0,12-(4+jeuPourImpression)/2]) square([9,4+jeuPourImpression]); // trou boulon
translate([2.5,12-(7+jeuPourImpression)/2]) square([3.4+jeuPourImpression,7+jeuPourImpression]); // emplacement écrou
translate([2,-10-(jeuPourImpression/2)]) square([8+jeuPourImpression,4+jeuPourImpression]); // fenetre passante
}
}
if (pourImpression3D == 1) {
translate([-5,4,0]) cube([6.5,14,0.2]);
}
echo(str("252"));
}
module laser215() {
linear_extrude(height=epaisseurTole) {
difference() {
square([60,100]);
translate([60,20]) rotate(atan(40/80)) translate([0,0]) square([100,200]);
translate([10,10]) circle(d=drillM4,$fn=fnCylindre);
translate([50,10]) circle(d=drillM4,$fn=fnCylindre);
translate([10,30]) circle(d=drillM4,$fn=fnCylindre);
translate([10,90]) circle(d=drillM4,$fn=fnCylindre);
}
}
echo(str("215"));
}
module laser216() {
linear_extrude(height=2) {
rotate(-30) union() {
difference() {
union() {
circle(d=36,$fn=100);
translate([-11,-17.5-2]) square([22,10]);
}
circle(d=28.5,$fn=36);
translate([-8.75,-17.5]) square([17.5,10]);
}
}
translate([sin(30)*8-5,15]) square([10,6.7]);
translate([sin(30)*8-1.3,24-4.2]) square([2.6,5]);
}
echo(str("216"));
}
module laser251() {
difference() {
linear_extrude(height=1) {
difference() {
circle(d=27,$fn=fnCylindre);
intersection() {
circle(d=5.1,$fn=fnCylindre);
translate([-3,-1.525]) square([6,3.05]);
}
translate([-1,6]) square([2,6]);
}
}
//translate([0,0,0.2]) cylinder(d=13,h=2,$fn=100);
}
echo(str("251"));
}
module laser281() {
linear_extrude(height=6)
difference() {
translate([-117/2,-45/2]) square([117,45]);
for (x=[-12,12],y=[-12,12]) {
translate([x,y]) circle(d=4, $fn=fnCylindre);
}
}
echo(str("281"));
}
module profile301() {
zTrou = epaisseurTole+eCorniereCadre+(lCorniereCadre-epaisseurTole-eCorniereCadre)/2;
color(color300)
render(0)
difference() {
cornierePercee(longueur);
for (x1=[xCouteauInferieur,xCouteauSuperieur],x2=[0,1]) {
translate([longueur*x2+(1-2*x2)*x1,eCorniereCadre+1,zTrou]) rotate([90,0,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
}
}
echo(str("301"));
}
module profile302() {
color(color300)
render(0)
difference() {
cornierePercee(largeur);
for (x=[yMediane-ySupportFromMediane,yMediane+ySupportFromMediane]) {
translate([x,10,-1]) cylinder(eCorniereCadre+2,d=drillM4, $fn=fnCylindre);
}
}
echo(str("302"));
}
module profile303() {
color(color300)
render(0)
difference() {
corniere(20,l303304,2);
for (x=[8,longueur-2*eCorniereCadre-8])
translate([x,10,-1]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
for (x=[xBrasSecondaire2-8-2,xBrasSecondaire2+8-2])
translate([x,-1,12]) rotate([-90,0,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
translate([xObturateur-15.5-2,-1,11]) rotate([-90,0,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
translate([xObturateur+6.5-2,-1,11]) rotate([-90,0,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
for (x=[x308-10,x309+10])
translate([x-2,10,-1]) cylinder(eCorniereCadre+2,d=drillM4, $fn=fnCylindre);
}
echo(str("303"));
}
module profile308() {
//echo(l308309);
difference() {
corniere(20,l308309,2);
translate([8,10,-1]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
}
echo(str("308"));
}
module profile309() {
//echo(l308309);
difference() {
corniere(20,l308309,2);
translate([l308309-8,10,-1]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
}
echo(str("309"));
}
module profile304() {
color(color300)
render(0)
difference() {
corniere(20,l303304,2);
for (x=[8,longueur-2*eCorniereCadre-8])
translate([x,10,-1]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
for (x=[longueur-(xBrasSecondaire2-8)-2,longueur-(xBrasSecondaire2+8)-2])
translate([x,-1,12]) rotate([-90,0,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
}
echo(str("304"));
}
module profile305() {
render(0)
difference() {
translate([0,0,30]) rotate([-90,0,0]) corniere(30,lBrasSecondaire,2);
for (x=[7,lBrasSecondaire-30]) translate([x,largeurBras/2-16,27]) cylinder(d=5, h=4, $fn=fnCylindre);
//fixation couteauIII
translate([lBrasSecondaire-xCouteauIII-10,-1,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
translate([lBrasSecondaire-xCouteauIII+20,-1,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
//fixation roulement 625zz
//translate([lBrasSecondaire-xMotor,3,zMotor]) rotate([90,0,0]) 625zz();
translate([lBrasSecondaire-xMotor,-1,zMotor+8+1.5]) rotate([-90,0,0]) cylinder(d=3, h=4, $fn=fnCylindre);
translate([lBrasSecondaire-xMotor-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-1,3.5]) rotate([-90,0,0]) cylinder(d=3, h=4, $fn=fnCylindre);
translate([lBrasSecondaire-xMotor+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-1,3.5]) rotate([-90,0,0]) cylinder(d=3, h=4, $fn=fnCylindre);
}
echo(str("305"));
}
//profile306();
module profile306() {
render(0)
difference() {
translate([0,0,30]) rotate([-90,0,0]) corniere(30,lBrasSecondaire,2);
for (x=[30,lBrasSecondaire-7]) translate([x,largeurBras/2-16,27]) cylinder(d=5, h=4, $fn=fnCylindre);
//fixation moteur
/*translate ([xMotor,-1,zMotor]) rotate([0,-150,0]) {
translate([0,0,0]) rotate([-90,0,0]) cylinder(d=9.5, h=4);
translate([-35/2,0,-8]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
translate([35/2,0,-8]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
}*/
translate([xMotor,0,zMotor]) rotate([-90,0,0]) cylinder(d=9.5, h=4);
translate([xMotor+fixMoteur1X,0,zMotor+fixMoteur1Y]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
translate([xMotor-fixMoteur2X,0,zMotor+fixMoteur2Y]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
//poulie libre
translate([xPulley,-1,zMotor]) rotate([-90,0,0]) cylinder(d=3, h=4, $fn=fnCylindre);
//fixation couteauIII
translate([xCouteauIII-20,-1,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
translate([xCouteauIII+10,-1,zCouteauBrasSecondaire+13]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
//fixation obturateur
//for (z=[4,12])
for (z=[9,17])
translate([longueur-xBrasSecondaire-xObturateur,-1,z]) rotate([-90,0,0]) cylinder(d=4, h=4, $fn=fnCylindre);
//echo(lBrasSecondaire);
//echo(longueur-xBrasSecondaire-xObturateur);
}
echo(str("306"));
}
module tube311() {
xTrouFixation = epaisseurTole+epaisseurCouteau+6;
color(color310)
render(0)
difference() {
tubeCarre(20, largeur, 2);
translate([xTrouFixation,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-xTrouFixation,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([y312,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([y312-40,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-y312,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-(y312-40),10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
}
echo(str("311"));
}
//tube313();
//translate([2+y312+10,2+20,20-2]) rotate([0,0,180]) laser206();
module tube312() {
color(color310)
render(0)
difference() {
tubeCarre(20, 251, 2);
//translate([-24,20,0]) rotate([90,0,0]) drill205(22);
translate([longueur/2-26-21,-1,10]) rotate([-90,0,0]) cylinder(d=diametreRivet,h=22, $fn=fnCylindre);
translate([longueur/2-26+21,-1,10]) rotate([-90,0,0]) cylinder(d=diametreRivet,h=22, $fn=fnCylindre);
translate([10,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([70,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
}
echo(str("312"));
}
module tube313() {
xTrouFixation = epaisseurTole+epaisseurCouteau+6;
color(color310)
render(0)
difference() {
tubeCarre(20, largeur, 2);
translate([xTrouFixation,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-xTrouFixation,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([y314,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([y314-40,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-y314,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([largeur-(y314-40),10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
}
echo(str("313"));
}
module tube314() {
color(color310)
render(0)
difference() {
tubeCarre(20, l314, 2);
//translate([-24,20,0]) rotate([90,0,0]) drill205(22);
translate([longueur/2-26-8,-1,6]) rotate([-90,0,0]) cylinder(d=diametreRivet,h=22, $fn=fnCylindre);
translate([longueur/2-26+8,-1,6]) rotate([-90,0,0]) cylinder(d=diametreRivet,h=22, $fn=fnCylindre);
translate([xAppuiLong-26-10,-1,11]) rotate([-90,0,0]) cylinder(d=drillM4,h=22, $fn=fnCylindre);
translate([xAppuiLong-26+10,-1,11]) rotate([-90,0,0]) cylinder(d=drillM4,h=22, $fn=fnCylindre);
translate([10,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
translate([70,10,-1]) cylinder(d=diametreRivet, h=22, $fn=fnCylindre);
}
echo(str("314"));
}
/*module contrePoids315() {
difference() {
translate([-51,-20,0]) cube([102,40,8]);
for (x=[-12,12],y=[-12,12]) {
translate([x,y,-1]) cylinder(d=4,h=10, $fn=10);
}
}
}*/
module arbre321() {
rotate([-90,0,0]) cylinder(d=5,h=48,$fn=fnCylindre);
}
//translate([0,0,10]) laser213();
//contrePoids315();
//profile303();
//projection() laser251();
module printed601() {
difference() {
union() {
translate([0,0,2]) cylinder(d=11.5,h=3,$fn=128);
cylinder(d=16,h=2,$fn=128);
}
translate([0,0,-1]) cylinder(d=6.2,h=7,$fn=128);
translate([-20,-1,-1]) cube([20,2,7]);
}
echo(str("601"));
}
//printed602();
//pulley();
module printed602() {
dInt = 13 + 0.5;
linear_extrude(height=1) {
difference() {
circle(d=27,$fn=fnCylindre);
translate([-1,-12]) square([2,4.5]);
circle(d=dInt,$fn=fnCylindre);
}
}
difference() {
//union() {
difference() {
translate([0,0,0]) cylinder(d=dInt+1,h=6-0.5,$fn=fnCylindre);
translate([0,0,-1]) cylinder(d=dInt,h=8,$fn=fnCylindre);
}
//translate([6.3,0,3-0.5]) rotate([0,90,0]) cylinder(d=3.4,h=0.5,$fn=12);
//translate([0,6.3,3-0.5]) rotate([-90,0,0]) cylinder(d=3.4,h=0.5,$fn=12);
//}
translate([0,0,3-0.5]) rotate([-90,0,0]) cylinder(d=3,h=10,$fn=12);
translate([0,0,3-0.5]) rotate([0,90,0]) cylinder(d=3,h=10,$fn=12);
}
echo(str("602"));
}
module protection701() {
difference() {
translate([0,-55,-10]) cube([longueur-4,110,10]);
translate([-1,-54.4,-11]) cube([longueur,110-2*0.6,10.6]);
for (x=[8,longueur-4-8],y=[-ySupportFromMediane,ySupportFromMediane])
translate([x,y,-1]) cylinder(d=drillM4,h=3);
}
}
//////Jhodi's stuffs////
// Fonction pour dessiner la projection avec translation
module projected_pieces() {
translate([0, 0, 0]) projection() laser101();
translate([0, 100, 0]) projection() laser102();
translate([0, 200, 0]) projection() laser103();
translate([0, 300, 0]) projection() laser104();
translate([0, 400, 0]) projection() laser105();
translate([0, 500, 0]) projection() laser106();
translate([0, 600, 0]) projection() laser107();
translate([0, 700, 0]) projection() laser108();
translate([100, 0, 0]) projection() laser201();
translate([100, 100, 0]) projection() laser202();
translate([100, 200, 0]) projection() laser203();
translate([100, 400, 0]) projection() laser205();
translate([100, 500, 0]) projection() laser206();
translate([100, 650, 0]) projection() laser207();
translate([100, 750, 0]) projection() laser208();
translate([250, 0, 0]) projection() laser209();
translate([250, 100, 0]) projection() laser211();
translate([250, 200, 0]) projection() laser212();
translate([250, 300, 0]) projection() laser213();
translate([250, 400, 0]) projection() laser215();
translate([250, 550, 0]) projection() laser216();
translate([250, 650, 0]) projection() laser252();
translate([250, 750, 0]) projection() laser281();
}
//projected_pieces();

389
drilling.scad Normal file
View file

@ -0,0 +1,389 @@
include <customParts.scad>
fnLocal = 60;
module trou(x,y,d=4) {
echo(str(x, " ",y));
translate([x,y,-30]) cylinder(d=d,$fn=fnLocal,h=80);
}
module percageOutil1000() {
trou(0,0);
//1001-1004, 1009-1010, 1015-1016
for (x=[-160,-100,-28,28,100,160]) {
trou(x,12);
}
//1001-1004
for (x=[-10,-30,10,30]) {
trou(x,-12);
}
//1001-1004
for (x=[-26,-48,26,48]) {
trou(x-((10-sqrt(2))*(x/abs(x))),sqrt(2));
}
//1005-1008, 1011-1014
for (x=[-152,-92,-20,20,92,152]) {
trou(x,10);
}
//1005-1008
for (x=[-38-2,-58-2,38+2,58+2]) {
trou(x,-5);
}
//1009-1010
for (x=[-10,10]) {
trou(x,-5);
}
//1011-1014
for (x=[xBrasSecondaire2-500-8,xBrasSecondaire2-500+8,500-xBrasSecondaire2-8,500-xBrasSecondaire2+8]) {
trou(x,-2);
}
//1015-1016
for (x=[-176.2,176.2]) {
trou(x-((10-sqrt(2))*(x/abs(x))), sqrt(2));
}
//1015-1016
for (x=[-160,160]) {
trou(x,-12);
}
//1017-1018
for (x=[-84,10]) {
trou(x,11);
}
//1017-1018
for (x=[xObturateur+6.5,xObturateur-15.5]) {
trou(x,4);
}
echo("fix 308-309");
trou(longueur-x308+8+2,0);
trou(x308-x309-20,0);
echo("/fix 308-309");
//reference
for (x=[-120,0,120],y=[20,80]) {
trou(x,y);
}
}
module outilCorniere1000() {
difference() {
translate([-180,-40,-20])cube([360,140,20]);
//translate([0,0,-25]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil1000();
}
//percageOutil100x();
/*difference() {
translate([-180,-7,3])cube([360,107,20]);
translate([0,0,0]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil100x();
}*/
}
module anim1000(n=18) {
color("red") outilCorniere1000();
if (n==1) translate([-26,-10]) profile301(); //1001
if (n==2) translate([-48,-10]) profile301(); //1002
if (n==3) translate([-500+48,-10]) profile301(); //1003
if (n==4) translate([-500+26,-10]) profile301(); //1004
if (n==5) translate([38,-12,2]) rotate([90,0,180]) profile301(); //1005
if (n==6) translate([58,-12,2]) rotate([90,0,180]) profile301(); //1006
if (n==7) translate([500-38,-12,2]) rotate([90,0,180]) profile301(); //1007
if (n==8) translate([500-58,-12,2]) rotate([90,0,180]) profile301(); //1008
if (n==9) translate([-8,-10,0]) profile303(); //1009
if (n==10) translate([-496+8,-10,0]) profile303(); //1010
if (n==11) translate([xBrasSecondaire2-2-8,-12,0]) rotate([90,0,180]) profile303(); //1011
if (n==12) translate([xBrasSecondaire2-2+8,-12,0]) rotate([90,0,180]) profile303(); //1012
if (n==13) translate([498-xBrasSecondaire2-8,-12,0]) rotate([90,0,180]) profile307(); //1013
if (n==14) translate([498-xBrasSecondaire2+8,-12,0]) rotate([90,0,180]) profile307(); //1014
if (n==15) translate([-176.2,-10]) profile302(); //1015
if (n==16) translate([-430+176.2,-10]) profile302(); //1016
if (n==17) translate([xObturateur+6.5-2,-11,0]) rotate([90,0,180]) profile303(); //1017
if (n==18) translate([xObturateur-15.5-2,-11,0]) rotate([90,0,180]) profile303(); //1018
if (n==19) translate([-x308+10+2,-10,0]) rotate([0,0,0]) profile303();
if (n==20) translate([-x309-10+2,-10,0]) rotate([0,0,0]) profile303();
}
//anim1000(round($t*18)+1);
//anim1000(20);
//projection() outilCorniere1000();
module percageOutil1030() {
trou(0,0);
//1010 > Y
for (x=[-100,-20]) {
trou(x,12);
}
//1010 > X
for (x=[12,72]) {
trou(x,5);
}
//1011 > X
for (x=[50,8]) {
trou(x,-5);
}
//1012 > Y
for (x=[-110,-30]) {
trou(x,13);
}
//1012 > X
for (x=[15,35]) {
trou(x,0);
}
//1013 > Y
for (x=[-60,60]) {
trou(x,8);
}
//1013 > X
for (x=[140,156]) {
trou(x,0);
}
//1015 > X
trou(70,12);
for (x=[14,y312-40+2,111,y312+2,151]) {
trou(x,-6);
}
//reference
for (x=[-120,0,120],y=[20,80]) {
trou(x,y);
}
}
module outilTube1030() {
difference() {
translate([-180,-40,-20])cube([360,140,20]);
//translate([0,0,-25]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil1030();
}
//percageOutil100x();
/*difference() {
translate([-180,-7,3])cube([360,107,20]);
translate([0,0,0]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil100x();
}*/
}
//anim1030(round($t*13)+1);
module anim1030(n=13) {
color("red") outilTube1030();
if (n == 1) translate([10,10,0]) rotate([0,0,180]) tube312();// 1031
if (n == 2) translate([70,10,0]) rotate([0,0,180]) tube312();// 1032
if (n == 3) translate([-203,10,0]) rotate([90,0,0]) tube312();// 1033
if (n == 4) translate([-245,10,0]) rotate([90,0,0]) tube312();// 1034
if (n == 5) translate([-357,11,0]) rotate([90,0,0]) tube314();// 1035
if (n == 6) translate([-337,11,0]) rotate([90,0,0]) tube314();// 1036
if (n == 7) translate([-232,6,0]) rotate([90,0,0]) tube314();// 1037
if (n == 8) translate([-216,6,0]) rotate([90,0,0]) tube314();// 1038
if (n == 9) translate([12,10]) rotate([0,0,180]) tube311();// 1039
if (n == 10) translate([y312,10]) rotate([0,0,180]) tube311();// 1040
if (n == 11) translate([y312-40,10]) rotate([0,0,180]) tube311();// 1041
if (n == 12) translate([109,10]) rotate([0,0,180]) tube313();// 1042
if (n == 13) translate([149,10]) rotate([0,0,180]) tube313();// 1043
}
module percageOutil1060() {
trou(0,0,4); // 4mm
trou(-20,0,3); // 3mm
trou(20,0,5); // 5mm
//1020 > Y
for (x=[-130,-20,20,130]) {
trou(x,18);
}
//1020 > X
for (x=[-9,9,-32,32]) { //5mm
trou(x+20,-4);
}
//fixation moteur
trou(-110,18.5);
trou(-10,18.5);
trou(-1,-7);
trou(-130,5.5);
trou(-30,5.5);
trou(-1-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-12);
trou(-1+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),-12);
//fixation couteau
for (x=[-120,-20,20,120]) {
trou(x,10);
}
for (x=[-120,0,120]) trou(x,15);
for (x=[xCouteauIII-18,xCouteauIII+12,-xCouteauIII-12,-xCouteauIII+18]) {
trou(x,0);
}
//moteur
trou(110,zMotor+2);
trou(10,zMotor+2);
trou(-xMotor-2,-10);
trou(30,zMotor+fixMoteur1Y+2);
trou(130,zMotor+fixMoteur1Y+2);
trou(-xMotor-fixMoteur1X-2,-10);
//15
/*trou(30,zMotor+fixMoteur2Y+2);
trou(130,zMotor+fixMoteur2Y+2);
trou(-xMotor+fixMoteur2X-2,10);*/
echo("début correctif");
trou(-50,zMotor+fixMoteur2Y+2-3);
trou(110,zMotor+fixMoteur2Y+2-3);
trou(-xMotor+fixMoteur2X-2-60,10-3);
trou(-60,-3);
echo("fin correctif");
trou(-45,9);
trou(-145,9);
trou(-30,14);
trou(-140,14);
trou(30,-10);
trou(-40,6);
trou(-140,6);
trou(-lBrasSecondaire+xPulley,-19);
//16-17
echo("fix 16-17");
trou(-37,11);
trou(-130,11);
trou(-37,19);
trou(-145,19);
echo("/fix 16-17")
//reference
for (x=[-120,0,120],y=[28,80]) {
trou(x,y);
}
}
module outilCorniere1060() {
color("red") difference() {
translate([-180,-40,-20])cube([360,140,20]);
//translate([0,0,-25]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil1060();
}
/*difference() {
translate([-180,-7,3])cube([360,107,20]);
translate([0,0,0]) cylinder(d=4,$fn=fnLocal,h=30);
percageOutil1060();
translate([-60,-3,10]) cylinder(d=8,h=20,$fn=32);
}*/
}
//anim1060(round($t*17)+1);
anim1060(15);
//outilCorniere1060();
//projection() outilCorniere1060();
module anim1060(n=1) {
//projection() {
color("red") outilCorniere1060();
//percageOutil102x();
echo(n);
//5mm
if (n==1) translate([7+20,-14,30]) rotate([180,0,180]) profile305();//1061
if (n==2) translate([403+20,-14,30]) rotate([180,0,180]) profile305();//1062
if (n==3) translate([30+20,-14,30]) rotate([180,0,180]) profile306();//1063
if (n==4) translate([426+20,-14,30]) rotate([180,0,180]) profile306();//1064
//3mm
if (n==5) translate([-436,16.5,0]) rotate([90,0,0]) profile305();//1065
if (n==6) translate([-436-sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5,0]) rotate([90,0,0]) profile305();//1066
if (n==7) translate([-436+sqrt(pow(9.5,2)-pow((zMotor-3.5),2)),3.5,0]) rotate([90,0,0]) profile305();//1067
if (n==8) translate([-xPulley-20,7,0]) rotate([90,0,0]) profile306();//1068 !!!butée X
//4mm
if (n==9) translate([-lBrasSecondaire+xCouteauIII+10,13,0]) rotate([90,0,0]) profile305();//1069
if (n==10) translate([-lBrasSecondaire+xCouteauIII-20,13,0]) rotate([90,0,0]) profile305();//1070
if (n==11) translate([-xCouteauIII-10,13,0]) rotate([90,0,0]) profile306();//1071
if (n==12) translate([-xCouteauIII+20,13,0]) rotate([90,0,0]) profile306();//1072
if (n==13) translate([-xMotor,zMotor,0]) rotate([90,0,0]) profile306();//1073
if (n==14) translate([-xMotor-fixMoteur1X,zMotor+fixMoteur1Y,0]) rotate([90,0,0]) profile306();//1074
//if (n==15) translate([-xMotor+fixMoteur2X,zMotor+fixMoteur2Y,0]) rotate([90,0,0]) profile306();//1075 !!! trop porofond
if (n==15) translate([-xMotor+fixMoteur2X-60,zMotor+fixMoteur2Y - 3,0]) rotate([90,0,0]) profile306();//1075
if (n==16) translate([-lBrasSecondaire+28,9,0]) rotate([90,0,0]) profile306();//1076
if (n==17) translate([-lBrasSecondaire+28,17,0]) rotate([90,0,0]) profile306();//1077
}

15
encodeur1tour.scad Normal file
View file

@ -0,0 +1,15 @@
difference() {
linear_extrude(height=1) {
difference() {
circle(d=30,$fn=100);
intersection() {
circle(d=5.2,$fn=100);
translate([-3,-1.6]) square([6,3.2]);
}
translate([-1,8]) square([2,5]);
}
}
//translate([0,0,0.2]) cylinder(d=13,h=2,$fn=100);
}

81
functions.scad Normal file
View file

@ -0,0 +1,81 @@
include <parameters.scad>;
/////////////////////////////////////////////////
///// Fonctions /////
/////////////////////////////////////////////////
module tubeCarre(cote, longueur, epaisseur) { //placé le long de X
//color("LightGreen",1.0)
difference() {
cube([longueur,cote,cote]);
translate([-1,epaisseur,epaisseur]) cube([longueur+2,cote - (2 * epaisseur),cote - (2 * epaisseur)]);
}
}
module tube(dExt, dInt, longueur) {
rotate([0,90,0])
difference() {
cylinder(d=dExt, h=longueur, $fn=fnCylindre);
translate([0,0,-1]) cylinder(d=dInt, h=longueur+2, $fn=fnCylindre);
}
}
module toleTriangulaire (base,hauteur,epaisseur) { //placé le long de X, base en bas, dans le plan XY
polyhedron(points = [
[-base/2,0,0], //0
[base/2,0,0],//1
[0,hauteur,0],//2
[-base/2,0,epaisseur], //3
[base/2,0,epaisseur],//4
[0,hauteur,epaisseur],//5
],
faces=[
[1,0,3,4],
[0,2,5,3],
[4,5,2,1],
[0,1,2],
[5,4,3]
]);
}
module profileU(hauteur,largeur,longueur,epaisseur) { //placé le long de X
rArrondi = 1.0;
color("LightGreen",1.0)
difference() {
cube([longueur,largeur,hauteur]);
translate([-1,epaisseur,epaisseur]) cube([longueur+2,largeur - (2 * epaisseur),hauteur - epaisseur + 1]);
}
}
module corniere(cote, longueur, epaisseur) {
difference() {
cube([longueur,cote,cote]);
translate([-1,epaisseur,epaisseur]) cube([longueur+2,cote,cote]);
}
}
module corniere45(cote, longueur, epaisseur) {
difference() {
corniere(cote, longueur, epaisseur);
rotate([0,0,-45]) translate([-cote*1.5,-1,-1]) cube([cote*1.5,cote*1.5,cote+2]);
translate([longueur,0,0]) rotate([0,0,45]) translate([0,-1,-1])cube([cote*1.5,cote*1.5,cote+2]);
}
}
module cornierePercee(longueur) {
difference() {
corniere45(20,longueur,2);
for (x=[26,48,longueur-26,longueur-48])
translate([x,10,0]) cylinder(eCorniereCadre+2,d=diametreRivet, $fn=fnCylindre);
}
}
module cornierePerceeNonFraisee(longueur) {
difference() {
corniere45(20,longueur,2);
for (x=[26,48,longueur-26,longueur-48])
translate([x,10,-1]) cylinder(d=diametreRivet, h=4, $fn=fnCylindre);
}
}

123
parameters.scad Normal file
View file

@ -0,0 +1,123 @@
niveauDetail = 5;
fnCylindre = 32;
//pourImpression3D = false;
pourImpression3D = 0;
epaisseurTole = 2;
epaisseurCouteau = 4;
diametreRivet = pourImpression3D ? 4.2 : 4.1;
drillM3 = 3.2;
drillM4 = 4.2;
drillM5 = 5.2;
drillM8 = 8.2;
diametrePetitsBoulons = pourImpression3D ? 3.4 : 3;
jeuPourImpression = pourImpression3D ? 0.2 : 0;
laserSlack = 0.1;
longueur = 500;
largeur = 430;
offsetCouteau = 20;
//hauteurCadre = 20;
lCorniereCadre = 20;
eCorniereCadre = 2;
lIntCornierCadre = lCorniereCadre - eCorniereCadre;
zPlateau = 90; //72;
zCouteau = zPlateau / 2; //hauteurCouteau + lCorniereCadre;
hauteurCouteau = zCouteau - lCorniereCadre; //(zPlateau - 2 * lCorniereCadre) / 2;
xCouteauInferieur = 38;
xCouteauSuperieur = xCouteauInferieur + offsetCouteau ;
entretoiseCouteau = 5;
taillePetitEcrou = 5.5;
largeurBras = 60;
xBrasSecondaire = 35;
//zBrasSecondaire = 50; //34;
zBrasSecondaire = 45;
z = zPlateau / 2;
l312 = 251;
l314 = 370;
spacer104N = 5;
spacer104Thick = 0.8;
spacer104 = spacer104N * spacer104Thick; //4;
y314 = largeur/2-largeurBras/2-1-epaisseurCouteau-21-10;
y312 = y314 - epaisseurCouteau - 20 - (2 * spacer104);
color100 = "pink";
color200 = "lightblue";
color300 = "orange";
color310 = "lightgreen";
lBrasSecondaire = 433; //23
xPulley = lBrasSecondaire - 9;
xMotor = xPulley - 407; //(852 - 32mm (16dents)) / 2 - 3mm de marge car dans la vrai vie avec le tendeur....
xObturateur = 60;
zMotor = 7;
rotationMoteur=150;
a1 = atan(8/17.5);
a2 = a1-30;
a3 = a1+30;
fixMoteurR = sqrt(pow(8,2)+pow(17.5,2));
fixMoteur1X=cos(a2)*fixMoteurR;
fixMoteur1Y=sin(a2)*fixMoteurR;
fixMoteur2X=cos(a3)*fixMoteurR;;
fixMoteur2Y=sin(a3)*fixMoteurR;;
xAxegravite = 321.1641094468;
zAxegravite = 10.7211946502;
xCouteauIII = 112;
//Support du bras secondaire
//Support du bras secondaire
xBrasSecondaire2 = longueur - xBrasSecondaire - xCouteauIII;
//xBrasSecondaire2 = 353;
xAppuiLong = longueur - xBrasSecondaire - xCouteauIII + 20;
zCouteauBrasSecondaire = zCouteau - zBrasSecondaire;
l303304 = longueur - 2*eCorniereCadre;
l308309 = (largeur-2*eCorniereCadre-(largeurBras+2*0.8))/2 - 0.2;
x308 = longueur - 105;
x309 = x308 - 100 - 2*eCorniereCadre;
spacer108 = 0.8;
y303 = largeur/2 - largeurBras/2 - 0.8;
y304 = largeur/2 + largeurBras/2 + 0.8;
//y1 = largeur/2 - largeurBras/2 - 0.8;
//y2 = largeur/2 + largeurBras/2 + 0.8;
//xContrePoids = longueurCornieres-17-55;
yMediane = largeur/2;
ySupportFromMediane = (largeurBras / 2) - eCorniereCadre + 0.8 + 10;

BIN
profiles2D/301302.pdf Normal file

Binary file not shown.

BIN
profiles2D/303304.pdf Normal file

Binary file not shown.

BIN
profiles2D/305306.pdf Normal file

Binary file not shown.

BIN
profiles2D/308309.pdf Normal file

Binary file not shown.

BIN
profiles2D/311312.pdf Normal file

Binary file not shown.

BIN
profiles2D/313314.pdf Normal file

Binary file not shown.

367
standardParts.scad Normal file
View file

@ -0,0 +1,367 @@
include <parameters.scad>;
/////////////////////////////////////////////////
///// Pièces du commerce /////
/////////////////////////////////////////////////
module mountingLug() {
difference()
{
hull()
{
cylinder(r=7/2, h=0.5, $fn=40);
translate([0,-7/2,0]) cube([7,7,0.5]);
}
translate([0,0,-1]) cylinder(r=4.2/2, h=2, $fn=40);
}
echo(str("mountingLug;"));
}
module stepper28BYJ() {
difference()
{
union()
{
//Body
color("SILVER") cylinder(r=28/2, h=19, $fn=60);
//Base of motor shaft
color("SILVER") translate([0,8,19]) cylinder(r=9/2, h=1.5, $fn=40);
//Motor shaft
color("GOLD") translate([0,8,20.5])
intersection()
{
cylinder(r=5/2, h=9, $fn=40);
cube([3,6,9],center=true);
}
//Left mounting lug
color("SILVER") translate([-35/2,0,18.5]) mountingLug();
//Right mounting lug
color("SILVER") translate([35/2,0,18.5]) rotate([0,0,180]) mountingLug();
difference()
{
//Cable entry housing
color("BLUE") translate([-14.6/2,-17,1.9]) cube([14.6,17,17]);
cylinder(r=27/2, h=29, $fn=60);
}
}
union()
{
//Flat on motor shaft
//translate([-5,0,22]) cube([10,7,25]);
}
}
echo(str("stepper28BYJ;"));
}//end of stepper28BYJ module wrapper
module pulley() {
difference() {
union() {
cylinder(d=13, h=6, $fn=60);
cylinder(d=10, h=14, $fn=60);
translate([0,0,13]) cylinder(d=13, h=1, $fn=60);
}
translate([0,0,-1]) cylinder(d=5, h=16, $fn=60);
translate([0,0,3]) rotate([90,0,0]) cylinder(d=3,h=7,$fn=12);
translate([0,0,3]) rotate([0,90,0]) cylinder(d=3,h=7,$fn=12);
}
echo(str("pulley;"));
}
module f623zz() {
difference() {
union() {
cylinder(d=11.5, h=1, $fn=60);
cylinder(d=10, h=4, $fn=60);
}
translate([0,0,-1]) cylinder(d=3, h=6, $fn=60);
}
echo(str("f623zz;"));
}
module 625zz() {
difference() {
cylinder(d=16, h=5, $fn=60);
translate([0,0,-1]) cylinder(d=5, h=7, $fn=60);
}
echo(str("625zz;"));
}
module SK10() {
difference() {
union() {
cube([42,14,6]);
translate([12,0,0]) cube([18,14,32.8]);
}
translate([21,15,20]) rotate([90,0,0]) cylinder(d=10, h=16, $fn=30);
translate([5,7,-1]) cylinder(d=5.5, h=8, $fn=30);
translate([37,7,-1]) cylinder(d=5.5, h=8, $fn=30);
translate([20.5,-1,24]) cube([1,16,10]);
translate([11,7,29]) rotate([0,90,0]) cylinder(d=3, h=10, $fn=30);
translate([21,7,29]) rotate([0,90,0]) cylinder(d=4, h=10, $fn=30);
}
echo(str("SK10;"));
}
module belt() {
difference() {
union() {
translate([6,0,-6]) cube([410,6,12]);
translate([6,6,0]) rotate([90,0,0]) cylinder(d=12, h=6, $fn=20);
translate([416,6,0]) rotate([90,0,0]) cylinder(d=12, h=6, $fn=20);
}
translate([6,-1,-5]) cube([410,8,10]);
translate([6,7,0]) rotate([90,0,0]) cylinder(d=10, h=8, $fn=20);
translate([416,7,0]) rotate([90,0,0]) cylinder(d=10, h=8, $fn=20);
}
echo(str("belt;"));
}
module LM10UU() {
translate([0,0,-14.5])
difference() {
union() {
translate([0,0,1]) color("black") cylinder(d=18, h=27, $fn=40);
cylinder(d=19, h=5.5, $fn=40);
translate([0,0,23.5]) cylinder(d=19, h=5.5, $fn=40);
translate([0,0,6.8]) cylinder(d=19, h=15.4, $fn=40);
}
translate([0,0,-1]) cylinder(d=10, h=57, $fn=40);
}
echo(str("LM10UU;"));
}
module TCST2103() {
difference() {
union() {
cube([24.5,6,3.1]);
translate([6.3,0,0]) cube([11.9,6,10.8]);
}
translate([2.75,3,-1]) cylinder(d=3.3, h=5, $fn=10);
translate([21.75,3,-1]) cylinder(d=3.3, h=5, $fn=10);
translate([10.7,-1,3.1]) cube([3.1,8,9]);
translate([0,3,8.8]) rotate([0,90,0]) cylinder(d=1, h=30, $fn=10);
}
echo(str("TCST2103;"));
}
module endstop() {
translate([-13.25,-5.5,0])
difference() {
union() {
cube([33,11,1.5]);
translate([1,2.5,1.5]) TCST2103();
translate([27,0,-7]) cube([6,10,7]);
}
translate([3.75,5.5,-1]) cylinder(d=3.3, h=3, $fn=10);
translate([22.75,5.5,-1]) cylinder(d=3.3, h=3, $fn=10);
}
echo(str("endstop;"));
}
/*module boulonM4(l) {
cylinder(h=l+1,d=4,$fn=30);
translate([0,0,l])
intersection() {
translate([0,0,-0.8]) sphere(r=4,$fn=20);
cylinder(h=2.1,d=8.8,$fn=20);
}
}
module boulonM5(l) {
cylinder(h=l+1,d=5,$fn=30);
translate([0,0,l])
intersection() {
translate([0,0,-0.8]) sphere(r=4,$fn=20);
cylinder(h=2.1,d=8.8,$fn=20);
}
}
module boulonM3(l) {
cylinder(h=l+1,d=3,$fn=30);
translate([0,0,l])
intersection() {
translate([0,0,-0.8]) sphere(r=3.5,$fn=20);
cylinder(h=2.1,d=6.8,$fn=20);
}
}*/
module nut(m) { //Hu 0.8d DIN934 ~ISO4032
//https://www.cergy-vis.fr/media/emails/images-produit/fixnvis/fr/ECRHUA8ZN.png
height = [0,0,0,2.4,3.2,4];
s = [0,0,0,5.5,7,8];
e = [0,0,0,6.01,7.66,8.79];
difference() {
translate([0,0,-1*height[m]]) cylinder(h=height[m],d=s[m]/cos(30),$fn=6);
translate([0,0,-5]) cylinder(h=6,d=m,$fn=fnCylindre);
}
echo(str("ECROU;",m));
}
module screw(m,h) { //ISO7680
//https://www.visseriefixations.fr/media/emails/images-produit/fixnvis/fr/TBHCNO.png
d2 = [0,0,0,5.7,7.6,9.5];
k = [0,0,0,1.65,2.2,2.75];
t = [0,0,0,1.04,1.3,1.56];
s = [0,0,0,2,2.5,3];
translate([0,0,-h]) cylinder(h=h+0.1,d=m,$fn=fnCylindre);
difference() {
cylinder(h=k[m],d1=d2[m],d2=d2[m]*0.8,$fn=fnCylindre);
translate([0,0,k[m] - t[m]]) cylinder(h=5,d=s[m]/cos(30),$fn=6);
}
echo(str("screw;", m, h));
}
//screwNut(4,10,30,true);
module screwNut(m,h,h2,displayAxis=false) {
render() screw(m,h);
render() translate([0,0,-h2]) nut(m);
if (displayAxis) rotate([180,0,0]) cylinder(d=0.4, h = h2 + (m * 0.8));
echo(str("VIS;",m, "x", h));
}
/*module boulonDIN(m,h) {
tete = [0,0,3.8,5.5,7,8.5,10,0,13,0,16,0,18];
hex = [0,0,1.5,2.5,3,4,5,0,6,0,8,0,10];
cylinder(h=h+1,d=m,$fn=30);
difference() {
translate([0,0,h]) cylinder(h=m,d=tete[m],$fn=20);
intersection_for(i=[0:60:120])
rotate([0,0,i]) translate([-hex[m],-hex[m]/2,h+m/2]) cube([hex[m]*2,hex[m],m/2+1]);
}
//translate([0,0,2]) ecrou(m,tete[m],m*0.8);
}
module rivet4Assembly(l) {
render(0) {
translate([0,0,-l]) cylinder(d=4,h=l,$fn=10);
intersection() {
translate([0,0,-1]) sphere(r=4,$fn=20);
cylinder(h=1,d=8,$fn=20);
}
cylinder(d=2,h=40,$fn=10);
translate([0,0,-l-0.5]) sphere(d=3.5,$fn=10);
}
}
module rivet4tfAssembly(l) {
ht = tan(30) * 1.75;
render(0) {
translate([0,0,-l]) cylinder(d=4,h=l,$fn=10);
translate([0,0,-ht]) cylinder(h=ht,d2=7.5,d1=4,$fn=20);
cylinder(d=2,h=40,$fn=10);
translate([0,0,-l-0.5]) sphere(d=3.5,$fn=10);
}
}
*/
/*module rivet4(l) {
render(0) difference() {
union() {
translate([0,0,-l]) cylinder(d=4,h=l,$fn=10);
intersection() {
translate([0,0,-1]) sphere(r=4,$fn=20);
cylinder(h=1,d=8,$fn=20);
}
intersection() {
translate([0,0,-l]) sphere(d=5.5,$fn=10);
translate([-4,-4,-l-4]) cube([8,8,4]);
}
}
translate([0,0,-2]) cylinder(d=2,h=3,$fn=10);
}
}
translate([-10,0,0]) rivet4(8);
translate([10,0,0]) screwNut(4,12,8);
*/
module rondelle(dInt,dExt,epaisseur=0.8) {
render() linear_extrude(height=epaisseur) difference() {
circle(d=dExt,$fn=fnCylindre);
circle(d=dInt,$fn=fnCylindre);
}
echo(str("RONDELLE;",dInt, "x", dExt,"x",epaisseur));
}
// tensionner();
module tensionner(a = 50) {
a2 = a + atan(1.5/7.5);
r2 = sqrt(pow(1.5,2)+pow(7.5,2));
z = cos(a2) * r2 + 0.5;
translate([0,-0.5,z])
{
translate([0,8,0]) rotate([90,0,0]) difference() {
cylinder(d=4,h=9,$fn=20);
translate([0,0,-1]) cylinder(d=2,h=11,$fn=20);
}
rotate([0,-a,0])
{
translate([1.5,-0.5,-7.5]) cylinder(d=1,h=7.5,$fn=12);
translate([1.5,-0.5,-7.5]) rotate([-90,0,0]) cylinder(d=1,h=8,$fn=12);
translate([1.5,7.5,-7.5]) cylinder(d=1,h=3.5,$fn=12);
translate([1.5,-0.5,-7.5]) sphere(d=1,$fn=10);
translate([1.5,7.5,-7.5]) sphere(d=1,$fn=10);
}
rotate([0,a,0]) {
translate([-1.5,7.5,-7.5]) cylinder(d=1,h=7.5,$fn=12);
translate([-1.5,-0.5,-7.5]) rotate([-90,0,0]) cylinder(d=1,h=8,$fn=12);
translate([-1.5,-0.5,-7.5]) cylinder(d=1,h=4,$fn=12);
translate([-1.5,-0.5,-7.5]) sphere(d=1,$fn=10);
translate([-1.5,7.5,-7.5]) sphere(d=1,$fn=10);
}
}
echo(str("tensionner;"));
}

17
supportEndstop.scad Normal file
View file

@ -0,0 +1,17 @@
linear_extrude(height=2) {
rotate(-30) union() {
difference() {
union() {
circle(d=36,$fn=100);
translate([-11,-17.5-2]) square([22,10]);
}
circle(d=28.5,$fn=100);
translate([-8.75,-17.5]) square([17.5,10]);
}
}
translate([sin(30)*8-5,15]) square([10,9-4.2]);
translate([sin(30)*8-1.3,24-4.2]) square([2.6,5]);
echo(str("216-spportendstop"));
}

209
timing_belts.scad Normal file
View file

@ -0,0 +1,209 @@
//https://www.thingiverse.com/thing:194554/#files
/*Parametric belting section generator
* types GT2 2mm T2.5 T5 T10 MXL
*
* (c) ALJ_rprp
*
* Derived from http://www.thingiverse.com/
* thing:19758 By The DoomMeister
* thing:16627 by Droftarts
*
* licence GPL 2.1 or later
*
* deal properly with ends
* allow circular segments
* length is given in mm not nb of teeth
* belt is centered at z=0 and extend along x
*
* TODO : add ofset for cosmetic teeth liaisons between segments
*
* usage :
* belt_angle(prf = tT2_5, rad=25, bwdth = 6, angle=90,fn=128)
* belt_len (prf = tT2_5, belt_width = 6, len = 10)
*/
// profiles
tGT2_2=0;
tT2_5 =1;
tT5 =2;
tT10 =3;
tMXL =4;
//test_belt();
/*r = 32/3.14159/2;
translate([418,-r,0]) belt_angle(tGT2_2,r,6,180);
translate([418,r,0]) rotate([0,0,180]) belt_len(tGT2_2,6,418);
translate([0,r,0]) rotate([0,0,180]) belt_angle(tGT2_2,r,6,180);
translate([0,-r,0]) rotate([0,0,0]) belt_len(tGT2_2,6,418);*/
module test_belt() {
translate([-00.5,0,5.5])cube([1,40,1]);
belt_len(profile = tT10, belt_width = 10, len = 100);
translate([0,0,-20])color("red")belt_len(profile = tT5, belt_width = 10, len = 100);
translate([0,0,-40])color("green")belt_len(profile = tT2_5, belt_width = 10, len = 80);
translate([0,0,-60])color("blue")belt_len(profile = tGT2_2, belt_width = 10, len = 100);
translate([0,0,-80])color("orange")belt_len(profile = tMXL, belt_width = 10, len = 100);
translate([0,0,-0]) belt_angle(tT10,20,10,180);
translate([0,0,-20]) belt_angle(tT5,15,10,90);
translate([0,0,-40]) belt_angle(tT2_5,25,10,120);
translate([0,0,-60]) belt_angle(tGT2_2,30,10,40);
translate([0,0,-80]) belt_angle(tMXL,30,10,40);
translate([0,0,-100])color("aquamarine") {
belt_len(tT2_5,10, 50);
translate([50,30,0]) rotate([0,0,180]) belt_len(tT2_5,10,50);
translate([ 0,30,0]) rotate([0,0,180]) belt_angle(tT2_5,15,10,180);
translate([50,0,0]) rotate([0,0,0]) belt_angle(tT2_5,15,10,180);
}
}
/* there is no partial rotate extrude in scad, hence the workaround
* note that the pie slice will silently drop angles > 360 */
module p_slice(radius, angle,height,back_t=0.6) {
pt_slc = [[0,radius],
[0 ,-back_t],
[radius,-back_t],
[radius+back_t,radius],
[radius+back_t,radius*2],
[0,radius*2+back_t],
[-radius-back_t,radius*2+back_t],
[-radius-back_t,radius],
[-radius-back_t,-back_t],
[(radius+back_t)*sin(angle),(radius+back_t)*(1-cos(angle))-back_t]];
if (angle<=90) {
linear_extrude(height+0.2, center=true)
polygon( points = pt_slc,
paths=[[0,1,2,9]]);
}else if (angle<=180){
linear_extrude(height+0.2, center=true)
polygon( points = pt_slc,
paths=[[0,1,2,3,4,9]]);
}else if (angle<=270){
linear_extrude(height+0.2, center=true)
polygon( points = pt_slc,
paths=[[0,1,2,3,4,5,6,9]]);
}else if (angle<360) {
linear_extrude(height+0.2, center=true)
polygon( points = pt_slc,
paths=[[0,1,2,3,4,5,6,7,8,9]]);
}
}
dp=5;
module belt_angle(prf = tT2_5, rad=25, bwdth = 6, angle=90,fn=128) {
av=360/2/rad/3.14159*tpitch[prf];
bk=bk_thick[prf];
nn=ceil(angle/av);
ang=av*nn;
intersection(){
p_slice(rad,angle,bwdth,bk_thick[prf]);
union () {
for( i = [0:nn]){
render() translate ([0,rad,-bwdth/2])rotate ([0,0,av*i])translate ([0,-rad,0])
draw_tooth(prf,0,bwdth);
}
translate ([0,rad,-bwdth/2]) rotate_extrude(angle = 90, $fn=fn)
polygon([[rad,0],[rad+bk,0],[rad+bk,bwdth],[rad,bwdth]]);
}
}
}
//Outer Module
module belt_len(profile = tT2_5, belt_width = 6, len = 10){
if ( profile == tT2_5 ) { _belt_len(prf=profile,len = len,bwdth = belt_width);}
if ( profile == tT5 ) { _belt_len(prf=profile,len = len,bwdth = belt_width);}
if ( profile == tT10 ) { _belt_len(prf=profile,len = len,bwdth = belt_width);}
if ( profile == tMXL ) { _belt_len(prf=profile,len = len,bwdth = belt_width);}
if ( profile == tGT2_2 ){ _belt_len(prf=profile,len = len,bwdth = belt_width);}
}
//inner module
module _belt_len(prf = -1, len = 10, bwdth = 5) {
n=ceil(len/tpitch[prf]);
translate ([0,0,-bwdth/2]) intersection() {
union(){
for( i = [0:n]) {
render() draw_tooth(prf,i,bwdth);
}
translate([-1,-bk_thick[prf],0])cube([len+1,bk_thick[prf],bwdth]);
}
translate([0,-bk_thick[prf],0])cube([len,max_h[prf]+bk_thick[prf],bwdth]);
}
}
module draw_tooth(prf,i,bwdth) {
if ( prf == tT2_5 ) { translate([tpitch[prf]*i,0,0])
linear_extrude(height=bwdth) polygon(pf_T2_5);}
if ( prf == tT5 ) { translate([tpitch[prf]*i,0,0])
linear_extrude(height=bwdth) polygon(pf_T5);}
if ( prf == tT10 ) { translate([tpitch[prf]*i,0,0])
linear_extrude(height=bwdth) polygon(pf_T10);}
if ( prf == tMXL ) { translate([tpitch[prf]*i,0,0])
linear_extrude(height=bwdth) polygon(pf_MXL);}
if ( prf == tGT2_2 ) { translate([tpitch[prf]*i,0,0])
linear_extrude(height=bwdth) polygon(pf_GT2_2);}
}
/************************************
* DATA TABLES *
************************************/
tpitch = [2,2.5,5,10,2.032];
bk_thick=[0.6,0.6,1,2,0.64];
max_h=[0.76447, 0.699911, 1.189895, 2.499784, 0.508035];
pf_GT2_2= [[ 0.747183,-0.5 ],[ 0.747183, 0 ],[ 0.647876, 0.037218],
[ 0.598311, 0.130528],[ 0.578556, 0.238423],[ 0.547158, 0.343077],
[ 0.504649, 0.443762],[ 0.451556, 0.53975 ],[ 0.358229, 0.636924],
[ 0.2484 , 0.707276],[ 0.127259, 0.750044],[ 0 , 0.76447 ],
[-0.127259, 0.750044],[-0.2484 , 0.707276],[-0.358229, 0.636924],
[-0.451556, 0.53975 ],[-0.504797, 0.443762],[-0.547291, 0.343077],
[-0.578605, 0.238423],[-0.598311, 0.130528],[-0.648009, 0.037218],
[-0.747183, 0 ],[-0.747183,-0.5]];
pf_T2_5= [[-0.839258,-0.5 ],[-0.839258, 0 ],[-0.770246, 0.021652],
[-0.726369, 0.079022],[-0.529167, 0.620889],[-0.485025, 0.67826 ],
[-0.416278, 0.699911],[ 0.416278, 0.699911],[ 0.484849, 0.67826 ],
[ 0.528814, 0.620889],[ 0.726369, 0.079022],[ 0.770114, 0.021652],
[ 0.839258, 0 ],[ 0.839258,-0.5]];
pf_T5= [[-1.632126,-0.5 ],[-1.632126, 0 ],[-1.568549, 0.004939],
[-1.507539, 0.019367],[-1.450023, 0.042686],[-1.396912, 0.074224],
[-1.349125, 0.113379],[-1.307581, 0.159508],[-1.273186, 0.211991],
[-1.246868, 0.270192],[-1.009802, 0.920362],[-0.983414, 0.978433],
[-0.949018, 1.030788],[-0.907524, 1.076798],[-0.859829, 1.115847],
[-0.80682 , 1.147314],[-0.749402, 1.170562],[-0.688471, 1.184956],
[-0.624921, 1.189895],[ 0.624971, 1.189895],[ 0.688622, 1.184956],
[ 0.749607, 1.170562],[ 0.807043, 1.147314],[ 0.860055, 1.115847],
[ 0.907754, 1.076798],[ 0.949269, 1.030788],[ 0.9837 , 0.978433],
[ 1.010193, 0.920362],[ 1.246907, 0.270192],[ 1.273295, 0.211991],
[ 1.307726, 0.159508],[ 1.349276, 0.113379],[ 1.397039, 0.074224],
[ 1.450111, 0.042686],[ 1.507589, 0.019367],[ 1.568563, 0.004939],
[ 1.632126, 0 ],[ 1.632126,-0.5]];
pf_T10= [[-3.06511 ,-1 ],[-3.06511 , 0 ],[-2.971998, 0.007239],
[-2.882718, 0.028344],[-2.79859 , 0.062396],[-2.720931, 0.108479],
[-2.651061, 0.165675],[-2.590298, 0.233065],[-2.539962, 0.309732],
[-2.501371, 0.394759],[-1.879071, 2.105025],[-1.840363, 2.190052],
[-1.789939, 2.266719],[-1.729114, 2.334109],[-1.659202, 2.391304],
[-1.581518, 2.437387],[-1.497376, 2.47144 ],[-1.408092, 2.492545],
[-1.314979, 2.499784],[ 1.314979, 2.499784],[ 1.408091, 2.492545],
[ 1.497371, 2.47144 ],[ 1.581499, 2.437387],[ 1.659158, 2.391304],
[ 1.729028, 2.334109],[ 1.789791, 2.266719],[ 1.840127, 2.190052],
[ 1.878718, 2.105025],[ 2.501018, 0.394759],[ 2.539726, 0.309732],
[ 2.59015 , 0.233065],[ 2.650975, 0.165675],[ 2.720887, 0.108479],
[ 2.798571, 0.062396],[ 2.882713, 0.028344],[ 2.971997, 0.007239],
[ 3.06511 , 0 ],[ 3.06511 ,-1]];
pf_MXL= [[-0.660421,-0.5 ],[-0.660421, 0 ],[-0.621898, 0.006033],
[-0.587714, 0.023037],[-0.560056, 0.049424],[-0.541182, 0.083609],
[-0.417357, 0.424392],[-0.398413, 0.458752],[-0.370649, 0.48514 ],
[-0.336324, 0.502074],[-0.297744, 0.508035],[ 0.297744, 0.508035],
[ 0.336268, 0.502074],[ 0.370452, 0.48514 ],[ 0.39811 , 0.458752],
[ 0.416983, 0.424392],[ 0.540808, 0.083609],[ 0.559752, 0.049424],
[ 0.587516, 0.023037],[ 0.621841, 0.006033],[ 0.660421, 0 ],
[ 0.660421,-0.5]];

2
tmp.scad Normal file
View file

@ -0,0 +1,2 @@
include <views.scad>
assemblyStep16();

1225
views.scad Normal file

File diff suppressed because it is too large Load diff