EspaceTrain.Com - Le Forum

Modélisme ferroviaire => Arduino et ses clones, digital, électricité, électronique, logiciels => Arduino et ses clones => Discussion démarrée par: Ph Blondé le 01 Février 2025 à 18:51:35

Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Ph Blondé le 01 Février 2025 à 18:51:35
Bonjour à tous,

Je continue avec les Attiny et les quelques idées que j'avais pour réaliser des animations sur un réseau. Ici, il s'agit d'un simulateur de soudure à l'arc mais avec deux postes.

Le fonctionnement est simple : c'est une suite de séries de Flashes dont l'intensité, le nombre et la durée sont aléatoires. Entre deux séries il y a une extinction d'une durée, également aléatoire, comprise entre 0 et 4 s.

Voici mon court scénario :

- ANIMATION 1 - POSTE_SOUDURE_1

- DÉLAIS ENTRE ANIMATION 1 ET ANIMATION 2

- ANIMATION 2 - POSTE_SOUDURE_2

- DÉLAIS ENTRE ANIMATION 2 ET ANIMATION 3

- ANIMATION 3 – UNE SÉRIE DE FLASHES DU POSTE_SOUDURE_1

- DÉLAIS ENTRE ANIMATION 3 ET ANIMATION 4

- ANIMATION 4 – UNE SÉRIE DE FLASHES DU POSTE_SOUDURE_2

- DÉLAIS ENTRE ANIMATION 4 ET ANIMATION 1

C'est un exemple, naturellement, on peut modifier l'ordre et les effets tant dans leur longueur que dans les valeurs ou les répétitions.
Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Ph Blondé le 01 Février 2025 à 18:52:46
Le schéma d'une complexité sans pareil  :)  :) :

DEUX POSTES SOUDURE ARC 1.jpg


Et la réalisation :

DEUX POSTES SOUDURE ARC 2.JPG
Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Ph Blondé le 01 Février 2025 à 18:55:18
Le code (le programme quoi  ::)  )

Comme à d'habitude j'essaye de faire au plus simple même si c'est un peu plus long.

// MODULE SOUDURE A L'ARC ; MAJ 2025-01-26 - Version 1
// Chargement à 8 MHz - Pour le chargement ne pas oublier : Programmateur = "Arduino as ISP"

// FONCTIONNEMENT
// Suite de séries de Flashes dont l'intensité, le nombre et la durée sont aléatoires.
// Entre deux séries : extinction d'une durée aléatoire comprise entre 0 et 4 s.

// La valeur des bornes mini/maxi des différentes "random" est directement écrite dans le code.
// On peut aussi déclarer ces bornes mini/maxi dans "DECLARATION DES VARIABLES"

// REPERAGE DES BROCHES D'UN ATtiny45 OU 85 :
// Broche 1 : Reset       Broche 8 : 5V
// Broche 2 : A3 ou 3     Broche 7 : A1 ou 2
// Broche 3 : A2 ou 4     Broche 6 : 1 (PWM)
// Broche 4 : GND         Broche 5 ; 0 (PWM)

// DECLARATION DES VARIABLES
const int Flash_1 = 0; // Broche 5 (PWM)
byte Intensite_Flash_1;
byte Duree_Flash_1;
byte Temps_Extinction_Entre_Deux_Flashes_1;
byte Nombre_De_Flashes_1_A_Faire;

const int Flash_2 = 1; // Broche 6 (PWM)
byte Intensite_Flash_2;
byte Duree_Flash_2;
byte Temps_Extinction_Entre_Deux_Flashes_2;
byte Nombre_De_Flashes_2_A_Faire;

byte Temps_Entre_Deux_Series_De_Flashes;
byte Nombre_De_Boucles;

void setup ()
{
  pinMode (Flash_1, OUTPUT);
  pinMode (Flash_2, OUTPUT);
}

void loop ()
{
  Temps_Entre_Deux_Series_De_Flashes = random (0, 4); // Entre 0 et 4 s

// ANIMATION 1 - POSTE_SOUDURE_1

// PREMIERE SERIE DU POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (10, 20);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);
 
  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);
  delay (1000);

// DEUXIEME SERIE DU POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (10, 20);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);
 
  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);


// DELAIS ENTRE ANIMATION 1 ET ANIMATION 2
  Nombre_De_Boucles = 0;
  do
    { 
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 


// ANIMATION 2 - POSTE_SOUDURE_2

// PREMIERE SERIE DU POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (20, 45);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 70);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);
  delay (1000);

// DEUXIELE SERIE DU POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (20, 45);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 70);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);


// DELAIS ENTRE ANIMATION 2 ET ANIMATION 3
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes);


// ANIMATION 3 - POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (5, 30);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);


// DELAIS ENTRE ANIMATION 3 ET ANIMATION 4
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 


// ANIMATION 4 - POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (10, 60);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);


// DELAIS ENTRE ANIMATION 4 ET ANIMATION 1
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 
}

Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Ph Blondé le 01 Février 2025 à 18:56:33
J'ai utilisé des LEDs de 3 mm car cet ensemble sera placé dans une remise ; les plaquettes de « veroboard » sont  plus faciles à manipuler.

Si c'est pour une animation visible, préférer des LEDs  du type 0603 avec des fils émaillés déjà soudés  ;) .

Quelques instants de fonctionnement :


Pour le montage complet, compter dans les 5 Queuros.
Bon amusement
Philippe
Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Attiny le 03 Février 2025 à 14:13:22
Merci Philippe pour cette nouvelle version de la soudure à l'arc :D
Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Attiny le 03 Février 2025 à 14:49:56
Je me suis permis de mettre ton montage sur le simulateur WOKWI.
La simulation est visible en utilisant ce lien:  (https://wokwi.com/projects/421875056645819393)
Titre: ATtiny85 (ou 45) - Simulateur de soudure à l'arc - 2 postes
Posté par: Ph Blondé le 03 Février 2025 à 17:46:54
Citation de: Attiny le 03 Février 2025 à 14:49:56Je me suis permis de mettre ton montage sur le simulateur WOKWI.

La simulation est visible en utilisant ce lien:  (https://wokwi.com/projects/421875056645819393)
Et tu as bien fait  :D


C'est génial ce truc! Je ne connaissais pas et le place dans les favoris.
Encore merci à toi.