ENIB 2023 : Labyrinthe invisible

De Les Fabriques du Ponant
Révision datée du 18 janvier 2023 à 16:26 par Antonydbzh (discussion | contributions) (Notre Code)
Aller à : navigation, rechercher

photo de l'équipe

PhotoDeGroupeHackathon-min (1).png

Notre projet

Nous créons un labyrinthe de LED RGB. Le but du joueur est de trouver le chemin vers la sortie en déplaçant son personnage en tapotant la table du côté de la pièce de puzzle vers laquelle il veut se diriger. Par défaut, toutes les LED sont allumées en blanc, et la LED correspondant à la case où se trouve le joueur est affiché en bleu. Lorsqu'il heurte un mur, la LED correspondante au mur est affichée en rouge. Les points de départ et d'arrivée sont affichée en vert.

Notre matériel

  • Pièce de puzzle
  • Rubans de LED
  • 4 Piezo
  • Arduino Uno
  • Fils conducteurs
  • Scotch
  • Fer à souder

Notre Code

////////////////////////////////
// Programme d'apprentissage  //
//      de la maitrise        //
//     des rubans de led      //
////////////////////////////////
// basé sur le programme
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library
/*
                               
                                     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|_______|     
Matériel :
- des fils dupont.
- un ruban de led
- un D1 mini
- ...

Sous licence CC-By-Sa (http://creativecommons.org/licenses/by-nc-sa/3.0/)
*/
/*
   ___
 / ___ \
|_|   | |
     /_/ 
     _   ___   _ 
    |_| |___|_| |_
         ___|_   _|
        |___| |_|
Les petits Débrouillards - Antony Le Goïc-Auffret décembre 2020 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
*/

#include <Adafruit_NeoPixel.h>

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

// Nombre de led du ruban ?
#define nbpixels 9 

// 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

void setup() {
  pixels.begin();           // INITIALISE l'object ruban NeoPixel
  pixels.show();            // éteint tout les pixels aussi vite que possible.
  pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255)
}

void loop() {
  for(int i=0; i<nbpixels; i++) { // Les pixels sont numérotés de 0 à ...
    pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // on allume la couleur rouge à fond de la ième led 
    pixels.setPixelColor(i-1, pixels.Color(200, 0, 0)); // celle d'après est moins allumée
    pixels.setPixelColor(i-2, pixels.Color(150, 0, 0)); // ainsi de suite
    pixels.setPixelColor(i-3, pixels.Color(100, 0, 0));
    pixels.setPixelColor(i-4, pixels.Color(50, 0, 0));  
    pixels.setPixelColor(i-5, pixels.Color(0, 0, 0));  
    pixels.show();   // met à jour le ruban
    delay(delai);    // Pause
  }

  for(int i=nbpixels; i>-1; i--) { // Les pixels sont numérotés de 0 à ...
    pixels.setPixelColor(i, pixels.Color(0, 0, 0));
    pixels.setPixelColor(i-1, pixels.Color(50, 0, 0));
    pixels.setPixelColor(i-2, pixels.Color(100, 0, 0)); 
    pixels.setPixelColor(i-3, pixels.Color(150, 0, 0));
    pixels.setPixelColor(i-4, pixels.Color(200, 0, 0));  
    pixels.setPixelColor(i-5, pixels.Color(255, 0, 0)); 
    // pour comprendre, quand i vaut 30, la led 25 est au max, la 26 un peu moins, jusque la numéro 29 qui est éteinte
    // ce segment se déplace jusque i=0. 
    pixels.show();   // met à jour le ruban
    delay(delai);    // Pause
    }
}

Catégories