Compteur de Pompes

Ce projet est pour créer un compteur de pompes intelligent à l’aide d’un microcontrôleur ESP32. Il permet d’automatiser le comptage des répétitions pendant les entraînements et il permet à l’utilisateur un retour en temps réel, visuel, sonore et numérique.
Présentation générale et contexte
L’idée de départ vient de rendre le comptage des « pushups » plus simple en utilisant un capteur de distance ultrasonique qui peut détecter les mouvements du corps pendant les pompes. Il contient un écran LCD qui affiche les informations en temps réel et un petit module audio (DFPlayerMini) qui joue des sons pour motiver l’utilisateur ou indiquer la fin d’un exercice. De plus, il est possible de voir la progression sur un site web local qui affiche le nombre de pompes effectuées dans la journée et un graphique qui représente la progression.
Photos PCB
Voici le PCB qui est dans le projet :

Schéma Bloc
Voici le schéma bloc du projet :

Description des principes utilisés
Principe #1 : Communication UART avec l’écran LCD et le DFPlayerMini
L’écran LCD et le DFPlayerMini sont connectés à l’ESP32 avec une interface UART. Cette liaison série permet à l’ESP32 d’envoyer des données et recevoir les données. La communication UART fonctionne en utilisant deux broches:
- TX (Transmission) : broche par laquelle l’ESP32 envoie des données vers l’écran.
- RX (Réception) : broche par laquelle l’ESP32 reçoit des données de l’écran, si nécessaire.
Cette communication est asynchrone, ce qui signifie qu’il n’y a pas de signal d’horloge. Les deux pièces doivent avoir le même débit en bauds (baud rate).
Pour le projet:
- Écran LCD : la broche TX de l’ESP32 est utilisée seulement pour envoyer des données à l’écran.
- DFPlayer Mini : les broches TX et RX de l’ESP32 sont utilisés pour permettre une communication bidirectionnelle entre l’ESP32 et le module audio.
Le débit en bauds configuré pour l’écran LCD et le DFPlayer Mini est de 9600 bauds, ce qui est le standard.
Principe #2 : Détection de mouvement avec capteur ultrasonique HC-SR04
Le compteur de pompes utilise un capteur de distance HC-SR04, qui fonctionne par ultrasons. Ce capteur permet de mesurer la distance entre le haut du corps de l’utilisateur et la planche pendant l’exercice. Il émet une petite impulsion sonore qui est inaudible à l’aide de son émetteur (TRIG), qui se propage dans l’air. Lorsque cette impulsion rencontre un obstacle (le corps de l’utilisateur), elle est réfléchie et captée par le récepteur (ECHO). Le temps écoulé entre l’émission et la réception est mesuré par l’ESP32. Avec le temps écoulé, on peut utiliser cette formule : distance (cm) = (temps écoulé x vitesse de son)/2. Pour le projet, une descente est détectée lorsque l’utilisateur se rapproche à moins de 7 cm, et une montée est détectée lorsqu’il remonte à plus de 21 cm. Une pompe complète est donc comptée seulement si ces deux conditions sont vraies dans le bon ordre.
Principe #3 : Sauvegarde des données avec la mémoire non volatile (NVS)
Pour conserver les résultats après un redémarrage, le projet utilise la mémoire non volatile NVS (Non-Volatile Storage) de l’ESP32. Cette mémoire permet d’enregistrer les données sous forme de clé et valeur. Alors, pour le projet, j’utilise la librairie « Preferences » pour enregistrer le nombre de pompes avec la date et l’heure. Ces données seront utilisées comme journaux pour les deux modes. Quand l’utilisateur va redémarrer le projet, les journaux seront gardés en mémoire.
Principe #4: Site web local sur l’ESP32
Avec le ESP32, je suis en mesure de me connecter à l’internet pour me créer un serveur local. Pour le projet, je l’utilise pour afficher les journaux des exercices enregistrés pour le mode entrainement et le record personnel. Avec l’aide de la librairie Chart.js, je peux visualiser la progression des nombres de pompes avec un graphique. De plus, avec la librairie mDNS, il est possible de donner un nom personnalisé au site web (par exemple : http://pushup.local) au lieu d’entrer une adresse IP.