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
- PREMIÈRE SÉRIE DE FLASHES DU POSTE_SOUDURE_1
- TRÈS COURTE PAUSE
- DEUXIÈME SÉRIE DE FLASHES DU POSTE_SOUDURE_1
- DÉLAIS ENTRE ANIMATION 1 ET ANIMATION 2
- ANIMATION 2 - POSTE_SOUDURE_2
- PREMIÈRE SÉRIE DE FLASHES DU POSTE_SOUDURE_2
- TRÈS COURTE PAUSE
- DEUXIÈME SÉRIE DE FLASHES DU 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.
Le schéma d'une complexité sans pareil :) :) :
DEUX POSTES SOUDURE ARC 1.jpg
Et la réalisation :
DEUX POSTES SOUDURE ARC 2.JPG
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);
}
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
Merci Philippe pour cette nouvelle version de la soudure à l'arc :D
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)
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.