servo-balayage.ino

Arduino UNO R3 · Fichier : servo-balayage.ino · Langage : Arduino · Usage : Faire balayer un servo-moteur de 0 à 180 degrés

Le servo-moteur d'angle balaie lentement de 0 à 180° puis revient. La bibliothèque Servo du core Arduino génère l'impulsion de commande standard (1 à 2 ms toutes les 20 ms) sur n'importe quelle broche compatible.

Matériel requis

Une Arduino Uno R3 (ATmega328P, 5 V, 16 MHz) alimentée par USB ou jack 7-12 V. 1 servo d'angle type SG90 (fiche 3 fils : signal, +, -).

Câblage

Fil orange (signal) sur la broche 9, fil rouge (+) sur 5V, fil marron/noir (-) sur GND. Pour un gros servo, alimenter en externe avec masse commune.

Fonctionnement

myservo.write(angle) envoie l'impulsion correspondant à l'angle. La boucle incrémente l'angle de 1° toutes les 20 ms et inverse le sens aux extrémités.

Exécution

Dans l'Arduino IDE, choisissez la carte « Arduino Uno » et le port série correspondant, puis cliquez sur Téléverser. Ouvrez le moniteur série à 9600 bauds pour suivre les messages.

Variantes

Piloter l'angle avec un potentiomètre (map(analogRead(A0), 0, 1023, 0, 180)), ou ajouter un "soft start" en variant la vitesse de balayage.

servo-balayage.ino

// Balayage d'un servo d'angle (SG90, MG90S, etc.) avec la lib Servo.
#include <Servo.h>

Servo myservo;
int angle = 0;
int sens = 1;
const int PAUSE = 20; // ms entre deux degres

void setup() {
  myservo.attach(9);   // signal du servo sur la broche 9
  myservo.write(0);
  Serial.begin(9600);
  Serial.println(F("Balayage servo 0-180"));
}

void loop() {
  myservo.write(angle);
  Serial.println(angle);

  angle += sens;
  if (angle >= 180) sens = -1;
  if (angle <= 0) sens = 1;

  delay(PAUSE);
}

// Alimentation : un servo qui tire sur le 5V de la carte fait
// planer le micro (reset). Pour un gros servo, alimenter par une
// source externe 4,8-6V en reliant les masses (GND commun).
// La lib Servo occupe les timers 1 et 2 sur les AVR : attention
// aux conflits avec analogWrite() sur les broches 9/10.

← Retour à la fiche