Lycée Felix Le Dantec - Lannion
PROGRAMMATION ARDUINO
LE CHRONOMÈTRE
1STI2DTP11 - 3H
NOM : PRÉNOM :
CLASSE :
CONDITION DE RÉALISATION :
Travail en binôme Durée : 3 heures
Matériel : • un ordinateur avec le logiciel Arduino
• une maquette Arduino Uno
• une maquette shield « chronomètre »
• un cordon USB Documents : • le sujet du TP
Présentation
La carte shield « chronomètre » comporte deux afficheurs 7 segments et deux boutons poussoirs. L'objectif du TP est de réaliser un chronomètre secondes / dixième de secondes en utilisant cette carte.
La programmation se fera avec le logiciel Arduino.
✔ Hors tension connectez la carte shield « chronomètre » sur la carte Arduino. Prenez soin de ne pas casser des broches !
✔ Démarrez votre PC sous Ubuntu. Le compte à utiliser est sti2dsin, le mot de passe est sti2dsin.
✔ Connecter l'Arduino au PC avec un câble USB.
✔ Démarrez le logiciel Arduino. Vous pouvez démarrer !
Le schéma de la carte "chronomètre" est le suivant :
Notre chronomètre est un système élémentaire à deux afficheurs, le premier pour les secondes, le second pour les dixièmes de secondes.
Afin de limiter le nombre d’entrées–sorties au niveau du micro-contrôleur, on réalise un « affichage multiplexé » : Le code est envoyé sur les deux afficheurs en même temps mais seul un afficheur est allumé. On réalise un balayage en allumant puis éteignant chaque afficheur à tour de rôle à très grande vitesse ce qui évite de percevoir un clignotement.
Q1 A l’aide de la documentation technique des MAN74 disponible sur le site donnez le type de ces afficheurs (anodes ou cathodes communes ). Quel niveau logique faut-il mettre sur leur broche 4 pour les allumer ?
Q2 Quels sont les niveaux logiques à appliquer sur D2 à D8 pour allumer un segment ? bouton
jaune Bouton
noir
RAZ
Q1 et Q2 sont des transistors bipolaires NPN qui fonctionnent en commutation, soit comme des interrupteurs.
1er cas : la tension sur la base = 0V 2ème cas : la tension sur la base vaut +VCC
Le transistor est équivalent entre C et E à un interrupteur ouvert.
Le transistor est équivalent entre C et E à un interrupteur fermé.
Q3 Remplissez le tableau ci-dessous :
D9 D10 Q1 Q2 aff D1 aff D2
0 0
0 1
1 0
indiquer dans le tableau : Ouvert ou Fermé pour les transistors Allumé ou Éteint pour les afficheurs
Afficher un chiffre
Le but est de trouver les codes à envoyer sur les sorties de l'Arduino pour allumer les chiffres sur un afficheur.
Q4 On donne ci-dessous un premier programme qui écrit le chiffre « 0 » sur l'afficheur des secondes (gauche).
Écrivez ce programme sous ArduBlock, enregistrez-le sous le nom prog1_chiffre0.ino et testez-le sur la maquette.
choix de l'afficheur allumé
choix des segments allumés
Q5 Complétez ci-dessous le tableau donnant les codes de chaque chiffre.
Arduino D8 D7 D6 D5 D4 D3 D2
anode g f e d c b a décimal
chiffre écrit sur l'afficheur
0 0 1 1 1 1 1 1 63
1 2 3 4 5 6 7 8 9
Pour améliorer la lisibilité de votre programme, vous allez utiliser le découpage en sous-programmes, que l'on appelle aussi des fonctions.
Pour créer un sous programme cliquez sur l’onglet latéral.
Votre programme sera maintenant constitué d'un void loop() qui correspond au programme principal et d'un sous-programme appelé ici par afficher(). afficher() est le sous programme ou fonction. Ci contre la fonction afficher () pour afficher le 0 ;
Q6 Modifiez votre programme afin d'écrire 5 sur l'afficheur de droite. L'écriture des codes en sorties du micro- contrôleur sera faite dans la fonction afficher. Enregistrez votre fichier sous le nom prog2_chiffre5.ino. Testez.
Utilisation d'un tableau
Le structure de votre programme serait trop lourde s'il fallait traiter chaque chiffre de 0 à 9. Il faut trouver une autre façon de l'écrire de manière plus compacte.
Vous allez ranger les codes dans un tableau, que l'on appellera codes, constitués de 10 cases, et aller les chercher en fonction d'un indice. L'indice est le numéro de la case du tableau.
chiffre 0 1 2 3 4 5 6 7 8 9
indice du tableau 1 2 3 4 5 6 7 8 9 10
Validation prof :
programme principal
appel du sous-programme afficher()
Sous programme afficher()
Pour déclarer le tableau codes, il faut déclarer un tableau d’entiers codes de 10 éléments au dessus de la fonction setup() puis remplir ce tableau en entrant les codes des 10 chiffres.
Q8 Écrivez un nouveau programme en reprenant le dernier programme. Déclarez le tableau codes comme ci- dessus au dessus de la fonction setup() et remplissez ce tableau en entrant les codes des 10 chiffres à afficher.
La fonction afficher écrit sur l'afficheur allumé le chiffre qui est placé dans la variable chiffre. Cette fonction est donnée ci-dessous :
Enfin vous allez compléter le programme principal (fonction Boucle) afin de faire défiler sur l'afficheur de gauche les secondes. On vous donne l'algorithme :
début du programme principal allumer l'afficheur de gauche éteindre l'afficheur de droite pour chiffre de 0 à 9 par pas de 1 faire
appel de la fonction afficher attendre 1s
fin pour
fin du programme principal
Q9 Complétez votre programme en écrivant la fonction afficher() et en modifiant le programme principal afin qu’il respecte l’algorithme ci-dessus. Enregistrez le fichier sous prog3_secondes.ino. Testez.
Q10 Modifiez ce programme afin de faire défiler les dixièmes de seconde sur l'afficheur de droite (on n'affiche plus les secondes). Enregistrez le fichier sous prog4_dixiemes.ino. Testez.
Validation prof :
Validation prof : déclaration du tableau
codes de 10 éléments
codes[2]=...
codes[1]=63
Liste des codes contenus dans le tableau, à compléter, une virgule
les séparant
sous-programme afficher()
Utilisation de la fonction millis
Notre chronomètre utilise la fonction Délais qui est bloquante puisque l'Arduino ne fait rien pendant l'attente. Pour améliorer le programme vous allez utiliser la fonction millis() qui renvoie le temps depuis le démarrage de la carte Arduino. Les dixièmes de notre chronomètre doivent être incrémentés toutes les 100 millisecondes, les secondes toutes les 1000ms.
On donne ci-dessous le programme principal incomplet qui gère les dixièmes de secondes.
Q11 Modifiez le programme précédent à partir de celui donné ci-dessus. Enregistrez le fichier sous prog5_dixiemes_millis.ino. Testez. Que se passe-t-il lorsque les dixièmes dépassent la valeur 9 ?
Q12 Modifiez alors le programme principal afin de remettre à 0 la variable dixieme lorsqu'elle arrive à 10.
Enregistrez le fichier sous prog5_dixiemes_millis.ino. Testez.
Q13 Ajoutez à ce programme, en utilisant le même principe des dixièmes, la gestion des secondes. Enregistrez le fichier sous prog6_chronometre.ino. Vous ajouterez une pause de 10ms en fin de fonction afficher pour améliorer la stabilité de l'affichage. Testez.
RAZ
Q14 Ajoutez à votre programme une remise à zéro lorsqu'on appuie sur le bouton RAZ (bouton jaune).
Enregistrez le fichier sous prog7_chronometreRAZ.ino. Testez.
STOP
Q15 Ajoutez à votre programme un arrêt du chronomètre lorsqu'on appuie sur le bouton STOP (bouton noir).
Enregistrez le fichier sous prog8_chronometreSTOP.ino. Testez.
Validation prof :
Validation prof :
Validation prof :
Validation prof :