samedi 8 août 2020

[Arduino] Servomoteur v2

La librairie

Pour piloter ces moteurs, l'utilisation de la libraire <Servo.h> facilite grandement la chose.

Parmi les fonctions proposées par la librairie servo.h, deux sont les plus utilisées :

  • attach(pin) : permet "d’attacher" le servomoteur au Pin d’asservissement
  • write(angle) : envoi le servomoteur à l’angle spécifié

Ces quatre autres fonctions pourront être utiles pour gérer plus finement les servomoteurs :

  • writeMicroseconds(us) : permet d’ajuster les positions limites si votre servomoteur n’est pas standard.
  • read(pin) : permet de lire l’angle du servomoteur
  • attached(pin) : permet de savoir si servomoteur est attaché au Pin spécifié
  • detach(pin) : pour détacher votre servomoteur du Pin spécifié
Pour installer la librairie, il faut se rendre dans "Croquis > Inclure une librairie > Gérer les bibliothèques". Dans la barre de recherche, insérer "Servo esp32" puis installer.

Le câblage

Les servomoteurs de positionnement angulaire permettent de déplacer précisément un objet dans une plage de 0° à 180° (le plus courant). Le branchement est presque toujours le même et se fera à l’aide de 3 fils dont voici les principales couleurs que vous pourrez rencontrer :

  • Rouge : alimentation +5V
  • Noir : commun à relier au Pin GND de la carte de développement
  • Orangejaune ou blanc : signal de positionnement
Câblage du servomoteur

Le code


#include <Servo.h>

Servo myServo;
const int SERVO_POSITION_MAX = 180;
const int SERVO_POSITION_MIN = 0;
int myServoPosition = 0;

void setup() {

  Serial.begin(9600); //Start the serial port
  while(!Serial){;}
  
  myServo.attach(9); //Servo attaches to pin 9 (PWM)
  
  //Small break 250 ms
  delay(250);
}

void loop() {

  //Reach the new position
  myServo.write(myServoPosition);
  myServoPosition++;

  //If position > 180 deg, return to '0'
  if(myServoPosition > SERVO_POSITION_MAX){
    
  myServoPosition = SERVO_POSITION_MIN;
  myServo.write(myServoPosition);

  //Delay to return to '0'
  delay(1000);
  }

  //Print the actual position
  Serial.println(myServo.read());

  //Delay 30ms
  delay(30);
}

Aucun commentaire:

Enregistrer un commentaire