/
Tutoriel 01 - Moteur avec interrupteur de position

Tutoriel 01 - Moteur avec interrupteur de position

Objectif

L’objectif de ce tutoriel est de reproduire le comportement d’un mécanisme dont on souhaite restreindre le mouvement à l’aide d’un interrupteur de position. Ceux-ci sont typiquement utilisés 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 } } //**************************************************************************************************************************

Related content

Tutoriels - Page d'introduction
Tutoriels - Page d'introduction
More like this
Tutoriel 05 - Structure de programmes séquentiels
Tutoriel 05 - Structure de programmes séquentiels
More like this
Tutoriel 02 - Reproduire la fonction delay()
Tutoriel 02 - Reproduire la fonction delay()
Read with this
Tutoriel 04 - Encodeur de moteur
Tutoriel 04 - Encodeur de moteur
More like this
Tutoriel 11 - Conception de code séquentiel pour robots
Tutoriel 11 - Conception de code séquentiel pour robots
Read with this
Tutorial 01 - Switch limited motor
Tutorial 01 - Switch limited motor
More like this