C'est le printemps ! Fleur.gif

ENIB 2020 : Question pour un misérable

De Les Fabriques du Ponant
(Redirigé depuis ENIB 2020 : chipoquiz)
Aller à : navigation, rechercher

Photo de l'équipe

Photoenib2018.jpg

Que fait ce projet ?

Le projet est un jeu de culture générale sous la forme d'un vrai ou faux, mais pas seulement. Pour chacune de vos réponses, c'est la voix d'un de nos profs préférés qui vous annoncera si votre réponse est correcte ( cf titre du projet )

Liste des composants

  • Composants
    • Une Arduino D1 mini
    • Une breadboard
    • 3 boutons
    • 3 LEDs
    • Un interrupteur
    • Un haut parleur
    • Un lecteur de carte SD et une carte SD
    • Des fils

Il est également possible d'utiliser 3 petites breadboards plutôt qu'une grande, pour réduire l'encombrement du circuit et pouvoir le rentrer plus facilement dans le cube

Câblage

                       BROCHAGE                            
                   ___________________                        
                  /     D1 mini       \                       
               -  |[ ]RST         TX[ ]| -                    
               -  |[ ]A0   -GPIO  RX[ ]| -                    
      LED VERTE   |[X]D0-16     5-D1[X]| - Bouton 3                   
  RX MP3-TF-16P   |[X]D5-14     4-D2[X]| - Bouton 2                   
  TX MP3-TF-16P   |[X]D6-12     0-D3[X]| - Bouton 1             
      LED ROUGE   |[X]D7-13     2-D4[ ]| LED_BUILTIN          
               -  |[ ]D8-15      GND[X]| - GND (Bouton, MP3-TF-16P)             
               -  |[ ]3V3         5V[X]| - MP3-TF-16P         
                  |       +---+        |                     
                  |_______|USB|________|                      


                   +-------\_/--------+
               +5V |[X] MP3-TF-16P [ ]|
resistance 1K - TX |[X]            [ ]|
                RX |[X] __________ [ ]|
                   |[ ]|          |[ ]|
                   |[ ]|  CARTE   |[ ]|
      Haut-Parleur |[X]|   SD     |[ ]|
               GND |[X]|          |[ ]|
      Haut-Parleur |[X]|          |[ ]|
                   |___|__________|___| 


Cablage2.jpg

Pour le câblage, nous avons opté pour une carte Wemos, nous avons pensé à la Raspberry Pi, mais nous préférions la Wemos pour sa facilité d'utilisation.

Nous avons des boutons pour répondre vrai ou faux aux questions posées, des LEDs pour savoir si on a eu vrai ou faux, et un haut-parleur pour le son des questions et des réponses.

Nous utilisons également une carte SD qui contient tous les sons des questions et réponses.

Nous nous sommes fiés à la datasheet plus haut pour réaliser le câblage.

Création de la boîte

On a créé le patron de la boîte avec le logiciel Inkscape.

Nous avons décidé de créer la boîte avec du bois contreplaqué à l'aide de la découpeuse laser.

On a laissé de la place pour faire passer des LEDs, des boutons, un haut-parleur et un port d'alimentation.

Nous avons assemblé les différentes parties de la boîte avec le pistolet à colle.

Boite2.jpg

Code

  1  
  2 //Les petits Débrouillards - janvier 2019 CC-By-Sa
  3 
  4 #include "Arduino.h"
  5 #include "SoftwareSerial.h"
  6 #include "DFRobotDFPlayerMini.h"
  7 
  8 // D5 est le RX du ESP8266, connecté au TX du MP3-TF-16P
  9 // D6 est le TX du ESP8266, connecté au RX du MP3-TF-16P
 10 SoftwareSerial mySoftwareSerial(D5, D6); // RX, TX
 11 DFRobotDFPlayerMini myDFPlayer;
 12 
 13 long hasard;          // déclaration d'une variable long
 14 bool solutions[] = {false,false,false,true};
 15 bool reponse = false;
 16 int brocheBp1 = 0; // le GPIO 0 du D1 Mini est la broche D3
 17 int brocheBp2 = 4; // le GPIO 0 du D1 Mini est la broche D3
 18 int brocheBp3 = 5; // le GPIO 0 du D1 Mini est la broche D3
 19 int BrocheLed = 13;   // Broche de la LED - le GPIO 13 du D1 Mini est la broche D
 20 int BrocheLed2 = 16;   // Broche de la LED - le GPIO 16 du D1 Mini est la broche D
 21 int brillance = 0;    // Intensité lumineuse de la LED
 22 int pas = 5;          // Gradation de l'intensité lumineuse
 23 int nombreDeSons = 4;// indiquer le nombre de son sur la carte SD. Chaque fichier est numeroté de 001 à 047 ici.
 24 
 25 void setup() {
 26   mySoftwareSerial.begin(9600);
 27   
 28   Serial.begin(115200); // initialise la connexion série vers le PC à 115200 bauds
 29   
 30   Serial.println();
 31   Serial.println(F("Boite à sons"));
 32   Serial.println(F("Initialisation du lecteur mp3 ... (peut prendre 3 Ã  5 secondes)"));
 33   
 34   if (!myDFPlayer.begin(mySoftwareSerial)) {  // utilise softwareSerial pour communiquer avec le MP3-TF-16P.
 35     Serial.println(F("Incapable de démarrer :"));
 36     Serial.println(F("1. Vérifiez les connexions !"));
 37     Serial.println(F("2. Inserez la carte SD !"));
 38     while(true);
 39   }
 40   Serial.println(F("La Boite à sons prête !"));
 41   
 42   myDFPlayer.setTimeOut(500); // place la communication serie time out 500ms
 43   myDFPlayer.volume(30);      // règle le volume (de 0 to 30).
 44   myDFPlayer.play(9);   // joue le fichier son de bienvenue.
 45   delay(4500);
 46   myDFPlayer.play(10);        // joue le fichier son pour l'utilisation.
 47   delay(9000);
 48   // si la broche analogique 0 n'est pas connectée, le bruit analogique aléatoire
 49   // provoquera l'appel de l'instruction randomSeed() pour générer
 50   // différent nombre de départ à chaque exécution du programme.
 51   // randomSeed() brouillera alors la fonction aléatoire
 52 
 53   randomSeed(analogRead(0));            
 54   pinMode (brocheBp1, INPUT_PULLUP); // active la résistance de Pull-up interne
 55   pinMode (brocheBp2, INPUT_PULLUP); // active la résistance de Pull-up interne
 56   pinMode (brocheBp3, INPUT_PULLUP); // active la résistance de Pull-up interne
 57   pinMode (BrocheLed, OUTPUT);           // déclare la broche en sortie
 58   pinMode (BrocheLed2, OUTPUT);           // déclare la broche en sortie
 59 }
 60 
 61 void loop() {
 62   analogWrite(BrocheLed, brillance);        // Allume la led à la valeur souhaitée
 63   brillance = brillance + pas;              // incrémente la lulimosité de la led
 64   if (brillance <= 0 || brillance >= 255) { // inverse l'incrémentation lorsque la luminosité est à un extrême (éteint ou maximum)
 65     pas = -pas;
 66   }
 67   delay(30);
 68   
 69   if ( digitalRead(brocheBp1) == LOW )   // lorqu'on appuis sur le bouton
 70   {
 71   analogWrite(BrocheLed, 255);              // on allume la led au maximum.
 72   delay(250);                               // délais anti-rebond.    
 73   Serial.println("Appuis Bouton Question"); // info sur le moniteur série
 74   hasard = random(1,nombreDeSons+1);          // on tire un nombre au hasard de 1 Ã  47 (parce que j'ai 47 piste de son).
 75   Serial.print("Lecture de la question ");
 76   Serial.println(hasard);                   // le nombre est  sur le moniteur série
 77   myDFPlayer.play(hasard);                  // joue le son tiré au hasard.
 78   delay(10000);
 79   while ((digitalRead(brocheBp3) == HIGH) and (digitalRead(brocheBp2) == HIGH))
 80   {
 81     Serial.println("Boucle");
 82     analogWrite(BrocheLed, brillance);        // Allume la led à la valeur souhaitée
 83     brillance = brillance + pas;              // incrémente la lulimosité de la led
 84     if (brillance <= 0 || brillance >= 255) { // inverse l'incrémentation lorsque la luminosité est à un extrême (éteint ou maximum)
 85       pas = -pas;
 86     }
 87     delay(30);
 88   }
 89   if (digitalRead(brocheBp3) == LOW)
 90   {
 91     reponse = true;
 92   }
 93   else if (digitalRead(brocheBp2) == LOW)
 94   {
 95     reponse = false;
 96   }
 97   if (reponse == solutions[hasard - 1])
 98   {
 99     Serial.println("Bien joué");
100     analogWrite(BrocheLed2, 255);
101     myDFPlayer.play(11);
102     delay(2000);
103   }
104   if (reponse != solutions[hasard - 1])
105   {
106     Serial.println("Raté");
107     myDFPlayer.play(random(12,15));
108     delay(1000);
109   }
110   myDFPlayer.play(hasard+4);
111   delay(8000);
112   }
113   analogWrite(BrocheLed2, 0);
114 }

Pour faire la voix des questions et des réponses nous avons utilisé ReadSpeaker

Catégories