🛠 Asservir un servo moteur avec un potentiomètre (PWM)
Objetivos
Controlar un servomotor estándar (señal de ancho de pulso) desde la Leonardo utilizando la biblioteca Servo, controlado por un potenciómetro. Identificará los 7 pines PWM de la placa (3, 5, 6, 9, 10, 11, 13, en PWM de 8 bits mediante analogWrite) — la biblioteca Servo genera sus propias impulsiones mediante temporizadores de hardware — y, sobre todo, las reglas de alimentación de un servo.
Material
- 1 Arduino Leonardo + cable micro-USB
- 1 micro servo (tipo SG90/MG90S)
- 1 potenciómetro en A0 (5V/GND)
- Alimentación externa de 5-6 V para el servo si hay varios servos o carga; nunca desde el pin 3V3 (máximo 50 mA)
Código completo
#include <Servo.h>
Servo monServo;
const uint8_t POT_PIN = A0;
const uint8_t SERVO_PIN = 9; // broche PWM (3, 5, 6, 9, 10, 11 ou 13)
void setup {
monServo.attach(SERVO_PIN); // impulse ~50 Hz, 1 a 2 ms
}
void loop {
int brut = analogRead(POT_PIN); // 0..1023
int angle = map(brut, 0, 1023, 0, 180); // 0..180 degres
monServo.write(angle);
delay(15);
}
Verificación esperada
El brazo del servo sigue al potenciómetro entre sus dos topes mecánicos (~0° y ~180°). El motor emite un ligero zumbido en posición: es normal en un servo estándar. Alimente el servo desde el 5V de la placa para un único SG90 pequeño; en cuanto se caliente o la placa se reinicie por falta de corriente, pase a una alimentación externa con GND común.
Errores frecuentes
- Alimentar el servo desde 3V3: este pin está limitado a 50 mA, un servo en pico demanda mucho más; la placa se reinicia.
- Masa no común: sin conectar GND entre la alimentación externa y la Leonardo, el servo vibra o no responde.
- Corriente por pin: los valores oficiales divergen (40 mA en la página de la tienda frente a 10 mA en tech-specs.yml; consulte la hoja de datos del ATmega32u4 antes de diseñar) — nunca alimente un servo directamente desde un pin digital.
- Olvidar que la biblioteca Servo ocupa temporizadores: en el ATmega32u4, algunos canales PWM (
analogWriteen 3/5/6/9/10/11/13) y otras bibliotecas pueden entrar en conflicto de temporizador. - Pin no PWM para un
analogWrite: los LED parpadean en todo-o-nada en lugar de variar; solo 3/5/6/9/10/11/13 son PWM.
Otros tutoriales para esta placa
- Faire clignoter la LED intégrée (broche 13)
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
- Lire un capteur analogique : potentiomètre et ADC 10 bits
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Souris USB : déplacer le curseur avec la bibliothèque Mouse
- Programmer aux registres : interruption Timer/Counter1
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino