servo-sweep.ino
Le servo de position est l'actionneur pédagogique par excellence : ce balayage 0-180° sur la broche 10 montre attach/write et la logique de rebroussement. La bibliothèque Servo pilote le signal 50 Hz sur n'importe quelle broche du Nano.
Matériel requis
Un Arduino Nano classique (ATmega328P à 16 MHz, brochage DIL 30 broches sur breadboard, USB mini-B, logique 5 V, broche RESET en bas à gauche). Arduino Nano, servo type SG90, alimentation externe 5 V si le mouvement est chargé (le USB seul limite à ~500 mA).
Câblage
Servo : brun/noir→GND (commun avec le Nano), rouge→+5 V externe, orange→D10. Masse commune obligatoire.
Fonctionnement
Servo::write(angle) convertit l'angle en largeur d'impulsion (1 ms = 0°, 2 ms = 180°) via le timer. Le pas de 5° toutes les 20 ms donne un mouvement fluide sans à-coups.
Exécution
Dans l'IDE Arduino, sélectionnez la carte Arduino Nano et le processeur ATmega328P, choisissez le port série puis téléversez. L'alimentation 5 V de la carte convient aux capteurs 5 V ; sinon utiliser le 3,3 V des broches adaptées.
Variantes
Remplacez le balayage par un suivi de potentiomètre (map(analogRead, 0, 1023, 0, 180)), ou limitez la course mécanique pour éviter les cracs.
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.
}