Uncle Den's Uncle Den's

TP3 Thérémine sonore

Février 2017 Mooc France Université Numérique FUN.

Consigne

servomoteur

TP4


Cette semaine, nous restons dans nos montages de feux en compliquant un peu la chose avec 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 :

 

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 appuye" dans le moniteur série lorsque l'appui a été détecté.


Le résultat en vidéo:




// Les vidéos et les codes de mes TP Arduino se trouvent sur mon site perso:
// http://uncledens.chez-alice.fr/arduino/index.htm
//
// Pour ce TP : https://youtu.be/zLJA9I9N2B4

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

Servo myservo;  // Crée l'objet SERVO pour controler le SERVOMOTEUR
int pos = 0;    // variable qui enregistre la position du SERVO
// définition des bornes d'entrée et sortie
const int rouge = 3;   //La led rouge est connectée à la PIN 3
const int verte = 4;   //La led verte est connectée à la PIN 4
const int bouton = 2;  //Le bouton est connecté à la PIN 2
const int servo = 9;  //Le servo est connecté à la PIN 9
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() {
  // On initialise dés le début l'état des led
  digitalWrite(rouge, HIGH);
  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è
    }
    // la barrière est levée, on peut allumer la led verte et éteindre la rouge
    digitalWrite(verte, HIGH);
    digitalWrite(rouge, LOW);

    delay(5000); // Attends 5 secondes
    // La led rouge s'allume et on éteind la verte
    digitalWrite(rouge, HIGH);
    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è
    }
  }
}








Voir mes Aquarelles - Mon site sur les aquarelles

Blog sur mes aquarelles