Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Composants et fournitures

Composant Quantité Notes
Plaque perforée (Peg Board) 3 Ningbo Wins Handycraft - 2 pour afficheurs 7-segments, 1 pour tableau scores
Planche à découper plastique gris 1 Pour le tableau des scores
Bandeau LED numérique 5m WS2811 (LED 5050) 1 Segments de 3 LED + 1 driver WS2811
Bandeau LED WS2812B 5m 300 LED (60 LED/m, 5050 RGB) 1 Individuellement adressables
Câble audio 1 Connexion tableau scores ↔ afficheurs 7-segments
Planche à découper plastique translucide 2 Faces avant des afficheurs 7-segments
Planche à découper plastique gris flexible 1 Couverture tableau scores
Arduino UNO 1
Résistance 220 Ω 2 Marqué 221 Ω = 220 Ω
Condensateurs 100 µF 2
Gros bouton poussoir (momentané) 1 Nouveau numéro
Petit bouton poussoir (genérique) 1 Bingo
Régulateur linéaire 7805 1 12V → 5V pour scoreboard

Outils nécessaires

À propos de ce projet

En flânant dans un magasin ACTION, j'ai découvert un bandeau LED numérique à prix abordable (avec adaptateur 12V et contrôleur IR). Je l'ai acheté pour l'expérimenter avec un Arduino Uno.

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Il s'agit d'un bandeau avec segments de 3 LED 5050 + 1 driver WS2811 par segment (non indiqué sur l'emballage).

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Connecté à l'Arduino Uno pour tests avec bibliothèque Adafruit NeoPixel (ex: RGBW strandtest).

Idée : utiliser ces segments pour créer un afficheur 7-segments format A4. 7 segments + 1 point décimal = 8 segments pilotés par 1 seule broche de sortie Arduino, alimentés par l'adaptateur 12V inclus.

Mais que faire avec un seul afficheur ? → J'en ai fait deux pour créer une Machine à Bingo affichant des nombres aléatoires 1-75 à chaque pression du bouton.

Étape 1 : Fabrication des afficheurs 7-segments

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Processus complet décrit en détail (pourrait faire un tutoriel à part). Version courte :

Étape 2 : Fabrication du tableau des scores (Scoreboard)

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Étape 3 : Logiciel

Expérimentations initiales sur breadboard sans soudure.

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Étape 4 : Électronique

Schéma Fritzing :

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Note : Les deux afficheurs 7-segments (12V, WS2811) ET les bandes LED du scoreboard (5V, WS2812) sont pilotés par la même broche de sortie (D6) via deux résistances 220Ω.

Développé et produit par Pierre Pennings (Novembre 2018).

Code

BINGO_Machine_rev04.ino

/* Machine à Bingo - Pierre Pennings (Nov 2018) - Licence GPL3+
 * 2 afficheurs 7-segments géants A4 (WS2811 12V, 3 LED/segment, 1 adresse/segment)
 * 8 segments par afficheur (7 + DP) - adresses 0-7 (unités), 8-15 (dizaines)
 * Nombres 1-75 comme Bingo standard
 * Bouton "Nouveau nombre" sur D2 (pull-up), bouton "BINGO" sur D4 (pull-up)
 * Scoreboard : 75 LED WS2812B 5V (numéros) + 24 LED WS2812B (rétroéclairage BINGO)
 * Tout piloté depuis broche D6 via 2x 220Ω
 */
#include <Adafruit_NeoPixel.h>

const int NewNumberButton = 2;
const int BingoButton = 4;
const int LedPin = 6;

int NewNumber = 1, Bingo = 1;
int SCORE[76];
int count = 0;
long randNumber;
int NUMBER = 0, NW_NUMBER = 0, TENSNUMBER = 0, UNITNUMBER = 0;

#define NUM_LEDS 99
#define BRIGHTNESS 250

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LedPin, NEO_GRB + NEO_KHZ800);

// Table segments: [segment][chiffre] - segments 0-7 (unités), 8-15 (dizaines), 7/15 = DP
byte SEGMENTarray[8][10] = {
  {1,0,1,1,0,1,1,1,1,1}, // seg 0/8
  {1,1,1,1,1,0,0,1,1,1}, // seg 1/9
  {1,1,0,1,1,1,1,1,1,1}, // seg 2/10
  {1,0,1,1,0,1,1,0,1,1}, // seg 3/11
  {1,0,1,0,0,0,1,0,1,0}, // seg 4/12
  {1,0,0,0,1,1,1,0,1,1}, // seg 5/13
  {0,0,1,1,1,1,1,0,1,1}, // seg 6/14
  {0,0,0,0,0,0,0,0,0,0}  // seg 7/15 (DP)
};

byte color_scheme[] = {
  50,100,200, 100,150,250, 150,200,50, 200,250,100,
  250,50,150, 0,100,200, 50,150,250, 100,200,0,
  150,250,50, 200,0,100, 250,50,200, 0,100,250,
  50,150,0, 250,0,0
};

void setup() {
  Serial.begin(9600);
  pinMode(LedPin, OUTPUT);
  pinMode(NewNumberButton, INPUT_PULLUP);
  pinMode(BingoButton, INPUT_PULLUP);
  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show(); // Tout éteint
  
  // Afficher "BINGO" en bleu au démarrage (LED 16-23)
  for (int t = 16; t < 24; t++) {
    strip.setPixelColor(t, 0, 0, 250);
    strip.show();
  }
  
  // Initialiser SCORE à 0
  for (count = 0; count < 76; count++) SCORE[count] = 0;
}

void loop() {
  NewNumber = digitalRead(NewNumberButton);
  
  if (NewNumber == LOW) { // Bouton nouveau nombre pressé
    randomSeed(millis());
    do {
      GENERATENEWNUMBER(75); // 1-75
    } while (NW_NUMBER == SCORE[NW_NUMBER] * NW_NUMBER); // Déjà sorti ?
    
    SCORE[NW_NUMBER] = 1;
    NUMBER = NW_NUMBER;
    TENSNUMBER = NUMBER / 10;
    UNITNUMBER = NUMBER - (10 * TENSNUMBER);
    
    CLEARDISPLAY();
    LIGHTSHOW1(4, 100);
    CLEARDISPLAY();
    DISPLAYNUMBER(TENSNUMBER, UNITNUMBER);
    DISPLAYSCORE();
  } 
  else {
    Bingo = digitalRead(BingoButton);
    if (Bingo == LOW) {
      delay(3000); // Anti-rebond + anti-appui accidentel
      if (Bingo == LOW) {
        BINGOLIGHTSHOW();
        for (count = 0; count < 76; count++) SCORE[count] = 0; // Reset
      }
    }
  }
}

void LIGHTSHOW1(int duration, uint8_t wait) {
  // Éteindre "BINGO" bleu
  for (int t = 16; t < 24; t++) { strip.setPixelColor(t, 0, 0, 0); strip.show(); }
  
  // Clignotement DP blanc
  for (int k = 0; k < duration; k++) {
    strip.setPixelColor(7, 200, 200, 200); strip.show(); delay(wait);
    strip.setPixelColor(7, 0, 0, 0);
    strip.setPixelColor(15, 200, 200, 200); strip.show(); delay(wait);
    strip.setPixelColor(15, 0, 0, 0);
  }
  
  // Arc-en-ciel
  int redVal, blueVal, greenVal;
  for (int k = 1; k < 45; k += 3) {
    redVal = color_scheme[k];
    blueVal = color_scheme[k + 1];
    greenVal = color_scheme[k + 2];
    for (int p = 0; p < 7; p++) {
      int i = p; int j = 8 + p;
      strip.setPixelColor(i, strip.Color(redVal, blueVal, greenVal));
      strip.setPixelColor(j, strip.Color(greenVal, redVal, blueVal));
      strip.show(); delay(30);
    }
  }
  
  // Tout éteindre
  for (int q = 0; q < 7; q++) {
    strip.setPixelColor(q, 0, 0, 0);
    strip.setPixelColor(8 + q, 0, 0, 0);
    strip.show();
  }
}

void BINGOLIGHTSHOW() {
  for (int l = 0; l < 10; l++) {
    // Cascade blanche sur scoreboard (5 rangées de 15)
    for (int k = 24; k < 39; k++) {
      strip.setPixelColor(k, 200, 200, 200);
      strip.setPixelColor(k+15, 200, 200, 200);
      strip.setPixelColor(k+30, 200, 200, 200);
      strip.setPixelColor(k+45, 200, 200, 200);
      strip.setPixelColor(k+60, 200, 200, 200);
      strip.show(); delay(5);
      strip.setPixelColor(k, 0, 0, 0);
      strip.setPixelColor(k+15, 0, 0, 0);
      strip.setPixelColor(k+30, 0, 0, 0);
      strip.setPixelColor(k+45, 0, 0, 0);
      strip.setPixelColor(k+60, 0, 0, 0);
      strip.show();
    }
    // Allumer afficheurs + BINGO en cyan
    for (int t = 0; t < 24; t++) { strip.setPixelColor(t, 0, 250, 250); strip.show(); }
    delay(50);
    for (int t = 0; t < 24; t++) { strip.setPixelColor(t, 0, 0, 0); strip.show(); }
  }
}

void GENERATENEWNUMBER(int range) {
  randNumber = random(1, range + 1);
  NW_NUMBER = (int)randNumber;
}

void DISPLAYNUMBER(int TENS, int UNIT) {
  // "BINGO" en rouge
  for (int t = 16; t < 24; t++) { strip.setPixelColor(t, 200, 0, 0); strip.show(); }
  
  for (int s = 0; s < 8; s++) {
    int t = SEGMENTarray[s][TENS];
    int u = SEGMENTarray[s][UNIT];
    int i = s; int j = 8 + s;
    strip.setPixelColor(i, u * 250, 0, 0);
    strip.setPixelColor(j, (TENS != 0) ? t * 250 : 0, 0, 0);
    strip.show();
  }
}

void DISPLAYSCORE() {
  // "BINGO" en rouge
  for (int t = 16; t < 24; t++) { strip.setPixelColor(t, 200, 0, 0); strip.show(); }
  
  // Numéros déjà sortis en vert (adresses 24-98 = numéros 1-75)
  for (int s = 24; s < 100; s++) {
    int u = SCORE[s - 23];
    strip.setPixelColor(s, 0, u * 200, 0);
    strip.show();
  }
  // Nouveau numéro en rouge
  strip.setPixelColor(23 + NUMBER, 200, 0, 0);
  strip.show();
}

void CLEARDISPLAY() {
  for (int q = 0; q < 7; q++) {
    strip.setPixelColor(q, 0, 0, 0);
    strip.setPixelColor(8 + q, 0, 0, 0);
    strip.show();
  }
  for (int t = 16; t < 24; t++) { strip.setPixelColor(t, 0, 0, 0); strip.show(); }
}

Pièces personnalisées et boîtiers

Créer une Machine à Bingo Arduino Personnalisée avec Afficheurs 7-Segments A4 DIY

Schémas

Processus de fabrication

  1. Construire sa propre machine à écrire les devoirs à la maison (Traceur à stylo)
  2. Construire une horloge Numitron rétro avec Arduino : simple, fiable et économe en énergie
  3. Construire un voltmètre DIY avec Arduino et écran Nokia 5110
  4. Construire une roue de mesure précise avec Arduino Nano et encodeur rotatif
  5. Construisez un moniteur de qualité d'air précis avec le capteur Sharp GP2Y1010AU0F
  6. Jeu Pong 1D avec Arduino et bande LED WS2812 – Tutoriel DIY pas à pas
  7. Construire une machine CNC entièrement fonctionnelle avec Arduino Nano R3
  8. Onduleur HID Arduino : transformez votre UPS « muet » en sauvegarde compatible USB
  9. Construire une serrure de porte RFID portable avec Arduino – Guide étape par étape