Motor

tools
tools/Motor.h
tool stable stable

Tool: Motor Gestion d'un moteur GA12-N20 piloté DIRECTEMENT par un pont en H (2 broches de direction IN1/IN2 + 1 broche PWM d'activation EN). Fonctionnalités : (ex: L293D) partagé entre plusieurs moteurs, préférer la classe

Méthodes publiques

Méthode Description Paramètres Retour
Motor()
Motor();
Constructeur / Destructeur Initialise l'objet Motor. Le destructeur coupe le moteur (roue libre) afin d'éviter qu'il continue de tourner après la destruction de l'objet. /
Motor()
Motor();
Constructeur / Destructeur Initialise l'objet Motor. Le destructeur coupe le moteur (roue libre) afin d'éviter qu'il continue de tourner après la destruction de l'objet. /
begin()
begin(uint8_t pinIn1, uint8_t pinIn2, uint8_t pinEn);
Initialisation Configure les broches du moteur et le met à l'arrêt. / pinIn1: Broche IN1 (sens)
pinIn2: Broche IN2 (sens)
pinEn: Broche Enable / PWM (vitesse) /
setSpeed()
setSpeed(int8_t speed);
Commande de vitesse Définit la vitesse et le sens du moteur. La valeur est automatiquement bornée (constrain). speed == 0 équivaut à un appel à stop(). / speed: Vitesse de -100 (arrière max) à 100 (avant max). La valeur est automatiquement bornée (constrain). speed == 0 équivaut à un appel à stop(). /
stop()
stop();
Arrêt roue libre Coupe l'alimentation du moteur (IN1=IN2=LOW, PWM=0). Le moteur peut continuer à tourner librement par inertie. /
brake()
brake();
Freinage actif Court-circuite les deux bornes du moteur (IN1=IN2=HIGH, PWM=max) afin de le ralentir plus rapidement qu'un simple stop(). /
readSpeed()
readSpeed(int8_t& speed) const;
Lecture de la vitesse Récupère la vitesse actuellement appliquée. / speed: Référence pour stocker la valeur actuelle /
getSpeed()
getSpeed() const {
Vitesse actuellement appliquée (-100 à 100). /
getDirection()
getDirection() const;
Sens de rotation courant déduit de la vitesse appliquée. /
isInitialized()
isInitialized() const {
Indique si begin() a déjà été appelé avec succès. /
getStatus()
getStatus() const {

Méthodes privées


            begin(115200);;
begin(MOTOR_IN1, MOTOR_IN2, MOTOR_EN);;
setSpeed(80);;
delay(2000);;
brake();;
delay(500);;
setSpeed(-50);;
delay(2000);;
stop();;
delay(1000);;

                    

Variables membres


            return _currentSpeed;
return _initialized;
return _status;
uint8_t _pinIn1;
uint8_t _pinIn2;
uint8_t _pinEn;
int8_t _currentSpeed;

                    

Code source


        #pragma once
#include <Arduino.h>
#include "../StatusDevice.h"

namespace crepp::tools {

/**
 * @brief Sens / état de rotation d'un moteur piloté par pont en H.
 */
enum class MotorDirection : uint8_t {
    FORWARD  = 0, ///< Rotation avant (vitesse > 0)
    BACKWARD = 1, ///< Rotation arrière (vitesse < 0)
    STOPPED  = 2, ///< Moteur coupé, roue libre (vitesse == 0)
    BRAKING  = 3  ///< Freinage actif (bobines court-circuitées)
};

/*
 * =========================
 * Tool: Motor
 * -------------------------
 * Gestion d'un moteur GA12-N20 piloté DIRECTEMENT par un pont en H
 * (2 broches de direction IN1/IN2 + 1 broche PWM d'activation EN).
 *
 * @badge tool
 * @badge stable
 *
 * Fonctionnalités :
 * - Pilotage de la vitesse et du sens (-100 à 100)
 * - Arrêt "roue libre" (stop) et freinage actif (brake)
 * - Lecture de la vitesse actuelle et du sens de rotation
 * - Suivi de l'état d'initialisation via StatusDevice
 *
 * @note Pour piloter un moteur au travers d'un circuit driver dédié
 *       (ex: L293D) partagé entre plusieurs moteurs, préférer la classe
 *       crepp::tools::Motor_Driver associée à crepp::drivers::L293D_Handler.
 * =========================
 */
class Motor {
public:
    /*
     * =========================
     * Constructeur / Destructeur
     * -------------------------
     * Initialise l'objet Motor. Le destructeur coupe le moteur
     * (roue libre) afin d'éviter qu'il continue de tourner après
     * la destruction de l'objet.
     */
    Motor();
    ~Motor();

    /*
     * =========================
     * Initialisation
     * -------------------------
     * Configure les broches du moteur et le met à l'arrêt.
     * @param pinIn1 Broche IN1 (sens)
     * @param pinIn2 Broche IN2 (sens)
     * @param pinEn  Broche Enable / PWM (vitesse)
     */
    void begin(uint8_t pinIn1, uint8_t pinIn2, uint8_t pinEn);

    /*
     * =========================
     * Commande de vitesse
     * -------------------------
     * Définit la vitesse et le sens du moteur.
     * @param speed Vitesse de -100 (arrière max) à 100 (avant max).
     *              La valeur est automatiquement bornée (constrain).
     *              speed == 0 équivaut à un appel à stop().
     */
    void setSpeed(int8_t speed);

    /*
     * =========================
     * Arrêt roue libre
     * -------------------------
     * Coupe l'alimentation du moteur (IN1=IN2=LOW, PWM=0).
     * Le moteur peut continuer à tourner librement par inertie.
     */
    void stop();

    /*
     * =========================
     * Freinage actif
     * -------------------------
     * Court-circuite les deux bornes du moteur (IN1=IN2=HIGH, PWM=max)
     * afin de le ralentir plus rapidement qu'un simple stop().
     */
    void brake();

    /*
     * =========================
     * Lecture de la vitesse
     * -------------------------
     * Récupère la vitesse actuellement appliquée.
     * @param speed Référence pour stocker la valeur actuelle
     */
    void readSpeed(int8_t& speed) const;

    /**
     * @brief Vitesse actuellement appliquée (-100 à 100).
     */
    int8_t getSpeed() const { return _currentSpeed; }

    /**
     * @brief Sens de rotation courant déduit de la vitesse appliquée.
     */
    MotorDirection getDirection() const;

    /**
     * @brief Indique si begin() a déjà été appelé avec succès.
     */
    bool isInitialized() const { return _initialized; }

    StatusDevice getStatus() const { return _status; }

private:
    uint8_t _pinIn1;      ///< Broche IN1 du moteur
    uint8_t _pinIn2;      ///< Broche IN2 du moteur
    uint8_t _pinEn;       ///< Broche Enable du moteur
    int8_t _currentSpeed; ///< Vitesse actuelle du moteur

    bool _initialized = false; ///< true une fois begin() appelé

    StatusDevice _status = StatusDevice::DEVICE_ERROR_INIT;
};

/*
@example

@include
#include <crepp/tools/Motor.h>
@end_include

@macro
#define MOTOR_IN1 6
#define MOTOR_IN2 7
#define MOTOR_EN  8
@end_macro

@instance
crepp::tools::Motor motor;
@end_instance

@setup
  Serial.begin(115200);
  motor.begin(MOTOR_IN1, MOTOR_IN2, MOTOR_EN);
@end_setup

@loop
  motor.setSpeed(80);   // marche avant à 80%
  delay(2000);

  motor.brake();        // freinage actif
  delay(500);

  motor.setSpeed(-50);  // marche arrière à 50%
  delay(2000);

  motor.stop();         // roue libre
  delay(1000);
@end_loop

@end_example
*/

} // namespace crepp::tools