Ultrasonics - Yazılım

Not

Bu bölüm, yazılımdaki ultrasonikleri kapsar. Ultrasonik donanım kılavuzu için bkz Ultrasonik - Donanım.

Yüksek frekanslı ses kullanarak bir nesneye olan mesafeyi ölçmek için genellikle ultrasonik bir sensör kullanılır. Genel olarak, ultrasonik “field of view-görüş alanı” içinde en yakın nesneye olan mesafeyi ölçer.

WPILib tarafından yerel olarak desteklenen iki ana ultrasonik türü vardır:

Ping yanıtlı ultrasonik sensörler

Ultrasonic class (Java, C++), ping yanıtı ultrasonikleri için destek sağlar. Ping yanıtı ultrasonikleri (: adına göre) hem ping’i harcamak hem de yanıtı ölçmek için ayrı pinler gerektirdiğinden, kullanıcılar bir:code:Ultrasonic örneği oluştururken hem çıkış hem de giriş için DIO pin numaralarını belirtmelidir:

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

“Otomatik modda” ping yanıtı ultrasoniklerinin kullanılması şiddetle tavsiye edilir, çünkü bu, WPILib’in birden fazla sensörün birbirini engellememesini sağlamasına olanak tanır:

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

Analog ultrasonik sensörler

Bazı ultrasonik sensörler, ölçülen mesafeye karşılık gelen bir analog voltajı döndürür. Bu sensörler basitçe şu şekilde kullanılabilir AnalogPotentiometer sınıfı.

Third-party ultrasonics-Üçüncü taraf ultrasonik sensörler

Üçüncü taraflarca sunulan diğer ultrasonik sensörler, daha karmaşık iletişim protokolleri (I2C veya SPI gibi) kullanabilir. WPILib bu tür ultrasonikler için yerel destek sağlamaz; tipik olarak satıcı kitaplıkları ile kontrol edilecekler.

Ultrasonik sensör kodu kullanma

Ultrasonik sensörler, otonom rutinler sırasında aralığı belirlemek için çok kullanışlıdır. Örneğin, aşağıdaki kod, ultrasonik en yakın nesneye 12 inç (~ 30 cm) kadar bir mesafe ölçene kadar robotu ileri götürür ve sonra durur:

// 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);
    }
}

Ek olarak, ping yanıtı ultrasonikleri şu adrese gönderilebilir Shuffleboard, burada kendi widgetleri ile görüntülenecekler:

// 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);
}