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

Jeu Whack-a-Mole à LEDs avec Arduino Uno – Projet interactif LED et joystick

Composants et fournitures

Arduino UNO ×1
LEDs ×7
Résistance 221 ohm ×7
Joystick analogique (générique) ×1
Fils de connexion (génériques) ×8
Fils Male/Femelle ×4

À propos de ce projet

C'était mon premier projet Arduino, construit sur la base des premiers tutoriels sur les LEDs et les contrôles de base.

Ce jeu « Whack-a-Mole » (Tape-la-taupe) utilise 7 LEDs et un joystick. Il y a 4 « taupes », représentées par les 2ème, 3ème, 4ème et 5ème LEDs de gauche sur ma carte. L'une des quatre LEDs s'allume aléatoirement et donne un temps défini pour actionner la direction correspondante sur le joystick. J'ai disposé mes LEDs de gauche à droite pour correspondre aux sélections du joystick : gauche, haut, bas, droite. C'est ma convention, soyez créatif et essayez d'autres dispositions !

Les deux LEDs de gauche sont rouge et verte, indiquant un choix incorrect ou correct. La LED jaune à l'extrême droite clignote pour afficher le score record actuel, et l'indique à chaque fin de partie (lorsqu'un mauvais choix est fait). Naturellement, un nouveau record remplace l'ancien.

La partie la plus complexe est le joystick analogique. Pour les deux axes, les valeurs max sont 0 et 1024 (pour le mien, 1023, donc si les sélections ne fonctionnent pas, essayez cette valeur). Ces valeurs peuvent être mesurées via le moniteur série. J'ai simplifié ces entrées avec des instructions switch pour les axes X et Y. Je ne sais pas si c'est la meilleure méthode, mais comme je n'avais besoin que des valeurs max de chaque direction (4 options, 4 LEDs taupes), j'ai assigné des valeurs entières : 1, 2, 3, 4 correspondant à Gauche, Droite, Haut, Bas.

Jeu Whack-a-Mole à LEDs avec Arduino Uno – Projet interactif LED et joystick

Les niveaux de difficulté dans le code sont des constantes représentant le temps en millisecondes pour faire une sélection. Vous pouvez modifier ces temps pour ajuster la difficulté. J'ai pensé à intégrer un choix de difficulté via boutons ou joystick au début, mais cela semblait trop complexe et pas très convivial.

N'hésitez pas à suggérer des modifications et améliorations ! :)

Code

WhackALED (Arduino)

// Whack a LED
// Variables joystick
int sX = A0; // axe X joystick, entrée analogique
int sY = A1; // axe Y joystick, entrée analogique
int sSX; // état X, lecture depuis sX
int sSY; // état Y, lecture depuis sY
int sS; // état converti

// Variables jeu
int rNum; // choix aléatoire de la LED à allumer
int wins = 0; // compteur de victoires consécutives
int highScore = 0; // meilleur score de victoires consécutives

// Constantes de difficulté (temps de réaction en ms)
const int easy = 1000;
const int medium = 500;
const int hard = 325;
const int stupid = 250;

int ledPins[] = {5, 2, 4, 3, 6, 7, 8}; // broches des LEDs
int pinCount = 7; // nombre de broches LED

void setup() {
  Serial.begin(9600);
  pinMode(sX, INPUT);
  pinMode(sY, INPUT);
  for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
  }
}

void loop() {
  rNum = random(4); // choix aléatoire 0-3
  delay(1000);
  digitalWrite(ledPins[rNum], HIGH); // allume la LED choisie
  delay(stupid); // difficulté (ici 'stupid' = 250ms)

  // Lecture joystick
  sSX = analogRead(sX);
  delay(100);
  sSY = analogRead(sY);

  // Conversion entrées X et Y en 4 possibilités (0 et 1023 = valeurs max mesurées)
  sS = 0;
  switch (sSX) {
    case 0: sS = 1; break; // Gauche
    case 1023: sS = 2; break; // Droite
  }
  switch (sSY) {
    case 0: sS = 3; break; // Haut
    case 1023: sS = 4; break; // Bas
  }

  digitalWrite(ledPins[rNum], LOW); // éteint la LED après choix

  if (sS - 1 == rNum) { // vérifie si direction correcte
    wins++;
    for (int k = 0; k <= 3; k++) { // clignote vert (LED index 4) = correct
      digitalWrite(ledPins[4], HIGH); delay(50);
      digitalWrite(ledPins[4], LOW); delay(50);
    }
  } else {
    if (wins > highScore) { // nouveau record ?
      highScore = wins;
      wins = 0;
    }
    for (int i = 0; i <= 3; i++) { // clignote rouge (LED index 5) = incorrect
      digitalWrite(ledPins[5], HIGH); delay(50);
      digitalWrite(ledPins[5], LOW); delay(50);
    }
    for (int w = 0; w < highScore; w++) { // affiche record sur LED jaune (index 6)
      digitalWrite(ledPins[6], HIGH); delay(200);
      digitalWrite(ledPins[6], LOW); delay(200);
    }
  }
}

Schéma de câblage

Tout doit correspondre à la photo réelle du projet, sauf pour le joystick. Le mien a 5 broches, 4 utilisées : de haut en bas « GND », « +5V », « VRx », « VRy ». « GND » et « +5V » connectés à GND et 5V de l'Arduino, « VRx » et « VRy » à A0 et A1.

Jeu Whack-a-Mole à LEDs avec Arduino Uno – Projet interactif LED et joystick
Jeu Whack-a-Mole à LEDs avec Arduino Uno – Projet interactif LED et joystick

Processus de fabrication

  1. Les lanternes à gaz : évolution, conception et fabrication moderne
  2. Pointeur laser : conception, fabrication et aperçu de la sécurité
  3. Lampe Torche : De l'Invention à l'Innovation Moderne
  4. Le kaléidoscope : de la science de Brewster au design moderne
  5. Lasers à semi-conducteurs : Génération de lumière de précision pour la technologie moderne
  6. L'art et la science des procédés photographiques : du daguerréotype au film moderne
  7. Feux de signalisation : ingénierie, histoire et innovations futures
  8. Maîtriser les accessoires pour bandeaux LED : connecter, contrôler, personnaliser
  9. Décoder le tableau de bord de votre voiture : voyants, indicateurs et leur signification