Chronomètre d’escalade

Thème 2023 : l’ingénierie au service du sport

Mission du système

Lors d’une épreuve d’escalade chronométrée, il est parfois difficile aux juges de démarrer et arrêter le chronomètre à temps.

Le chronomètre d’escalade est constitué de deux parties :

  • une au sol pour déclencher le chronomètre lorsque le grimpeur commence l’épreuve (et le remettre à zéro en appuyant à nouveau dessus)
  • une en haut du mur pour arrêter le chronomètre à la fin de l’épreuve

Un afficheur numérique affiche le temps écoulé.

Font made from oNline Web Fontsis licensed by CC BY 3.0

 

Fonctionnement

Le système se compose de deux parties (une en haut et une en bas), chacune alimentée par une batterie rechargeable Li-ion.

Les deux systèmes comportent chacun un microcontrôleur et communiquent par ondes radio.

 

 

Composants utilisés

Microcontrôleur

Arduino

Alimentation

Batterie lithium-ion type 18560

Régulateur de type 134N3P

 

Communication

Module transmetteur sans fil nRF24L01+

Documentation (autre ressourceexemple sur arduino.blaisepascal.fr)

 

Afficheur 7 segments DFRobot DFR0645-G

Documentation

 

Acquisition

Microrupteur

Ressource : le bouton poussoir

 

Boitier et pièces diverses

Conçu avec un modeleur volumique (Onshape – voir lien personnalisé en haut de page))

Contacteur-afficheur_BAS

Imprimé en 3D PLA et découpe laser

Contacteur_HAUT

Impression 3D et assemblage

 

Programme

Voici un exemple de programme qui permet de créer un chronomètre géré avec 2 boutons poussoirs. Il utilise les interruptions.

const int boutonStart = 2; // ports 2 et 3 obligatoires pour interruptions
const int boutonStop = 3;  // sur Arduino UNO

volatile unsigned long time0; // instant initial (début du chrono en ms)
volatile bool running = false;  // état du chrono
volatile unsigned long chrono = 0;  // valeur du chrono (en ms)

void setup() {
  pinMode(boutonStart, INPUT);
  pinMode(boutonStop, INPUT);
  
  Serial.begin(9600);
  
  // les ISR (fonctions) exécutées quand on agit sur les boutons
  attachInterrupt(digitalPinToInterrupt(boutonStart), start, CHANGE);
  attachInterrupt(digitalPinToInterrupt(boutonStop), stop, CHANGE);
}

void loop() {
  
  if (running) {
  	// Actualisation du chrono (uniquement si démarré)
  	chrono = millis()-time0;
  }
  // Affichage du chrono
  Serial.print(float(chrono)/1000);
  Serial.println(" s");
  
  delay(100) ; // affichage tous les 1/10 secondes
}

void start() {
  if (digitalRead(boutonStart) == HIGH) {
    // le bouton start vient d'être appuyé : remise à zéro
    chrono = 0;
    running = false;
  } else { 
    // le bouton start vient d'être relâché : démarrage chrono
    running = true;
    time0 = millis();
    Serial.println("############### START"); 
  }
  
  
}

void stop() {
  if (digitalRead(boutonStop) == HIGH) {
    // le bouton stop vient d'être appuyé : arrêt chrono
    running = false;
    Serial.println("STOP ###############");
  } else { 
    // le bouton stop vient d'être relâché : ???
    
  }
}

 

 

Feuille de route

  1. Réaliser un diagramme (draw.io) représentant les chaînes fonctionnelles de ce système
  2. Mettre en œuvre une communication sans fil entre deux arduinos
  3. Mettre en œuvre un chronomètre avec démarrage/arrêt par deux microrupteurs
  4. Compléter la maquette volumique en y incluant les composants et en concevant les pièces nécessaires à leur intégration
  5. Construire le système (impressions, montage, câblage, …)
  6. Tester !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *