Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
cppu_moteur [2020/10/14 16:17] bvandepo [Achat de matériel] |
cppu_moteur [2021/02/19 20:20] (Version actuelle) |
||
---|---|---|---|
Ligne 14: | Ligne 14: | ||
===== Partie 1 - Présentation générale de la maquette ===== | ===== Partie 1 - Présentation générale de la maquette ===== | ||
- | ===Contexte | + | === Définition |
- | Un servomoteur ... | + | L' |
+ | Cela veut dire que l' | ||
+ | |||
+ | < | ||
- | Présenter | + | \begin{center} |
+ | |||
+ | \begin{equation} E_{X} = P_{X} \cdot temps \end{equation} | ||
+ | |||
+ | \end{center} | ||
+ | </ | ||
+ | |||
+ | Où : | ||
+ | * E c'est l' | ||
+ | * P c'est la puissance en watt | ||
+ | * temps est le temps en secondes | ||
+ | * X représente un domaine de la physique (électrique, | ||
+ | |||
+ | |||
+ | === Définition - énergie électrique et énergie mécanique === | ||
+ | |||
+ | Les génies électrique et mécaniques se consacrent à créer des sources qui délivrent leur puissance correspondante. | ||
+ | |||
+ | La puissance électrique est décrite par l' | ||
+ | |||
+ | < | ||
+ | |||
+ | \begin{center} | ||
+ | |||
+ | \begin{equation} P_{électrique} = V \cdot i \end{equation} | ||
+ | |||
+ | \end{center} | ||
+ | </ | ||
+ | |||
+ | Où : | ||
+ | * V c'est la tension en volts | ||
+ | * i c'est le courant en ampères | ||
+ | |||
+ | La tension électrique représente la différence d' | ||
+ | |||
+ | Une source électrique capable de délivrer un grand courant (donc une grande quantité de charges) sans pour autant présenter une diminution dans sa tension (la différence de concentration de charges) a une très forte puissance nominale. Si cette source est capable de délivrer cette puissance pendant un temps très long, cette source a une grande capacité d' | ||
+ | |||
+ | La puissance mécanique est décrite par l' | ||
+ | |||
+ | < | ||
+ | |||
+ | \begin{center} | ||
+ | |||
+ | \begin{equation} P_{mécanique} = \Gamma_{mot} \cdot \omega_{mot} \end{equation} | ||
+ | |||
+ | \end{center} | ||
+ | </ | ||
+ | |||
+ | Où : | ||
+ | * ω c'est la vitesse angulaire en radian par secondes | ||
+ | * Γ c'est le couple mécanique en Newton mètre | ||
+ | |||
+ | La vitesse angulaire représente l' | ||
+ | |||
+ | Une source mécanique capable de délivrer un couple (une force sur son axe) sans pour autant perdre de la vitesse angulaire (l' | ||
+ | |||
+ | |||
+ | === Définition - le moteur à courant continu === | ||
+ | |||
+ | Un moteur à courant continu permet de convertir l' | ||
+ | |||
+ | < | ||
+ | |||
+ | \begin{center} | ||
+ | |||
+ | \begin{equation} E_{elec} = E_{meca} | ||
+ | \begin{equation} P_{elec} \cdot temps = P_{meca} \cdot temps \end{equation} | ||
+ | \begin{equation} P_{elec} = P_{meca} | ||
+ | \begin{equation} V_{mot} \cdot i_{mot} = \Gamma_{mot} \cdot \omega_{mot} | ||
+ | |||
+ | \end{center} | ||
+ | </ | ||
+ | |||
+ | Où: | ||
+ | * elec c'est électrique | ||
+ | * meca c'est mécanique | ||
+ | |||
+ | Ce transfert de puissance est illustré par la figure ci-dessous : | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | A partir de maintenant nous pouvons réfléchir en terme de point d' | ||
+ | Une fois que la source mécanique est connéctée à une charge, une puissance mécanique lui sera délivré. | ||
+ | En pratique cela signifie que le point d' | ||
+ | Cela implique des changements dans la tension, le courant, le couple et la vitesse. Nous pouvons vite être dans des situations très complexes à comprendre. | ||
+ | |||
+ | Pour simplifier l' | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | Nous pouvons faire un parallèle entre les grandeur électriques et mécaniques. | ||
+ | |||
+ | La tension électrique est liée à la vitesse de rotation. Pour une tension $V_{mot}$ donnée, le moteur tournera à une vitesse $\omega_{mot}$ spécifique. | ||
+ | |||
+ | Le courant est lié au couple. Lorqu' | ||
+ | |||
+ | |||
+ | === Contexte - le moteur à courant continu commandé === | ||
+ | |||
+ | Un moteur à courant continu a un point d' | ||
+ | |||
+ | D'un point de vue global, nous pouvons illustrer un moteur commandé par le schémas blocs ci-dessous. | ||
+ | |||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | Le système appelé " | ||
+ | |||
+ | Le bloc appelé " | ||
+ | |||
+ | |||
+ | === Contexte - le servomoteur === | ||
+ | |||
+ | |||
+ | Un servomoteur est un moteur à courant continu dont le mouvement de rotation est contrôlé en termes d' | ||
+ | |||
+ | |||
+ | {{https://bvdp.inetdoc.net/files/cppu/ | ||
+ | |||
+ | |||
+ | Un potentiomètre est installé sur l'axe du servomoteur et lui donne une mesure sur l' | ||
+ | |||
+ | Le fait de récupérer une mesure et l' | ||
- | Dire qu'on en construit un sur la base d'un moteur DC réducté avec asservissement numérique. | ||
=== Schéma-blocs de la maquette à étudier === | === Schéma-blocs de la maquette à étudier === | ||
Ligne 26: | Ligne 153: | ||
La maquette étudiée lors de ses deux séances peut être résumée dans le schémas-bloc ci-dessous : | La maquette étudiée lors de ses deux séances peut être résumée dans le schémas-bloc ci-dessous : | ||
- | Inclure une image avec les blocs | + | {{https:// |
- | Décrire | + | Vous pouvez remarquer une différence par rapport au modèle de servomoteur présenté. Notre maquette découpe la commande dans deux parties, l' |
+ | |||
+ | Le bloc Arduino+E/S reçoit la mesure du potentiomètre et génère des signaux de commande. Le shield du moteur reçoit | ||
+ | |||
+ | Ce découplage s' | ||
Ligne 44: | Ligne 175: | ||
==== Vue d' | ==== Vue d' | ||
- | Mettre une image qui montre chaque composant | + | Les composants de la maquette sont montrés dans l' |
+ | |||
+ | //Mettre une image qui montre chaque composant// | ||
Ligne 57: | Ligne 190: | ||
===== Partie 2 - Contrôle du moteur en vitesse, en sens et en position ===== | ===== Partie 2 - Contrôle du moteur en vitesse, en sens et en position ===== | ||
+ | |||
+ | Pour prendre en main la maquette et comprendre le fonctionnement d'un moteur, nous allons procéder par petit pas. | ||
==== Contrôle de la vitesse du moteur ==== | ==== Contrôle de la vitesse du moteur ==== | ||
- | Décrire en pas à pas : | + | La première étape |
- | * L' | + | |
- | * Quelques principes de code à faire pour étudier la vitesse | + | |
- | * Des idées libres d'étude | + | |
- | * Un contrôle par le potentiomètre de signal | + | |
- | * Un contrôle | + | |
- | * Une vidéo de fonctionnement | + | |
- | ==== Contrôle | + | === Assemblage mécanique |
+ | |||
+ | Le schématique ci-dessus donne une vue d' | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | === Consignes en vitesse et en sens === | ||
+ | |||
+ | La carte shield et sa librairie associé facilitent énormément l' | ||
+ | |||
+ | <file cpp consignes_vitesse> | ||
+ | |||
+ | #include < | ||
+ | |||
+ | motor_id | ||
+ | AF_DCMotor motor(motor_id, | ||
+ | motor.setSpeed(consigne_vitesse); | ||
+ | motor.run(FORWARD); | ||
+ | motor.run(RELEASE); | ||
+ | motor.run(BACKWARD); | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Etude en vitesse et en sens ==== | ||
+ | |||
+ | A l'aide de la carte Arduino, créez un programme qui vous permet : | ||
+ | * d' | ||
+ | * d' | ||
+ | * de visualiser la consigne envoyé à l'aide de l' | ||
+ | * de modifier vos consignes à l'aide de l' | ||
+ | * de piloter la vitesse à l'aide d'un potentiomètre | ||
+ | |||
+ | A l'aide de votre programme étudiez : | ||
+ | * la valeur de consigne pour l' | ||
+ | * la valeur de consigne pour l' | ||
+ | * la valeur de consignes ci-dessus en fonction du sens de rotation | ||
+ | * de piloter la vitesse à l'aide d'un potentiomètre | ||
+ | |||
+ | Voici une vidéo exemple de fonctionnement : | ||
+ | |||
+ | //mettre un lien vidéo ici// | ||
- | Décrire en pas à pas : | ||
- | * L' | ||
- | * Quelques principes de code à faire pour étudier le sens | ||
- | * Des idées libres d' | ||
- | * Un contrôle par les entrées de la carte E/S | ||
- | * Une vidéo de fonctionnement | ||
==== Contrôle de la position angulaire du moteur ==== | ==== Contrôle de la position angulaire du moteur ==== | ||
- | Décrire en pas à pas : | + | Maintenant que nous pouvons contrôler la vitesse du moteur, nous allons étudier comment utiliser un potentiomètre et sa mesure de tension associée pour piloter la position angulaire de l'axe du moteur. |
- | | + | |
- | * Quelques principes | + | === Assemblage mécanique === |
- | * Des idées libres | + | |
- | * Un contrôle par le potentiomètre de signal | + | Le schématique ci-dessus donne une vue d' |
- | * Un contrôle par les entrées | + | |
- | * Un contrôle automatique par génération | + | {{https:// |
- | * Une vidéo de fonctionnement | + | |
+ | On remarque bien que le potentiomètre n'est pas encore connecté mécaniquement au moteur à courant continu. Nous allons utiliser ce découplage pour illustrer le fonctionnement de l' | ||
+ | |||
+ | === Un peut de théorie sur l' | ||
+ | |||
+ | L'idée centrale à tout asservissement est de minimiser l' | ||
+ | |||
+ | S'il est possible d' | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | Si nous n' | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | La difficulté est de trouver le moyen de " | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | === Le PID, un correcteur " | ||
+ | |||
+ | La nature | ||
+ | |||
+ | Le correcteur PID applique un traitement mathématique directement à l' | ||
+ | |||
+ | {{https:// | ||
+ | |||
+ | Où : | ||
+ | | ||
+ | * Le terme Ki s' | ||
+ | * Le terme Kd s' | ||
+ | |||
+ | |||
+ | En pratique nous allons utiliser un PID numérique. Il consiste dans une suite de valeurs | ||
+ | |||
+ | |||
+ | {{https:// | ||
+ | |||
+ | |||
+ | Dans notre application, | ||
+ | |||
+ | |||
+ | {{https:// | ||
+ | |||
+ | Il nous reste de choisir les valeurs de Kp, Ki et Kd. Cela se fait par une méthode itérative qui sera décrite ci-dessous. | ||
+ | |||
+ | ==== Etude de l' | ||
+ | |||
+ | <file cpp PID_program> | ||
+ | // | ||
+ | // PID CONTROL VARIABLES DECLARATION | ||
+ | #define TAB_SIZE 10 | ||
+ | |||
+ | int16_t erreur_tab[TAB_SIZE]; | ||
+ | |||
+ | uint8_t ind_ecr_erreur_tab=0; | ||
+ | int16_t integrale_erreur=0; | ||
+ | int16_t derivee_erreur=0; | ||
+ | |||
+ | int16_t Kd=0; //de 0 à 50 | ||
+ | int16_t Ki=0; | ||
+ | int16_t Kp=10; | ||
+ | |||
+ | uint16_t consigne_posit = 0; // variable that holds the value of the position | ||
+ | uint16_t posit = 0; //variable that holds the value of the position measurement | ||
+ | int16_t erreur = 0; // variable that calculates the error | ||
+ | |||
+ | |||
+ | |||
+ | void update_tab_erreur(int16_t new_erreur) | ||
+ | { | ||
+ | //calcul intégrale | ||
+ | integrale_erreur=integrale_erreur-erreur_tab[ind_ecr_erreur_tab]; | ||
+ | integrale_erreur=integrale_erreur+new_erreur; | ||
+ | |||
+ | //calcul dérivée | ||
+ | uint8_t ind_lec_erreur_tab=ind_ecr_erreur_tab+5; | ||
+ | if (ind_lec_erreur_tab> | ||
+ | ind_lec_erreur_tab-=TAB_SIZE; | ||
+ | derivee_erreur=new_erreur-erreur_tab[ind_lec_erreur_tab]; | ||
+ | |||
+ | //maj tableau | ||
+ | erreur_tab[ind_ecr_erreur_tab]=new_erreur; | ||
+ | ind_ecr_erreur_tab++; | ||
+ | if (ind_ecr_erreur_tab> | ||
+ | ind_ecr_erreur_tab=0; | ||
+ | }//end of update_tab_erreur | ||
+ | // | ||
+ | |||
+ | void pid_correction(int16_t erreur){ | ||
+ | int16_t commande=0; | ||
+ | int16_t commande_max=250; | ||
+ | |||
+ | erreur | ||
+ | erreur += Kd*derivee_erreur; | ||
+ | | ||
+ | |||
+ | commande=abs(erreur); | ||
+ | if (commande> | ||
+ | |||
+ | if (commande< | ||
+ | { | ||
+ | motor.run(RELEASE); | ||
+ | motor.setSpeed(0); | ||
+ | } | ||
+ | else | ||
+ | if (erreur< | ||
+ | { | ||
+ | motor.run(FORWARD); | ||
+ | motor.setSpeed(commande); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | motor.run(BACKWARD); | ||
+ | motor.setSpeed(commande); | ||
+ | } | ||
+ | }//end of pid_correction | ||
+ | // | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | <file cpp PID_usage> | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | // setup control table | ||
+ | for (int i=0; | ||
+ | erreur_tab[i]=0; | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | consigne_posit = analogRead(A0); | ||
+ | posit = analogRead(A1); | ||
+ | erreur = posit - consigne_posit; | ||
+ | update_tab_erreur(erreur); | ||
+ | pid_correction(erreur); | ||
+ | |||
+ | // Prints system variables | ||
+ | Serial.print(consigne_posit, | ||
+ | Serial.print(" | ||
+ | Serial.print(erreur, | ||
+ | Serial.print(" | ||
+ | Serial.print(posit, | ||
+ | Serial.print(" | ||
+ | Serial.println("" | ||
+ | delay(10); | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | A l' | ||
+ | * de changer les paramètres Kp, Ki et Kd | ||
+ | * d' | ||
+ | * de monitorer l' | ||
+ | * de modifier vos consignes à l'aide de l' | ||
+ | * de monitorer l' | ||
+ | * de récupérer la mesure d' | ||
+ | |||
+ | A l'aide de votre programme étudiez : | ||
+ | * le comportement de votre moteur lorsque vous lui donnez une consigne angulaire | ||
+ | * le comportement de votre moteur lorsque vous agissez sur le deuxième potentiomètre | ||
+ | * l' | ||
+ | |||
+ | Voici une vidéo | ||
+ | |||
+ | //mettre un lien vidéo ici// | ||
Ligne 137: | Ligne 471: | ||
===Controle du moteur en vitesse et en sens=== | ===Controle du moteur en vitesse et en sens=== | ||
- | {{http://homepages.laas.fr/bvandepo/ | + | {{https://bvdp.inetdoc.net/ |
===Controle du moteur en position=== | ===Controle du moteur en position=== | ||
- | {{http://homepages.laas.fr/bvandepo/ | + | {{https://bvdp.inetdoc.net/ |
====Installation de la librarie pour le shield moteur==== | ====Installation de la librarie pour le shield moteur==== | ||
Ligne 158: | Ligne 492: | ||
====Mettre ici des liens sur les fonctions de librairies Arduino à utiliser==== | ====Mettre ici des liens sur les fonctions de librairies Arduino à utiliser==== | ||
+ | |||
+ | |||
+ | |||
+ | === Exemple de code - Consigne en vitesse === | ||
+ | |||
+ | |||
+ | <file cpp motor_shield_speed.ino> | ||
+ | //B. Vandeportaele 09/2020 | ||
+ | //L. Villa 10/2020 | ||
+ | |||
+ | //Todo gestion du temps pour que l' | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | //adresses codées sur 7bits | ||
+ | #define SLAVE_ADDR_8574_A 0x38+6 | ||
+ | #define SLAVE_ADDR_8574_B 0x38+7 | ||
+ | |||
+ | |||
+ | AF_DCMotor motor(1, | ||
+ | |||
+ | int led = 13; //numéro de la broche Arduino pilotant la LED sur le shield PERIPH | ||
+ | |||
+ | ////////////////////////////////////////// | ||
+ | char readPort8574(char addr, char * ptr_value) | ||
+ | /*addr, l' | ||
+ | ptr_value, pointeur pour renvoyer la valeur lue sur le port | ||
+ | retourne -1 si échec 0 sinon*/ | ||
+ | { | ||
+ | Wire.requestFrom((byte)addr, | ||
+ | if (Wire.available()==1) //si l' | ||
+ | { | ||
+ | (* ptr_value) = Wire.read(); | ||
+ | return 0; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | (* ptr_value) =0; //valeur par défaut si le composant n'a pas acquité | ||
+ | return -1; | ||
+ | } | ||
+ | } | ||
+ | ////////////////////////////////////////// | ||
+ | char writePort8574(char addr, char value) | ||
+ | /*addr, l' | ||
+ | value, la valeur à écrire sur le port | ||
+ | retourne -1 si échec 0 sinon */ | ||
+ | { | ||
+ | Wire.beginTransmission(addr);// | ||
+ | Wire.write((byte)value); | ||
+ | if (Wire.endTransmission()==0) | ||
+ | return 0; | ||
+ | else | ||
+ | return -1; | ||
+ | } | ||
+ | ////////////////////////////////////////// | ||
+ | |||
+ | //unité en milliseconde | ||
+ | uint32_t cadence_it=3; | ||
+ | uint32_t time_next_it=0; | ||
+ | |||
+ | |||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | // initialize the digital pin as an output. | ||
+ | pinMode(led, | ||
+ | Serial.begin(115200); | ||
+ | | ||
+ | Wire.begin(); | ||
+ | writePort8574( SLAVE_ADDR_8574_B , 0xff); //configure le composant B en entrée | ||
+ | writePort8574(SLAVE_ADDR_8574_A, | ||
+ | delay(1000); | ||
+ | writePort8574(SLAVE_ADDR_8574_A, | ||
+ | | ||
+ | } | ||
+ | |||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | |||
+ | controleur(); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | void controleur() | ||
+ | { | ||
+ | byte consigne_vitesse; | ||
+ | |||
+ | readPort8574(SLAVE_ADDR_8574_B,& | ||
+ | |||
+ | writePort8574(SLAVE_ADDR_8574_A, | ||
+ | |||
+ | Serial.println(consigne_vitesse); | ||
+ | |||
+ | motor.setSpeed(consigne_vitesse); | ||
+ | |||
+ | |||
+ | motor.run(FORWARD); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | motor.run(RELEASE); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | motor.run(BACKWARD); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | motor.run(RELEASE); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
Ligne 488: | Ligne 940: | ||
+ | <file cpp interaction_serial.ino> | ||
+ | #include < | ||
+ | //adresses codées sur 7bits | ||
+ | #define SLAVE_ADDR_8574_A 0x3E | ||
+ | #define SLAVE_ADDR_8574_B 0x3F | ||
+ | |||
+ | ////////////////////////////////////////// | ||
+ | char readPort8574(char addr, char * ptr_value) | ||
+ | /*addr, l' | ||
+ | ptr_value, pointeur pour renvoyer la valeur lue sur le port | ||
+ | retourne -1 si échec 0 sinon*/ | ||
+ | { | ||
+ | Wire.requestFrom((byte)addr, | ||
+ | if (Wire.available() == 1) //si l' | ||
+ | { | ||
+ | (* ptr_value) = Wire.read(); | ||
+ | return 0; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | (* ptr_value) = 0; //valeur par défaut si le composant n'a pas acquité | ||
+ | return -1; | ||
+ | } | ||
+ | } | ||
+ | ////////////////////////////////////////// | ||
+ | char writePort8574(char addr, char value) | ||
+ | /*addr, l' | ||
+ | value, la valeur à écrire sur le port | ||
+ | retourne -1 si échec 0 sinon */ | ||
+ | { | ||
+ | Wire.beginTransmission((byte)addr);// | ||
+ | Wire.write((byte)value); | ||
+ | if (Wire.endTransmission() == 0) //stoppe la transmission | ||
+ | return 0; | ||
+ | else | ||
+ | return -1; | ||
+ | } | ||
+ | ////////////////////////////////////////// | ||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | Serial.print(" | ||
+ | Wire.begin(); | ||
+ | writePort8574( SLAVE_ADDR_8574_B , 0xff); //configure le composant B en entrée | ||
+ | } | ||
+ | ////////////////////////////////////////// | ||
+ | void loop() | ||
+ | { | ||
+ | char val; | ||
+ | |||
+ | if (Serial.available() > 0) { | ||
+ | val = Serial.read(); | ||
+ | writePort8574(SLAVE_ADDR_8574_A, | ||
+ | switch (val) { | ||
+ | case ' | ||
+ | break; | ||
+ | case ' | ||
+ | break; | ||
+ | case ' | ||
+ | break; | ||
+ | default: | ||
+ | break; | ||
+ | |||
+ | } | ||
+ | Serial.println((int)val, | ||
+ | } | ||
+ | /* | ||
+ | |||
+ | if (readPort8574(SLAVE_ADDR_8574_B,& | ||
+ | { | ||
+ | // Serial.print(" | ||
+ | | ||
+ | } | ||
+ | |||
+ | delay(100); | ||
+ | |||
+ | } | ||
+ | </ | ||
====Modèles des pièces 3D==== | ====Modèles des pièces 3D==== | ||
<file cpp connecteur_moteur_potar_2.scad> | <file cpp connecteur_moteur_potar_2.scad> | ||
- | |||
//B. Vandeportaele 09/2020 | //B. Vandeportaele 09/2020 | ||
//jeu=0.5; //pour connecteur | //jeu=0.5; //pour connecteur | ||
Ligne 496: | Ligne 1025: | ||
///////////////////////////// | ///////////////////////////// | ||
- | module tige_biseau(){ | + | module tige_biseau(){ |
difference(){ | difference(){ | ||
cylinder(h=20, | cylinder(h=20, | ||
Ligne 510: | Ligne 1039: | ||
///////////////////////////// | ///////////////////////////// | ||
- | | + | |
difference(){ | difference(){ | ||
cylinder(h=20, | cylinder(h=20, | ||
Ligne 520: | Ligne 1049: | ||
///////////////////////////// | ///////////////////////////// | ||
module connecteur(){ | module connecteur(){ | ||
+ | rotate([180, | ||
difference(){ | difference(){ | ||
- | cylinder(h=20,d=13, | + | cylinder(h=16,d=11, |
- | translate([0, | + | translate([0, |
- | tige_biseau2(); | + | |
- | | + | # |
- | | + | |
tige_biseau(); | tige_biseau(); | ||
} | } | ||
} | } | ||
///////////////////////////// | ///////////////////////////// | ||
- | module chape(ep=3, | + | module chape(angle=0,ep=3, |
difference(){ | difference(){ | ||
hull() | hull() | ||
{ | { | ||
- | cylinder(h=3, | + | cylinder(h=ep, |
translate([long, | translate([long, | ||
- | cylinder(h=3, | + | cylinder(h=ep, |
} | } | ||
translate([0, | translate([0, | ||
- | tige_biseau(); | + | rotate([0, |
+ | | ||
translate([long, | translate([long, | ||
cylinder(h=20, | cylinder(h=20, | ||
Ligne 552: | Ligne 1083: | ||
h=21.4; | h=21.4; | ||
ep=2; | ep=2; | ||
- | entraxe=11; | + | entraxe=11.5; |
diamvis=2.8; | diamvis=2.8; | ||
- | hauteur=36.5; | + | hauteur=21; |
union(){ | union(){ | ||
difference(){ | difference(){ | ||
Ligne 573: | Ligne 1104: | ||
| | ||
# | # | ||
+ | translate([33.5-22, | ||
+ | # | ||
} | } | ||
} | } | ||
} | } | ||
///////////////////////////// | ///////////////////////////// | ||
- | // | + | |
+ | |||
+ | ///////////////////////////// | ||
+ | //pour 75mm de long+15mm partie male et - 7mm partie femelle | ||
+ | module rallonge(longueur){ | ||
+ | union(){ | ||
+ | difference(){ | ||
+ | cylinder(h=longueur, | ||
+ | translate([0, | ||
+ | // | ||
+ | | ||
+ | } | ||
+ | | ||
+ | tige_biseau(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | ///////////////////////////// | ||
+ | // | ||
+ | // | ||
+ | | ||
// | // | ||
//chape(); | //chape(); | ||
- | rotate([90, | ||
- | equerre(); | ||
+ | |||
+ | chape(90, | ||
+ | /*for (i=[1: | ||
+ | translate([0, | ||
+ | chape(90, | ||
+ | } | ||
+ | */ | ||
+ | // | ||
+ | |||
+ | // | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
===== Informations pratiques ===== | ===== Informations pratiques ===== |