ENIB 2024 : Les zinzins envahisseurs : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(étape 1)
(étape 6 : Câblage final)
 
(33 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
Titre de la fiche expérience :
 
Titre de la fiche expérience :
 
==description (résumé)==
 
==description (résumé)==
éventuelle photo de l'équipe  
+
éventuelle photo de l'équipe
 
 
 
 
 
 
[[Fichier:Imagewiki bazz.jpg|100px]]
 
  
 
==Introduction==
 
==Introduction==
Ligne 22 : Ligne 18 :
 
Fer à souder et câbles pour l'assemblage de la matrice de led 8x8. <br>
 
Fer à souder et câbles pour l'assemblage de la matrice de led 8x8. <br>
  
Potentiomètre ou joystick pour les commandes du jeu.<br>
+
Potentiomètre GF1002, et bouton poussoir le jeu.<br>
  
 
==fichiers à joindre==
 
==fichiers à joindre==
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 +
 +
[[Fichier:Catia structure arcade.zip]]<br>
 +
 +
[[Fichier:Impression 3D structure arcade.zip]]
 +
 
===Mettre du code Arduino===
 
===Mettre du code Arduino===
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  
 +
/// @file    ArrayOfLedArrays.ino
 +
/// @brief  Set up three LED strips, all running from an array of arrays
 +
/// @example ArrayOfLedArrays.ino
 +
 +
// ArrayOfLedArrays - see https://github.com/FastLED/FastLED/wiki/Multiple-Controller-Examples for more info on
 +
// using multiple controllers.  In this example, we're going to set up three NEOPIXEL strips on three
 +
// different pins, each strip getting its own CRGB array to be played with, only this time they're going
 +
// to be all parts of an array of arrays.
 +
 +
// Déclaration du numéro de broche pour les LED
 
#define PIN 9
 
#define PIN 9
#include <Arduino_GFX_Library.h>
 
  
 +
// Inclusion de la bibliothèque FastLED pour la gestion des LED
 +
#include <FastLED.h>
 +
 +
// Définition du nombre de bandes LED et du nombre de LED par bande
 +
#define NUM_STRIPS 1
 +
#define NUM_LEDS_PER_STRIP 256
 +
 +
// Déclaration d'un tableau à deux dimensions pour stocker les couleurs des LED
 +
CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
 +
 +
// Définition de la position actuelle pour afficher le motif
 +
int position;
 +
 +
// Définition des couleurs disponibles (0xRRGGBB)
 +
int color[3] {0x000000, 0x000020, 0x200000};
 +
 +
// Définition d'un motif sous forme de tableau à deux dimensions
 +
int test[16][16] { \
 +
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
 +
  {0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 2, 2, 0, 0}, \
 +
  // ... (ajoutez les autres lignes de votre motif ici)
 +
};
 +
 +
// Pour la duplication des bandes, toutes les étapes spéciales se produisent uniquement dans la configuration.
 +
// Nous ajoutons simplement les bandes de LED plusieurs fois, une fois pour chaque bande.
 
void setup() {
 
void setup() {
   // put your setup code here, to run once:
+
   // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 2
 +
  FastLED.addLeds<NEOPIXEL, 2>(leds[0], NUM_LEDS_PER_STRIP);
 +
 
 +
  // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 3
 +
  // FastLED.addLeds<NEOPIXEL, 3>(leds[1], NUM_LEDS_PER_STRIP);
 +
 
 +
  // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 4
 +
  // FastLED.addLeds<NEOPIXEL, 4>(leds[2], NUM_LEDS_PER_STRIP);
 +
}
  
 +
// Fonction pour afficher le motif sur les LEDs
 +
void affiche() {
 +
  for (int x = 0; x < 16; x++) {
 +
    for (int y = 0; y < 16; y++) {
 +
      // Logique pour inverser la direction des LEDs sur les lignes impaires
 +
      if (x % 2 == 1) {
 +
        position = x * 16 + y;
 +
      } else {
 +
        position = x * 16 + 15 - y;
 +
      }
 +
      // Attribution de la couleur de la LED en fonction du motif
 +
      leds[0][position] = color[test[x][y]];
 +
    }
 +
  }
 +
  // Affichage des LEDs mises à jour
 +
  FastLED.show();
 
}
 
}
  
 +
// Boucle principale du programme
 
void loop() {
 
void loop() {
   // put your main code here, to run repeatedly:
+
   // Appel de la fonction d'affichage du motif
 +
  affiche();
 +
  // Pause pour ralentir le défilement des motifs
 +
  delay(100);
 +
}
 +
 
  
}
 
  
 
</syntaxhighlight>
 
</syntaxhighlight>
Ligne 46 : Ligne 110 :
 
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)
 
indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)
  
 +
# Élément de la liste numérotée
 
===étape 1===
 
===étape 1===
  
Dessin, découpage, et assemblage de la maquette en carton de la borne d'arcade. Attention aux dimensions de l'écran par rapport au dimensions de votre matrice de leds.
+
Il est préférable de commencer par construire une maquette carton de la structure de la borne d'arcade, afin de se faire une premières idée des dimensions, en prenant en compte la taille de votre écran de led.
 +
dessin, découpage au cutter, et assemblage au pistolet à colle.
  
 
[[Fichier:Maquette bazz.jpg|200px]]
 
[[Fichier:Maquette bazz.jpg|200px]]
  
===étape 2===
+
===étape 2 : étude du câblage et réalisation du support de l'écran===
 +
 
 +
Il faudra ensuite étudier la documentation technique et le fonctionnement du câblage. Vous pouvez les retrouver sur cette page, avec un petit tuto vidéo.<br>
 +
 
 +
https://www.hackster.io/mircemk/space-invaders-game-on-8x8-homemade-led-matrix-4029f8<br>
 +
 
 +
 
 +
Puis, si vous n'avez pas déjà une matrice de led 8x8, dessiner et découper le support où on fixera les led. On se servira d'une découpeuse laser pour être plus précis dans la découpe.<br>
 +
[[Fichier:Schéma câblage basile.PNG|400px]]
 +
 
 +
===étape 3 : Codage du jeu===
 +
 
 +
Codage du jeu en Arduino. (le code est fourni plus haut)
 +
 
 +
===étape 4 : Câblage et fixation des leds===
 +
 
 +
Il faut ensuite fixer Les leds sur le support découpé à l'étape précédente. Il faudra souder les anodes verticalement et les cathodes horizontalement. Celà va prendre beaucoup de temps et sera source de dysfonctionnement si les soudures sont mal faites. L'idéal sera d'avoir une matrice de led 8x8 déjà cablée. Il faudra penser à adapter le code si nécéssaire.
 +
 
 +
[[Fichier:Support de leds basile.jpg|200px]]
 +
 
 +
===étape 5 : Conception et assemblage de la structure===
 +
 
 +
Il faut ensuite dessiner les pièces de la structure de la borne sur Catia ou un autre logiciel de conception 3D.<br>
 +
 
 +
On imprimera ensuite les pièces. Lorsque l'impression sera finie, on pourra par la suite les assembler avec un pistolet à colle ou du scotch.<br>
 +
[[Fichier:Structure finale arcade basile(1).jpg|200px]] [[Fichier:Structure finale2 arcade basile.jpg|200px]]
  
Étude de la doc et du fonctionnement du câblage, réalisation du support pour l'écran avec la découpeuse 3D et câblage de la matrice de led 8x8 sur le support
 
  
===étape 3===
+
Il est également possible de tester le code du jeu sans la structure pendant l'impression des pièces par exemple.<br>
  
Codage du jeu en Arduino
+
===étape 6 : Câblage final===
  
 +
Câblage final sur la structure, on testera d'abord le bon fonctionnement des leds et des cartes.
  
===étape 4===
+
Nous n'avons malheureusement pas pu aller au bout de cette étape par manque de temps. En l'état final, la dernière ligne de led de la matrice ne s'allumait pas en raison d'un problème d’alimentation. Il faudrait peut être utiliser une alimentation différente pour la carte et pour la matrice pour éviter ce problème.
  
Dessin des pièces sur Catia et Mise en plan pour découpeuse 3D. et tests du jeu sans la structure en parallèle
+
[[Fichier:Montage et test.jpg|300px]]
  
===étape 5===
 
  
Assemblage de la structure finale, fixation des composants et compte rendu du projet sur le wiki
+
[[Fichier:Led final.jpg|300px]]
  
 
===troubleshouting===
 
===troubleshouting===
 +
 
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
 
quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
  
Nous avons rencontrés des soucis lors de l'étude du câblage et de la doc car le code que nous avions récupéré pour le jeu
+
Nous avons rencontrés des problèmes lors de l'étude du câblage et de la doc car le code que nous avions récupéré pour le jeu était destiné à une matrice de led 8x8, hors, nous n'avions qu'une matrice 16x16. Nous avons donc décidé de faire notre propre matrice de led. Cependant, effectuer 168 soudures et points de colle s'est avéré très long et nous avons donc perdu du temps. Nous Etions également très limités par le temps car nous avions seulement 1 journée et demie pour finaliser le projet.
  
 
==Sources et documentation complémentaire==
 
==Sources et documentation complémentaire==

Version actuelle datée du 25 janvier 2024 à 15:03

Titre de la fiche expérience :

description (résumé)

éventuelle photo de l'équipe

Introduction

L'objectif de ce projet est de réaliser le jeu "Space Invader" sur une borne d'arcade, à partir d'une carte Arduino et de leds

outil et matériel

Carte ESP800266modÀ

64x leds

Structure de la borne en bois, usinée avec la découpeuse laser.

Ordinateur avec un logiciel Arduino.

Fer à souder et câbles pour l'assemblage de la matrice de led 8x8.

Potentiomètre GF1002, et bouton poussoir le jeu.

fichiers à joindre

code, ficher d'impression 3D, de découpe laser ou vinyle, ...

Fichier:Catia structure arcade.zip

Fichier:Impression 3D structure arcade.zip

Mettre du code Arduino

 1  
 2 /// @file    ArrayOfLedArrays.ino
 3 /// @brief   Set up three LED strips, all running from an array of arrays
 4 /// @example ArrayOfLedArrays.ino
 5 
 6 // ArrayOfLedArrays - see https://github.com/FastLED/FastLED/wiki/Multiple-Controller-Examples for more info on
 7 // using multiple controllers.  In this example, we're going to set up three NEOPIXEL strips on three
 8 // different pins, each strip getting its own CRGB array to be played with, only this time they're going
 9 // to be all parts of an array of arrays.
10 
11 // Déclaration du numéro de broche pour les LED
12 #define PIN 9
13 
14 // Inclusion de la bibliothèque FastLED pour la gestion des LED
15 #include <FastLED.h>
16 
17 // Définition du nombre de bandes LED et du nombre de LED par bande
18 #define NUM_STRIPS 1
19 #define NUM_LEDS_PER_STRIP 256
20 
21 // Déclaration d'un tableau à deux dimensions pour stocker les couleurs des LED
22 CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
23 
24 // Définition de la position actuelle pour afficher le motif
25 int position;
26 
27 // Définition des couleurs disponibles (0xRRGGBB)
28 int color[3] {0x000000, 0x000020, 0x200000};
29 
30 // Définition d'un motif sous forme de tableau à deux dimensions
31 int test[16][16] { \
32   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \
33   {0, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 0, 2, 2, 0, 0}, \
34   // ... (ajoutez les autres lignes de votre motif ici)
35 };
36 
37 // Pour la duplication des bandes, toutes les étapes spéciales se produisent uniquement dans la configuration.
38 // Nous ajoutons simplement les bandes de LED plusieurs fois, une fois pour chaque bande.
39 void setup() {
40   // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 2
41   FastLED.addLeds<NEOPIXEL, 2>(leds[0], NUM_LEDS_PER_STRIP);
42 
43   // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 3
44   // FastLED.addLeds<NEOPIXEL, 3>(leds[1], NUM_LEDS_PER_STRIP);
45 
46   // Indique à FastLED qu'il y a 60 LEDs NEOPIXEL sur la broche 4
47   // FastLED.addLeds<NEOPIXEL, 4>(leds[2], NUM_LEDS_PER_STRIP);
48 }
49 
50 // Fonction pour afficher le motif sur les LEDs
51 void affiche() {
52   for (int x = 0; x < 16; x++) {
53     for (int y = 0; y < 16; y++) {
54       // Logique pour inverser la direction des LEDs sur les lignes impaires
55       if (x % 2 == 1) {
56         position = x * 16 + y;
57       } else {
58         position = x * 16 + 15 - y;
59       }
60       // Attribution de la couleur de la LED en fonction du motif
61       leds[0][position] = color[test[x][y]];
62     }
63   }
64   // Affichage des LEDs mises à jour
65   FastLED.show();
66 }
67 
68 // Boucle principale du programme
69 void loop() {
70   // Appel de la fonction d'affichage du motif
71   affiche();
72   // Pause pour ralentir le défilement des motifs
73   delay(100);
74 }

étapes de fabrication

indiquer autant d'étape que nécessaire, chacune illustrée par des images (phot, dessins, ...)

  1. Élément de la liste numérotée

étape 1

Il est préférable de commencer par construire une maquette carton de la structure de la borne d'arcade, afin de se faire une premières idée des dimensions, en prenant en compte la taille de votre écran de led. dessin, découpage au cutter, et assemblage au pistolet à colle.

Maquette bazz.jpg

étape 2 : étude du câblage et réalisation du support de l'écran

Il faudra ensuite étudier la documentation technique et le fonctionnement du câblage. Vous pouvez les retrouver sur cette page, avec un petit tuto vidéo.

https://www.hackster.io/mircemk/space-invaders-game-on-8x8-homemade-led-matrix-4029f8


Puis, si vous n'avez pas déjà une matrice de led 8x8, dessiner et découper le support où on fixera les led. On se servira d'une découpeuse laser pour être plus précis dans la découpe.
Schéma câblage basile.PNG

étape 3 : Codage du jeu

Codage du jeu en Arduino. (le code est fourni plus haut)

étape 4 : Câblage et fixation des leds

Il faut ensuite fixer Les leds sur le support découpé à l'étape précédente. Il faudra souder les anodes verticalement et les cathodes horizontalement. Celà va prendre beaucoup de temps et sera source de dysfonctionnement si les soudures sont mal faites. L'idéal sera d'avoir une matrice de led 8x8 déjà cablée. Il faudra penser à adapter le code si nécéssaire.

Support de leds basile.jpg

étape 5 : Conception et assemblage de la structure

Il faut ensuite dessiner les pièces de la structure de la borne sur Catia ou un autre logiciel de conception 3D.

On imprimera ensuite les pièces. Lorsque l'impression sera finie, on pourra par la suite les assembler avec un pistolet à colle ou du scotch.
Structure finale arcade basile(1).jpg Structure finale2 arcade basile.jpg


Il est également possible de tester le code du jeu sans la structure pendant l'impression des pièces par exemple.

étape 6 : Câblage final

Câblage final sur la structure, on testera d'abord le bon fonctionnement des leds et des cartes.

Nous n'avons malheureusement pas pu aller au bout de cette étape par manque de temps. En l'état final, la dernière ligne de led de la matrice ne s'allumait pas en raison d'un problème d’alimentation. Il faudrait peut être utiliser une alimentation différente pour la carte et pour la matrice pour éviter ce problème.

Montage et test.jpg


Led final.jpg

troubleshouting

quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?

Nous avons rencontrés des problèmes lors de l'étude du câblage et de la doc car le code que nous avions récupéré pour le jeu était destiné à une matrice de led 8x8, hors, nous n'avions qu'une matrice 16x16. Nous avons donc décidé de faire notre propre matrice de led. Cependant, effectuer 168 soudures et points de colle s'est avéré très long et nous avons donc perdu du temps. Nous Etions également très limités par le temps car nous avions seulement 1 journée et demie pour finaliser le projet.

Sources et documentation complémentaire

ne pas modifier sous cette ligne