servo-sweep.ino

Arduino Nano (Classic, ATmega328P) · Fichier : servo-sweep.ino · Langage : Arduino · Usage : Faire balayer un servo et suivre la position

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.
}

← Retour à la fiche