Arduino : Création d’un Jeu de mémoire électronique
Avertissement : cette page présente une fiche projet réalisée par un·e Conseiller Numérique France Service en formation avec le pôle ressource en médiation numérique Zoomacom. Elle constitue une hypothèse de travail, une idée d'animation, qui n'a pas forcément été testée en conditions réelles.
Auteur de cet atelier : Cédric Chazelet
Contexte
Création d’un jeu de mémoire électroniqueNous allons créer un jeu de mémoire électronique sur la base du jeu Simon que certain ont peut-être connu.
Nous allons voir ensemble comment il est conçu de l’intérieur.
Nous allons créer le programme qui le commande en Arduino et nous allons l’assembler avec la coque pré-imprimer avec notre imprimante 3D.
Vous repartirez avec votre jeu de mémoire électronique !
On relève le défi, alors c’est parti !
Présentation du jeu Simon avec publicité MB de l'époque
Fiche programme à télécharger ci-dessous :
Fiche_programme_JDME.odt (0.1MB)
Fiche déroulé global de l'atelier à télécharger ci-dessous:
Deroule_globale_JDME.odt (22.9kB)
Fiche scénario pédagogique complet de l'atelier à télécharger ci-dessous:
Trame_scenario_pedagogique_JDME.odt (29.5kB)
Matériel requis pour mettre en place l'animation :
Pour chaque participants :
- Une carte Arduino nano
- 4 leds bouton lumineux
- 1 pile
- Des fils de branchements
- 1 petit bouton reset
- 1 moule de la boite en 3D imprimé à l'avance de préférence
Code source Arduino du jeu de mémoire électronique
Test 4 leds code source
//Programme réalisé par Cédric Chazelet - Conseiller Numérique int const LR = 2; int const LV = 3; int const LJ = 4; int const LB = 5; void setup() { pinMode(LB, OUTPUT); pinMode(LJ, OUTPUT); pinMode(LV, OUTPUT); pinMode(LR, OUTPUT); } void loop(){ digitalWrite(LB, HIGH); digitalWrite(LJ, HIGH); digitalWrite(LV, HIGH); digitalWrite(LR, HIGH); }
Test 4 boutons code source
//Programme réalisé par Cédric Chazelet - Conseiller Numérique int const LR = 2; int const LV = 3; int const LJ = 4; int const LB = 5; int const BB = 9; int const BJ = 8; int const BV = 7; int const BR = 6; void setup() { pinMode(BB, INPUT_PULLUP); pinMode(BJ, INPUT_PULLUP); pinMode(BV, INPUT_PULLUP); pinMode(BR, INPUT_PULLUP); pinMode(LB, OUTPUT); pinMode(LJ, OUTPUT); pinMode(LV, OUTPUT); pinMode(LR, OUTPUT); } void loop(){ if (digitalRead(BB) == LOW) { digitalWrite(LB, HIGH); }else{ digitalWrite(LB, LOW); } if (digitalRead(BR) == LOW) { digitalWrite(LR, HIGH); }else{ digitalWrite(LR, LOW); } if (digitalRead(BV) == LOW) { digitalWrite(LV, HIGH); }else{ digitalWrite(LV, LOW); } if (digitalRead(BJ) == LOW) { digitalWrite(LJ, HIGH); }else{ digitalWrite(LJ, LOW); } }
Code source complet
//Programme réalisé par Cédric Chazelet - Conseiller Numérique const int MAX_LEVEL = 100; int sequence[MAX_LEVEL]; int your_sequence[MAX_LEVEL]; int level = 1; int velocity = 1000; int const LR = 2; int const LV = 3; int const LJ = 4; int const LB = 5; int const BB = 9; int const BJ = 8; int const BV = 7; int const BR = 6; int const TEM = 11; void setup() { pinMode(BB, INPUT_PULLUP); pinMode(BJ, INPUT_PULLUP); pinMode(BV, INPUT_PULLUP); pinMode(BR, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); pinMode(LB, OUTPUT); pinMode(LJ, OUTPUT); pinMode(LV, OUTPUT); pinMode(LR, OUTPUT); pinMode(TEM, OUTPUT); digitalWrite(LB, LOW); digitalWrite(LJ, LOW); digitalWrite(LV, LOW); digitalWrite(LR, LOW); digitalWrite(TEM, HIGH); } void loop(){ if (level == 1) generate_sequence();//generate a sequence; if (digitalRead(10) == LOW || level != 1) //If start button is pressed or you're winning { digitalWrite(TEM, LOW); // on eteins le temoin show_sequence(); //show the sequence get_sequence(); //wait for your sequence } } void show_sequence(){ digitalWrite(LB, LOW); digitalWrite(LJ, LOW); digitalWrite(LV, LOW); digitalWrite(LR, LOW); for (int i = 0; i < level; i++){ digitalWrite(sequence[i], HIGH); delay(velocity); digitalWrite(sequence[i], LOW); delay(300); } } void get_sequence(){ int flag = 0; // indique si la séquence est correct for (int i = 0; i < level; i++){ flag = 0; while(flag == 0){ if (digitalRead(BB) == LOW){ digitalWrite(LB, HIGH); your_sequence[i] = 5; flag = 1; delay(300); if (your_sequence[i] != sequence[i]){ wrong_sequence(); return; } digitalWrite(LB, LOW); } if (digitalRead(BJ) == LOW) { digitalWrite(LJ, HIGH); your_sequence[i] = 4; flag = 1; delay(300); if (your_sequence[i] != sequence[i]) { wrong_sequence(); return; } digitalWrite(LJ, LOW); } if (digitalRead(BV) == LOW) { digitalWrite(LV, HIGH); your_sequence[i] = 3; flag = 1; delay(300); if (your_sequence[i] != sequence[i]) { wrong_sequence(); return; } digitalWrite(LV, LOW); } if (digitalRead(BR) == LOW) { digitalWrite(LR, HIGH); your_sequence[i] = 2; flag = 1; delay(300); if (your_sequence[i] != sequence[i]) { wrong_sequence(); return; } digitalWrite(LR, LOW); } } } right_sequence(); } void generate_sequence(){ randomSeed(millis()); // aleatoire for (int i = 0; i < MAX_LEVEL; i++){ sequence[i] = random(2,6); } } void wrong_sequence(){ for (int i = 0; i < 3; i++) { digitalWrite(LR, HIGH); digitalWrite(LV, HIGH); digitalWrite(LJ, HIGH); digitalWrite(LB, HIGH); delay(100); digitalWrite(LR, LOW); digitalWrite(LV, LOW); digitalWrite(LJ, LOW); digitalWrite(LB, LOW); delay(100); } level = 1; velocity = 1000; } void right_sequence(){ digitalWrite(TEM, HIGH); // On allume le temoin delay(2000); if (level < MAX_LEVEL); level++; velocity -= 50; // augmente la diificultée }
Fichier 3d de la boite du jeu
Sur demande au super Conseiller Numérique Cédric Chazelet pour le moment ;)
Animation Arduino CNFS43 DIY