MTservo4fils
Gestion par événements pour UNO, Nano, Mega

Mesures préalables

Ce programme affiche les deux paramètres à mettre dans la définition de MTservo4fils. Si on met les bonnes valeurs, à l'initialisation le programme connaîtra la position du servo et ce dernier pourra ne pas bouger.

Le principe du fonctionnement est le suivant:

Une électronique de commande reçoit un ordre de positionnement (sous forme d'un signal PWM). Elle le compare avec la position de l'axe de sortie et agit sur le moteur en conséquence. La position de l'axe est mesurée grâce à un potentiomètre, et pour avoir un servo 4 fils, nous allons utiliser le même point de mesure en sortant le point milieu du potentiomètre. La valeur peut donc varier entre 0V et 5V, et nous allons la lire avec notre Arduino à l'aide d'une entrée analogique. Nous aurons ainsi une idée de la position et au démarrage nous allons la demander. Ainsi le servo ne bougera pas et ne fera pas de saut brusque.

Il n'y a pas la possibilité de connaître la valeur retournée par la conversion en fonction de la position autrement que par une mesure. pour la position 0° On peut lire une valeur proche de 0V ou proche de 5V, voire n'importe quelle valeur entre les deux, cela va dépendre du servo utilisé. C'est pareil pour la position 180°. L'objet de ce programme est donc d'indiquer ces deux valeurs.

On va donc positionner le servo à la position 0°, afficher la valeur après lui avoir laissé le temps de se stabiliser, puis faire pareil pour les 180°.

Programme complet recommandé

Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.

// Ce programme permet de mesurer les deux valeurs pour passer en paramètres
// pour un servo 4 fils

#include <MTobjects.h> // V1.0.2 Voir http://arduino.dansetrad.fr/MTobjects

const uint8_t PIN_SERVO = 9; // Sur Uno les broches commandes utilisables sont: 9, 10
                            // Sur Mega: 2, 3, 5, 6, 7, 8, 11, 12, 13, 44, 45, 46
const uint8_t POTENTIOMETRE = A1; // Info sur la position du servo


MTservo4fils Servo(PIN_SERVO, POTENTIOMETRE, can_pour_0_degree 0, can_pour_180_degree 1023); // Ces deux valeurs sont à mesurer pour chaque servo

void setup()
{
  Serial.begin(115200); // Préparation de la console
}

void loop()
{
  Serial.print(F("can_pour_0_degree : "));
  Servo.writeDegree(0);
  delay(2000 milli_secondes); // Il faut attendre que le servo soit bien en place
  Serial.print(analogRead(POTENTIOMETRE));

  Serial.print(F(",  can_pour_180_degree : "));
  Servo.writeDegree(180);
  delay(2000 milli_secondes); // Il faut attendre que le servo soit bien en place
  Serial.println(analogRead(POTENTIOMETRE));
}

Si le programme retourne

can_pour_0_degree : 823,  can_pour_180_degree : 54
can_pour_0_degree : 822,  can_pour_180_degree : 54
can_pour_0_degree : 823,  can_pour_180_degree : 52
can_pour_0_degree : 824,  can_pour_180_degree : 54
....

On mettra les prochaines fois:

MTservo4fils Servo(PIN_SERVO, POTENTIOMETRE, can_pour_0_degree 823, can_pour_180_degree 54);