C'est l'été ! Fleur.gif

ENIB 2025 : Métronome JJJA : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Code Arduino)
(Préparation des matériaux)
 
(94 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
  
 
=Introduction=
 
=Introduction=
Dans le cadre de ce projet, l'équipe JJJA (Joachim, Joseph, Jean, Antoine) a entrepris de transformer un papertoy existant en un métronome fonctionnel. En conservant les éléments essentiels du modèle de départ, à l’exception de la boîte initiale, l’équipe a entièrement repensé et adapté le dispositif.  
+
 
 +
[[Fichier:Joseph_jean.jpg|300px|right|thumb|Joseph & Jean les ingénieurs]]
 +
 
 +
Dans le cadre de ce projet, l'équipe JJJA (Joachim, Joseph, Jean, Antoine) a entrepris de transformer un papertoy existant en un métronome fonctionnel. En conservant les éléments essentiels du modèle de départ, à l’exception de la boîte initiale, l’équipe a entièrement repensé et adapté le dispositif.<br>
 +
<br><br><br><br><br><br><br><br>
 +
 
 +
===Qu'est qu'un métronome ?===
 +
[[Fichier:Metronomoa.jpg|right|thumb|Métronome]]
 +
Un métronome est un instrument donnant un signal audible permettant d'indiquer un tempo que l'on règle avec ce que l'on appelle le BPM (Battements Par Minute), vitesse à laquelle doit être jouée une musique. Il est surtout utilisé dans l'étude d'une partition, la mise en place d'une interprétation ou la recherche du minutage d'une œuvre musicale.[https://fr.wikipedia.org/wiki/M%C3%A9tronome (suite)]
 +
<br><br><br><br><br><br><br>
  
 
=Outils et matériel=
 
=Outils et matériel=
 +
 
===Outils===
 
===Outils===
 
 
* Pistolet à colle
 
* Pistolet à colle
 +
* Imprimante 3D
 
* Cutter
 
* Cutter
 
* Ciseaux
 
* Ciseaux
 
* Crayon
 
* Crayon
* Cerveau affûté d'Antoine l’ingénieur
+
* Cerveau affûté d'Antoine
* Doigts minutieux et précis de Jean l’ingénieur
+
* Doigts minutieux et précis de Jean
  
 
===Matériel===
 
===Matériel===
 
 
* 2 LEDs vertes
 
* 2 LEDs vertes
 
* Un potentiomètre 10 kΩ
 
* Un potentiomètre 10 kΩ
 
* Un haut-parleur WSC 8 Ω 2 V
 
* Un haut-parleur WSC 8 Ω 2 V
 
* Un écran 7 segments (4-digit display version 1.2)
 
* Un écran 7 segments (4-digit display version 1.2)
* Une carte Wemos D1 Mini
+
* Une carte weemos D1 mini
 
* Un micro servo 9g NG90
 
* Un micro servo 9g NG90
 
* Un bouton poussoir
 
* Un bouton poussoir
Ligne 30 : Ligne 39 :
  
 
=Fichiers annexes=
 
=Fichiers annexes=
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
+
 
 
==Code Arduino==
 
==Code Arduino==
<syntaxhighlight lang="Arduino" line>#include <Servo.h>
+
<syntaxhighlight lang="Arduino" line>
#include <ESP8266WiFi.h>
+
#include <Servo.h>
 
#include <TM1637Display.h>
 
#include <TM1637Display.h>
 
#define PIN_SERVO_2  D4
 
#define PIN_SERVO_2  D4
Ligne 42 : Ligne 51 :
 
const int boutonDecrement = D2;
 
const int boutonDecrement = D2;
 
const int led1 = D5;
 
const int led1 = D5;
const int led2 = D6;
 
const int buzzer = D7;
 
 
const int servoPin = D4;
 
const int servoPin = D4;
 +
const int buzzer = D6;
 
const int clk = D3;  // Broche CLK du 4-Digit Display
 
const int clk = D3;  // Broche CLK du 4-Digit Display
 
const int dio = D0;  // Broche DIO du 4-Digit Display
 
const int dio = D0;  // Broche DIO du 4-Digit Display
Ligne 54 : Ligne 62 :
 
int minBPM = 40;
 
int minBPM = 40;
 
int maxBPM = 200;
 
int maxBPM = 200;
int ledState = 0;
 
 
bool servo_pos = false;
 
bool servo_pos = false;
 
unsigned long previousMillis = 0;
 
unsigned long previousMillis = 0;
Ligne 62 : Ligne 69 :
 
   pinMode(boutonDecrement, INPUT_PULLUP);
 
   pinMode(boutonDecrement, INPUT_PULLUP);
 
   pinMode(led1, OUTPUT);
 
   pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
 
 
   pinMode(buzzer, OUTPUT);
 
   pinMode(buzzer, OUTPUT);
 
   servo.attach(servoPin);
 
   servo.attach(servoPin);
  
 
   digitalWrite(led1, LOW);
 
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
+
   digitalWrite(buzzer, LOW);
 
   servo.write(0);
 
   servo.write(0);
 
   display.setBrightness(0x0f);  // Réglage de la luminosité du display
 
   display.setBrightness(0x0f);  // Réglage de la luminosité du display
Ligne 93 : Ligne 99 :
 
   unsigned long currentMillis = millis();
 
   unsigned long currentMillis = millis();
 
   unsigned long interval = 60000 / bpm;  // Calcul de l'intervalle en ms
 
   unsigned long interval = 60000 / bpm;  // Calcul de l'intervalle en ms
 +
  unsigned long interval_buzzer = 100;
  
 
   if (currentMillis - previousMillis >= interval) {
 
   if (currentMillis - previousMillis >= interval) {
 
     previousMillis = currentMillis;
 
     previousMillis = currentMillis;
 +
    digitalWrite(buzzer, HIGH);
 
     if (servo_pos == false){
 
     if (servo_pos == false){
 +
      digitalWrite(led1, HIGH);
 
       servo.write(180);
 
       servo.write(180);
 
       servo_pos = true;
 
       servo_pos = true;
 
     } else{
 
     } else{
 
       servo.write(0);
 
       servo.write(0);
 +
      digitalWrite(led1, HIGH);
 
       servo_pos = false;
 
       servo_pos = false;
 
     }
 
     }
 
+
  }
    // Alterner les LEDs
+
  if (currentMillis - previousMillis >= interval_buzzer){
    if (ledState == 0) {
+
    digitalWrite(led1, LOW);
      digitalWrite(led1, HIGH);
+
     digitalWrite(buzzer, LOW);
      digitalWrite(led2, LOW);
+
  }
     } else {
 
      digitalWrite(led1, LOW);
 
      digitalWrite(led2, HIGH);
 
    }
 
    ledState = 1 - ledState;
 
  }
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
=Étapes de fabrication=
 
=Étapes de fabrication=
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)<br>
 
==Étape 1 : Conception==
 
===1.1 Analyse des contraintes :===
 
 
Étudier le papertoy existant et identifier les parties essentielles à conserver.
 
Déterminer les dimensions maximales pour accueillir tous les composants électroniques.
 
===1.2 Définition des objectifs du projet :===
 
 
Choisir le tempo réglable (40 à 200 BPM) comme fonctionnalité principale.
 
Inclure un affichage numérique pour le tempo.
 
Ajouter des LEDs synchronisées pour un repère visuel, et une LED d'éclairage pour l’aiguille.
 
===1.3 Réalisation du design :===
 
 
Dessiner un croquis détaillé montrant l'emplacement des composants (écran, LEDs, servo).
 
Prévoir une découpe adaptée pour intégrer proprement les éléments dans le carton.
 
S’assurer que l'ensemble reste ergonomique et esthétique.
 
==Étape 2 : Programmation==
 
====2.1 Préparation de l’environnement Arduino :====
 
 
Télécharger et installer l'IDE Arduino.
 
Ajouter les bibliothèques nécessaires pour le servo, l’écran 7 segments et les LEDs (par exemple : <Adafruit_LEDBackpack.h> et <Servo.h>).
 
 
====2.2 Développement du code :====
 
  
Initialiser les composants (LEDs, servo, écran).
+
====Définition des objectifs du projet====
Programmer les boutons "+" et "-" pour ajuster le tempo.
+
* Utiliser le servo pour faire l'aiguille.
Ajouter une fonction pour synchroniser la LED avec le tempo.
+
* Rendre le tempo réglable (40 à 200 BPM) avec des boutons "+" et "-".
Tester la communication entre le potentiomètre et le servo pour ajuster l'intensité de la LED d'éclairage.
+
* Inclure un affichage numérique pour le tempo.
====2.3 Débogage et test du code :====
+
* Inclure un haut parleur pour faire le rythme.
 +
* Utiliser une LED pour un repère visuel et la synchronisée et l'autre LED d'éclairage pour l’aiguille.
  
Vérifier le comportement du système à différents tempos.
+
====Préparation de l’environnement Arduino====
Corriger les éventuelles erreurs (délais incorrects, synchronisation des LEDs).
+
*[https://www.arduino.cc/en/software Télécharger et installer l'IDE Arduino] et [https://www.wikidebrouillard.org/wiki/Utiliser_le_D1_mini_avec_Arduino utiliser la procédure pour le wemos D1 mini]<br>
 +
*Ajouter les bibliothèques Servo.h, ESP8266WiFi.h et TM1637Display.h.<br>
 +
Servo.h : Cette bibliothèque permet de contrôler des servomoteurs à l'aide des cartes Arduino.<br>
 +
ESP8266WiFi.h : Cette bibliothèque fait partie du core ESP8266 pour Arduino et fournit des fonctionnalités pour connecter votre ESP8266 à un réseau Wi-Fi, configurer des serveurs ou des clients.<br>
 +
TM1637Display.h : Cette bibliothèque est conçue pour contrôler des modules d'affichage 7 segments à 4 chiffres basés sur le circuit TM1637, tels que le module Grove 4-Digit Display de Seeed Studio.<br>
  
==Étape 3 : Assemblage==
+
====Préparation des matériaux====
====3.1 Préparation des matériaux :====
+
*Découper le carton selon le patron.
 +
*Imprimer l'aiguille ou en fabriquer une en papier (Si vous l'imprimez, il faudra mettre un point de colle chaude afin qu'elle soit bien fixée).
  
Découper le carton selon les dimensions définies dans le design.
+
[[Fichier:Aiguille_3D.zip]]
Percer des ouvertures pour les composants : écran, LEDs, potentiomètre, bouton poussoir, et servo.
 
====3.2 Montage des composants électroniques :====
 
  
Placer les LEDs sur la breadboard avec les résistances appropriées.
+
====Montage des composants électroniques====
Connecter le potentiomètre au circuit pour contrôler l’intensité lumineuse.
+
Brancher tout les composants selon le schéma<br>
Fixer l’écran 7 segments et câbler correctement ses broches à la carte Wemos D1 Mini.
+
Sur le schéma nous avons une arduino mais le principe est le même pour le Wemos D1 mini.
Installer le bouton poussoir et le configurer pour régler le tempo.
+
[[Fichier: Shema_cablage.png|750px|top]]
Brancher le haut-parleur pour générer les bips sonores.
 
====3.3 Intégration dans la structure :====
 
  
 +
====Intégration dans la structure====
 
Coller les composants dans le carton à l'aide du pistolet à colle.
 
Coller les composants dans le carton à l'aide du pistolet à colle.
 
Veiller à ce que tous les câbles soient bien positionnés pour éviter les déconnexions.
 
Veiller à ce que tous les câbles soient bien positionnés pour éviter les déconnexions.
Installer le servo et fixer une aiguille ou un marqueur dessus pour indiquer visuellement le battement.
+
Fixer la batterie rechargeable avec un câble d’alimentation accessible.
====3.4 Ajout de la batterie :====
 
  
Fixer la batterie rechargeable avec un câble d’alimentation accessible.
+
====Validation fonctionnelle====
 
Vérifier que le système fonctionne correctement en mode autonome.
 
Vérifier que le système fonctionne correctement en mode autonome.
==Étape 4 : Tests finaux et documentation==
 
====4.1 Validation fonctionnelle :====
 
 
 
Tester le métronome à différents tempos pour s'assurer de la fiabilité du système.
 
Tester le métronome à différents tempos pour s'assurer de la fiabilité du système.
 
Vérifier la synchronisation des LEDs, le bon affichage du tempo, et l’intensité variable de l’éclairage.
 
Vérifier la synchronisation des LEDs, le bon affichage du tempo, et l’intensité variable de l’éclairage.
====4.2 Rédaction du wiki :====
 
  
Documenter chaque étape avec des photos et des captures d'écran.
+
====Rédaction du wiki====
Inclure les schémas de câblage et les dessins techniques.
+
Compléter les problèmes et solutions rencontrés pour aider la communauté.
Ajouter les fichiers annexes nécessaires (code Arduino, fichiers de découpe laser, etc.).
+
 
====4.3 Préparation de la présentation :====
+
=Troubleshooting=
  
Réaliser un diaporama synthétisant le projet, de l'idée initiale au produit final.
+
=====Problème : Latence élevée=====
Inclure des vidéos de démonstration pour mettre en avant les fonctionnalités du métronome.
+
* Solution :Les instructions `delay()` ont été supprimées du code pour réduire la latence.
  
=Troubleshooting=
+
=====Problème : Pas de son provenant du haut-parleur=====
 +
* Solution : Une caisse de résonance a été ajoutée pour améliorer la qualité du son.
  
Problème : Le clignotement de la LED n’est pas synchronisé avec le tempo.<br>
+
=====Problème : Certaines soudures ont eu tendance à casser=====
Solution : Vérifier le timing dans le code Arduino et ajuster les délais.<br>
+
* Solution : Un petit point de colle chaude par dessus les soudures permettra de renforcer les plus fragiles et d'isoler vos connections.
  
Problème : Le servo ne bouge pas ou fonctionne mal.<br>
+
=====Problème : On avait aucune aiguille=====
Solution : S’assurer que l’alimentation est suffisante et que les connexions sont solides.<br>
+
* Solution : En imprimer une en 3D ( Si vous n'avez pas d'imprimantes, une aiguille en papier pourrait très bien faire l'affaire).
Astuce : Utiliser des câbles plus longs pour faciliter l’assemblage et éviter les tensions sur les composants.<br>
 
  
 
=Sources et documentation complémentaire=
 
=Sources et documentation complémentaire=
Ligne 201 : Ligne 180 :
 
je met ici le document de présentation de mon projet
 
je met ici le document de présentation de mon projet
  
[[Catégorie:Enib2024]]
+
=Axes d'améliorations=
 +
- Augmenter la puissance sonore du haut parleur.
 +
- Faire une coque en bois
  
 
[[Catégorie:Enib2025]]
 
[[Catégorie:Enib2025]]

Version actuelle datée du 21 janvier 2025 à 16:43

Description

Le projet consiste en la conception et la réalisation d'un métronome à tempo variable, réglable entre 40 et 200 BPM à l’aide de boutons "+" et "-". Il dispose d’un écran numérique pour afficher avec précision le tempo sélectionné, d’une LED verte clignotant en synchronisation avec le rythme, ainsi que d'une deuxième LED avec intensité ajustable via un potentiomètre. Cette dernière assure un éclairage efficace de l’aiguille, permettant une utilisation optimale dans différentes conditions de luminosité.

Introduction

Joseph & Jean les ingénieurs

Dans le cadre de ce projet, l'équipe JJJA (Joachim, Joseph, Jean, Antoine) a entrepris de transformer un papertoy existant en un métronome fonctionnel. En conservant les éléments essentiels du modèle de départ, à l’exception de la boîte initiale, l’équipe a entièrement repensé et adapté le dispositif.








Qu'est qu'un métronome ?

Métronome

Un métronome est un instrument donnant un signal audible permettant d'indiquer un tempo que l'on règle avec ce que l'on appelle le BPM (Battements Par Minute), vitesse à laquelle doit être jouée une musique. Il est surtout utilisé dans l'étude d'une partition, la mise en place d'une interprétation ou la recherche du minutage d'une œuvre musicale.(suite)






Outils et matériel

Outils

  • Pistolet à colle
  • Imprimante 3D
  • Cutter
  • Ciseaux
  • Crayon
  • Cerveau affûté d'Antoine
  • Doigts minutieux et précis de Jean

Matériel

  • 2 LEDs vertes
  • Un potentiomètre 10 kΩ
  • Un haut-parleur WSC 8 Ω 2 V
  • Un écran 7 segments (4-digit display version 1.2)
  • Une carte weemos D1 mini
  • Un micro servo 9g NG90
  • Un bouton poussoir
  • Une breadboard
  • Une batterie 2600 mAh avec câble
  • Des câbles classiques
  • Du carton

Fichiers annexes

Code Arduino

 1 #include <Servo.h>
 2 #include <TM1637Display.h>
 3 #define PIN_SERVO_2  D4
 4 Servo myservo_2;
 5 
 6 // Définition des broches
 7 const int boutonIncrement = D1;
 8 const int boutonDecrement = D2;
 9 const int led1 = D5;
10 const int servoPin = D4;
11 const int buzzer = D6;
12 const int clk = D3;  // Broche CLK du 4-Digit Display
13 const int dio = D0;  // Broche DIO du 4-Digit Display
14 
15 Servo servo;
16 TM1637Display display(clk, dio);
17 
18 int bpm = 60;  // BPM initial
19 int minBPM = 40;
20 int maxBPM = 200;
21 bool servo_pos = false;
22 unsigned long previousMillis = 0;
23 
24 void setup() {
25   pinMode(boutonIncrement, INPUT_PULLUP);
26   pinMode(boutonDecrement, INPUT_PULLUP);
27   pinMode(led1, OUTPUT);
28   pinMode(buzzer, OUTPUT);
29   servo.attach(servoPin);
30 
31   digitalWrite(led1, LOW);
32   digitalWrite(buzzer, LOW);
33   servo.write(0);
34   display.setBrightness(0x0f);  // Réglage de la luminosité du display
35   display.showNumberDec(bpm);   // Affiche la valeur initiale de BPM
36 }
37 
38 void loop() {
39   handleButtons();
40   metronomeTick();
41   display.showNumberDec(bpm);  // Met à jour l'affichage du BPM
42 }
43 
44 void handleButtons() {
45   if (digitalRead(boutonIncrement) == LOW) {
46     bpm = min(bpm + 1, maxBPM);
47     delay(200);  // Antirebond
48   }
49   if (digitalRead(boutonDecrement) == LOW) {
50     bpm = max(bpm - 1, minBPM);
51     delay(200);  // Antirebond
52   }
53 }
54 
55 void metronomeTick() {
56   unsigned long currentMillis = millis();
57   unsigned long interval = 60000 / bpm;  // Calcul de l'intervalle en ms
58   unsigned long interval_buzzer = 100;
59 
60   if (currentMillis - previousMillis >= interval) {
61     previousMillis = currentMillis;
62     digitalWrite(buzzer, HIGH);
63     if (servo_pos == false){
64       digitalWrite(led1, HIGH);
65       servo.write(180);
66       servo_pos = true;
67     } else{
68       servo.write(0);
69       digitalWrite(led1, HIGH);
70       servo_pos = false;
71     }
72   }
73   if (currentMillis - previousMillis >= interval_buzzer){
74     digitalWrite(led1, LOW);
75     digitalWrite(buzzer, LOW);
76   }
77 }

Étapes de fabrication

Définition des objectifs du projet

  • Utiliser le servo pour faire l'aiguille.
  • Rendre le tempo réglable (40 à 200 BPM) avec des boutons "+" et "-".
  • Inclure un affichage numérique pour le tempo.
  • Inclure un haut parleur pour faire le rythme.
  • Utiliser une LED pour un repère visuel et la synchronisée et l'autre LED d'éclairage pour l’aiguille.

Préparation de l’environnement Arduino

Servo.h : Cette bibliothèque permet de contrôler des servomoteurs à l'aide des cartes Arduino.
ESP8266WiFi.h : Cette bibliothèque fait partie du core ESP8266 pour Arduino et fournit des fonctionnalités pour connecter votre ESP8266 à un réseau Wi-Fi, configurer des serveurs ou des clients.
TM1637Display.h : Cette bibliothèque est conçue pour contrôler des modules d'affichage 7 segments à 4 chiffres basés sur le circuit TM1637, tels que le module Grove 4-Digit Display de Seeed Studio.

Préparation des matériaux

  • Découper le carton selon le patron.
  • Imprimer l'aiguille ou en fabriquer une en papier (Si vous l'imprimez, il faudra mettre un point de colle chaude afin qu'elle soit bien fixée).

Fichier:Aiguille 3D.zip

Montage des composants électroniques

Brancher tout les composants selon le schéma
Sur le schéma nous avons une arduino mais le principe est le même pour le Wemos D1 mini. Shema cablage.png

Intégration dans la structure

Coller les composants dans le carton à l'aide du pistolet à colle. Veiller à ce que tous les câbles soient bien positionnés pour éviter les déconnexions. Fixer la batterie rechargeable avec un câble d’alimentation accessible.

Validation fonctionnelle

Vérifier que le système fonctionne correctement en mode autonome. Tester le métronome à différents tempos pour s'assurer de la fiabilité du système. Vérifier la synchronisation des LEDs, le bon affichage du tempo, et l’intensité variable de l’éclairage.

Rédaction du wiki

Compléter les problèmes et solutions rencontrés pour aider la communauté.

Troubleshooting

Problème : Latence élevée
  • Solution :Les instructions `delay()` ont été supprimées du code pour réduire la latence.
Problème : Pas de son provenant du haut-parleur
  • Solution : Une caisse de résonance a été ajoutée pour améliorer la qualité du son.
Problème : Certaines soudures ont eu tendance à casser
  • Solution : Un petit point de colle chaude par dessus les soudures permettra de renforcer les plus fragiles et d'isoler vos connections.
Problème : On avait aucune aiguille
  • Solution : En imprimer une en 3D ( Si vous n'avez pas d'imprimantes, une aiguille en papier pourrait très bien faire l'affaire).

Sources et documentation complémentaire

Élément de présentation

je met ici le document de présentation de mon projet

Axes d'améliorations

- Augmenter la puissance sonore du haut parleur. - Faire une coque en bois