Ultrasons - Partie logicielle

Note

Cette section couvre le logiciel relatif aux capteurs ultrasoniques. Pour un guide sur le branchement électrique des capteurs à ultrasons, voir Ultrasons.

Un capteur à ultrasons est couramment utilisé pour mesurer la distance à un objet à l’aide d’un son haute fréquence. En règle générale, les capteurs à ultrasons mesurent la distance de l’objet le plus rapproché dans leur «champ de vision».

Il existe deux principaux types d’ultrasons pris en charge nativement par WPILib:

Capteurs à réponse ping

La classe Ultrasonic class (Java, C++) prend en charge les ultrasons à réponse ping. Comme les ultrasons à réponse ping (selon le: nom) nécessitent des broches distinctes pour émettre le ping et mesurer la réponse à celui-ci (écho), les utilisateurs doivent spécifier des numéros de broches DIO pour la sortie et l’entrée lors de la construction d’une instance Ultrasonic:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

Il est fortement recommandé d’utiliser les ultrasons à réponse ping en « mode automatique », car cela permettra à WPILib de s’assurer que plusieurs capteurs n’interfèrent pas entre eux:

// Starts the ultrasonic sensor running in automatic mode
ultrasonic.setAutomaticMode(true);

Capteurs à ultrasons analogiques

Certains capteurs à ultrasons renvoient simplement une tension analogique correspondant à la distance mesurée. Ces capteurs peuvent être simplement utilisés avec la classe AnalogPotentiometer

Capteurs ultrasoniques en provenance de tierce partie

D’autres capteurs à ultrasons proposés par certains manufacturiers peuvent utiliser des protocoles de communication plus complexes (comme I2C ou SPI). WPILib ne fournit pas de support intégré pour ces capteurs à ultrasons; ils seront généralement contrôlés avec les librairies des fournisseurs.

Utiliser les capteurs ultrasoniques dans le code

Les capteurs à ultrasons sont très utiles pour déterminer l’espacement lors de routines autonomes. Par exemple, le code suivant fera avancer le robot jusqu’à ce que l’ultrason mesure une distance de 12 pouces (~ 30 cm) à l’objet le plus proche, puis s’arrête:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

// Initialize motor controllers and drive
Spark left1 new Spark(0);
Spark left2 = new Spark(1);

Spark right1 = new Spark(2);
Spark right2 = new Spark(3);

SpeedControllerGroup leftMotors = new SpeedControllerGroup(left1, left2);
SpeedControllerGroup rightMotors = new SpeedControllerGroup(right1, right2);

DifferentialDrive drive = new DifferentialDrive(leftMotors, rightMotors);

@Override
public void robotInit() {
    // Start the ultrasonic in automatic mode
    ultrasonic.setAutomaticMode(true);
}

@Override
public void autonomousPeriodic() {
    if(ultrasonic.GetRangeInches() > 12) {
        drive.tankDrive(.5, .5);
    }
    else {
        drive.tankDrive(0, 0);
    }
}

De plus, les ultrasons à réponse ping peuvent être envoyés à Shuffleboard, où ils seront affichés avec leurs propres widgets:

// Creates a ping-response Ultrasonic object on DIO 1 and 2.
Ultrasonic ultrasonic = new Ultrasonic(1, 2);

public void robotInit() {
    // Places a the ultrasonic on the dashboard
    Shuffleboard.getTab("Example tab").add(ultrasonic);
}