Je viens de réaliser mon premier montage Arduino ! Bon en termes de montage c'est plutôt super simple :
- un Arduino Uno
- Un écran LCD 16*2
- un potentiomètre
- deux boutons
- quelques résistances
- des fils
Le contexte : mon grand, en CE1, a du mal à apprendre les tables de multiplication : il fait des additions pour trouver le résultat... et ça prend du temps...
J'avais commencé par faire un petit jeu chronométré avec des bouts de papier : il pioche 10 papiers (1 multiplication/papier) et on lance le chrono. Il en redemandait ! Donc le coté ludique ça aide pour les apprentissages.
Au bout d'un moment il rejetait les multiplications trop "dures" et en piochait d'autre, le malin !
Bref c'est sur cette idée que je me suis dit que j'allais ressortir le starter kit Arduino qui dormait dans le placard.
Sur le web j'ai trouvé ce projet :
https://www.instructables.com/Multiplication-Game-Arduino-Project/ et je m'en suis inspiré.

Comment ça marche :
- Si on appuie sur le premier bouton lors de l'initialisation, on peut choisir de quelle table à quelle table on veut faire le jeu.
- Si on appuie pas sur le premier bouton : ce sont les tables de 1 à 10.
- Démarre alors une séquence de question/réponse, on règle la réponse avec le potentiomètre et on appuie sur le deuxième bouton pour valider.
- Après 10 bonnes réponses on a un score "10/nombre de question" et un temps.
- Quand on appuie sur le premier bouton, une nouvelle séquence s'enclenche.
Je pensais que ça allait me prendre plus de temps que ça et au final en une journée le code était écrit, le tout c'est de s'y mettre !
Le code :
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int x;
int y;
int ans;
int ans_plus;
int ans_moins;
int guess;
int table_de;
int table_a;
unsigned seed;
int prev;
bool wait;
unsigned long start;
unsigned long finished;
unsigned long elapsed;
int nbr_question;
int bonne_reponse;
void setup() {
lcd.begin(16,2);
randomSeed(analogRead( A0 ));
pinMode( 8 , INPUT);
pinMode( 6 , INPUT);
table_de = 1;
table_a = 10;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Initialisation");
delay(2000);
if (digitalRead(6) == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Entrer dans les");
lcd.setCursor(0, 1);
lcd.print("Parametres");
for (int i = 0; i < 3; i++) {
delay(350);
lcd.print(".");
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("De la table :");
wait = 1;
prev = 1;
int brtn = 0;
bool up = 1;
while (wait = 1) {
delay( 10 );
if (brtn >= 250) up = 0;
if (brtn == 0) up = 1;
if (up == 1) brtn += 1;
else brtn -= 1;
if (digitalRead( 8 ) == 1) {
break;
}
table_de = map ( analogRead( A4 ) , 0 , 1021 , 1 , 9 );
if (table_de != prev) {
lcd.setCursor(0, 1);
lcd.print( table_de );
prev = table_de;
}
}
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A la table :");
wait = 1;
prev = table_de;
while (wait = 1) {
delay( 10 );
if (brtn >= 250) up = 0;
if (brtn == 0) up = 1;
if (up == 1) brtn += 1;
else brtn -= 1;
if (digitalRead( 8 ) == 1) {
break;
}
table_a = map ( analogRead( A4 ) , 0 , 1021 , table_de , 10 );
if (table_a != prev) {
lcd.setCursor(0, 1);
lcd.print( table_a );
prev = table_a;
}
}
delay(500);
lcd.clear();
lcd.print("Sortie...");
}
}
void loop() {
bonne_reponse = 0;
nbr_question = 0;
start = millis();
while (bonne_reponse != 10) {
x = random(1,11);
while (x > table_a or x < table_de) {
x = random(1,11);
}
y = random(1,11);
lcd.clear();
ans = x * y;
ans_plus = ans + random(0,21);
ans_moins = ans - random(0,21);
while (ans_plus - ans_moins < 10) {
ans_plus = ans + random(0,21);
ans_moins = ans - random(0,21);
}
if (ans_moins < 0) ans_moins = 0;
wait = 1;
prev = 100;
int brtn = 0;
bool up = 1;
while (wait = 1) {
delay( 10 );
if (brtn >= 250) up = 0;
if (brtn == 0) up = 1;
if (up == 1) brtn += 1;
else brtn -= 1;
if (digitalRead( 8 ) == 1) {
break;
}
guess = map ( analogRead( A4 ) , 0 , 1021 , ans_moins , ans_plus );
if (guess != prev) {
lcd.setCursor(0, 1);
lcd.print(x);
lcd.print(" fois ");
lcd.print(y);
lcd.print(" ?");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print( "Entrez 1 reponse" );
lcd.setCursor(13, 1);
lcd.print( guess );
lcd.setCursor(0, 1);
lcd.print(x);
lcd.print(" fois ");
lcd.print(y);
lcd.print(" ?");
prev = guess;
}
}
if (x * y == guess) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BRAVO !");
bonne_reponse += 1;
nbr_question += 1;
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FAUX !");
lcd.setCursor(0, 1);
lcd.print(x);
lcd.print(" fois ");
lcd.print(y);
lcd.print(" = ");
lcd.print(x * y);
nbr_question += 1;
}
delay(2000);
}
finished = millis();
elapsed = (finished - start - nbr_question*2000)/1000;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Score : ");
lcd.print(bonne_reponse);
lcd.print("/");
lcd.print(nbr_question);
lcd.setCursor(0, 1);
lcd.print("Temps : ");
lcd.print(elapsed);
lcd.print(" s");
while (digitalRead( 6 ) != 1) {
}
}
#
arduino #
education #
jeux