bonjour,
j'ai comme projet de fabrique une soudeuse par points, et je me suis dis que pour gérer la tempo une arduino, un relai et deux trois bricoles ferai parfaitement l'affaire,
donc le fonctionnement et simple:
- Je règle la durée de soudage, par potentiomètre 10K ohm, fourchette de 250 millis, fonction MAP 1 - 40;
- j'appuie sur un bouton poussoir (qui sera remplace par un capteur fin de course ou un bouton poussoir pour une fonction manuel de la soudure) et le relai claque pendant le temps defini plus haut
- une délai de 5000 millis en fin de boucle pour me laisser le temps de relâcher le fin de course pour éviter que la boucle se lance a nouveau (je crois que je pourrai dire aussi active le relai une seul fois mais je verrai ça par la suite)
j'utilise un TM1637 pour l'affichage de la durée en millis avant la soudure et il affiche 0000 pendant l'action de soudage (lorsque le relai et en NC) pour m'indique que ca soude simplement.
bon mon problème concrètement c'est que la valeur analogique n'est pas stable, du coup après calcul dans le code c'est encore pire, si je regle sur 1000 par exemple l'écran affiche 750 1000 1250 sans cesse...
donc sois ça vien de ma façon de rédiger mon code (en sachant que je début et que mes connaissance son limités) soit, ça vien de la partie électronique
par ailleurs: j'ai choisi volontairement de ne pas utiliser la fonction millis() pour mon code car je ne la maitrise pas, mais je pense que cela pourrai solutionner le problème...
je vous laisse mon code (trés inspiré de bout de code choppé sur le net dans différent tuto donc commenter en francais et en anglais parfois mais je pense que ça reste pas mal lisible
#include <TM1637Display.h>
const int CLK = 9; //Set the CLK pin connection to the display
const int DIO = 8; //Set the DIO pin connection to the display
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.
int pinPot = 0; //stocke le CAN utilisé
int valPot = 0; //variable pour récupérer la valeur de tension du potentiomètre. On l'initialise à 0.
int pinRELAI = 7;
int contact = 3;
int contactState = 0;
void setup() {
pinMode(3, INPUT); // mode input pour la pin du end stop
pinMode(7, OUTPUT); //mode OUTPUT pour le pin du relai
display.setBrightness(0x0a); //set the display to maximum brightness
Serial.begin(9600);
}
void loop() {
contactState = digitalRead(3);
Serial.println(contactState);
valPot = analogRead(A0); //lit la valeur de la tension, la numérise et la stocke dans valPot
int valInter = map(valPot, 0, 1023, 1, 40); //fonction de mappage
int attente = 250*valInter ; // calcul du temps d'arrêt
display.showNumberDec(attente, false, 4,0);
Serial.println(attente);
if (contactState == HIGH) {
valPot = analogRead(A0); //lit la valeur de la tension, la numérise et la stocke dans valPot
int valInter = map(valPot, 0, 1023, 1, 40); //fonction de mappage
int attente = 250 * valInter ; // calcul du temps d'arrêt
display.showNumberDec(0000, true, 4,0);
Serial.println(attente);
Serial.println(contactState);
digitalWrite(pinRELAI, HIGH); //on allume le RELAI
delay (attente); //attente calculée
digitalWrite(pinRELAI, LOW); //on éteint le RELAI
delay(2000); // delay avant nouveau loop
}
}
voila
merci,
Free