/////////////////////////////////////////////////////////////////////////// //modèle support caméra pour AKKA //B. Vandeportaele 2017 /////////////////////////////////////////////////////////////////////////// epaisseurbarre=10.2; largeurbarre=20.2; longueurbarre=310; epaisseurcamera=29; profondeurcamera=30; /////////////////////////////////////////////////////////////////////////// module barre(longueur,amincicementtrou) { //amincicementtrou=1; //diamètre diminué du trou sur la barre de fixation, mettre à 0 pour avoir le modèle de barre, et à u difference(){ scale([longueur+10,largeurbarre+0.2,epaisseurbarre]) //10 ajoutés en x pour avoir la barre qui creuse le support inférieur des 2 cotés //0.2 ajouté en y pour jeu cube([1,1,1],true); for (j=[-1,1]){ // translate([j*((longueur/2)-20),0,0]) translate([j*((longueur/2)-20),0,0]) #cylinder(h = 20, r = (6.25-amincicementtrou)/2, center = true,$fn=30); } //rotate(-90,[0,1,0]) } } /////////////////////////////////////////////////////////////////////////// module camera() { longueurobjectif=48.7; diametreobjectif=27.7; union() { translate([0,30/2 + longueurobjectif/2,0]) rotate ([90,0,0]) cylinder (h = longueurobjectif, r=0.2+diametreobjectif/2, center = true, $fn=120); //0.2 ajouté au rayon pour jeu cube([29+0.2,30+0.2,epaisseurcamera+0.2],true); //0.2 ajouté à chaque coté pour jeu //parallélépipède sous l'objectif pour creuser la pièce supports translate([0,30/2 + 20/2,-diametreobjectif/4]) cube([diametreobjectif+0.2*2,20,diametreobjectif/2+2+0.2*2],true); } } /////////////////////////////////////////////////////////////////////////// module trousfixation() { for (i=[-1,1]){ for (j=[-1,1]){ translate([i*((epaisseurcamera/2)+epaisseurboitier/2),j*((epaisseurcamera/2)+epaisseurboitier/2),0]) cylinder (h = 80, r=3.6/2, center = true, $fn=60); //prévoir 0.5mm de jeu pour le diamètre du trou } } } /////////////////////////////////////////////////////////////////////////// module banc(longueur,amincicementtrou) { baseline=longueur-40; barre(longueur,amincicementtrou); translate([0,0,epaisseurbarre/2 + epaisseurcamera/2 ]) for (j=[-1,1]){ translate([j*((baseline/2)),0,0]) camera(); } } epaisseurboitier=7; /////////////////////////////////////////////////////////////////////////// module supportsuperieur() { difference(){ cube([epaisseurcamera+2*epaisseurboitier,profondeurcamera+2*epaisseurboitier,epaisseurcamera+epaisseurboitier],true); translate([((longueurbarre/2)-20),0,-(epaisseurbarre/2+epaisseurcamera/2+epaisseurboitier/2)]) #banc(longueurbarre,1); //trous pour connecteur à l'arrière translate([0,-20,-4]) #cube([epaisseurcamera-2,2*epaisseurboitier,epaisseurcamera-1],true); //trous sur les cotés pour ventilation translate([0,0,-4]) #cube([epaisseurcamera++epaisseurboitier*2+1,epaisseurcamera-1,epaisseurcamera-1],true); #trousfixation(); //empreintes hexagonales pour écrous m3 for (i=[-1,1]){ for (j=[-1,1]){ translate([i*((epaisseurcamera/2)+epaisseurboitier/2),j*((epaisseurcamera/2)+epaisseurboitier/2),17]) rotate ([0,0,-15]) #cylinder (h = 3, r=6.4/2, center = true, $fn=6); //prévoir 0.5mm de jeu pour le diamètre du trou } } } } /////////////////////////////////////////////////////////////////////////// module supportinferieur() { jeu=2; //écart entre les 2 pièces du support amincicementtrou=1; difference(){ translate([0,0,-35/2 -epaisseurbarre/2-epaisseurboitier/2-jeu]) cube([epaisseurcamera+2*epaisseurboitier,profondeurcamera+2*epaisseurboitier,epaisseurbarre+epaisseurboitier-jeu],true); translate([((longueurbarre/2)-20),0,-(epaisseurbarre/2+epaisseurcamera/2+epaisseurboitier/2)]) #banc(longueurbarre,amincicementtrou); #trousfixation(); } } /////////////////////////////////////////////////////////////////////////// printerpart=0;//default value for the constant printerpart, it can be changed through command line using -D //https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_OpenSCAD_in_a_command_line_environment //use compile.sh to generate the stl files in stl/ subdirectory type=printerpart; //assign the constant value to a variable to be able to test it, even if the constant hasn't been defined in command line //pour visualisation de l'assemblage if (type==0) { supportsuperieur(); supportinferieur(); } //pour impression via script compile.sh if (type==1) rotate ([180,0,0]) supportsuperieur(); if (type==2) translate([80,0,17]) supportinferieur();