Skip to content

Servo

This content is not available in your language yet.

Un servomotor se mueve a una posición (un ángulo) y la mantiene. No se controla con un voltaje, sino con el ancho de un pulso que se repite unas 50 veces por segundo: el servo mide cuánto dura ese pulso y se coloca en el ángulo que le corresponde. La placa genera ese pulso por ti.

board.pinMode(9, board.MODES.SERVO);

valor se interpreta de dos formas según su tamaño:

  • Si valor es menor que 544 → se interpreta como grados (normalmente 0–180).
  • Si valor es 544 o más → se interpreta como microsegundos (el ancho del pulso directamente).

¿Por qué el corte en 544? Porque ningún servo gira a 544°: un número tan grande solo puede ser un ancho de pulso en microsegundos. Ese truco permite que la misma función acepte las dos unidades sin ambigüedad.

board.pinMode(9, board.MODES.SERVO);
board.servoWrite(9, 0); // 0°
board.servoWrite(9, 90); // 90° (centro)
board.servoWrite(9, 180); // 180°

En microsegundos (control directo del pulso):

board.servoWrite(9, 1500); // pulso de 1500 µs (≈ centro en la mayoría de servos)

Calibrar el recorrido: servoConfig(pin, minUs, maxUs)

Sección titulada «Calibrar el recorrido: servoConfig(pin, minUs, maxUs)»

Cada servo asocia un ancho de pulso a cada extremo de su recorrido. Estos dos parámetros, en microsegundos, le dicen a la placa cuál es ese rango:

  • minUs: ancho de pulso que corresponde a la posición mínima (0°).
  • maxUs: ancho de pulso que corresponde a la posición máxima (180°).

El rango estándar ronda los 544–2400 µs, pero los servos baratos varían: algunos necesitan ~500–2500, otros ~1000–2000. Calibra estos dos números si tu servo no llega a los extremos, o si zumba/fuerza al final del recorrido.

Tras servoConfig, cuando llamas a servoWrite en grados, la placa reparte 0–180° dentro de tu rango minUsmaxUs:

// Este servo va de 600 µs (0°) a 2400 µs (180°)
board.servoConfig(9, 600, 2400);
board.servoWrite(9, 0); // 0° → pulso de 600 µs
board.servoWrite(9, 180); // 180° → pulso de 2400 µs
board.pinMode(9, board.MODES.SERVO);
let angulo = 0;
let paso = 5;
setInterval(() => {
board.servoWrite(9, angulo);
angulo += paso;
if (angulo >= 180 || angulo <= 0) paso = -paso; // rebota en los extremos
}, 50);
  • Alimentar el servo desde la placa: los servos consumen bastante corriente. Si la placa se reinicia o el servo tiembla, usa una fuente externa y une las masas (GND común).
  • No calibrar: si no alcanza los extremos o zumba al final, ajusta minUs/maxUs.
  • Valores entre 181 y 543: por encima de 180 ya no es un ángulo útil y aún no llega a microsegundos. Usa grados (0–180) o microsegundos (≥ 544).