Cours:RobotiqueCoupeGEII

De troyesGEII
Révision datée du 20 novembre 2020 à 15:16 par Bjacquot (discussion | contributions) (Modèles 3d)
Aller à : navigation, rechercher

Ressources

Caractéristiques mécaniques

Surveillance de la batterie

Description

  • objectifs
    • protection en court circuit (ou limite de courant)
    • ultra faible consommation en veille (bouton pour remettre en "route" la batterie)
    • protection en température min/max
    • protection en tension mini/maxi
    • mesure d'énergie en option
  • principe
    • µcontroleur :
      • faible consommation (3.3V, fcpu faible)
      • comparateur analogique
      • ADC (gain important pour mesure de courant)
      • bus (i2c ?)
    • composant de puissance
      • relais ?
      • mos ?
    • résistance de shunt

Composants

  • régulateurs faible tension 3.3V
    • mcp1703a
    • mic5206
  • µcontrôleur attiny841

Carte électronique

Détection des balles

Caméra pixy

lidar

capteur ultrason

ne fonctionne pas pour détecter la présence d'une balle à qques centimètres, pb lié à la forme sphérique ou matière ou état de surface

Positionnement

Modèles 3d

longeron.scad

tailleCube=7.5;
isConge=1;
isPercage=1;
rayonPercage=1.5;
conge=0.25;
$fn=25;

module longeronX(nbCubes=3,posX=0,posY=0,posZ=0)
{
    translate([posX*tailleCube,posY*tailleCube,posZ*tailleCube])
        rotate([0,0,0])
            longeron(nbCubes);
}

module longeronY(nbCubes=3,posX=0,posY=0,posZ=0)
{
    translate([posX*tailleCube,posY*tailleCube,posZ*tailleCube])
        rotate([0,0,90])
            longeron(nbCubes);
}

module longeronZ(nbCubes=3,posX=0,posY=0,posZ=0)
{
    translate([posX*tailleCube,posY*tailleCube,posZ*tailleCube])
        rotate([0,-90,0])
            longeron(nbCubes);
}

module longeron(nbCubes=3)
{
    difference()
    {
        translate([-tailleCube/2,-tailleCube/2,-tailleCube/2])
        cube([tailleCube*nbCubes,tailleCube,tailleCube]);
        if (isPercage==1)
        {
        for (i=[0:nbCubes-1])
        {
            translate([i*tailleCube,0,0])
            rotate([0,0,0])
                trou();
            translate([i*tailleCube,0,0])
            rotate([90,0,0])
                trou();
        }
        rotate([0,90,0])
            trou(nbCubes);
    }}
}


module boite()
{
    difference()
    {
     cube([tailleCube,tailleCube,tailleCube],center=true);
        if (isPercage==1)
        {
     rotate([0,0,0])
           trou();
     rotate([90,0,0])
           trou();
     rotate([0,90,0])
           trou();
    }
}
}

module trou(size=1)
{
        translate([0,0,(size-1)*tailleCube/2])
        {
            cylinder(h=tailleCube*size+2*conge, r=rayonPercage,center=true);
        if (isConge==1)
        {
        translate([0,0,-tailleCube*size/2-conge])
            cylinder(h=2*conge, d1=(rayonPercage+2*conge)*2,
                                d2=(rayonPercage)*2);
        translate([0,0,tailleCube*size/2-conge])
            cylinder(h=2*conge, d2=(rayonPercage+2*conge)*2,
                                d1=(rayonPercage)*2);
        }
            }
}

supportMoteur.scad

diamMoteur=36.6;
$fn=200;
rayonPercage=1.5;


difference()
{
intersection()
{
translate([0,4,0])
difference()
{
        cube([52.5,30.0-5-5,diamMoteur/2+2+2]);


        translate([52.5/2,-0.1,-2])
            rotate([-90,0,0])
            cylinder(h=30, d=diamMoteur+0.4+2);

        
        translate([7.5/2,2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2,7.5*1+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2,7.5*2+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
            

        translate([7.5/2+7.5*6,7.5*0+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2+7.5*6,7.5*1+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2+7.5*6,7.5*2+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);

        
}

union()
{
    translate([-1,-1,-1])
        cube([60,30,3.5]);


    translate([52.5/2,-0.1,-2+1])
            rotate([-90,0,0])
            cylinder(h=30, d=diamMoteur+0.4+2+4+1);
    
}


}


translate([0,4,3])
union()
{
        translate([7.5/2,2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);
        translate([7.5/2,7.5*1+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);
        translate([7.5/2,7.5*2+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);
            

        translate([7.5/2+7.5*6,7.5*0+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);
        translate([7.5/2+7.5*6,7.5*1+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);
        translate([7.5/2+7.5*6,7.5*2+2.25,-0.5])
            cylinder(h=30, d=2*rayonPercage*2);

}

}

translate([52.5,-5,0])
   rotate([180,0,180])
difference()
{
    
    translate([0,5,0])
        cube([52.5,30.0-5,diamMoteur/2+2]);
    union()
    {
        translate([-0.5,-0.5,11])
            cube([53.5,8,17]);
        translate([-0.5,-0.5,12])
            cube([8,31,18]);
        translate([52.5-7.5,-0.5,11.5])
            cube([8,31,18]);

        translate([-0.5,-0.5,-0.5])
            cube([8.5,8.5,30]);
        translate([7.5*6-0.5,-0.5,-0.5])
            cube([8.5,8.5,30]);


            
        
        translate([52.5/2,8.8,0])
            rotate([-90,0,0])
            cylinder(h=30, d=diamMoteur+0.4);
        translate([52.5/2,-0.5,0])
            rotate([-90,0,0])
            cylinder(h=30, d=12+1);

            
            
        translate([7.5/2,7.5+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2,7.5*2+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2,7.5*3+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
            

        translate([7.5/2+7.5*6,7.5+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
        translate([7.5/2+7.5*6,7.5*2+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.2);
        translate([7.5/2+7.5*6,7.5*3+7.5/2,-0.5])
            cylinder(h=30, d=2*rayonPercage*1.1);
    }   
}

supportRoulette.scad

include  <longeron.scad>
isConge=0;
isPercage=1;
$fn=45;
//rayonPercage=1.8;

s=7.5;
center=[s*4,s*3,15-7.5];

difference()
{
union()
{
longeronX(7,1,0,0);
longeronX(5,2,0,2);
longeronX(5,2,5,2);

longeronZ(3,2,0,0);
longeronZ(3,6,0,0);

longeronY(7,2,0,2);
longeronY(7,6,0,2);

translate([s*2.5-1,s*0.5-1,s*1.5-2.4])
    cube([3*s+2,4*s+2,4.5]);
}


 translate(center)
union()
{

    rotate([0,0,360*2/3])
        translate([7,0,0])
            cylinder(h=10,d=3);

    rotate([0,0,360/3])
        translate([7,0,0])
            cylinder(h=10,d=3);

    translate([7,0,0])
        cylinder(h=10,d=3);
        
}
}

supportVariateur.scad

include  <longeron.scad>
isConge=0;
isPercage=1;
$fn=45;

s=7.5;

union()
{
    longeronX(5,0,0,0);
    longeronX(5,0,12,0);
    longeronX(5,0,24,0);
    
    intersection()
    {
        union()
        {
            longeronX(5,0,0,-1);
            longeronX(5,0,12,-1);
            longeronX(5,0,24,-1);
        }
        
        translate([-s/2,-s/2,-s/2-2])
        cube([5*s,25*s,4]);
        
    }
    
    translate([-s/2,s/2,-s/2-2])
    difference()
    {
        union()
        {
            difference()
            {
                cube([5*s,11*s,2+s]);
                translate([1.5,-0.1,2])
                cube([5*s-3,11*s+0.2,s+0.1]);
            }
            translate([2.5*s-14,5.5*s-28,1]) cylinder(h=3,d=8);
            translate([2.5*s-14,5.5*s+28,1]) cylinder(h=3,d=8);
            translate([2.5*s+14,5.5*s-28,1]) cylinder(h=3,d=8);
            translate([2.5*s+14,5.5*s+28,1]) cylinder(h=3,d=8);
        }
        translate([2.5*s-14,5.5*s-28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s-14,5.5*s+28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s+14,5.5*s-28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s+14,5.5*s+28,-0.5])  cylinder(h=13,d=3);
        
        translate([20,0.1,-2]) cube ([7,4,5]);
        translate([10,0.1,-2]) cube ([7,4,5]);
    }
    translate([-s/2,s/2+12*s,-s/2-2])
    difference()
    {
        union()
        {
            difference()
            {
                cube([5*s,11*s,2+s]);
                translate([1.5,-0.1,2])
                cube([5*s-3,11*s+0.2,s+0.1]);
            }
            translate([2.5*s-14,5.5*s-28,1]) cylinder(h=3,d=8);
            translate([2.5*s-14,5.5*s+28,1]) cylinder(h=3,d=8);
            translate([2.5*s+14,5.5*s-28,1]) cylinder(h=3,d=8);
            translate([2.5*s+14,5.5*s+28,1]) cylinder(h=3,d=8);
        }
        translate([2.5*s-14,5.5*s-28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s-14,5.5*s+28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s+14,5.5*s-28,-0.5])  cylinder(h=13,d=3);
        translate([2.5*s+14,5.5*s+28,-0.5])  cylinder(h=13,d=3);

        translate([20,11*s-0.1-4,-2]) cube ([7,4,5]);
        translate([10,11*s-0.1-4,-2]) cube ([7,4,5]);
    }
    
}

roueRobot.scad

largeurJoint = 5.3;
diametreJoint = 50;

$fn = 250;


difference()
{
    union()
    {
        translate([0,0,-3.5])
            cylinder(h=7, d=diametreJoint);
        translate([0,0,-3.5])
            cylinder(h=15, d=10);
        
    }
    
    rotate_extrude()
        translate([diametreJoint/2, 0, 0])
            circle(d = largeurJoint);
    difference()
    {
        translate([0,0,-3])
            cylinder(h=15, d=3.1*2);
        translate([-2,2.5,-3.5])
            cube([4,1.5,15]);
    }
        
}

supportBatterie.scad

c=7.5;
$fn=30;
batterieHauteur=69;
batterieLargeur=73;
batterieProfondeur=20;

percageRayon=1;
nbPercageLargeur=24;//24
nbPercageHauteur=25;//25
nbPercageProfondeur=7;//7
percagePasLargeur   =(batterieLargeur-2*percageRayon-1)/(nbPercageLargeur-1);
percagePasHauteur   =(batterieHauteur-2*percageRayon-1)/(nbPercageHauteur-1);
percagePasProfondeur=(batterieProfondeur-2*percageRayon-1)/(nbPercageProfondeur-1);

connecteurBatterieLargeur=16.25;
connecteurBatterieProfondeur=8;
largeurLogementCarte=25;
largeurParoieCarte=2;
epaisseurFondCarte=8;
boiteEpaisseur=3;

difference()
{
    cube([17*c,4*c-0.5,7*c]);

    translate([(17*c-106.5)/2,-0.1,12]) cube([106.5,26.5,7*c]);
    translate([(17*c-116.5)/2,23,12]) cube([116.5,3.5,7*c]);
    
    
    for (i=[0:10])
    translate([(17*c-106.5)/2-c/2-3,-0.1,c/2+c*i ])
            rotate([-90,0,0])
                cylinder(h=100, d=3);

    for (i=[2:10])
        for (j=[0:2])
    translate([-0.1,c/2+c*j,c/2+c*i ])
            rotate([0,90,0])
                cylinder(h=200, d=3);

    for (j=[0:5])
    translate([-0.1,c/2+4.5*j,c/2 ])
            rotate([0,90,0])
                cylinder(h=200, d=4);
                
                
    for (i=[0:10])
    translate([(17*c-106.5)/2-c/2-3+c*16,-0.1,c/2+c*i ])
            rotate([-90,0,0])
                cylinder(h=100, d=3);

    for (i=[0:15])
    translate([(17*c-106.5)/2-c/2-3+i*c,-0.1,c/2 ])
            rotate([-90,0,0])
                cylinder(h=100, d=3);
                
    
    for (j=[0:13]) {
        for (i=[0:33]) {
            translate([ i*percagePasLargeur+percageRayon+0.5+(17*c-106.5)/2,
                        26,
                        percageRayon*(j*percagePasHauteur)+percageRayon+12.5])
            rotate([-90,0,0])
                cylinder(h=10, r=percageRayon*1.2);
        }
    }

    
    
     
         translate ([batterieLargeur+largeurParoieCarte+boiteEpaisseur+(largeurLogementCarte-connecteurBatterieProfondeur)/2+(connecteurBatterieProfondeur-1)/2+10.5,
                boiteEpaisseur+(batterieProfondeur-connecteurBatterieLargeur)/2+(connecteurBatterieProfondeur-1)/2+0.75,
                -5])

     union(){
        
        minkowski() {
cube([1,
        connecteurBatterieLargeur-2*((connecteurBatterieProfondeur-1)/2),
        epaisseurFondCarte+20]);
    // coins arrondis
    sphere((connecteurBatterieProfondeur-1)/2);
}
    }
    
    translate([(17*c-106.5)/2-c/2-3-10/2+10*c+10.5,1.5,-0.1 ])
    cube([10,26.5-3,6.5]);
    translate([(17*c-106.5)/2-c/2-3-10/2+10*c+10.5,1.5+3,-0.1 ])
    cube([30,20.5-3,6]);
    
    
}

boitierBatterie.scad

// --------- Programme principal ---------------- //
// Appel des modules, etc.
 
difference(){
    union()
    {
        difference()
        {
            boite();
            union()
            {
                logementBatterie(); 
                capotBatterie();
                capotCarte();
                logementCarte();
                logementFilsBatterie();
                logementConnecteur();
                inscriptionGEII();
                inscriptionPolarite();
                porteFusible();
            }
        }
    }
    union()
    {
        trousLargeur();
        trousProfondeur();
       
    }
    
}

            union()
            {
                inscriptionGEII(0);
                inscriptionPolarite(0);
            }



// --------- Variables (ou plutôt constantes) -- //
batterieHauteur=69;
batterieLargeur=73;
batterieProfondeur=20;

glissiereLargeur=5;
glissiereEpaisseur=1.5;
glissiereLanguette=1.75;

largeurLogementCarte=25;
largeurParoieCarte=2;
epaisseurFondCarte=8;

paroieFils=3;
longueurFils=8.5;

connecteurBatterieLargeur=16.25;
connecteurBatterieProfondeur=8;

boiteEpaisseur=3;
boiteHauteur=batterieHauteur+2*boiteEpaisseur;
boiteLargeur=batterieLargeur+2*boiteEpaisseur+largeurParoieCarte+largeurLogementCarte;
boiteProfondeur=batterieProfondeur+2*boiteEpaisseur;

percageRayon=1;
nbPercageLargeur=24;//24
nbPercageHauteur=25;//25
nbPercageProfondeur=7;//7
percagePasLargeur   =(batterieLargeur-2*percageRayon-1)/(nbPercageLargeur-1);
percagePasHauteur   =(batterieHauteur-2*percageRayon-1)/(nbPercageHauteur-1);
percagePasProfondeur=(batterieProfondeur-2*percageRayon-1)/(nbPercageProfondeur-1);



$fn=30;
 
 // texte
 
 module inscriptionGEII(offset=0.2)
 {
     translate([batterieLargeur+2*boiteEpaisseur+8,0.8,5])
     rotate([90,-90,0])
    linear_extrude(0.8+offset)
      text("IUT Troyes", size = 8);
     translate([batterieLargeur+2*boiteEpaisseur+8*2.5,0.8,5])
     rotate([90,-90,0])
    linear_extrude(0.8+offset)
      text("GEII", size = 8);
  }
 module inscriptionPolarite(offset=0.2)
 {
     translate([boiteLargeur+1,2,-offset])
     rotate([0,0,90])
    linear_extrude(0.8+offset)
      text("+", size = 14);
     translate([boiteLargeur-0.3,15.5,-offset])
     rotate([0,0,90])
    linear_extrude(0.8+offset)
      text("-", size = 14);
  }
 
// --------- Modules --------------------------- //
module boite() {
    union(){
        cube([boiteLargeur,boiteProfondeur,boiteHauteur]);
        translate ([-glissiereLargeur,boiteProfondeur-boiteEpaisseur,0])
        cube([boiteLargeur+2*glissiereLargeur,boiteEpaisseur,boiteHauteur]);;
        
    }
}

module logementBatterie() {
    union(){
        translate ([boiteEpaisseur,boiteEpaisseur,boiteEpaisseur])
        cube([batterieLargeur,batterieProfondeur,batterieHauteur+0.5]);
    }
}

module capotBatterie() {
    
    translate ([-1-glissiereLargeur,boiteEpaisseur,boiteHauteur-boiteEpaisseur])
    union(){
        
        cube([batterieLargeur+boiteEpaisseur+(largeurParoieCarte-1)/2+1+glissiereLargeur,
        batterieProfondeur,
        boiteEpaisseur+1]);
        translate ([0,-glissiereLanguette,0])
        cube([batterieLargeur+boiteEpaisseur+(largeurParoieCarte-1)/2+1+glissiereLargeur,
        batterieProfondeur+2*glissiereLanguette,
        glissiereEpaisseur]);
    
    }
}

//capotCarte();
module capotCarte() {
    
    
    translate ([boiteLargeur-boiteEpaisseur,
                boiteEpaisseur,
                boiteHauteur+1])
    rotate([0,90,0])
    union(){
        
    cube([boiteHauteur-epaisseurFondCarte+1,
        batterieProfondeur,
        boiteEpaisseur+1]);
    translate ([0,-glissiereLanguette,0])
        cube([boiteHauteur-epaisseurFondCarte+2+1,
        batterieProfondeur+2*glissiereLanguette,
        glissiereEpaisseur]);
    
    }
    
}

module logementCarte() {
    translate ([batterieLargeur+largeurParoieCarte+boiteEpaisseur,
                boiteEpaisseur,
                epaisseurFondCarte])
    union(){
        
        cube([largeurLogementCarte+1,
        batterieProfondeur,
        batterieHauteur-epaisseurFondCarte+boiteEpaisseur]);
        
    
    }
}

module logementFilsBatterie()
{
    translate ([batterieLargeur+boiteEpaisseur-1,
                boiteEpaisseur+paroieFils,
                boiteEpaisseur])
    union(){
        
        cube([longueurFils+1,
        batterieProfondeur-2*paroieFils,
        batterieHauteur+1]);
    }
}

module logementConnecteur()
{
    translate ([batterieLargeur+largeurParoieCarte+boiteEpaisseur+(largeurLogementCarte-connecteurBatterieProfondeur)/2+(connecteurBatterieProfondeur-1)/2,
                boiteEpaisseur+(batterieProfondeur-connecteurBatterieLargeur)/2+(connecteurBatterieProfondeur-1)/2,
                -10])
    union(){
        
        minkowski() {
cube([1,
        connecteurBatterieLargeur-2*((connecteurBatterieProfondeur-1)/2),
        epaisseurFondCarte+20]);
    // coins arrondis
    sphere((connecteurBatterieProfondeur-1)/2);
}
    }
    
}
 
module trousLargeur() {
    for (j=[0:nbPercageHauteur-1]) {
        for (i=[0:nbPercageLargeur-1]) {
            translate([ i*percagePasLargeur+boiteEpaisseur+percageRayon+0.5,
                        -1+0.5,
                        percageRayon*(j*percagePasHauteur)+boiteEpaisseur+percageRayon+0.5])
            rotate([-90,0,0])
                cylinder(h=boiteProfondeur+2, r=percageRayon);
        }
    }
}
module trousProfondeur() {
    for (j=[0:nbPercageHauteur-1]) {
        for (i=[0:nbPercageProfondeur-1]) {
            translate([ -1+0.5,
                        i*percagePasProfondeur+boiteEpaisseur+percageRayon+0.5,
                        percageRayon*(j*percagePasHauteur)+boiteEpaisseur+percageRayon+0.5])
            rotate([0,90,0])
                cylinder(h=boiteEpaisseur+2, r=percageRayon);
        }
    }
}

module porteFusible()
{
    
    translate ([batterieLargeur+boiteEpaisseur+largeurLogementCarte/2+largeurParoieCarte,
                boiteProfondeur/2,
                boiteHauteur-boiteEpaisseur-1])
    cylinder(h=boiteEpaisseur+2,r=13/2);
}

chassis.scad

// --------- Programme principal ---------------- //
// Appel des modules, etc.

include  <longeron.scad>
isConge=0;
isPercage=1;
$fn=45;

L=25;
p=23;
avtmoteur=6;
retrait=5; 
roulette=5;
hauteur=7;
posRenfort=7;


translate([-L*tailleCube/2,-158,-76.5+tailleCube/2+7]) chassis();

module chassis()
{
  union()
   {
    base();
    translate([0,0,hauteur*tailleCube]) base2();
    rangeePilier(0);
    rangeePilier(-5);
    rangeePilier(avtmoteur);

    longeronZ(hauteur-1,0,22-retrait,1);
    longeronZ(hauteur-1,roulette+1,22-retrait,1);
    longeronZ(hauteur-1,24,22-retrait,1);
    longeronZ(hauteur-1,24-roulette-1,22-retrait,1);
   }
}

module rangeePilier(y)
{
    longeronZ(hauteur-1,0,y,1);
    longeronZ(hauteur-1,0+7,y,1);
    longeronZ(hauteur-1,24-7,y,1);
    longeronZ(hauteur-1,24,y,1);
}

module base()
{
  // largeur 
   longeronX(L-2,1,0,0);
   longeronX(L-2,1,-5,0);
   longeronX(L-2,1,avtmoteur,0);
   longeronX(L-2,1,0,0);
  // traverses
  longeronY(5,(L-1)/2,1,0);
  longeronY(4,8,-4,0);
  longeronY(4,24-8,-4,0);
  // longueur
  longeronY(p,0,-retrait,0);
  longeronY(p,L-1,-retrait,0);
  // roulette
  longeronX(roulette,1,p-retrait-1,0);
  longeronX(roulette,L-roulette-1,p-retrait-1,0);
  longeronY(p-avtmoteur-retrait-1,roulette+1,avtmoteur+1,0);
  longeronY(p-avtmoteur-retrait-1,L-roulette-2,avtmoteur+1,0);
}
 
//translate([0,0,hauteur*tailleCube])
 module base2()
{
  // largeur 
   longeronX(L-2,1,0,0);
   longeronX(L-2,1,-5,0);
   longeronX(L-2,1,avtmoteur,0);
   longeronX(L-2,1,0,0);
  // traverses
  longeronY(5,(L-1)/2,1,0);
  // longueur
  longeronY(p,0,-retrait,0);
  longeronY(p,L-1,-retrait,0);
  // roulette
  longeronX(roulette,1,p-retrait-1,0);
  longeronX(roulette,L-roulette-1,p-retrait-1,0);
  longeronY(p-avtmoteur-retrait-1,roulette+1,avtmoteur+1,0);
  longeronY(p-avtmoteur-retrait-1,L-roulette-2,avtmoteur+1,0);
  // renfort avt
  longeronX(L-(roulette+2)*2,roulette+2,avtmoteur+posRenfort,0);
}