Как управлять несколькими сервоприводами с ESP32 - PullRequest
0 голосов
/ 30 сентября 2019

Я новичок в Arduino / ESP32. Я хочу управлять несколькими серводвигателями с помощью ESP32. Я хочу управлять всеми сервоприводами на разных скоростях и хочу использовать синусоидальную логику для управления скоростью.

У меня есть код, который может управлять 2 сервоприводами отдельно. Я приложил код здесь,

#include <ESP32Servo.h>
#include "esp32-hal-ledc.h"
// create two servo objects 
Servo servo1SV;
Servo servo2SV;

// Published values of servos; adjust if needed
int minUs = 550;
int maxUs = 2250;

// These are all GPIO pins on the ESP32
// Recommended pins include 2,4,12-19,21-23,25-27,32-33 
int servo1SVPin = 15;   //outlet valve
int servo2SVPin = 16;   //inlet valve


int pos = 0;      // position in degrees
ESP32PWM pwm;
void setup() {
    Serial.begin(115200);
    servo1SV.setPeriodHertz(50);      // Standard 50hz servo
    servo2SV.setPeriodHertz(50);      // Standard 50hz servo
}

void loop() {
    servo1SV.attach(servo1SVPin, 500, maxUs);
    servo2SV.attach(servo2SVPin, minUs, maxUs);  

//// About outlet valve

    for (pos = 0; pos <= 85; pos += 1) { // sweep from 0 degrees to 85 degrees
        // in steps of 1 degree
        servo1SV.write(pos);
        delay(10);             // Opening of outlet valve
    }
 delay(5000);            // Outlet valve stay openned for 5 sec 

    for (pos = 85; pos >= 0; pos -= 1) { // sweep from 85 degrees to 0 degrees
        servo1SV.write(pos);
        delay(10);            // closing of outlet valve
    }

// About inlet valve

    for (pos = 0; pos <= 70; pos += 1) { // sweep from 0 degrees to 70 degrees
        // in steps of 1 degree
        servo2SV.write(pos);
        delay(10);             // Opening of inlet valve 
    }
  delay(5000);            // Inlet valve stay openned for 5 sec

    for (pos = 70; pos >= 0; pos -= 1) { // sweep from 70 degrees to 0 degrees
        servo2SV.write(pos);
        delay(10);            // Opening of inlet valve
    }

    servo1SV.detach();
    servo2SV.detach();
    delay(5000);
}

Я хочу тот же вывод, который дается этим кодом, но с использованием синусоиды. Но я не знаю, как реализовать синусоидальную логику в ESP32. Как я могу это сделать?

1 Ответ

0 голосов
/ 30 сентября 2019

Я не уверен, что вы имеете в виду под

синусоидальной логикой

, но при условии, что вы хотите, чтобы положение сервопривода со временем было функцией синуса, и ваш вопросВот как получить эту функцию синуса:

Либо вы используете функцию Arduinos sin () , либо вы используете LUT.

Последнее чаще встречается, так как вы этого не делаетеприходится рассчитывать значения грехов каждый раз, что довольно дорого. Просто определите предварительно рассчитанный массив значений, который содержит ваши значения sin для каждого шага сервопривода.

...