ENIB 2025 : BoiteATemps
Titre de la fiche expérience :
Sommaire
Description (résumé)
Membres de l'équipe : PICHON Maxime | SEVIK Kenji | MESSAGER Nolan | DE PLUVIÉ Charles
Introduction
Ce projet c'est déroulé dans le cadre du Hackaton "Hack The Bot" durant lequel nous avons été donné un kit de préparation pour un petit robot et nous devions le retravailler pour un autre objectif.
Nous avons reçus au début de ce projet un kit pour construire la "Boxson", une boîte qui fait un bruit aléatoire tiré d'une carte SD lorsque l'on appuie sur le bouton.
Notre idée de projet est donc de créer un minuteur à partir du kit fourni et de matériaux supplémentaires.
outil et matériel
Outils nécessaires :
- Pistolet à colle - Fer à souder (si besoin pour l'interrupteur et l'enceinte) - Cutter (de quoi couper du carton) - Scotch
Matériel nécessaire :
- 1 bouton poussoir - 1 carte Arduino Nano (ATmega328P) - 2 potentiomètres (entre 10 kOhm et 100 kOhm) - 1 MP3-TF-18P - 1 enceinte - 1 Batterie 5V - 1 bread board - Du carton - Câbles M-M - Câbles F-M - Câbles F-F - Affichage 7 segments 4 chiffres (TM1637)
fichiers à joindre
Mettre du code Arduino
Il est nécessaire de télécharger les bibliothèques suivantes :
"DFRobotDFPlayerMini.h"
"TM1637Display.h"
1
2 ////////////////////////
3 // BOITE A TEMPS //
4 ////////////////////////
5 //La boîte à temps est un minuteur qui peut jouer des sons personnalisés
6 #include "Arduino.h"
7 #include "SoftwareSerial.h"
8 #include "DFRobotDFPlayerMini.h" // bibliothèque pour jouer les sons
9 #include "TM1637Display.h" // bibliothèque pour l'affichage 7 segments
10
11 SoftwareSerial mySoftwareSerial(11, 10); // RX, TX
12 DFRobotDFPlayerMini myDFPlayer;
13
14 #define CLK 5 // Broche CLK du 4-Digit Display
15 #define DIO 6 // Broche DIO du 4-Digit Display
16 int brocheBouton = 3; // le GPIO 0 du D1 Mini est la broche D3
17 unsigned long time = 0; // temps (en millis) auquel il faut jouer un son
18 bool counting = false; // vrai si le compte à rebours est activé
19 int iteration = 0; // nombre de sonneries après la sonnerie principale
20 unsigned long seconde = 0;
21 unsigned long minute = 0;
22
23 TM1637Display display = TM1637Display(CLK, DIO);
24
25 void setup() {
26 mySoftwareSerial.begin(9600);
27 Serial.begin(9600); // initialise la connexion serie vers le PC a 115200 bauds
28
29 Serial.println();
30 Serial.println(F("Boite a sons"));
31 Serial.println(F("Initialisation du lecteur mp3 ... (peut prendre 3 a 5 secondes)"));
32
33 if (!myDFPlayer.begin(mySoftwareSerial)) { // utilise softwareSerial pour communiquer avec le MP3-TF-16P.
34 Serial.println(F("Incapable de demarrer:"));
35 Serial.println(F("1. Verifiez les connexions!"));
36 Serial.println(F("2. Inserez la carte SD!"));
37 while (true)
38 ;
39 }
40 Serial.println(F("La Boite a sons est prete !"));
41
42 myDFPlayer.setTimeOut(500); // place la communication serie time out 500ms
43 myDFPlayer.volume(20); // regle le volume (de 0 a 30).
44
45 pinMode(brocheBouton, INPUT_PULLUP); // active la resistance de pull-up interne
46
47 display.setBrightness(5);
48 }
49
50 void loop() {
51 if (counting == false) {
52 seconde = map(analogRead(A0), 0, 1024, 0, 6) * 10;
53 minute = map(analogRead(A1), 0, 1024, 0, 6);
54 if (digitalRead(brocheBouton) == LOW) // lance le minuteur lorqu'on appuie sur le bouton
55 {
56 counting = true;
57 time = seconde * 1000 + minute * 60000 + millis();
58 }
59 display.showNumberDecEx(minute, 0b11100000, true, 2, 0); // affiche les minutes sélectionnées
60 display.showNumberDecEx(seconde, 0b11100000, true, 2, 2); // affiche les secondes sélectionnées
61 delay(100);
62 }
63
64 else {
65 if (millis() >= time) {
66 if (iteration == 0) {
67 myDFPlayer.volume(20);
68 display.showNumberDecEx(0, 0b11100000, true, 2, 0); //affiche les minutes à 0
69 display.showNumberDecEx(0, 0b11100000, true, 2, 2); //affiche les secondes à 0
70 myDFPlayer.play(1); // Joue le son principal quand le minuteur atteint 0
71 iteration += 1;
72
73 } else if ((millis() - time) / 1000 >= iteration * 10) {
74 myDFPlayer.play(2); //Joue le son secondaire toute les 10 secondes après le son principal
75 if (10 + iteration * 2 < 30) {
76 myDFPlayer.volume(10 + iteration * 2); //Augmente l'intensité du son
77 } else {
78 myDFPlayer.volume(30);
79 }
80 iteration += 1;
81 }
82 if (digitalRead(brocheBouton) == LOW) // Arrête l'alarme lorqu'on appuie sur le bouton
83 {
84 counting = false;
85 iteration = 0;
86 delay(1000); // empêche de lancer un autre minuteur juste après en avoir terminé un
87 }
88 } else {
89 display.showNumberDecEx(((time - millis()) / 1000) / 60, 0b11100000, true, 2, 0); //affiche les minutes restantes
90 display.showNumberDecEx(((time - millis()) / 1000) % 60, 0b11100000, true, 2, 2); //affiche les secondes restantes
91 }
92 }
93 }
Étapes de fabrication
Étape 0 (si nécessaire)
Faire toutes les soudures nécessaires :
Étape 1
Branchez trois câbles sur chacun des deux potentiomètres tels que sur l'image suivante (les câbles rouges seront plus tard reliés à l'alimentation 5V et les câbles marrons à la masse 0V).
Le câble jaune au milieu sert à détecter la rotation du potentiomètre et sera branché directement sur la carte arduino Nano
Étape 2
Suivre ce schéma de câblage :
Étape 3
Créer une boîte en carton afin de tenir tous les composants en place.
Étape 4
Fixer sur la boite tous les composants externes et sécuriser leurs connexions électroniques avec de la colle à chaud :
/!\ ATTENTION : Faire attention à ce que le système soit hors tension lorsque vous sécurisez avec la colle à chaud /!\
Troubleshooting
Aucun problème rencontré avec la version actuelle pour le moment.
Sources et documentation complémentaire
Datasheet arduino Nano : https://docs.arduino.cc/resources/datasheets/A000005-datasheet.pdf
Datasheet afficheur 4 chiffres à sept segments : https://www.puntoflotante.net/DATASHEET-TM1637.pdf
Elément de présentation
Canva pour la présentation : https://www.canva.com/design/DAGc1RgfxGA/oSSAWffk7EsCj1ej6mQAhg/edit?utm_content=DAGc1RgfxGA&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton