servo-sweep.ino
El servo de posición es el actuador didáctico por excelencia: este barrido 0-180° en el pin 10 muestra attach/write y la lógica de rebrote. La librería Servo pilota la señal de 50 Hz en cualquier pin del Nano.
Hardware
Un Arduino Nano clásico (ATmega328P a 16 MHz, formato DIL de 30 patillas para breadboard, USB mini-B, lógica de 5 V, pin RESET abajo a la izquierda). Arduino Nano, servo tipo SG90, alimentación externa de 5 V si el movimiento va cargado (el USB solo limita a ~500 mA).
Cableado
Servo: marrón/negro→GND (común con el Nano), rojo→+5 V externo, naranja→D10. Masa común obligatoria.
Funcionamiento
Servo::write(angle) convierte el ángulo en ancho de impulso (1 ms = 0°, 2 ms = 180°) vía el timer. Un paso de 5° cada 20 ms da movimiento fluido sin tirones.
Ejecución
En el IDE de Arduino, selecciona la placa Arduino Nano y el procesador ATmega328P, elige el puerto serie y carga. El rail de 5 V de la placa conviene a sensores de 5 V; si no, usa 3,3 V en pines compatibles.
Variantes
Sustituye el barrido por seguimiento de potenciómetro (map(analogRead, 0, 1023, 0, 180)) o limita el recorrido mecánico para evitar crujidos.
servo-sweep.ino
// Balayage de servo 9g avec la bibliotheque Servo (Arduino Nano).
// Alimentez le servo par une source externe si plusieurs mouvements.
#include <Servo.h>
Servo myservo;
const int BROCHE = 10;
int angle = 0;
int sens = 1;
const int PAS = 5; // degres par iteration
const unsigned long PAUSE = 20; // ms entre pas
void setup() {
myservo.attach(BROCHE); // impulse 1 a 2 ms par defaut
Serial.begin(9600);
}
void loop() {
angle += sens * PAS;
if (angle >= 180) sens = -1;
if (angle <= 0) sens = 1;
myservo.write(angle);
Serial.print(F("angle="));
Serial.println(angle);
delay(PAUSE);
// myservo.read() n'existe pas : un servo de position ne renvoie
// pas sa position. Pour la mesurer, capteur potentiometre ou
// servo en rotation continue codeur.
}