Semaine 6 : Modélisation 2D

Avant d’imprimer des objets, il faut les modéliser

Bienvenue dans cette 6ème semaine du MOOC "La Fabrication Numérique". Cette semaine marque le début du module 2 consacré aux machines à commandes numériques.

Avant de parler de ces machines et de leur fonctionnement, nous avons souhaité vous parler d’une phase importante de la création d’un objet : la modélisation ! En effet, pour réaliser une pièce avec une fraiseuse ou une imprimante 3D, la première étape est de modéliser cette pièce grâce à un logiciel dédié et ainsi produire un fichier informatique compréhensible pour la machine cible. Nous verrons donc cette semaine au travers de trois vidéos quel vocabulaire, quels outils et quelles techniques sont nécessaires pour produire des modèles 2D exploitables par les découpeuses laser.

En parallèle de ces vidéos introductives, nous continuons à vous proposer des cours sur les concepts de base du prototypage électronique et du développement Arduino.

Bonne semaine !

Corrigé du TP 4

Corrigé du TP 4 : Feu bicolore et barrière

Voici la correction du TP de la semaine dernière qui reprend des éléments du cours sur les librairies logicielles.

Code

Voici une des solutions possibles pour répondre au problème dans l’état actuel de nos connaissances :

/*
  Feu bicolore et barrière
 
 TP de la semaine 5 du MOOC "La Fabrication Numerique" 
 
 Le montage :
 * Une LED rouge sur la broche 3 en serie avec une resistance de 220Ω
 * Une LED verte sur la broche 4 en serie avec une resistance de 220Ω
 
 * Un servomoteur branché sur les broches 9, +5V et GND
 
 * Bouton poussoir branché sur la broche 2 depuis +5V
 * Une résistance de 1KΩ bracnhé sur la broche 2 depuis GND
 
 créé le 18 Avril 2014
 par Baptiste Gaultier
 
 Ce code est en CC0 1.0 Universal
 
 https://www.france-universite-numerique-mooc.fr/courses/MinesTelecom/04002/Trimestre_1_2014/about
 
 */
 
#include <Servo.h> 
 
Servo servo;  // création de l'objet servo issu
              // du moule Servo
 

// Initialisation des constantes
const int bouton = 2;

const int ledRouge =  3;
const int ledVerte =  4;

// Déclaration des variables :
int etatBouton = 0;
int pos = 0;

// le code dans cette fonction est exécuté une fois au début
void setup() {
  // on souhaite communiquer avec l'ordinateur
  Serial.begin(9600); 
  
  // indique que les broches des LED
  // sont des sorties :
  pinMode(ledRouge, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  
  // indique que la broche bouton est une entrée :
  pinMode(bouton, INPUT);
  
  // on accroche notre servomoteur branché sur la broche 9
  servo.attach(9);
  
  // allume le feu rouge
  digitalWrite(ledRouge, HIGH); 
  
  // positionne la barrière horizontalement
  servo.write(0);
}
[[secret]]
```cpp
/*
  Feu bicolore et barrière
 
 TP de la semaine 5 du MOOC "La Fabrication Numerique" 
 
 Le montage :
 * Une LED rouge sur la broche 3 en serie avec une resistance de 220Ω
 * Une LED verte sur la broche 4 en serie avec une resistance de 220Ω
 
 * Un servomoteur branché sur les broches 9, +5V et GND
 
 * Bouton poussoir branché sur la broche 2 depuis +5V
 * Une résistance de 1KΩ bracnhé sur la broche 2 depuis GND
 
 créé le 18 Avril 2014
 par Baptiste Gaultier
 
 Ce code est en CC0 1.0 Universal
 
 https://www.france-universite-numerique-mooc.fr/courses/MinesTelecom/04002/Trimestre_1_2014/about
 
 */
 
#include <Servo.h> 
 
Servo servo;  // création de l'objet servo issu
              // du moule Servo
 

// Initialisation des constantes
const int bouton = 2;

const int ledRouge =  3;
const int ledVerte =  4;

// Déclaration des variables :
int etatBouton = 0;
int pos = 0;

// le code dans cette fonction est exécuté une fois au début
void setup() {
  // on souhaite communiquer avec l'ordinateur
  Serial.begin(9600); 
  
  // indique que les broches des LED
  // sont des sorties :
  pinMode(ledRouge, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  
  // indique que la broche bouton est une entrée :
  pinMode(bouton, INPUT);
  
  // on accroche notre servomoteur branché sur la broche 9
  servo.attach(9);
  
  // allume le feu rouge
  digitalWrite(ledRouge, HIGH); 
  
  // positionne la barrière horizontalement
  servo.write(0);
}

// le code dans cette fonction est exécuté en boucle
void loop(){
  // read the state of the pushbutton value:
  etatBouton = digitalRead(bouton);

  // si le bouton est appuyé
  if (etatBouton == HIGH) {
    // alors on envoie un message sur le moniteur série
     Serial.print("Bouton appuye");
     
    // puis on remonte la barrière de 90°
    for(pos = 0; pos <= 90; pos++) {
      servo.write(pos);
      delay(15);
    }
    
    // puis on allume le feu vert durant 5 secondes
    digitalWrite(ledRouge, LOW);
    digitalWrite(ledVerte, HIGH);
    delay(5000);
    
    // et on repasse au rouge
    digitalWrite(ledVerte, LOW);
    digitalWrite(ledRouge, HIGH);
    
    // enfin, on redescend la barrière
    for(pos = 90; pos>=0; pos--) {
      servo.write(pos);
      delay(15);
    }
  }
}
Un exemple de correction du TP 4

// le code dans cette fonction est exécuté en boucle

  // si le bouton est appuyé   if (etatBouton == HIGH) {     // alors on envoie un message sur le moniteur série      Serial.print("Bouton appuye");

          // puis on remonte la barrière de 90°     for(pos = 0; pos <= 90; pos++) {       servo.write(pos);       delay(15);     }

         // puis on allume le feu vert durant 5 secondes     digitalWrite(ledRouge, LOW);     digitalWrite(ledVerte, HIGH);     delay(5000);

         // et on repasse au rouge     digitalWrite(ledVerte, LOW);     digitalWrite(ledRouge, HIGH);

         // enfin, on redescend la barrière     for(pos = 90; pos>=0; pos—) {       servo.write(pos);       delay(15);     }   } }

Code: Un exemple de correction du TP 4
Montage
Montage de correction du TP 4
Montage de correction du TP 4
Schéma
Schéma électronique de correction du TP 4
Schéma électronique de correction du TP 4

Pour réaliser ce montage, vous avez besoin de :

  • Un Arduino
  • Une platine de prototypage
  • Un câble USB
  • Une résistance de 10kΩ
  • Deux résistances de 220Ω
  • Des fils de prototypage
  • Une photorésistance
  • Un servomoteur
  • Un bouton possoir
  • Une LED rouge
  • Une LED verte
  • Du temps :)

Notre correction s’arrête là. Pour des éclaircissements, nous vous invitons à poser vos questions sur le forum et à reparcourir le cours.

On vous laisse avec un montage très sympa réalisé par albert (vidéo postée sur la communauté Google+)  :

Introduction à la modélisation 2D

La modélisation 2D

Merci d’avoir regardé cette vidéo. Celle-ci constitue une brève introduction à la modélisation 2D. La suite  consiste à l’installation d'Inkscape, un logiciel de dessin vectoriel qui va nous permettre de dessiner les formes qui seront ensuite transformées en instructions machine compréhensibles par une découpeuse laser, une fraiseuse numérique…

Pour utiliser Inkscape, nous vous invitons à regarder la vidéo ci-dessous. Vous pouvez télécharger le texte de la vidéo ici. Aussi, il est fortement recommandé de lire les références proposées ici :

Références

Merci à Laurent Mattlé pour ce cours !

Initiation Inkscape

Les Diodes (suite)

Les Diodes, suite

Nous avons déjà rencontré la diode, le plus simple des semi-conducteurs. Voici quelques éléments de plus à son sujet, et aussi quelques cousins plus ou moins éloignés.

Un petit rappel du symbole électrique :

Symbole de la diode
Symbole de la diode

Quand l’anode se trouve à +0,7v par rapport à la cathode, la diode se met en conduction. Il ne faut pas laisser passer trop de courant, pour les 1N4148 c’est de l’ordre de 200mA maximum, pour un 1N4001 c’est de l’ordre de 1A. Au delà, les diodes surchauffent et elles se détruisent.

Dans le sens inverse (c’est-à-dire la cathode positive par rapport à l’anode) le courant ne passe pas, ou pas beaucoup : quelques nanoampères au plus à des tensions assez élevées. Notons aussi que les diodes ne supportent pas des tensions inversées sans limites : les petites 1N4148, par exemple, ne supportent pas plus qu’une centaine de volts…

Les DEL ou LEDs

C’est le truc qui s’allumait dans le tout premier montage. Les DEL sont fabriquées dans toutes sortes de formes et toute une gamme de couleurs – même des couleurs 'invisibles’ par l’œil humain comme l’infra-rouge (pour les télécommandes et les détecteurs optiques), et l’ultra-violet.

Le symbole :

Symbole de la led
Symbole de la led

Comme pour les diodes classiques ; les DEL exhibent une chute de tension. Cette tension est plus élevée, de l’ordre de quelques volts, et dépend du type et de la couleur. Il faut se référer aux documents techniques, ou au moins aux infos données à titre d’indication sur les sites de vente de composants électroniques, afin de savoir quelle est la chute de tension pour une DEL particulière. Exemple, le site Gotronic :

  • une DEL rouge : VF=1.6VV_F = 1.6 V ;
  • une DEL blanche : VF=3.5VV_F = 3.5 V

Pourquoi c’est si important ?

Parce que, comme pour les diodes classiques, si on laisse passer trop de courant la DEL est détruite très rapidement. Et comment limiter ce courant ? Allez, réfléchissez bien…

Oui, avec une résistance, bien sûr ! (Sinon, pourquoi avoir fait tout ce chemin, hein ?)

Et pour calculer la résistance pour limiter l’intensité, il nous faut deux valeurs : l'intensité maximale, et la chute de tension.

Prenons des exemples :

Quelques exemples de montage
Quelques exemples de montage
Ex. 1. Pour calculer R (en se rappelent que R=UIR = \frac{U}{I}) :
  • DELrougeVF=1.6VDEL_{rouge} V_F = 1.6 V ;
  • IMax=20mAI_{Max} = 20 mA (intensité maximale) ;
  • VAlim=5VV_{Alim} = 5 V.

Calculer R :

Ce circuit est alimenté par une tension de 5V5 V.  Allumée, la LED provoque une chute de tension de 1.6V1.6 V.  Il faut calculer la résistance pour qu’elle fasse 'chuter' 51.6=3.4V5 - 1.6 = 3.4 V.  On va appeler cette tension VRV_R

Pour limiter l’intensité à 20mA20 mA, utilisant R=UIR = \frac{U}{I} ; R=VRIMax=3.4V0.02A=170ΩR = \frac{V_R}{I_{Max}} = \frac{3.4 V}{0.02 A} = 170 \Omega

Ex. 2.
  • DELblancheVF=3.5VDEL_{blanche} V_F = 3.5 V ;
  • IMax=20mAI_{Max} = 20 mA (intensité maximale) ;
  • VAlim=5VV_{Alim} = 5 V.

Calculer R :

La chute de tension aux bornes de R : VR=VAlimVF=53.5=1.5VV_R = V_{Alim} – V_F = 5 – 3.5 = 1.5 V

Pour limiter l’intensité à 20mA, R=VRIMax=1.5V0.02A=75ΩR = \frac{V_R}{I_{Max}} = \frac{1.5 V}{0.02 A} = 75 \Omega

Ex. 3.
  • VAlim=12VV_{Alim} = 12 V.

Calculer R :

La chute de tension aux bornes de R : VR=VAlimVF=121.6=10.4VV_R = V_{Alim} – V_F = 12 – 1.6 = 10.4 V

Pour limiter l’intensité à 20mA, R=VRIMax=10.4V0.02A=520ΩR = \frac{V_R}{I_{Max}} = \frac{10.4 V}{0.02 A} = 520 \Omega

Ex. 4
  • DELrougeVF=1.6VDEL_{rouge} V_F = 1.6 V ;
  • IMax=20mAI_{Max} = 20 mA (intensité maximale).

Le courant que traverse la 1ère DEL traverse aussi la 2ème, donc IMaxI_{Max} reste inchangé.

Calculer R :

La chute de tension aux bornes de R : VR=VAlim2×VF=52×1.6=53.2=1.8VV_R = V_{Alim} – 2 \times V_F = 5 – 2 \times 1.6 = 5 - 3.2 = 1.8 V

Pour limiter l’intensité à 20mA, R=VRIMax=1.8V0.02A=90ΩR = \frac{V_R}{I_{Max}} = \frac{1.8 V}{0.02 A} = 90 \Omega

Ex. 5
  • DELblancheVF=3.5VDEL_{blanche} V_F = 3.5 V

Calculer R :

La chute de tension aux bornes de R : VR=VAlim2×VF=57=2VV_R = V_{Alim} – 2 \times V_F = 5 - 7 = -2 V

Aïe ! Ça ne marche pas : 5v ce n’est pas suffisant pour allumer les deux DEL en série !

Comment contourner le problème ? On peut toujours mettre les 2 DEL en parallèle :

Deux DEL en parallèle
Deux DEL en parallèle

Maintenant le courant qui traverse R est la somme de l’intensité à travers chaque DEL.

Donc IMaxI_{Max} devient 40mA.  La chute de tension est la même pour chaque DEL, donc VR=VAlimVF=53.5=1.5VV_R = V_{Alim} – V_F = 5 – 3.5 = 1.5 V

Et donc R=VRIMax=1.5V0.04A=37.5ΩR = \frac{V_R}{I_{Max}} = \frac{1.5 V}{0.04 A} = 37.5 \Omega

Attention cependant : on fait passer deux fois plus de courant à travers la résistance. Tout courant électrique à travers une résistance génère de la chaleur.  Les résistances standard les moins chères sont des résistances 0,25W.  Il faut vérifier si on dépasse 0,25W.

Pour calculer la puissance perdue (chaleur) par les 40mA à travers la résistance il nous faut une autre formule – encore très simple : P=I×UP = I \times U

avec :

  • PP : Puissance en Watts (la chaleur)
  • II : Intensité (en Ampères)
  • UU : Tension (en Volts)

Dans ce cas nous avons I=0.04AI = 0.04 A et U=1.5VU = 1.5 V donc P=0.06WP = 0.06 W. Ouf !

À noter que, si on veut allumer plusieurs LED/DEL ensembles, et que nous n’avons pas assez de tension pour les câbler en série, il vaut mieux donner une résistance en série pour chaque DEL .

Merci à Glenn Smith pour ce cours !

Arduinomètre : Thermomètre avec diode pour sonde

Première partie

Nous avons abordé le sujet des diodes du point de vue de leur rôle principal, c’est-à-dire de ne laisser passer le courant que dans un sens. Il existe plus de types de diodes qu’il y a de jours dans l’année : des diodes pour des tensions élevées, des diodes qui supportent les intensités élevées, des diodes rapides et j’en passe… Comme toujours il faut chercher la documentation technique pour 'sa' diode afin de savoir comment l’utiliser.

Et dans cette documentation on trouve parfois des informations intéressantes… Nous avons déjà parlé beaucoup de la chute de tension pour les LEDs – or une LED est quand-même une diode.

Cette chute de tension est de l’ordre de 0,5 à 0,7v pour la plupart des diodes. Mais si on creuse dans la documentation, les fabricants avouent parfois que tout n’est pas aussi simple.

Pour beaucoup de diodes, la chute de tension n’est pas fixe – et peut varier en fonction de plusieurs paramètres. Regardons cette courbe, tirée de la documentation 1N4148 de chez Fairchild Semiconductors :

Chute de tension en fonction du courant et de la température
Chute de tension en fonction du courant et de la température

Cette courbe nous renseigne sur deux phénomènes :

  • la chute de tension varie en fonction de l’intensité (dans des limites bien précises) ;
  • la chute de tension varie en fonction de la température de la diode.

La fonction Température/Intensité n’est pas très évidente avec cette courbe, mais si on prend quelques valeurs en suivant la ligne verticale qui correspond à une intensité de 500 uA, nous avons ceci :

Chute de tension en fonction de la température
Chute de tension en fonction de la température

C’est une fonction assez linéaire d’environ -2mV (-0,002v) par °C.

Donc, il devrait être possible de fabriquer un thermomètre Arduino avec une diode pour sonde.  Comment faire ?

Pour les plus impatients d’entre vous on va tout de suite à l’essentiel :

Le schéma
Branchement de la diode
Branchement de la diode

C’est tout ? Eh oui !

D’après la courbe ci-dessous on voit qu’il faut une faible intensité pour 'voir' le phénomène.

Dans ce montage, l’intensité à travers la diode, c’est combien ? (réponse en bas)

À cette faible intensité la diode ne risque pas de se chauffer elle-même et on peut lire la chute de tension directement par l’Arduino.

Mais il reste un problème de taille : comment calibrer ce montage ?

Deux possibilités…

  1. Calibration avec au moins deux températures connues (et donc un autre thermomètre) ;
  2. Approximation et triche…

(Moi, j’adore la deuxième !)

On va les aborder dans le désordre, parce que l’option 2 est rapide et facile à mettre en œuvre.

Approximation et triche

Il nous faut au moins un point de repère – une valeur connue de chute de tension pour une température donnée. À partir d’un point il est possible de travailler en 'extrapolant' (on va faire comme si la variation de chute de tension est exactement -2mV/°C).  C’est de l’approximation.

Si on regarde à nouveau la courbe de chute de tension, on voit que cette chute de tension est aussi fonction de l’intensité. Cela veut dire qu’on peut varier la valeur de tension 'lue' par l’Arduino simplement en variant l’intensité qui traverse la diode. Chouette ! On sait maintenant (car nous avons avalé la loi d’ohm en long et en travers) qu’on peut varier l’intensité en variant la résistance en série. Si on remplaçait la résistance de 10 kOhms par une résistance variable (potentiomètre) ? Comme ceci :

La diode en série avec un potentiomètre
La diode en série avec un potentiomètre

Encore une résistance fixe en série ! Pourquoi ?

Si on ne mettait qu’une résistance variable, et si on réglait cette résistance à bout de course cotée +5v notre pauvre diode se trouverait branchée directement entre le +5v et 0V/GND – sans rien pour limiter l’intensité. Elle ne durerait pas longtemps comme ça. J’ai mal juste en l’imaginant !

Donc la résistance de 4,7 kOhms est là pour protéger notre diode. L’intensité maximum sera de combien d’ampères ? (réponse en bas)

Maintenant il suffit de régler la résistance variable jusqu’à avoir une chute de tension bien précise.

Exemple : regardez la 1ère courbe : une valeur de chute de tension avec l’intensité d’environ 1mA et une température d’environ 20° c’est 600mV.

Voici notre montage sur une platine :

Montage de notre capteur de température fait maison
Montage de notre capteur de température fait maison

On va se mettre dans une pièce où on sait que la température est de 20° (le salon), on va laisser notre Arduino et la platine d’expérimentation s’acclimater pendant un quart d’heure (sur la table du salon : ça fait réagir la famille et donne un sujet de discussion) et on va régler la résistance variable pour que la valeur retournée par analogRead() corresponde à 600mV.

Voici un bout de logiciel pour le réglage :

/*
  Montage pour faire un thermomètre avec une diode pour sonde
  Premier partie : réglage avec potentiomètre
  La diode est montée en sens 'conduction' (cathode branche sur GND)
  avec une résistance fixe de 4.7k et une résistance variable de
  préférence de 10k en serie.
  
  On cherche à régler le montage pour que le résultat de analogRead();
  donne 558 (environ 600mV) a 20°C
  
  Avril 2014 MOOC Fabrication Numérique

*/
// Définition des broches
#define Diode A0 // broche de la diode
#define LED 13   // broche de la led

// variables:
int DiodeValue = 0;  // la valeur de la diode
float Result = 0.0;  // pour les calculs 

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  // Réference maximum pour le convertisseur ADC = 1,1v
  //  au lieu des 5v par défaut.
  analogReference(INTERNAL);
}

void loop() {
  DiodeValue = analogRead(Diode); // Lire la valeur
  Serial.print("Valeur : ");
  Serial.print(DiodeValue);
  // allumer la LED si la valeur est 558
  if (DiodeValue == 558 ) {
    digitalWrite(LED, HIGH); }
  else {
    digitalWrite(LED, LOW);
  }
  // conversion de la valeur en tension.  1,075 = 1,1v/1023
  Result = DiodeValue * 1.075;
  Serial.print("\t environ ");
  Serial.print(Result);
  Serial.println(" mV");
  delay(2000);
}

Quelques détails sur ce code :

Les nouvelles instructions :

Tension de référence

La chute de tension que nous voudrions mesurer est d’environ un demi-volt, et toujours inférieure à 1V (c’est le fabricant qui nous le dit). Par défaut, le Convertisseur Analogique -> Numérique (CAN ou ADC en anglais) de l’Arduino nous donne une valeur de 1023 pour une tension en entrée de 5v. Cela veut dire qu’une valeur de 1 dans cette échelle équivaut ( 5/1023 ) = 0,0049v ou presque 5mV. La chute de tension que nous allons mesurer varie de 2mV/°C et donc la résolution de lecture sera de presque +/- 3°C…

Mais l’Arduino possède des talents cachés… On peut lui demander, au lieu des 5v par défaut, de se référer à une valeur de tension de 1,1v avec la fonction analogReference(INTERNAL)

Maintenant une valeur de 1023 retournée par analogRead() correspond à 1,1v. Ce qui nous donne une résolution de lecture de 1.11023=0.001075V\frac{1.1}{1023} = 0.001075 V : moins de 2mV. C’est beaucoup mieux !

 

Suite(s)

Dans la deuxième partie on va fabriquer une sonde flexible et étanche afin de pouvoir mesurer la température dans des conditions contrôlées, mais aussi afin de faciliter l’étalonnage pour augmenter la fiabilité et la précision.

En attendant, réfléchir à comment convertir notre valeur de tension en valeur de température…

  • Réponse 1 : I=UR=5V10000Ω=0.5mAI = \frac{U}{R} = \frac{5 V}{10000 \Omega} = 0.5 mA (ou 500 uA si vous préférez…)
  • Réponse 2 : 5V4700Ω=1.06mA\frac{5 V}{4700 \Omega} = 1.06 mA

Merci à Glenn Smith pour ce cours !

Travaux pratiques

Tp à faire pour la semaine 7

Vous avez certainement entendu parler de la Useless Box.

La Useless Box en action
La Useless Box en action

Cette machine actionnée par un un interrupteur comporte un bras qui vient basculer l’interrupteur dans le sens opposé rendant cette machine totalement inutile (et donc indispensable :) ).

L’objectif de cette semaine est de dessiner avec Inkscape le bras de cette machine qui devra répondre aux impératifs fonctionnels décrits ici :

Cotes du bras à dessiner
Cotes du bras à dessiner

Ce bras sera ensuite utilisé dans la vidéo sur les découpeuses laser à venir dans 3 semaines !

À très bientôt,

L’équipe du MOOC