ENIB 2024 : Apuie viiiiite : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(outil et matériel)
(ne pas modifier sous cette ligne)
 
(18 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
Titre de la fiche expérience :
 
Titre de la fiche expérience :
==description (résumé)==
+
==description==
éventuelle photo de l'équipe
+
La Led Race est une course de led dans laquelle une led rouge et une led verte se battent pour la première place, pour ce faire, chaque joueur dispose d'un bouton poussoir sur lequel il faut appuyer le plus vite possible.
  
  
  
[[Fichier:Pain.jpg|400px]]
+
[[Fichier:Ledrace.png|400px]]
  
 
==Introduction==
 
==Introduction==
  
éventuelle vidéo
+
Etudiant ingénieur, dans le cadre d'un hackathon organisé par les petits débrouillards, nous devions réaliser un jeu avec des leds pour les enfants, nous avons tiré au sort et sommes tombés sur la led race que nous avons câbles avec une carte ESP-VROOM-32.
Code utilisé sous Arduino
 
  
/* 
+
==Ca peut servir==
* ____                    _      ______ _____    _____
 
  / __ \                  | |    |  ____|  __ \  |  __ \             
 
| |  | |_ __  ___ _ __  | |    | |__  | |  | | | |__) |__ _  ___ ___
 
| |  | | '_ \ / _ \ '_ \  | |    |  __| | |  | | |  _  // _` |/ __/ _ \
 
| |__| | |_) |  __/ | | | | |____| |____| |__| | | | \ \ (_| | (_|  __/
 
  \____/| .__/ \___|_| |_| |______|______|_____/  |_|  \_\__,_|\___\___|
 
        | |                                                           
 
        |_|         
 
Open LED Race
 
An minimalist cars race for LED strip 
 
 
 
This program is free software; you can redistribute it and/or modify
 
it under the terms of the GNU General Public License as published by
 
the Free Software Foundation; either version 3 of the License, or
 
(at your option) any later version.
 
  
by gbarbarov@singulardevices.com  for Arduino day Seville 2019
+
[[Fichier:Schema ledrace.png|400px]]
https://www.hackster.io/gbarbarov/open-led-race-a0331a
 
https://twitter.com/openledrace
 
 
Code made dirty and fast, next improvements in:
 
https://gitlab.com/open-led-race
 
https://openledrace.net/open-software/
 
*/
 
  
                                                           
+
* la documentation : [[ESP32]]
#include <Adafruit_NeoPixel.h>
 
#define MAXLED        180 // MAX LEDs actives on strip
 
  
//Pins Arduino Day 19 version
+
* PIN que nous avons utilisé
#define PIN_LED        27  // R 500 ohms to DI pin for WS2812 and WS2813, for WS2813 BI pin of first LED to GND  ,  CAP 1000 uF to VCC 5v/GND,power supplie 5V 2A 
 
#define PIN_P1        16  // switch player 1 to PIN and GND
 
#define PIN_P2        18  // switch player 2 to PIN and GND
 
#define PIN_AUDIO      21  // through CAP 2uf to speaker 8 ohms
 
  
//Pins Maker Faire Roma 19 version
+
[[Fichier:Code ledrace.png|300px]]
//#define PIN_LED        2  // R 500 ohms to DI pin for WS2812 and WS2813, for WS2813 BI pin of first LED to GND  ,  CAP 1000 uF to VCC 5v/GND,power supplie 5V 2A 
 
//#define PIN_P1        G34 // switch player 1 to PIN and GND
 
//#define PIN_P2        A2 // switch player 2 to PIN and GND
 
//#define PIN_AUDIO      3  // through CAP 2uf to speaker 8 ohms
 
  
int NPIXELS=MAXLED; // leds on track
+
==Sources et documentation complémentaire==
 
+
* https://openledrace.net
#define COLOR1    track.Color(255,0,0)
+
* https://www.wikidebrouillard.org/wiki/LED_RACER
#define COLOR2    track.Color(0,0,255)
+
* https://projecthub.arduino.cc/gbarbarov/open-led-race-bb534b
 
 
int win_music[] = {
 
  2637, 2637, 0, 2637,
 
  0, 2093, 2637, 0,
 
  3136   
 
};
 
     
 
byte  gravity_map[MAXLED];   
 
 
 
int TBEEP=3;
 
 
 
float speed1=0;
 
float speed2=0;
 
float dist1=0;
 
float dist2=0;
 
 
 
byte loop1=0;
 
byte loop2=0;
 
 
 
byte leader=0;
 
byte loop_max=5; //total laps race
 
 
 
 
 
float ACEL=0.2;
 
float kf=0.015; //friction constant
 
float kg=0.003; //gravity constant
 
 
 
byte flag_sw1=0;
 
byte flag_sw2=0;
 
byte draworder=0;
 
 
unsigned long timestamp=0;
 
 
 
Adafruit_NeoPixel track = Adafruit_NeoPixel(MAXLED, PIN_LED, NEO_GRB + NEO_KHZ800);
 
 
 
int tdelay = 5;
 
 
 
void set_ramp(byte H,byte a,byte b,byte c)
 
{for(int i=0;i<(b-a);i++){gravity_map[a+i]=127-i*((float)H/(b-a));};
 
gravity_map[b]=127;
 
for(int i=0;i<(c-b);i++){gravity_map[b+i+1]=127+H-i*((float)H/(c-b));};
 
}
 
 
 
void set_loop(byte H,byte a,byte b,byte c)
 
{for(int i=0;i<(b-a);i++){gravity_map[a+i]=127-i*((float)H/(b-a));};
 
gravity_map[b]=255;
 
for(int i=0;i<(c-b);i++){gravity_map[b+i+1]=127+H-i*((float)H/(c-b));};
 
}
 
 
 
 
 
void setup() {
 
  for(int i=0;i<NPIXELS;i++){gravity_map[i]=127;};
 
  track.begin();
 
  pinMode(PIN_P1,INPUT_PULLUP);
 
  pinMode(PIN_P2,INPUT_PULLUP); 
 
 
 
  if ((digitalRead(PIN_P1)==0)) //push switch 1 on reset for activate physic
 
  {
 
    set_ramp(12,90,100,110);    // ramp centred in LED 100 with 10 led fordward and 10 backguard
 
    for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(0,0,(127-gravity_map[i])/8) );};
 
    track.show();
 
  };
 
  start_race();   
 
}
 
 
 
void start_race(){for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(0,0,0));};
 
                  track.show();
 
                  delay(2000);
 
                  track.setPixelColor(12, track.Color(0,255,0));
 
                  track.setPixelColor(11, track.Color(0,255,0));
 
                  track.show();
 
                  tone(PIN_AUDIO,400);
 
                  delay(2000);
 
                  noTone(PIN_AUDIO);                 
 
                  track.setPixelColor(12, track.Color(0,0,0));
 
                  track.setPixelColor(11, track.Color(0,0,0));
 
                  track.setPixelColor(10, track.Color(255,255,0));
 
                  track.setPixelColor(9, track.Color(255,255,0));
 
                  track.show();
 
                  tone(PIN_AUDIO,600);
 
                  delay(2000);
 
                  noTone(PIN_AUDIO);                 
 
                  track.setPixelColor(9, track.Color(0,0,0));
 
                  track.setPixelColor(10, track.Color(0,0,0));
 
                  track.setPixelColor(8, track.Color(255,0,0));
 
                  track.setPixelColor(7, track.Color(255,0,0));
 
                  track.show();
 
                  tone(PIN_AUDIO,1200);
 
                  delay(2000);
 
                  noTone(PIN_AUDIO);                             
 
                  timestamp=0;             
 
                };
 
 
 
void winner_fx() {
 
              int msize = sizeof(win_music) / sizeof(int);
 
              for (int note = 0; note < msize; note++) {
 
              tone(PIN_AUDIO, win_music[note],200);
 
              delay(230);
 
              noTone(PIN_AUDIO);
 
 
 
}
 
 
 
                                             
 
              };
 
 
 
void burning1(){
 
//to do
 
}
 
 
 
void burning2(){
 
//to do
 
}
 
 
 
void track_rain_fx(){
 
//to do
 
}
 
 
 
void track_oil_fx(){
 
//to do
 
}
 
 
 
void track_snow_fx(){
 
//to do
 
}
 
 
 
 
 
void fuel_empty(){
 
//to do
 
}
 
 
 
void fill_fuel_fx(){
 
//to do
 
}
 
 
 
void in_track_boxs_fx(){
 
//to do
 
}
 
 
 
void pause_track_boxs_fx(){
 
//to do
 
}
 
 
void flag_boxs_stop(){
 
//to do
 
}
 
 
 
void flag_boxs_ready(){
 
//to do
 
}
 
 
 
void draw_safety_car(){
 
//to do
 
}
 
 
 
void telemetry_rx(){
 
  //to do
 
}
 
 
void telemetry_tx(){
 
  //to do
 
}
 
 
 
void telemetry_lap_time_car1(){
 
//to do
 
}
 
 
 
void telemetry_lap_time_car2(){
 
//to do
 
}
 
 
 
void telemetry_record_lap(){
 
//to do
 
}
 
 
 
void telemetry_total_time(){
 
//to do
 
}
 
 
 
int read_sensor(byte player){
 
//to do
 
}
 
  
int calibration_sensor(byte player){
+
==Point à améliorer==
  //to do 
 
}
 
  
int display_lcd_laps(){
+
Les principaux points à améliorer sont les suivants :
  //to do 
 
}
 
  
int display_lcd_time(){
+
* Faire des supports pour les boutons
  //to do 
+
* Mettre des fils plus longs sur les boutons
}
 
  
 +
==Problèmes==
  
 +
* Il faut faire attention à la carte qui a pas mal de PIN qui ne marchent pas et donc en essayer plusieurs
 +
* Ne pas utiliser de Linux car problème de pilotes
  
void draw_car1(void){for(int i=0;i<=loop1;i++){track.setPixelColor(((word)dist1 % NPIXELS)+i, track.Color(0,255-i*20,0));};                 
 
  }
 
  
void draw_car2(void){for(int i=0;i<=loop2;i++){track.setPixelColor(((word)dist2 % NPIXELS)+i, track.Color(255-i*20,0,0));};           
 
}
 
 
 
void loop() {
 
    //for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(0,0,0));};
 
    for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(0,0,(127-gravity_map[i])/8) );};
 
   
 
    if ( (flag_sw1==1) && (digitalRead(PIN_P1)==0) ) {flag_sw1=0;speed1+=ACEL;};
 
    if ( (flag_sw1==0) && (digitalRead(PIN_P1)==1) ) {flag_sw1=1;};
 
 
    if ((gravity_map[(word)dist1 % NPIXELS])<127) speed1-=kg*(127-(gravity_map[(word)dist1 % NPIXELS]));
 
    if ((gravity_map[(word)dist1 % NPIXELS])>127) speed1+=kg*((gravity_map[(word)dist1 % NPIXELS])-127);
 
   
 
   
 
    speed1-=speed1*kf;
 
   
 
    if ( (flag_sw2==1) && (digitalRead(PIN_P2)==0) ) {flag_sw2=0;speed2+=ACEL;};
 
    if ( (flag_sw2==0) && (digitalRead(PIN_P2)==1) ) {flag_sw2=1;};
 
 
    if ((gravity_map[(word)dist2 % NPIXELS])<127) speed2-=kg*(127-(gravity_map[(word)dist2 % NPIXELS]));
 
    if ((gravity_map[(word)dist2 % NPIXELS])>127) speed2+=kg*((gravity_map[(word)dist2 % NPIXELS])-127);
 
       
 
    speed2-=speed2*kf;
 
       
 
    dist1+=speed1;
 
    dist2+=speed2;
 
 
    if (dist1>dist2) {leader=1;}
 
    if (dist2>dist1) {leader=2;};
 
     
 
    if (dist1>NPIXELS*loop1) {loop1++;tone(PIN_AUDIO,600);TBEEP=2;};
 
    if (dist2>NPIXELS*loop2) {loop2++;tone(PIN_AUDIO,700);TBEEP=2;};
 
 
    if (loop1>loop_max) {for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(0,255,0));}; track.show();
 
                                                    winner_fx();loop1=0;loop2=0;dist1=0;dist2=0;speed1=0;speed2=0;timestamp=0;
 
                                                    start_race();
 
                                                  }
 
    if (loop2>loop_max) {for(int i=0;i<NPIXELS;i++){track.setPixelColor(i, track.Color(255,0,0));}; track.show();
 
                                                    winner_fx();loop1=0;loop2=0;dist1=0;dist2=0;speed1=0;speed2=0;timestamp=0;
 
                                                    start_race();
 
                                                  }
 
    if ((millis() & 512)==(512*draworder)) {if (draworder==0) {draworder=1;}
 
                          else {draworder=0;} 
 
                        };
 
 
    if (draworder==0) {draw_car1();draw_car2();}
 
        else {draw_car2();draw_car1();} 
 
               
 
    track.show();
 
    delay(tdelay);
 
   
 
    if (TBEEP>0) {TBEEP-=1;
 
                  if (TBEEP==0) {noTone(PIN_AUDIO);}; // lib conflict !!!! interruption off by neopixel
 
                }; 
 
}
 
 
==fichiers à joindre==
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 
==Sources et documentation complémentaire==
 
* https://openledrace.net
 
* https://www.wikidebrouillard.org/wiki/LED_RACER
 
* https://projecthub.arduino.cc/gbarbarov/open-led-race-bb534b
 
  
 
==ne pas modifier sous cette ligne==
 
==ne pas modifier sous cette ligne==
 
[[Catégorie:Enib2024]]
 
[[Catégorie:Enib2024]]

Version actuelle datée du 6 septembre 2024 à 14:23

Titre de la fiche expérience :

description

La Led Race est une course de led dans laquelle une led rouge et une led verte se battent pour la première place, pour ce faire, chaque joueur dispose d'un bouton poussoir sur lequel il faut appuyer le plus vite possible.


Ledrace.png

Introduction

Etudiant ingénieur, dans le cadre d'un hackathon organisé par les petits débrouillards, nous devions réaliser un jeu avec des leds pour les enfants, nous avons tiré au sort et sommes tombés sur la led race que nous avons câbles avec une carte ESP-VROOM-32.

Ca peut servir

Schema ledrace.png

  • la documentation : ESP32
  • PIN que nous avons utilisé

Code ledrace.png

Sources et documentation complémentaire

Point à améliorer

Les principaux points à améliorer sont les suivants :

  • Faire des supports pour les boutons
  • Mettre des fils plus longs sur les boutons

Problèmes

  • Il faut faire attention à la carte qui a pas mal de PIN qui ne marchent pas et donc en essayer plusieurs
  • Ne pas utiliser de Linux car problème de pilotes


ne pas modifier sous cette ligne