TP Arduino N3

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 4

TP U2

TP Arduino N°3 : SERVOMOTEUR


Partie I :
Un servomoteur (souvent abrégé en « servo ») est un moteur capable de maintenir une opposition à
un effort statique et dont la position est vérifiée en continu et corrigée en fonction de la mesure.
C'est donc un système asservi. Un servomoteur est un système motorisé capable d'atteindre des
positions prédéterminées, puis de les maintenir.

Un servomoteur (souvent abrégé en « servo ») est un moteur capable de maintenir une opposition à
un effort statique et dont la position est vérifiée en continu et corrigée en fonction de la mesure.
C'est donc un système asservi. Un servomoteur est un système motorisé capable d'atteindre des
positions prédéterminées, puis de les maintenir. Parce que le servomoteur ne peut tourner que de
180°, et que l’entrée analogue du potentiomètre varie entre 0 et 1023, nous allons devoir utiliser une
fonction appelée map() qui va nous permettre de calculer automatiquement l’angle de rotation du
moteur. Afin de gérer le servomoteur sur la carte Arduino, nous allons utiliser la librairie externe
Servo.

Voici le montage à réaliser avec les composants fournis : Une fois le montage terminé et vérifié par
un assistant, vous pouvez le mettre sous tension et commencer la partie suivante : le code.

A vous de jouer, vous pouvez maintenant vous attaquer au code. Essayez de trouver et de
comprendre par vous-même. En cas de problème, vous pouvez demander de l’aide ou regarder la
correction ci-dessous.

1
TP U2

Partie II :
Dans cette partie, on va réaliser une barrière. Le montage à réaliser devra comporter :

 Un servomoteur qui jouera le rôle de barrière


 Un bouton pour demander l'ouverture de la barrière
 Un feu bicolore qui passera au vert lorsque la barrière sera complètement ouverte
Le scénario sera le suivant :

2
TP U2

Le fonctionnement normal est un feu allumé au rouge et une barrière fermée (0°). Le
fonctionnement normal est interrompu par l'appui sur un bouton poussoir.

Si l'appui du bouton est détecté, alors la barrière (actionnée par le servomoteur) se relève
doucement. Lorsque la barrière est à la verticale (90°), le feu vert s'allume pendant 5 secondes
pendant lesquelles la barrière reste ouverte (90°). Après les 5 secondes, le feu repasse au rouge, la
barrière redescend doucement et le fonctionnement normal reprend.

Aussi, nous souhaitons recevoir le message "Bouton appuyé" dans le moniteur série lorsque l'appui a
été détecté.

3
TP U2

#include <Servo.h> //Appel de la librairie "SERVO"


#define rouge 3 //La led rouge est connectée à la PIN 3
#define verte 4 //La led verte est connectée à la PIN 4
#define bouton 2 //Le bouton est connecté à la PIN 2
#define servo 9 //Le servo est connecté à la PIN 9
Servo myservo; // Crée l'objet SERVO pour controler le SERVOMOTEUR
int pos = 0; // variable qui enregistre la position du SERVO
int etatbouton = 0; // Vérification de l'état du bouton
void setup() {
myservo.attach(servo);
pinMode(rouge, OUTPUT); // Défintion des entrées/sorties
pinMode(verte, OUTPUT);
pinMode(bouton, INPUT);
}
void loop() {
digitalWrite(rouge, HIGH); // On initialise dés le début l'état des led
digitalWrite(verte, LOW);
etatbouton = digitalRead(bouton); // Lit l'état du bouton poussoir
if (etatbouton == HIGH)
{ // si bouton appuyé, alors on lève la barrière et on fait changer l'état des led, sinon, on reboucle
for (pos = 0; pos <= 90; pos += 1)
{ // on commence à actionner dans un sens la barrière, jusqu'à 90°, degrè par degrè
myservo.write(pos); // va à la position "POS"
delay(15); // attends 15ms avant de changer la position de la barrière
d'1 degrè
}
digitalWrite(verte, HIGH); // la barrière est levée, on peut allumer la led verte et éteindre la rouge
digitalWrite(rouge, LOW);
delay(5000); // Attends 5 secondes
digitalWrite(rouge, HIGH); // La led rouge s'allume et on éteind la verte
digitalWrite(verte, LOW);
//On referme ensuite la barrière
for (pos = 90; pos >= 0; pos -= 1) { // cette fois si, on passe de 90° à 0° (décroit à chaque fois
de -1)
myservo.write(pos); // va à la position "POS"
delay(15); // attends 15ms avant de changer la position de la barrière d'1
degrè
}
}
}

Vous aimerez peut-être aussi