Cours:RobotiqueCoupeGEII
Révision datée du 31 janvier 2021 à 23:01 par Bjacquot (discussion | contributions) (→positionnement)
Sommaire
Ressources
- règlement de la coupe de robotique
- matériel disponible
Caractéristiques mécaniques
- moteurs
- vitesse rotation roues officielles à prévoir : 600 à 800 tr/min max
- poulies crantées
- https://www.fingertechrobotics.com/how-to_pulley_belt.php
- 40/74/125 dents
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
- µcontroleur :
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);
}