• Aucun résultat trouvé

PROGRAMMATION ARDUINO LE CHRONOMÈTRE

N/A
N/A
Protected

Academic year: 2022

Partager "PROGRAMMATION ARDUINO LE CHRONOMÈTRE"

Copied!
6
0
0

Texte intégral

(1)

Lycée Felix Le Dantec - Lannion

PROGRAMMATION ARDUINO

LE CHRONOMÈTRE

1STI2D

TP11 - 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 !

(2)

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

(3)

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

(4)

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()

(5)

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()

(6)

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 :

Références

Documents relatifs

POTASSIUM CALCIUM SCANDIUM TITANE VANADIUM CHROME MANGANÈSE COBALT NICKEL CUIVRE ZINC GALLIUM GERMANIUM ARSENIC SÉLÉNIUM BROME. RUBIDIUM STRONTIUM YTTRIUM ZIRCONIUM

Le coefficient de proportionnalité qui permet de passer de la durée du parcours à la distance parcourue s'appelle vitesse

[r]

 La présence de votre enfant est recommandée afin qu’il puisse exposer sa propre vision de son cheminement scolaire en tant qu’acteur de

les classes de mots variables (déterminants, noms, adjectifs, pronoms, verbes) et les classes de mots invariables (adverbes, conjonctions,

[r]

[r]

d'avoir une balle plongeante Service Apprentissage de la position de départ, prise de balle haute, prise raquette. 3 Defendre une zone Jeu au filet Attitude d'attention