Fiz a programação de um braço robótico, desses kits que a gente encontra na internet, é aquele com 4 servos, eu primeiro fiz ele no arduino e acabei portando para o ESP32, para controlar os servos eu estou usando o modulo controlador de servos de 16 canais, alimentado por uma fonte separada, para controlar os diferentes eixos estou usando 4 entradas analógicas com 4 potenciômetros de 10k.
O caso é que no servo que fica na base, fica oscilando e tremendo, como a fonte é externa, eu descartei o problema de energia.
Eu acredito que isso acontece justamente pela oscilação dos valores, existe alguma solução via código para resolver ou mesmo melhorar isso?
Segue o meu codigo:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#define SERVOMIN1 100
#define SERVOMAX1 600
#define SERVOMIN2 230
#define SERVOMAX2 500
#define SERVOMIN3 300
#define SERVOMAX3 480
#define SERVOMIN4 276
#define SERVOMAX4 488
#define pot1 34
#define pot2 35
#define pot3 32
#define pot4 33
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
int servo1 = 0;
int servo2 = 1;
int servo3 = 2;
int servo4 = 3;
void setup() {
Serial.begin(115200);
pwm.begin();
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
// pwm.setOscillatorFrequency(27000000);
delay(10);
}
void loop() {
/*uint16_t lido = analogRead(pot);
uint16_t angulo = map(lido, 0, 1023, SERVOMIN, SERVOMAX);
*/
int lido1 = analogRead(pot1);
int angulo1 = map(lido1, 0, 4096, SERVOMIN1, SERVOMAX1);
int lido2 = analogRead(pot2);
int angulo2 = map(lido2, 0, 4096, SERVOMIN2, SERVOMAX2);
int lido3 = analogRead(pot3);
int angulo3 = map(lido3, 0, 4096, SERVOMIN3, SERVOMAX3);
int lido4 = analogRead(pot4);
int angulo4 = map(lido4, 0, 4096, SERVOMIN4, SERVOMAX4);
pwm.setPWM(servo1, 0, angulo1);
pwm.setPWM(servo2, 0, angulo2);
pwm.setPWM(servo3, 0, angulo3);
pwm.setPWM(servo4, 0, angulo4);
Serial.println(angulo1);
}