Bonjour,
Excusez moi pour le déterrage de ce sujet, mais c'est dans la continué du super code qu'à gentiment fournit Yvan.
Voila, je souhaite alimenter la bobine de commande de ma pompe hydraulique à débit variable, avec un joystick fournit.
Cependant, me manquant la carte produisant un signal PWM pour la bobine, je me tourne vers la solution de l'arduino (que je connaissais simplement de non, le mien devrait arriver lundi). Je précise également que mes bases electroniques et en programmation sont infimes, mais avec du courage tout est possible non ?
Pour planter le décor, mon joystick, est équipé d'un potentiomètre 200ohms et de deux résistances en série de 33ohms chacunes.
Avec une alimentation 5V avec l'arduino, à la sortie du joystick je peux faire varier entre 0 et 5V avec 2.5V pour le centre (sachant que j'ai besoin d'une inversion de polarité sur ma bobine, le débit de la pompe pouvant faire A -> B comme B -> A)
Quant a la bobine, qui est une commande proportionnelle du plateau de la pompe hydraulique, je dois l'alimenter avec une amplitude de 0 à 6V et 100mA max, pour finir une fréquence idéale entre 100 et 200Hz
L'alimentation de la bobine serait a priori réalisé avec un petit régulateur du style 7086.
Pour la fréquence, en utilisant la pin3, la valeur la plus proche pourra être 122Hz.
Je me suis permis de reprendre le code d'Yvan, supprimer la calibration qui ne me semble pas forcément utile (en regardant ce que la fonction analogRead collecte comme données) je devrais pouvoir adapter si les valeurs sont un peu décalés.
Voici ce qu'il en est sorti.
J'ai supprimé certains points dont je n'ai pas vraiment compris l'utilité, par exemple pourquoi passer à une amplitude de 128 (-64 a 64), saturer cette valeur, faire l'absolu, puis transposer entre 0 et 255 ? Enfin bon, n'étant pas du tout programmeur, pouvez-vous me dire ce que vous pensez de ce code ?Code:const int sensorPin = A0; // pin du potentiometre const int relaisPin = 2; // pin qui controle l'inversion const int bobinePin = 3; // pin qui controle la bobine const int blanc = 5; // zone morte de part et d'autre du neutre // variables: int x = 0; // the x value void setup() { // initialize the relay pin as an output: pinMode(relaisPin, OUTPUT); // passage de la pin 3 à 122Hz TCCR2B = TCCR2B & B11111000 | B00000110; } etPwmFrequ void loop() { // read the sensor: x = analogRead(sensorPin); // apply the calibration to the sensor reading x = map(x, 0, 1023, -255, 255); // if x is >0, turn relay on : if (x > blanc) { digitalWrite(relaisPin, HIGH); } else { digitalWrite(relaisPin, LOW); } delay(1); // delay in between reads for stability //définition de la zone morte centrale if (x > blanc) { x = (x - blanc); } else if (x < -blanc) { x = (x + blanc) ; } else { x = 0; } // calculer le signal PWM pour les moteurs int bobine = x ; // on calcule la valeur absolue bobine = abs(bobine); // send PWM to the motors analogWrite(bobinePin, bobine); }
(voici le message de la dernière version du code proposé par Yvan http://forums.futura-sciences.com/el...ml#post5017179 )
Si pour le moment je ne suis pas trop à côté de la plaque, j'aimerais bien discuter avec vous du choix à faire pour permettre l'inversion de la polarité, ainsi que le choix du composant pour alimenter la bobine (pas le générateur, je parle du transistor ou autre ?) qui conviendrait à cette utilisation.
C'est à dire avec les données indiqués précédemment, 6v, 100mA max environ et 200Hz, et avec le souhait d'avoir une grande fiabilité dans ces composants (j'estime l'utilisation à un taux de 20% par séquence de 2 ou 3 minutes et possible pendant 7 ou 8h d'affilé).
(d'ailleurs ma régulation à base de 7086 pour le 6V peut elle convenir avec ces conditions, si le refroidisseur est en conséquence ?)
Voila je vous remercie beaucoup, si vous avez des questions j'y répondrais avec plaisir. En espérant ne pas avoir raconté de trop grosse boulette
-----