C'est le printemps ! Fleur.gif

ENIB 2025 : BoiteATemps : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(outil et matériel)
(Description (résumé))
 
(69 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
Titre de la fiche expérience :
 
Titre de la fiche expérience :
==description (résumé)==
+
==Description (résumé)==
éventuelle photo de l'équipe  
+
Membres de l'équipe : PICHON Maxime | SEVIK Kenji | MESSAGER Nolan | DE PLUVIÉ Charles
  
[[Fichier:Totem-maisonsDesMinerauxCrozon.JPG|200px]]
+
[[Fichier:BoiteATemps_photo_de_groupe.jpg|500px]]
 +
[[Fichier:BoiteATemps_completee.jpg|500px]]
  
[[Fichier:Image_test.png|200px]]
+
==Introduction==
  
==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.
  
éventuelle vidéo
 
 
==outil et matériel==
 
==outil et matériel==
  
1 interrupteur
+
[[Fichier:BoiteATemps_enceinte_recto.jpg|100px|thumb|right|recto de l'enceinte]]
1 carte ATmega328P
+
[[Fichier:BoiteATemps_enceinte_verso.jpg|100px|thumb|right|verso de l'enceinte]]
2 potentiomètres 10k $\ohm$
+
[[Fichier:BoiteATemps_interrupteur.jpg|100px|thumb|right|bouton poussoir utilisé]]
 +
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==
 
==fichiers à joindre==
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
+
 
 
===Mettre du code Arduino===
 
===Mettre du code Arduino===
 +
Il est nécessaire de télécharger les bibliothèques suivantes :
 +
 +
"DFRobotDFPlayerMini.h"
 +
 +
"TM1637Display.h"
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  
#define PIN 9
+
////////////////////////
#include <Arduino_GFX_Library.h>
+
//  BOITE A TEMPS    //
 +
////////////////////////
 +
//La boîte à temps est un minuteur qui peut jouer des sons personnalisés
 +
#include "Arduino.h"
 +
#include "SoftwareSerial.h"
 +
#include "DFRobotDFPlayerMini.h"  // bibliothèque pour jouer les sons
 +
#include "TM1637Display.h"        // bibliothèque pour l'affichage 7 segments
 +
 
 +
SoftwareSerial mySoftwareSerial(11, 10);  // RX, TX
 +
DFRobotDFPlayerMini myDFPlayer;
 +
 
 +
#define CLK 5          // Broche CLK du 4-Digit Display
 +
#define DIO 6          // Broche DIO du 4-Digit Display
 +
int brocheBouton = 3;  // le GPIO 0 du D1 Mini est la broche D3
 +
unsigned long time = 0;          // temps (en millis) auquel il faut jouer un son
 +
bool counting = false;  // vrai si le compte à rebours est activé
 +
int iteration = 0;      // nombre de sonneries après la sonnerie principale
 +
unsigned long seconde = 0;
 +
unsigned long minute = 0;
 +
 
 +
TM1637Display display = TM1637Display(CLK, DIO);
  
 
void setup() {
 
void setup() {
   // put your setup code here, to run once:
+
   mySoftwareSerial.begin(9600);
 +
  Serial.begin(9600);  // initialise la connexion serie vers le PC a 115200 bauds
 +
 
 +
  Serial.println();
 +
  Serial.println(F("Boite a  sons"));
 +
  Serial.println(F("Initialisation du lecteur mp3 ... (peut prendre 3 a 5 secondes)"));
 +
 
 +
  if (!myDFPlayer.begin(mySoftwareSerial)) {  // utilise softwareSerial pour communiquer avec le MP3-TF-16P.
 +
    Serial.println(F("Incapable de demarrer:"));
 +
    Serial.println(F("1. Verifiez les connexions!"));
 +
    Serial.println(F("2. Inserez la carte SD!"));
 +
    while (true)
 +
      ;
 +
  }
 +
  Serial.println(F("La Boite a sons est prete !"));
 +
 
 +
  myDFPlayer.setTimeOut(500);  // place la communication serie time out 500ms
 +
  myDFPlayer.volume(20);      // regle le volume (de 0 a 30).
  
 +
  pinMode(brocheBouton, INPUT_PULLUP);  // active la resistance de pull-up interne
 +
 +
  display.setBrightness(5);
 
}
 
}
  
 
void loop() {
 
void loop() {
   // put your main code here, to run repeatedly:
+
   if (counting == false) {
 +
    seconde = map(analogRead(A0), 0, 1024, 0, 6) * 10;
 +
    minute = map(analogRead(A1), 0, 1024, 0, 6);
 +
    if (digitalRead(brocheBouton) == LOW)  // lance le minuteur lorqu'on appuie sur le bouton
 +
    {
 +
      counting = true;
 +
      time = seconde * 1000 + minute * 60000 + millis();
 +
    }
 +
    display.showNumberDecEx(minute, 0b11100000, true, 2, 0);  // affiche les minutes sélectionnées
 +
    display.showNumberDecEx(seconde, 0b11100000, true, 2, 2);  // affiche les secondes sélectionnées
 +
    delay(100);
 +
  }
  
 +
  else {
 +
    if (millis() >= time) {
 +
      if (iteration == 0) {
 +
        myDFPlayer.volume(20);
 +
        display.showNumberDecEx(0, 0b11100000, true, 2, 0);  //affiche les minutes à 0
 +
        display.showNumberDecEx(0, 0b11100000, true, 2, 2);  //affiche les secondes à 0
 +
        myDFPlayer.play(1);                                  // Joue le son principal quand le minuteur atteint 0
 +
        iteration += 1;
 +
 +
      } else if ((millis() - time) / 1000 >= iteration * 10) {
 +
        myDFPlayer.play(2);  //Joue le son secondaire toute les 10 secondes après le son principal
 +
        if (10 + iteration * 2 < 30) {
 +
          myDFPlayer.volume(10 + iteration * 2);  //Augmente l'intensité du son
 +
        } else {
 +
          myDFPlayer.volume(30);
 +
        }
 +
        iteration += 1;
 +
      }
 +
      if (digitalRead(brocheBouton) == LOW)  // Arrête l'alarme lorqu'on appuie sur le bouton
 +
      {
 +
        counting = false;
 +
        iteration = 0;
 +
        delay(1000);  // empêche de lancer un autre minuteur juste après en avoir terminé un
 +
      }
 +
    } else {
 +
      display.showNumberDecEx(((time - millis()) / 1000) / 60, 0b11100000, true, 2, 0);  //affiche les minutes restantes
 +
      display.showNumberDecEx(((time - millis()) / 1000) % 60, 0b11100000, true, 2, 2);  //affiche les secondes restantes
 +
    }
 +
  }
 
}
 
}
  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==étapes de fabrication==
+
==Étapes de fabrication==
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
 
  
===étape 1===
+
===Étape 0 (si nécessaire)===
===étape 2===
+
 
===étape ...===
+
Faire toutes les soudures nécessaires :
===Troubleshouting===
+
 
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
+
[[Fichier:BoiteATemps_soudure_enceinte.jpg|200px]]
 +
[[Fichier:BoiteATemps_soudure_interrupteur.jpg|200px]]
 +
 
 +
===É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
 +
 
 +
[[Fichier:BoiteATemps_potentiometre_branche.jpg|200px]]
 +
 
 +
===Étape 2===
 +
 
 +
Suivre ce schéma de câblage :
 +
 
 +
[[Fichier:BoiteATemps_cablage.jpg|750px]]
 +
 
 +
===Étape 3===
 +
 
 +
Créer une boîte en carton afin de tenir tous les composants en place.
 +
 
 +
[[Fichier:BoiteATemps_armature_carton.jpg|200px]]
 +
 
 +
===É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 /!\
 +
 
 +
[[Fichier:BoiteATemps_interrupteur_outside.jpg|155px]]
 +
[[Fichier:BoiteATemps_interrupteur_inside.jpg|155px]]
 +
[[Fichier:BoiteATemps_potentiometres_outside.jpg|155px]]
 +
[[Fichier:BoiteATemps_potentiometres_inside.jpg|155px]]
 +
[[Fichier:BoiteATemps_enceinte_outside.jpg|155px]]
 +
[[Fichier:BoiteATemps_enceinte_inside.jpg|155px]]
 +
[[Fichier:BoiteATemps_4digit_7segment_display_outside.jpg|155px]]
 +
[[Fichier:BoiteATemps_4digit_7segment_display_inside.jpg|155px]]
 +
 
 +
===Troubleshooting===
 +
 
 +
Aucun problème rencontré avec la version actuelle pour le moment.
  
 
==Sources et documentation complémentaire==
 
==Sources et documentation complémentaire==
  
==Elémlent de présentation==
+
Datasheet arduino Nano : https://docs.arduino.cc/resources/datasheets/A000005-datasheet.pdf
je met ici le document de présentation de mon projet
+
 
 +
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
  
 
==ne pas modifier sous cette ligne==
 
==ne pas modifier sous cette ligne==

Version actuelle datée du 21 janvier 2025 à 15:36

Titre de la fiche expérience :

Description (résumé)

Membres de l'équipe : PICHON Maxime | SEVIK Kenji | MESSAGER Nolan | DE PLUVIÉ Charles

BoiteATemps photo de groupe.jpg BoiteATemps completee.jpg

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

recto de l'enceinte
verso de l'enceinte
bouton poussoir utilisé

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 :

BoiteATemps soudure enceinte.jpg BoiteATemps soudure interrupteur.jpg

É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

BoiteATemps potentiometre branche.jpg

Étape 2

Suivre ce schéma de câblage :

BoiteATemps cablage.jpg

Étape 3

Créer une boîte en carton afin de tenir tous les composants en place.

BoiteATemps armature carton.jpg

É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 /!\

BoiteATemps interrupteur outside.jpg BoiteATemps interrupteur inside.jpg BoiteATemps potentiometres outside.jpg BoiteATemps potentiometres inside.jpg BoiteATemps enceinte outside.jpg BoiteATemps enceinte inside.jpg BoiteATemps 4digit 7segment display outside.jpg BoiteATemps 4digit 7segment display inside.jpg

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

ne pas modifier sous cette ligne