🛠 Piloter un micro-servo avec le joystick
Objetivos
Salir de todo lo integrado: la Esplora deja muy pocos pines libres (A0–A6, A11, D5, D6, D9, D10 y D13 están consumidos por el hardware interno), y los comentarios de la biblioteca exponen oficialmente solo D3 y D11 como salidas externas. Este tutorial utiliza D3 para controlar un micro-servo de ángulo con el joystick analógico — el gesto de «mando» en versión mecánica.
Material
- Arduino Esplora + cable micro-USB.
- 1 micro-servo tipo SG90 (atención: no superar el presupuesto de corriente del puerto USB, protegido por un polyfuse de ~500 mA; un solo SG90 ligero pasa).
- 3 cables macho-hembra: señal → D3, +5 V, GND.
- Bibliotecas Esplora y Servo.
Código completo
/* Joystick -> servo sur la sortie externe D3 (seules D3 et D11 sont
documentees comme sorties externes sur Esplora). */
#include <Esplora.h>
#include <Servo.h>
const byte BROCHE_SERVO = 3; // sortie externe documentee
Servo moteur;
void setup {
moteur.attach(BROCHE_SERVO); // la lib Servo utilise un timer de l'ATmega32u4
moteur.write(90); // position neutre
Serial.begin(9600);
}
void loop {
int x = Esplora.readJoystickX; // -512 (gauche) .. 511 (droite)
// Mise a l'echelle vers 0..180 degres avec zone morte centrale
if (abs(x) < 20) x = 0;
int angle = map(x, -512, 511, 0, 180);
moteur.write(angle);
Serial.print("joyX="); Serial.print(x);
Serial.print(" angle="); Serial.println(angle);
// Bonus : le buzzer (D6) bipe proportionnellement a l'angle
if (Esplora.readButton(SWITCH_UP) == PRESSED) Esplora.tone(200 + angle * 4);
else Esplora.noTone;
delay(20);
}
Verificación esperada
Empuje el joystick hacia la izquierda: el servo gira hacia 0°. Hacia la derecha: 180°. En el centro (zona muerta de ±20), mantiene 90° sin zumbar. El monitor serie confirma la correspondencia joystick/ángulo. Pulse el botón superior: el zumbador emite un sonido cuya altura sigue el ángulo.
Errores frecuentes
- Conectar en un pin ocupado: D5/D6/D9/D10 (RGB + zumbador) y D13 (LED L) están tomados; A0–A6/A11 sirven para el multiplexor y el acelerómetro. Use solo D3 o D11.
- Servo que zumba en el centro: sin zona muerta, el ruido del joystick (±10) hace vibrar el servo; el
if (abs(x) < 20) x = 0;es indispensable. - Alimentación por el riel de 5 V demasiado exigente: varios servos o un modelo grande hacen caer el USB y disparan el polyfuse; aliméntelos con una fuente externa común con la masa conectada a la de la Esplora.
- Olvidar la zona 0/180: algunos fabricantes de servos admiten 10–170; si el servo se atasca en el tope, reduzca el rango del
map. - Conflicto de temporizador: la biblioteca Servo y
tonecomparten temporizadores del ATmega32u4; en esta placa ambos funcionan juntos, pero si añade bibliotecas PWM adicionales, verifique los conflictos de temporizador declarados por cada una.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
joystick-couleur.inoArduinojeu-boutons.inoArduinoslider-luminosite.inoArduinothermometre-couleur.inoArduinosonometre.inoArduinoaccelerometre-tilt.inoArduino