ENIB 2022 - groupe A : Roue de la gourmandise

De Les Fabriques du Ponant
Aller à : navigation, rechercher

photo de l'équipe


Arthur CHEVALIER

Clémence JAMBOU

Antonin LACLAUTRE

Maha BEN OTHMAN

Que fait ce projet ?

Notre projet, la Roue de la Gourmandise, est un projet inspiré de la roue de la fortune.

Il se différencie par la façon dont on tourne la roue.

On utilise ici un bouton poussoir pour allumer une LED dans la bande de LED qui circule au fur et à mesure, et s'arrête à un moment aléatoire.

La roue est divisé en deux côtés, un gagnant et un perdant.

Lorsqu'on gagne, la deuxième partie du projet entre en place, un distributeur de bonbon. Il s'agit d'une boîte avec un récipient à bonbons. Lorsqu'on gagne, un Servo moteur s'active et fait tomber une petite quantité de bonbon dans le bas de la boîte pour que le gagnant puisse les récupérer.

Liste des composants

  • Carte Arduino D1 Mini
  • Servo moteur
  • Câbles
  • Cable USB
  • Résistance 660 ohms
  • bouton poussoir
  • bande LED
  • Carton
  • Bouteille en plastique
  • Des bonbons capables de passer dans un goulot


Schéma de cablage

Code


                               
//                                     BROCHAGE                            
//                                _________________                        
//                               /     D1 mini     \                       
//                              |[ ]RST        TX[ ]|                   
//                              |[ ]A0  -GPIO  RX[ ]|                    
//                              |[ ]D0-16    5-D1[X]| - data du ruban de led                    
//                              |[ ]D5-14    4-D2[ ]|                     
//                              |[ ]D6-12    0-D3[ ]|               
//                              |[ ]D7-13    2-D4[ ]| LED_BUILTIN          
//                              |[ ]D8-15     GND[X]| - masse du ruban         
//                              |[ ]3V3 .      5V[X]| - Alim du ruban         
//                              |       +---+       |                     
//                              |_______|USB|_______|     
#include <Adafruit_NeoPixel.h>
#include <Servo.h>

#define broche        5 // broche GPIO du D1 mini sur laquelle est connecté le ruban
#define bouton        2

// Nombre de led du ruban ?
#define nbpixels 38
bool buttonState = HIGH;

// Lors de la configuration de la bibliothèque NeoPixel, 
// nous lui indiquons combien de pixels,
// et quelle broche utiliser pour envoyer des signaux.
Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);
// pour configurer le ruban :
// nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban)
// Les différents types de ruban :
//   NEO_KHZ800  800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812)
//   NEO_KHZ400  400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811)
//   NEO_GRB     Pixels cablés pour GRB bitstream (la plupart des produits Neopixel)
//   NEO_RGB     Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2)
//   NEO_RGBW    Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW)

#define delai 30 // durée de la pause en millisecondes
Servo myservo;

void setup() {
  pinMode(bouton,INPUT_PULLUP);
  pixels.begin();           // INITIALISE l'object ruban NeoPixel
  pixels.show();            // Ateint tout les pixels aussi vite que possible.
  pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255)
  Serial.begin(9600);
  myservo.attach(12);
  /////////////////////
  //Initialisation du servo moteur 
    int pos=190;
  for (pos = 190; pos >=20; pos -= 1) { 
    // in steps of 1 degree
    myservo.write(pos);              
    delay(1);                       
  }
  for (pos = 20; pos <=190; pos += 1) { 
    myservo.write(pos);              
    delay(1);                       
  }
  //////////////////
}

void loop() {
  buttonState=HIGH;
  while(buttonState==HIGH){
    buttonState=digitalRead(bouton); //Test du bouton 
    Serial.println("NOK"); //Tant qu'on appuie pas le programme attend
  }
  Serial.println("OK");
  //int nbLap=random(3,10); //Détermination du nombre de tour
  int nbLap=2;
  //int nbLed=random(0,40); //Détermination de la led qui sera la derniere
  int nbLed=5;
  buttonState=HIGH;
  for(int j=0;j<=nbLap;j++){ // Animation du ruban led où les lumières tournent
    for(int i=1; i<=nbpixels; i++){
      Serial.print("un");
      pixels.setPixelColor(i,pixels.Color(0, 0, 255)); 
      Serial.print("deux");
      delay(30);
      if(i!=0){
        pixels.setPixelColor(i-1,pixels.Color(0, 0, 0));
      }
      if(j==nbLap && nbLed==i){
         if(nbLed>0 && nbLed<=9){ //1ere zone gagnante
          win(nbLed);
         }
         else if(nbLed>=20 && nbLed <=31){ //2eme zone gagnante
          win(nbLed);
         }
         else{ //Zone perdante
          lose(nbLed);
         }
      }
      pixels.show();   // met à jour le ruban
      delay(delai);    // Pause
      //end:
   }
  }
}


void win(int i){
    for(int j=0;j<=20;j++){ 
      pixels.setPixelColor(i,pixels.Color(0, 255, 0)); //Led verte clignote 20 fois
      pixels.show();
      delay(200);
      pixels.setPixelColor(i,pixels.Color(0, 0, 0)); // Animation de victoire
      pixels.show();
      delay(200);
      //goto end; 
    }
    reward();
    return;
}


void lose(int i){
  for(int j=0;j<=20;j++){
      pixels.setPixelColor(i,pixels.Color(255, 0, 0)); //Animation de défaite
      pixels.show();
      delay(200);
      pixels.setPixelColor(i,pixels.Color(0, 0, 0)); //Led cligote rouge 20fois
      pixels.show();
      delay(200);
      //goto end;
  }
}

void reward(){
  int pos=190;
  for (pos = 190; pos >=20; pos -= 1) { 
    // in steps of 1 degree
    myservo.write(pos);              
    delay(15);                       
  }
  for (pos = 20; pos <=190; pos += 1) { 
    myservo.write(pos);              
    delay(15);                       
  }
}

Catégories