ENIB 2025 : Métronome JJJA : Différence entre versions
(→2. Préparation de l’environnement Arduino) |
(→Code Arduino) |
||
Ligne 42 : | Ligne 42 : | ||
const int boutonDecrement = D2; | const int boutonDecrement = D2; | ||
const int led1 = D5; | const int led1 = D5; | ||
− | |||
− | |||
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 53 : | ||
int minBPM = 40; | int minBPM = 40; | ||
int maxBPM = 200; | int maxBPM = 200; | ||
− | |||
bool servo_pos = false; | bool servo_pos = false; | ||
unsigned long previousMillis = 0; | unsigned long previousMillis = 0; | ||
void setup() { | void setup() { | ||
+ | initHardware(); | ||
+ | setupWiFi(); | ||
+ | server.begin(); | ||
+ | |||
pinMode(boutonIncrement, INPUT_PULLUP); | pinMode(boutonIncrement, INPUT_PULLUP); | ||
pinMode(boutonDecrement, INPUT_PULLUP); | pinMode(boutonDecrement, INPUT_PULLUP); | ||
pinMode(led1, OUTPUT); | pinMode(led1, OUTPUT); | ||
− | |||
pinMode(buzzer, OUTPUT); | pinMode(buzzer, OUTPUT); | ||
servo.attach(servoPin); | servo.attach(servoPin); | ||
digitalWrite(led1, LOW); | digitalWrite(led1, LOW); | ||
− | digitalWrite( | + | 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 94 : | ||
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; | ||
} | } | ||
− | + | } | |
− | + | if (currentMillis - previousMillis >= interval_buzzer){ | |
− | + | digitalWrite(led1, LOW); | |
− | + | digitalWrite(buzzer, LOW); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } |
Version du 21 janvier 2025 à 11:54
Sommaire
- 1 Description
- 2 Introduction
- 3 Outils et matériel
- 4 Fichiers annexes
- 5 Étapes de fabrication
- 6 Troubleshooting
- 7 Sources et documentation complémentaire
- 8 Élément de présentation
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
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.
Outils et matériel
Outils
- Pistolet à colle
- Cutter
- Ciseaux
- Crayon
- Cerveau affûté d'Antoine l’ingénieur
- Doigts minutieux et précis de Jean l’ingénieur
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 <ESP8266WiFi.h>
3 #include <TM1637Display.h>
4 #define PIN_SERVO_2 D4
5 Servo myservo_2;
6
7 // Définition des broches
8 const int boutonIncrement = D1;
9 const int boutonDecrement = D2;
10 const int led1 = D5;
11 const int servoPin = D4;
12 const int buzzer = D6;
13 const int clk = D3; // Broche CLK du 4-Digit Display
14 const int dio = D0; // Broche DIO du 4-Digit Display
15
16 Servo servo;
17 TM1637Display display(clk, dio);
18
19 int bpm = 60; // BPM initial
20 int minBPM = 40;
21 int maxBPM = 200;
22 bool servo_pos = false;
23 unsigned long previousMillis = 0;
24
25 void setup() {
26 initHardware();
27 setupWiFi();
28 server.begin();
29
30 pinMode(boutonIncrement, INPUT_PULLUP);
31 pinMode(boutonDecrement, INPUT_PULLUP);
32 pinMode(led1, OUTPUT);
33 pinMode(buzzer, OUTPUT);
34 servo.attach(servoPin);
35
36 digitalWrite(led1, LOW);
37 digitalWrite(buzzer, LOW);
38 servo.write(0);
39 display.setBrightness(0x0f); // Réglage de la luminosité du display
40 display.showNumberDec(bpm); // Affiche la valeur initiale de BPM
41 }
42
43 void loop() {
44 handleButtons();
45 metronomeTick();
46 display.showNumberDec(bpm); // Met à jour l'affichage du BPM
47 }
48
49 void handleButtons() {
50 if (digitalRead(boutonIncrement) == LOW) {
51 bpm = min(bpm + 1, maxBPM);
52 delay(200); // Antirebond
53 }
54 if (digitalRead(boutonDecrement) == LOW) {
55 bpm = max(bpm - 1, minBPM);
56 delay(200); // Antirebond
57 }
58 }
59
60 void metronomeTick() {
61 unsigned long currentMillis = millis();
62 unsigned long interval = 60000 / bpm; // Calcul de l'intervalle en ms
63 unsigned long interval_buzzer = 100;
64
65 if (currentMillis - previousMillis >= interval) {
66 previousMillis = currentMillis;
67 digitalWrite(buzzer, HIGH);
68 if (servo_pos == false){
69 digitalWrite(led1, HIGH);
70 servo.write(180);
71 servo_pos = true;
72 } else{
73 servo.write(0);
74 digitalWrite(led1, HIGH);
75 servo_pos = false;
76 }
77 }
78 if (currentMillis - previousMillis >= interval_buzzer){
79 digitalWrite(led1, LOW);
80 digitalWrite(buzzer, LOW);
81 }
82 }
Étapes de fabrication
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
1. 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.
2. Préparation de l’environnement Arduino
- Ajouter les bibliothèques Servo.h, ESP8266WiFi.h et TM1637Display.h.
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.
Étape 3 : Assemblage
3.1 Préparation des matériaux :
Découper le carton selon les dimensions définies dans le design. 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. Connecter le potentiomètre au circuit pour contrôler l’intensité lumineuse. Fixer l’écran 7 segments et câbler correctement ses broches à la carte Wemos D1 Mini. Installer le bouton poussoir et le configurer pour régler le tempo. Brancher le haut-parleur pour générer les bips sonores.
3.3 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. Installer le servo et fixer une aiguille ou un marqueur dessus pour indiquer visuellement le battement.
3.4 Ajout de la batterie :
Fixer la batterie rechargeable avec un câble d’alimentation accessible. 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. 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. Inclure les schémas de câblage et les dessins techniques. Ajouter les fichiers annexes nécessaires (code Arduino, fichiers de découpe laser, etc.).
4.3 Préparation de la présentation :
Réaliser un diaporama synthétisant le projet, de l'idée initiale au produit final. Inclure des vidéos de démonstration pour mettre en avant les fonctionnalités du métronome.
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.
Sources et documentation complémentaire
Élément de présentation
je met ici le document de présentation de mon projet