LOCODUINO

Forum de discussion
Dépôt GIT Locoduino

jeudi 19 janvier 2017

32 visiteurs en ce moment

Simulateur de soudure à arc

. Par : Christian Bézanger

Pour simuler la lumière émise par un poste de soudure à l’arc, il suffit de commander une DEL   blanche haute luminosité, comme on en trouve aujourd’hui dans les lampes torches, en la faisant s’allumer selon des flashes très courts, très rapprochés et se succédant de façon aléatoire.

C’est d’ailleurs le côté aléatoire des événements qui est difficile à reproduire avec de la logique câblée. Un tel montage avait été proposé dans Loco-Revue N° 603 de mai 1997 et il était basé sur trois circuits intégrés (plus quelques autres composants). Un des circuits fabriquait des trains d’impulsions à des fréquences différentes et ces signaux étaient ensuite autorisés ou non par un compteur décimal, à se recombiner entre eux grâce à des fonctions ET ou bien OU. C’était tout de même assez compliqué...

Train d’impulsions

Le montage que je vous propose fait appel à un module Arduino, une DEL   blanche et une résistance, et son comportement est réglable en fonction de vos goûts. La figure 1 montre un train d’impulsions émis par le programme, pour allumer la DEL. Ce train d’impulsion est appelé cycle de soudure. Le cycle est constitué d’un certain nombre d’événements, chaque événement étant constitué d’un flash d’une certaine durée, suivi d’une période intermédiaire d’une certaine durée également, au cours de laquelle aucune lumière n’est émise. Entre deux cycles existe une période de repos, pendant laquelle le soudeur contrôle son travail ou bien positionne sa pièce autrement.

JPEG - 159.7 ko
Figure 1

L’aléatoire pour éviter la reproductibilité des flashes

Notre programme permet de générer de façon aléatoire, les périodes entre deux cycles, pour chaque cycle le nombre d’événements, pour chaque événement les durées d’allumage et de repos de la DEL. Le résultat est un comportement complètement aléatoire des trains d’impulsions. Tout est réglable de manière à obtenir le fonctionnement le plus crédible possible lié à une activité humaine, mais cela permet aussi d’avoir des comportements différents pour plusieurs postes de soudure à arc, si le montage est reproduit en plusieurs exemplaires sur le même réseau.

Chaque donnée générée par le programme de façon aléatoire, a sa valeur comprise entre une valeur minimum et une valeur maximum. C’est en jouant sur les valeurs minimum et maximum pour chaque paramètre, qu’on peut modifier le comportement de notre simulateur. Avant d’aller plus loin, je vous invite à lire l’article « Comment gérer l’aléatoire ? » qui explique pourquoi et comment faire appel à l’aléatoire dans un programme.

Dans le langage Arduino, la fonction qui génère un nombre aléatoire est la fonction random. Elle est décrite à cette page.

Nous l’utiliserons sous sa forme : parametre = random (min, max) ;. parametre est alors compris entre min et (max - 1). parametre, min et max doivent être déclarés de type long.

Dans un programme, les nombres aléatoires sont toujours générés à partir d’une valeur de départ (le seed). La fonction randomSeed (voir aussi http://arduino.cc/en/Reference/Rand...) permet d’initialiser cette valeur de départ, par exemple randomSeed(valeur). Si valeur est une donnée fixe, à chaque fois qu’on lance (ou reset) le programme, celui-ci générera toujours la même suite de nombres aléatoires. Ce n’est pas très gênant (qui se rappellera de la suite ?), mais on peut faire mieux si valeur est aussi une donnée aléatoire. Ceci peut être obtenue par une lecture d’une entrée analogique laissée en l’air (non connectée) car elle aura tendance à capter les rayonnements parasites et donnera un peu n’importe quoi. L’initialisation se fait alors par : randomSeed (analogRead (0)) ;. bien entendu, il faut laisser l’entrée analogique A0 en l’air.

La figure 2 (dessinée avec Fritzing) montre le montage à réaliser : la résistance doit être choisie en fonction des caractéristiques de la DEL que vous utilisez. Pour calculer sa valeur, reportez-vous à l’article « Fonctionnement et pilotage d’une DEL ».

JPEG - 639.2 ko
Figure 2

Le programme suivant fait fonctionner le montage. Les paramètres sont présentés dans les commentaires. Les valeurs mini et maxi peuvent être modifiées comme je l’ai expliqué. Les valeurs maxi doivent être égales à ce que vous voulez plus 1, à cause du comportement de la fonction random (voir un peu plus haut). Dans ce programme, ce n’est pas trop important de tenir compte de cela, mais je vous en parle si vous voulez utiliser random pour d’autres applications.

Les choix que j’ai initialement faits sont les suivants :

  • période entre deux cycles, comprise entre 1,5 et 7 s.
  • nombre d’événements par cycle, compris entre 10 et 20
  • durée du flash, compris entre 10 et 100 ms
  • durée intermédiaire (LED éteinte), comprise entre 10 et 30 ms.

Bien entendu, vous pouvez choisir d’autres valeurs.

Voici le programme :

  1. // Ce programme commande une LED blanche
  2. // pour simuler un poste de soudure à l'arc.
  3. // Il fait appel à la fonction random qui
  4. // génère des nombres aléatoires.
  5.  
  6. // Duree_flash est la durée d'un flash.
  7. // Duree_int est la durée entre deux flashes.
  8. // Duree_flash et Duree_int forment un événement.
  9. // Nbre_even est le nombre d'événements au cours
  10. // d'un cycle de soudure
  11. // P_repos est la durée entre deux cycles de soudure.
  12.  
  13. // Toutes ces données sont aléatoires mais bornées
  14. // entre une valeur minimum et une valeur maximum.
  15. // En jouant sur l'intervalle, on peut simuler au
  16. // mieux l'effet de soudure à l'arc.
  17. // Broche est la broche sur laquelle la LED est
  18. // connectée.
  19.  
  20. // Initialisation des variables
  21. const byte Broche = 13 ;
  22. const long Duree_flash_mini = 10 ;
  23. const long Duree_flash_maxi = 101 ;
  24. const long Duree_int_mini = 10 ;
  25. const long Duree_int_maxi = 31 ;
  26. const long Nbre_even_mini = 10 ;
  27. const long Nbre_even_maxi = 21 ;
  28. const long P_repos_mini = 1500 ;
  29. const long P_repos_maxi = 7001 ;
  30.  
  31. // Fonction d'initialisation, nécessaire pour mise au point
  32. void setup ()
  33. {
  34. pinMode (Broche, OUTPUT) ;
  35. }
  36.  
  37. // Corps du programme
  38. void loop ()
  39. {
  40. long Nbre_even = random (Nbre_even_mini, Nbre_even_maxi) ;
  41. for (long i = 1 ; i <= Nbre_even ; i++)
  42. {
  43. long Duree_flash = random (Duree_flash_mini, Duree_flash_maxi) ;
  44. long Duree_int = random (Duree_int_mini, Duree_int_maxi) ;
  45. digitalWrite (Broche, HIGH) ;
  46. delay (Duree_flash) ;
  47. digitalWrite (Broche, LOW) ;
  48. delay (Duree_int) ;
  49. }
  50. long P_repos = random (P_repos_mini, P_repos_maxi) ;
  51. delay (P_repos) ;
  52. }

Télécharger

J’espère que cette application vous plaira et qu’elle agrémentera votre réseau.

5 Messages

Réagissez à « Simulateur de soudure à arc »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Un chenillard de DEL

Enseigne de magasin

Feux tricolores

Multi-animations lumineuses

L’Arduino et le système de commande numérique DCC

Un décodeur d’accessoire DCC versatile basé sur Arduino

Un moniteur de signaux DCC

Une barrière infrarouge

Un capteur RFID

Un TCO xpressnet

Une animation sonore

L’Arduino au coeur des systèmes de pilotage analogiques ou numériques

Calcul de la vitesse d’un train miniature avec l’Arduino

La génèse d’un réseau 100% Arduino

Une horloge à échelle H0

Simulateur de soudure à arc

Un automatisme de Passage à Niveau

La rétro-signalisation sur Arduino

Décodeur pour aiguillage à solénoïdes sur Arduino

Un décodeur DCC pour les signaux à deux ou trois feux sur Arduino NANO/UNO

Etude d’un passage à niveau universel

Réalisation pratique d’un système de mesure de vitesse à l’échelle N

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation

Un décodeur DCC pour 16 feux tricolores

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Comment piloter trains et accessoires en DCC avec un Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Comment piloter trains et accessoires en DCC avec un Arduino (4)

SGDD : Système de Gestion DD (1)

SGDD : Système de Gestion DD (2)

SGDD : Système de Gestion DD (3)

La PWM : qu’est-ce ? (1)

La PWM : qu’est-ce ? (2)

Mise en oeuvre du Bus CAN entre modules Arduino (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Un gestionnaire en C++ pour votre réseau (1)

Un gestionnaire en C++ pour votre réseau (2)

Un gestionnaire en C++ pour votre réseau (3)

Un gestionnaire en C++ pour votre réseau (4)

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)

Gestion d’une gare cachée (1)

Gestion d’une gare cachée (2)

Gestion d’une gare cachée (3)

Les derniers articles

Un gestionnaire en C++ pour votre réseau (4)


Pierre59

Un décodeur DCC pour 16 feux tricolores


Dominique, JPClaude, Thierry

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)


bobyAndCo

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)


Dominique

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation


JPClaude

Un gestionnaire en C++ pour votre réseau (3)


Pierre59

Réalisation pratique d’un système de mesure de vitesse à l’échelle N


Dominique

Etude d’un passage à niveau universel


Dominique, JPClaude

Un gestionnaire en C++ pour votre réseau (2)


Pierre59

Gestion d’une gare cachée (3)


Jean-Luc

Les articles les plus lus

La PWM : qu’est-ce ? (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Une barrière infrarouge

L’Arduino au coeur des systèmes de pilotage analogiques ou numériques

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)

Calcul de la vitesse d’un train miniature avec l’Arduino

L’Arduino et le système de commande numérique DCC

La rétro-signalisation sur Arduino

Comment piloter trains et accessoires en DCC avec un Arduino (1)