Skip to content

Ejemplo de movimiento secuencial

📌 Sweep (Barrido) de 16 Servos

Este ejemplo realiza un barrido de 0° a 180° y de regreso a 0° en todos los servos simultáneamente.


📌 Cálculo del Ancho de Pulso

Antes de empezar, es importante conocer el ancho de pulso (duty) para la posición y 180°:

ÁnguloAncho de Pulso (ms)Valor en Cuentas
0.7 ms172
180°2.3 ms565

Si necesitas calcular otros valores de los extremos del servo, usa la siguiente fórmula:

nCuentas = Pulso_ms * (frecuencia_Hz / 1000) * 4096

⚠️ Nota: A menudo se ajustan los valores mínimos (0°) y máximos (180°) para obtener el rango correcto.

📌 Código en Arduino

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(0x40);
unsigned int pos0 = 172; // Ancho de pulso en cuentas para posición 0°
unsigned int pos180 = 565; // Ancho de pulso en cuentas para posición 180°
void setup() {
servos.begin();
servos.setPWMFreq(60); // Frecuencia PWM de 60Hz (T = 16.66ms)
}
void loop() {
// Barrido de 0° a 180°
for (int duty = pos0; duty < pos180; duty += 10) {
for (int n = 0; n < 16; n++) {
servos.setPWM(n, 0, duty);
}
}
delay(1000);
// Barrido de 180° a 0°
for (int duty = pos180; duty > pos0; duty -= 10) {
for (int n = 0; n < 16; n++) {
servos.setPWM(n, 0, duty);
}
}
delay(1000);
}