खोज…


एक सर्वो मोटर को नियंत्रित करना

यह उदाहरण मानता है कि आपके पास निम्न विशेषताओं के साथ एक सर्वो है, जो विशिष्ट होता है:

  • 0 और 180 डिग्री के बीच आंदोलन
  • नाड़ी की अवधि 20 मि
  • न्यूनतम नाड़ी की लंबाई 0.5 मि
  • अधिकतम नाड़ी की लंबाई 2.5 मि

आपको यह जाँचने की आवश्यकता है कि क्या वे मान आपके हार्डवेयर से मेल खाते हैं, क्योंकि इसके द्वारा निर्दिष्ट ऑपरेटिंग रेंज के बाहर जाने के लिए यह सर्वो को नुकसान पहुंचा सकता है। बदले में एक क्षतिग्रस्त सर्वो में आपके एंड्रॉइड थिंग्स डिवाइस को नुकसान पहुंचाने की क्षमता है। उदाहरण ServoController वर्ग में दो विधियाँ, setup() और setPosition() :

public class ServoController {
    private double periodMs, maxTimeMs, minTimeMs;
    private Pwm pin;

    public void setup(String pinName) throws IOException {
        periodMs  = 20;
        maxTimeMs = 2.5;
        minTimeMs = 0.5;

        PeripheralManagerService service = new PeripheralManagerService();
        pin = service.openPwm(pinName);

        pin.setPwmFrequencyHz(1000.0d / periodMs);
        setPosition(90);
        pin.setEnabled(true);
    }

    public void setPosition(double degrees) {
        double pulseLengthMs = (degrees / 180.0 * (maxTimeMs - minTimeMs)) + minTimeMs;

        if (pulseLengthMs < minTimeMs) {
            pulseLengthMs = minTimeMs;
        } else if (pulseLengthMs > maxTimeMs) {
            pulseLengthMs = maxTimeMs;
        }

        double dutyCycle = pulseLengthMs / periodMs * 100.0;

        Log.i(TAG, "Duty cycle = " + dutyCycle + " pulse length = " + pulseLengthMs);

        try {
            pin.setPwmDutyCycle(dutyCycle);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

आप अपने डिवाइस पर PWM का समर्थन करने वाले पिन नामों की खोज कर सकते हैं:

PeripheralManagerService service = new PeripheralManagerService();

for (String pinName : service.getPwmList() ) {
    Log.i("ServoControlled","Pwm pin found: " + pinName);
}

अपने सर्वो को 80 डिग्री और 100 डिग्री के बीच हमेशा के लिए स्विंग करने के लिए, आप बस निम्नलिखित कोड का उपयोग कर सकते हैं:

final ServoController servoController = new ServoController(pinName);

Thread th = new Thread(new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                servoController.setPosition(80);
                Thread.sleep(500);
                servoController.setPosition(100);
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
});
th.start();

आप वास्तव में किसी भी सर्वो मोटर्स को कंप्यूटिंग डिवाइस को हुक किए बिना उपरोक्त सभी कोड को संकलित और तैनात कर सकते हैं। वायरिंग के लिए, अपने कंप्यूटिंग डिवाइस पिनआउट चार्ट (उदाहरण के लिए रास्पबेरी पाई 3 पिनआउट चार्ट यहां उपलब्ध है ) देखें।

फिर आपको अपने इमदाद को Vcc, Gnd, और सिग्नल पर हुक करना होगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow