ENIB 2020 : Question pour un misérable

De Les Fabriques du Ponant
Révision datée du 20 janvier 2020 à 15:07 par Victor (discussion | contributions) (Code)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
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

Les petits Débrouillards - janvier 2019 CC-By-Sa

  1. include "Arduino.h"
  2. include "SoftwareSerial.h"
  3. include "DFRobotDFPlayerMini.h"

// D5 est le RX du ESP8266, connecté au TX du MP3-TF-16P // D6 est le TX du ESP8266, connecté au RX du MP3-TF-16P SoftwareSerial mySoftwareSerial(D5, D6); // RX, TX DFRobotDFPlayerMini myDFPlayer;

long hasard; // déclaration d'une variable long bool solutions[] = {false,false,false,true}; bool reponse = false; int brocheBp1 = 0; // le GPIO 0 du D1 Mini est la broche D3 int brocheBp2 = 4; // le GPIO 0 du D1 Mini est la broche D3 int brocheBp3 = 5; // le GPIO 0 du D1 Mini est la broche D3 int BrocheLed = 13; // Broche de la LED - le GPIO 13 du D1 Mini est la broche D int BrocheLed2 = 16; // Broche de la LED - le GPIO 16 du D1 Mini est la broche D int brillance = 0; // Intensité lumineuse de la LED int pas = 5; // Gradation de l'intensité lumineuse int nombreDeSons = 4;// indiquer le nombre de son sur la carte SD. Chaque fichier est numeroté de 001 à 047 ici.

void setup() {

 mySoftwareSerial.begin(9600);
 
 Serial.begin(115200); // initialise la connexion série vers le PC à 115200 bauds
 
 Serial.println();
 Serial.println(F("Boite à sons"));
 Serial.println(F("Initialisation du lecteur mp3 ... (peut prendre 3 Ã  5 secondes)"));
 
 if (!myDFPlayer.begin(mySoftwareSerial)) {  // utilise softwareSerial pour communiquer avec le MP3-TF-16P.
   Serial.println(F("Incapable de démarrer :"));
   Serial.println(F("1. Vérifiez les connexions !"));
   Serial.println(F("2. Inserez la carte SD !"));
   while(true);
 }
 Serial.println(F("La Boite à  sons prête !"));
 
 myDFPlayer.setTimeOut(500); // place la communication serie time out 500ms
 myDFPlayer.volume(30);      // règle le volume (de 0 to 30).
 myDFPlayer.play(9);   // joue le fichier son de bienvenue.
 delay(4500);
 myDFPlayer.play(10);        // joue le fichier son pour l'utilisation.
 delay(9000);
 // si la broche analogique 0 n'est pas connectée, le bruit analogique aléatoire
 // provoquera l'appel de l'instruction randomSeed() pour générer
 // différent nombre de départ à chaque exécution du programme.
 // randomSeed() brouillera alors la fonction aléatoire
 randomSeed(analogRead(0));            
 pinMode (brocheBp1, INPUT_PULLUP); // active la résistance de Pull-up interne
 pinMode (brocheBp2, INPUT_PULLUP); // active la résistance de Pull-up interne
 pinMode (brocheBp3, INPUT_PULLUP); // active la résistance de Pull-up interne
 pinMode (BrocheLed, OUTPUT);           // déclare la broche en sortie
 pinMode (BrocheLed2, OUTPUT);           // déclare la broche en sortie

}

void loop() {

 analogWrite(BrocheLed, brillance);        // Allume la led à la valeur souhaitée
 brillance = brillance + pas;              // incrémente la lulimosité de la led
 if (brillance <= 0 || brillance >= 255) { // inverse l'incrémentation lorsque la luminosité est à un extrême (éteint ou maximum)
   pas = -pas;
 }
 delay(30);
 
 if ( digitalRead(brocheBp1) == LOW )   // lorqu'on appuis sur le bouton
 {
 analogWrite(BrocheLed, 255);              // on allume la led au maximum.
 delay(250);                               // délais anti-rebond.    
 Serial.println("Appuis Bouton Question"); // info sur le moniteur série
 hasard = random(1,nombreDeSons+1);          // on tire un nombre au hasard de 1 Ã  47 (parce que j'ai 47 piste de son).
 Serial.print("Lecture de la question ");
 Serial.println(hasard);                   // le nombre est  sur le moniteur série
 myDFPlayer.play(hasard);                  // joue le son tiré au hasard.
 delay(10000);
 while ((digitalRead(brocheBp3) == HIGH) and (digitalRead(brocheBp2) == HIGH))
 {
   Serial.println("Boucle");
   analogWrite(BrocheLed, brillance);        // Allume la led à la valeur souhaitée
   brillance = brillance + pas;              // incrémente la lulimosité de la led
   if (brillance <= 0 || brillance >= 255) { // inverse l'incrémentation lorsque la luminosité est à un extrême (éteint ou maximum)
     pas = -pas;
   }
   delay(30);
 }
 if (digitalRead(brocheBp3) == LOW)
 {
   reponse = true;
 }
 else if (digitalRead(brocheBp2) == LOW)
 {
   reponse = false;
 }
 if (reponse == solutions[hasard - 1])
 {
   Serial.println("Bien joué");
   analogWrite(BrocheLed2, 255);
   myDFPlayer.play(11);
   delay(2000);
 }
 if (reponse != solutions[hasard - 1])
 {
   Serial.println("Raté");
   myDFPlayer.play(random(12,15));
   delay(1000);
 }
 myDFPlayer.play(hasard+4);
 delay(8000);
 }
 analogWrite(BrocheLed2, 0);

}


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

Catégories