// Sketch pour treuil modélisme valide pour ATtiny85 et IBT_4 // controle moteur DC avec valeur cible fixé par un signal rc et lecture sur un potentiometre de la position // Ce sketch pilote un pont en H IBT_4 (maximum 50 ampères) // La recopie position se fait avec un potentiomètre multitours (10) de 10K. // juste 2 sorties PWM pour piloter le pont en H int val1; //Valeur du signal recepteur int val2; // variable pour la lecture de la valeur analogique du potentiomètre asservissement int val3; // variable pour la valeur analogique du nombre de tours moteur int hyseteris = 15; // 10 stoppe déjà les tremblement moteur mais dépend de l'ordre de vitesse int max; // variable pour la lecture de la valeur maxi nombre de tours moteur int min; // variable pour la lecture de la valeur maxi nombre de tours moteur #define LPWM 0 // IN0 sur pin 0 #define RPWM 1 // IN1 sur pin 1 #define signal 2 // Signal radio attaché au Pin 2 #define pot1 3 // Potar asservissement attaché au Pin 3 void setup() { pinMode(signal, INPUT); // Signal entrée pinMode(pot1, INPUT); // Potar asservissement entrée } void loop() { val3 = 440; // Ici on défini le nombre de tours moteur, limiter la valeur entre 60 et 440 val3 = constrain(val3, 60, 440); max = (500 + val3); min = (500 - val3); val1 = pulseIn(signal, HIGH); //Alors stocker la valeur du signal dans Val1 val1 = map(val1, 1000, 2000, min, max); // min et max définnissent le nombre de tours moteur val1 = constrain(val1,min, max); // ici on limite le signal val2 = analogRead(pot1); // lis la valeur du potentiometre d'asservissement entre 0 et 1023 val2 = map(val2, 1, 1023, 1, 1023); val2 = constrain(val2, 1, 1023); if (val1 > (val2 + hyseteris)) { // reverse rotation int reversePWM = 254 ; // ordre de vitesse analogWrite(LPWM, 0); analogWrite(RPWM, reversePWM); } else if (val1 < (val2 - hyseteris)) { // forward rotation int forwardPWM = 254 ; // ordre de vitesse analogWrite(LPWM, forwardPWM); analogWrite(RPWM, 0); } else if (val1 < (val2 + hyseteris) && val1 > (val2 - hyseteris)) { int forwardPWM = 0; // stop int reversePWM = 0; // stop analogWrite(LPWM, forwardPWM); analogWrite(RPWM, reversePWM); } } |