Voici un post un peu plus détaillé pour ceux que cela peut intéresser:
Je ne m'attarde pas sur la réalisation de la pédale. Il y a un ou deux exemples très bien faits et la mienne ne ressemble pas a grand chose.
Il y a également des améliorations à apporter à ma version (blindage des cables, isolation de l'arduino par rapport aux hautes frequences du poste et mise en place d'un relais entre l'arduino et le poste pour ne pas cramer la carte du TIG ou l'arduino en cas de problème.
Néanmoins ce qui ne devrait pas trop bouger c'est le code, le voici:
[CODE]
//
// Fronius foot pedal
//
// Made by Paul Sauvignac
// License: CC-BY-NC-SA 3.0
boolean state = 0; // state at startup
boolean laststate = 0; //
int on = 8; // On pin
int off = 9; // Off pin
int up = 2; // Up amp pin
int down = 3; // Down amp pin
int value = 0; // Potentiometer value
int oldvalue = 0; //Potentiometer value of last read
int start = 30; //Potentiometer value for startup
int footstep = 10; //Percentage of variation for triggering push button
int duration = 200; //delay of each loop in ms
int push = 50; //duration of each push button in ms
int comparison = 0; //value to compare
void setup() {
pinMode(A0, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(A0));
delay(duration);
// On-off
if (analogRead(A0)>start) {
state = 1;
}
else {
state = 0;
}
// CHECK Serial.println(state);
if (!(state==laststate)) {
// CHECK Serial.println("works");
digitalWrite(on, LOW);
delay(push);
digitalWrite(on, HIGH);
}
laststate=state;
// Up-down
if (analogRead(A0)>start) {
value = analogRead(A0);
// Serial.print("value: ");
// Serial.println(value);
// Serial.print("oldvalue: ");
// Serial.println(oldvalue);
// Serial.print("Value + footstep: ");
// Serial.println(value + footstep);
if (value > ( oldvalue + footstep )){
digitalWrite(up, LOW);
delay(push);
digitalWrite(up, HIGH);
}
else if(value < ( oldvalue - footstep )){
digitalWrite(down, LOW);
delay(push);
digitalWrite(down, HIGH);
}
}
oldvalue = value;
}
[/CODE]
Vous remarquerez que j'ai défini des pin qui ne sont pas cablés. Il n'y a pas d'incidence normalement.
J'ai aussi laissé des lignes de tests (serialprint etc) qui sont commentés (précédées de //), aucune incidence la encore mais cela permet de faire des tests si vous le souhaitez
Pour le schéma, voir messages suivant dans la discussion
(le forum réduit automatiquement la taille et donc la résolution des images, c'est très désagréagle :( )
Le principe général:
L'arduino va lire la valeur analogique du potentiometre. En fonction de cette valeur et en comparaison à la valeur de la boucle précédente, il va envoyer un des 4 signaux On/off/up/down ou éventuellement ne rien faire.
Le poste doit être en mode 4T (normal, pas les variantes).
Ce système ne permet pas de gérer les intensités alternatives etc, en revanches les reglages de pre flow post flow etc qui sont faites sur le poste sont logiauement conservés.
Les valeurs que vous devez adapter à votre pédale en fonction de votre ressenti et de vos habitudes:
int start = 30; //Potentiometer value for startup
Il s'agit du seuil au dela duquel l'arduino va envoyer l'ordre de départ. AU repos, la pédale est relevé, le potentiomètre doit être entre 0 et 30 (sur une échelle de 1024).
Il est préférable de faire des tests pour savoir dans quel sens brancher votre potar. Si ca ne fonctionne pas, inverser le + et -
int footstep = 10; //Percentage of variation for triggering push button
Il s'agit du seuil au dela duquel l'arduino va envoyer une commande.
Par exemple, si lors de la derniere boucle, la valeur du potentiomètre était à 130, si lors de cette boucle elle est à 135, on ne fait rien. Si 141, alors on envoie un up et si a 119 alors on envoie un down
Cette variable est importante et dépend beaucoup de la course de votre pédale et de la démultiplication de la roue sur le potentiometre mais aussi de la durée des boucles.
Une boucle très rapide et un footstep trop important feront qu'il y aura très peu de signaux envovyés si vous bougez lentement. Inversement, une boucle rapide ou lente avec un footstep faible, vous enverrez beaucoup de signaux.
D'un coté on a une configuration qui est plutot molle, ne permet pas de grosse variation d'ampérage mais qui évite tout accident, de l'autre, plus de réactivité et d'amplitude mais plus de risque aussi, faut avoir le pied doux.
int duration = 200; //delay of each loop in ms
C'est la durée de pause entre chaque boucle. Il faut faire attention a ne pas mettre un chiffre trop faible (cf les capacités de l'arduino). Et adapter en fonction de ce que j'ai dit au dessus.
int push = 50; //duration of each push button in ms
C'est la durée du signal envoyé au poste.
Logiquement, cette durée doit toujours etre inférieure au délai entre chaque boucle pour éviter tout chevauchement.
J'ai mis 50ms arbitrairement et ca fonctionne correctement comme ca.
Pour le lien entre l'arduino et la prise fronius (qu'on peut acheter pour environ 20€) j'ai pris un cable ethernet de 5mètres, cela va très bien.
Je pense avoir mis tout le nécessaire. je vous tiendrai à jour des éventuelles améliorations.
Merci de ne pas diffuser celà sans mon accord et ainsi que de ne pas commercialiser un système s'en inspirant (mais bon je n'y crois pas trop).
L'ensemble revient environ à 50€ ce qui me semble très raisonnable.
Les prochaines versions risquent d'etre plus chères (quelques euros pour un écran LCD mais surtout 20€ pour un capteur a effet hall 200A AC/DC)
Je tiens à remercier les membres d'usinages.com, de soudeurs.com ainsi que du PTL genève pour leur aide très précieuse !!