Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

« Previous Version 2 Current »

Objectif

L’objectif de ce tutoriel est de reproduire le comportement d’un mécanisme dont on souhaite restreindre le mouvement à l’aide d’une « limit switch ». Celles-ci sont typiquement utilisées pour indiquer qu’un mécanisme a atteint une certaine position, ou pour automatiquement arrêter le mouvement d’un moteur lorsque le mécanisme a atteint la limite de sa portée. En gros: on veut que le moteur arrête avant de tout casser !

Schéma électrique et présentation complète

Code

Téléchargez le code de démonstration:

Qui est ici retranscrit:

//**************************************************************************************************************************
// CrcDuino Tutoriel 1 - Moteur avec « limit switch »
//NOTE: Les servos à rotation continue ont souvent une vis de calibration sur le côté.
//      Si vous envoyez un "0" au servo et celui-ci tourne encore, ajustez la vis jusqu'à ce que le moteur s'arrête.
//      Cette calibration permet d'informer le servo de la position neutre: « Ok c'est bon, bouge plus ! »
//**************************************************************************************************************************
#include <CrcLib.h>  // Obligatoire

// C'est pratique d'avoir un nom pour chaque port de contrôle
#define SERVO_CONT_1 CRC_PWM_5
#define BTN_AVANCE CRC_DIG_1
#define LS1_SERVO_CONT_1 CRC_DIG_2

//**************************************************************************************************************************
void setup() {
  // Mettez votre code d'initialisation ici, il s'exécutera une seule fois, au début du programme
  CrcLib::Initialize(); // Initialise le CRCduino
  
  CrcLib::InitializePwmOutput(SERVO_CONT_1); // Configure la sortie du moteur
  CrcLib::SetDigitalPinMode(BTN_AVANCE, INPUT); // Configure le bouton de la « limit switch »
  CrcLib::SetDigitalPinMode(LS1_SERVO_CONT_1, INPUT);
}
//**************************************************************************************************************************
void loop() {
  // Mettez ici le code de la boucle principale, qui s'exécutera à l'infini
  CrcLib::Update(); // Tâches de routine du CRCduino

  if( CrcLib::GetDigitalInput(BTN_AVANCE) == LOW ) // Quand le bouton est appuyé (GND est connecté à l'entrée, donc CrcLib::GetDigitalInput() retourne LOW)
  {
    if( CrcLib::GetDigitalInput(LS1_SERVO_CONT_1) == HIGH ) // Mais seulement si la « limit switch » n'est pas enfoncée (5V à l'entrée, donc CrcLib::GetDigitalInput() retourne HIGH)
    {
      CrcLib::SetPwmOutput(SERVO_CONT_1, 127); // 127 -> Pleine vitesse
    }
    else  // Quand la « limit switch » est enfoncée...
    {
      CrcLib::SetPwmOutput(SERVO_CONT_1, 0);  // 0 -> On arrête
    }
  }
  else // Quand le bouton n'est pas enfoncé...
  {
    CrcLib::SetPwmOutput(SERVO_CONT_1, 0); // 0 -> On arrête
  }
}
//**************************************************************************************************************************
  • No labels

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.