Réalisation d’un chronomètre
Par Freddy ON6FS
La réalisation de ce chronomètre m’a été inspiré par la procédure suggérée par notre Mentor ARISS Joseph F6ICS.
J’ai ajouté au chronomètre 3 alarmes sonores et visuelles (avec la possibilité d’en ajouter d’autres) afin d’attirer l’attention du second opérateur pour des actions chronométrées.
Schémas
Liste de courses
- Circuit imprimé (80 x 35 mm)
- U1 : Arduino Nano
- 2 connecteurs femelles en 2,54 mm de 15 pins (voir : https://fr.aliexpress.com/item/32890807986.html)
- Afficheur : TM1637 4 digits – 7 segments en 0,56 " (voir : https://fr.aliexpress.com/item/32969772016.html)
- 2 connecteurs mâles en 2,54 mm de 5 pins (voir : https://fr.aliexpress.com/item/32993182990.html)
- SW1 : Bouton poussoir pour CMS/SMD avec tige de 15 mm (voir : https://fr.aliexpress.com/item/4000863690513.html)
- BUZ1 : Buzzer actif 5V (voir : https://fr.aliexpress.com/item/32966574206.html)
- LED1 : Diode LED CMS/SMD 2835(voir : https://fr.aliexpress.com/item/32992433632.html)
- P1 : Connecteur type XH en 2,54 mm (2 pôles)
- R1 : Résistance 2K7 CMS/SMD 0805
- R2 : Résistance 470R CMS/SMD 0805
- C1 : Condensateur 0,1 µF CMS/SMD 1206
- C2 : Condensateur 0,1 µF CMS/SMD 1206
Dessin circuit imprimé
Le circuit imprimé (80 x 35 mm) peut se faire fabriquer chez JLCPCB (https://jlcpcb.com/).
5 pièces vous coûteront un peu moins de 2 € + frais de port (dépend des délais souhaités).
Vous pouvez récupérer les Gerber’s sur : https://oshwlab.com/ON6FS/chronos.
Photo circuit imprimé vierge
Programme Arduino
Ci-dessous le programme à télécharger dans votre arduino :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
/************************************************************************************************ * C H R O N E T R E B A S E S U R U N A R D U I N O N A N O + D I S P L A Y T M 1 6 3 7 * * 2 programmes de chronomètre et de gestion de TM1637 récupérés sur https://www.robotique.tech * * Adapté par Freddy Stiévenart ON6FS * * Verion : 1.0 * * Ajout : * * 20 Mars 2021 : Deux points séparateur heure et minutes * * 26 Mars 2021 : Variable : StartChrono, Alarme1, Alarme2, Alarme3 * * 30 Mars 2021 : Ajout du bip et de l'allumage de la LED sur les 3 alarmes * ************************************************************************************************/ #include <TM1637Display.h> // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 TM1637Display display(CLK, DIO); // Module connection pins (Digital Pins) // le bouton est connecté à la broche D5 de la carte Adruino const int bouton = 5; // variable qui enregistre l’état du bouton int etatBouton,cp,test; // Variable Temps int Secondes; int Minutes; int Chronos; // Variables des alarmes const int StartChrono = 0; const int Alarme1 = 5; // Valeur à personnaliser en fonction des besoins (à exprimer en secondes) const int Alarme2 = 10; // Valeur à personnaliser en fonction des besoins (à exprimer en secondes) const int Alarme3 = 15; // Valeur à personnaliser en fonction des besoins (à exprimer en secondes) const int Buzzer = 8; const int Note = 800; const int NoteLen = 970; // length of buz const int AlarmeDelay = 979; // length of Alarme const int Delay1Seconde = 979; // length of 1 seconde void setup() { Serial.begin(9600); display.setBrightness(0x0f); display.showNumberDecEx(0, 0b01000000, true, 4, 0); // Afficher le nombre 00:00 dans l’afficheur TM1736 pinMode(bouton, INPUT); // le bouton est une entrée pinMode(Buzzer, OUTPUT); // Sortie Buzzer digitalWrite(Buzzer, HIGH); //Eteindre le Buzzer etatBouton = 1; } void loop() { etatBouton = digitalRead(bouton); if (etatBouton == 0) //si on appuie sur le bouton { test=1; cp=0; // initialiser le compteur du chrono à 0 while(test==1) { cp++; // incrémenter le compteur Secondes = cp % 60; if ( Secondes == 0 ) { //Serial.println (cp); // Envoie vers le Monitoring un timestemp toutes les minutes // Ce qui permet d'ajuster le delay à la ligne 34, 35 et 36 } Minutes = float ( cp / 60 ); Chronos = (Minutes * 100) + Secondes; display.showNumberDecEx(Chronos, 0b01000000, true, 4, 0); // Avec séparateur HH:mm switch (cp) { case Alarme1: tone(Buzzer, Note, NoteLen); // start playing a tone delay(AlarmeDelay); // à ajuster en fonction de votre Arduino digitalWrite(Buzzer, HIGH); //Eteindre le Buzzer break; case Alarme2: tone(Buzzer, Note, NoteLen); // start playing a tone delay(AlarmeDelay); // à ajuster en fonction de votre Arduino digitalWrite(Buzzer, HIGH); //Eteindre le Buzzer break; case Alarme3: tone(Buzzer, Note, NoteLen); // start playing a tone delay(AlarmeDelay); // à ajuster en fonction de votre Arduino digitalWrite(Buzzer, HIGH); //Eteindre le Buzzer break; default: delay(Delay1Seconde); // à ajuster en fonction de votre Arduino break; } etatBouton = digitalRead(bouton); if (etatBouton == 0) { //si on appuie une deuxième fois sur le bouton test=0; // on arrête le chrono etatBouton = digitalRead(bouton); delay(1000); } } } } |
Afin d’ajuster la justesse du temps vous devrez décommenter la ligne 62
Chaque minute l’heure sera affichée avec 3 décimales sur le monitoring.
Vous devrez alors ajuster les variables AlarmeDelay et Delay1Seconde sur les ligne 35 et 36, jusqu’à avoir minimisé la dérive.
Vidéo du fonctionnement
Les alarmes ont été fixées à 5, 10 et 15 secondes pour la démonstration.
Pour démarrer et stopper le chronomètre il faut effectuer une pression sur le bouton poussoir.