Programmation des interrupteurs de fin de course

Les interrupteurs de fin de course sont souvent utilisés pour contrôler les mécanismes sur les robots. Bien que interrupteurs de fin de course soient simples à utiliser, ils ne peuvent détecter qu’une seule position d’une pièce en mouvement. Cette caractéristique fait des interrupteurs de fin de course les capteurs de choix pour s’assurer que le mouvement d’une pièce ne dépasse pas une certaine limite, mais aussi des capteurs inadéquats pas pour contrôler la vitesse du mouvement d’une pièce lorsque celle-ci s’approche de l’interrupteur de fin de course. Par exemple, un joint d’épaule rotationnel d’un bras de robot serait mieux contrôlé à l’aide d’un potentiomètre ou d’un encodeur absolu, la présence d’interrupteur de fin de course pourrait assurer que si jamais le potentiomètre est défaillant, l’interrupteur de fin de course empêcherait le bras du robot d’aller au-delà de sa position permise et causer des dommages.

Les interrupteurs de fin de course peuvent avoir des sorties « normalement ouvertes » ou « normalement fermées ». Cela permettra de contrôler si un signal au niveau haut signifie que l’interrupteur est ouvert ou fermé. Pour en savoir plus sur la partie matérielle de l’interrupteur de fin de course, consultez cet article.

Contrôle d’un moteur à l’aide de deux interrupteurs de fin de course

DigitalInput toplimitSwitch = new DigitalInput(0);
DigitalInput bottomlimitSwitch = new DigitalInput(1);
PWMVictorSPX motor = new PWMVictorSPX(0);
Joystick joystick = new Joystick(0);

@Override
public void teleopPeriodic() {
    setMotorSpeed(joystick.getRawAxis(2));
}

public void setMotorSpeed(double speed) {
    if (speed > 0) {
        if (toplimitSwitch.get()) {
            // We are going up and top limit is tripped so stop
            motor.set(0);
        } else {
            // We are going up but top limit is not tripped so go at commanded speed
            motor.set(speed);
        }
    } else {
        if (bottomlimitSwitch.get()) {
            // We are going down and bottom limit is tripped so stop
            motor.set(0);
        } else {
            // We are going down but bottom limit is not tripped so go at commanded speed
            motor.set(speed);
        }
    }
}