Minuteur 7-segments

De Wikidebrouillard.

Article incomplet en cours de rédaction
La vidéo "Minuteur 7-segments"


Sommaire

Présentation de l'expérience

Marre de rater vos pâtes ? Fondante au lieu d'être "Al Dente" ? Atteignez la perfection grâce à ce magnifique minuteur Arduino UNO à afficheur 7-segments ! Il s'adapte à toute les échelles temporelles. Envie de faire une sieste ? Changez la base de temps, réglez-le et dormez. Il vous réveillera de sa douce mélodie...stridente.

Matériel

  • Un câble USB


L'expérience

La réalisation

Le code

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int seg1 = 13;
int seg2 = 12;
int seg3 = 11;
int seg4 = 10;
int seg5 = 9;
int seg6 = 8;
int seg7 = 7;
int Buzzer = 6;
int moins = 5;
int choix = 4;
int launch= 3;


// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(seg1, OUTPUT);     
  pinMode(seg2, OUTPUT); 
  pinMode(seg3, OUTPUT); 
  pinMode(seg4, OUTPUT); 
  pinMode(seg5, OUTPUT); 
  pinMode(seg6, OUTPUT);  
  pinMode(seg7, OUTPUT);
  pinMode(Buzzer, OUTPUT);  
  pinMode(moins, OUTPUT);
  pinMode(choix, INPUT); 
  pinMode(launch, INPUT);
   
}

// the loop routine runs over and over again forever:
void loop(){
  int incr = 0;              /* Mise en place de toute les variables*/
  int temps = 0;
  int decr = 0;
  int aff = 0;
  int lancer = 0;
  int seconde = 1000;
  int minute = 60000;
  int heure = 3600000;
  
  while(lancer == 0){             /*Tant que le bouton pour lancer */ 
    noTone(Buzzer);               /*le programme s’exécute.*/
    incr = digitalRead(choix);    /* lit l'entrée définit comme choix*/
    if (incr == HIGH) temps++;    /*si c'est haut augmente le temps*/
    if (temps > 9) temps = 0;     /*si il dépasse 9, remise à 0 */
    if (temps == 0){           /* affiche le 0 si le temps est à 0 */
     
      digitalWrite(seg1, HIGH);   /*allume le segment*/
      digitalWrite(seg2, HIGH);   /*allume le segment*/
      digitalWrite(seg3, HIGH);   /*allume le segment*/
      digitalWrite(seg4, HIGH);   /*allume le segment*/
      digitalWrite(seg5, HIGH);   /*allume le segment*/
      digitalWrite(seg6, HIGH);   /*allume le segment*/
      digitalWrite(seg7, LOW);    /*éteint le segment*/
    }
    if (temps == 1){           /* affiche le 1 si le temps est à 1 */
      digitalWrite(seg1, LOW);   
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, LOW);
    }
    if (temps == 2){           /* affiche le 2 si le temps est à 2 */
      digitalWrite(seg1, HIGH); 
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, LOW);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 3){           /* affiche le 3 si le temps est à 3 */
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 4){           /* affiche le 4 si le temps est à 4 */
      digitalWrite(seg1, LOW);    
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 5){           /* affiche le 5 si le temps est à 5 */
      digitalWrite(seg1, HIGH); 
      digitalWrite(seg2, LOW);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 6){           /* affiche le 6 si le temps est à 6 */
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, LOW);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 7){           /* affiche le 7 si le temps est à 7 */
      digitalWrite(seg1, HIGH);  
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, LOW);
    }
    if (temps == 8){           /* affiche le 8 si le temps est à 8 */
      digitalWrite(seg1, HIGH); 
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (temps == 9){           /* affiche le 9 si le temps est à 9 */
      digitalWrite(seg1, HIGH); 
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    lancer = digitalRead(launch);   /* lit l'entrée lancer*/
    if (lancer == HIGH) lancer = 1; 
    delay(1000);
  }
  
  if (lancer == 1){   /* si lancer est à 1*/
   aff = temps;       /* met le temps dans la variable d'affichage*/
   temps = temps * seconde; /* adapte le temps à l’échelle */
  }
   
  while((lancer == 1) && (temps != 0)){
    
    temps = temps - seconde;  /* décompte en milliseconde*/
    decr += 1;                
    if (decr == (seconde/1000)){  /*si 1 seconde de passée*/
      aff -= 1;               /*change le temps à afficher*/
      decr =0;     /* remise à zéro du compteur de décrémentation*/
      delay(500);                   /* attend 0.5 secondes*/
      tone(Buzzer, 2000);          /*fait sonner le buzzer*/
      delay(500);
      noTone(Buzzer);                  /* arrête le buzzer*/
    }
    else{ 
      delay(1000);
    }
    
    if (aff == 1){
      digitalWrite(seg1, LOW);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, LOW);
    }
    if (aff == 2){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, LOW);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 3){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 4){
      digitalWrite(seg1, LOW);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 5){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, LOW);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 6){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, LOW);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 7){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, LOW);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, LOW);
      digitalWrite(seg7, LOW);
    }
    if (aff == 8){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, HIGH);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
    if (aff == 9){
      digitalWrite(seg1, HIGH);
      digitalWrite(seg2, HIGH);
      digitalWrite(seg3, HIGH);
      digitalWrite(seg4, HIGH);
      digitalWrite(seg5, LOW);
      digitalWrite(seg6, HIGH);
      digitalWrite(seg7, HIGH);
    }
  }
    
  while((lancer == 1)&&(temps == 0)){
   
    digitalWrite(seg1, HIGH);
    digitalWrite(seg2, HIGH);
    digitalWrite(seg3, HIGH);
    digitalWrite(seg4, HIGH);
    digitalWrite(seg5, HIGH);
    digitalWrite(seg6, HIGH);
    digitalWrite(seg7, LOW);

    noTone(Buzzer);
    tone(Buzzer, 3500);
    incr = digitalRead(choix);
    if (incr == HIGH) lancer = 0;
    
  }
}

La manipulation

  • Brancher l'Arduino à l'ordinateur à l'aide du câble USB.
  • 0uvrir le code du Coffre avec le logiciel Arduino.
  • Téléverser le code dans l'Arduino.
  • Régler le temps à l'aide du bouton poussoir correspondant.
  • Lancer le compte à rebours à l'aide du bouton poussoir restant.
  • Une fois le 0 atteint, appuyer sur le premier bouton poussoir pour repasser au réglage du temps.

Que voit-on ?

Le temps est réglable, et chaque décrémentation d'unité de temps (seconde, minute ou heure) engendre un "Bip" sonore. Lorsque le compteur atteint 0, un "Bip" continu est alors généré jusqu'à l'appui sur le bouton de comptage.

Explications

De manière simple

Lors de l'appui sur le bon bouton poussoir, l'arduino reçoit un signal sur une de ses entrées, ce qui augmente le compte à rebours du minuteur. Lors de l'appui sur l'autre bouton poussoir, le signal reçu donne l'ordre à l'arduino de lancer ce compte à rebours.

À chaque unité de temps, le buzzer reçoit une fréquence pendant une demi seconde, ce qui génère un "bip" sonore. Lors de l'arrivée à 0 du minuteur, une fréquence différente est envoyée au buzzer jusqu'à l'appui sur le premier bouton poussoir. Après cet appui, le minuteur peut de nouveau être réglé puis relancé.

Questions sans réponses

Peut on changer la base de temps sans modifier le code?

Allons plus loin dans l'explication

On a utilisé un buzzer dans cette expérience, mais quelles sont les différentes sortes de buzzer ?

Liens avec d'autres expériences

Expériences sur Wikidébrouillard

Catégorie Arduino

Autres expériences

Autres expériences avec le même concept, recherche sur internet

(indiquer les liens).

Applications : liens avec le quotidien

Cuisson, départ de course, réveil.


Catégories

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
CO

Minuteur 7-segments

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique