Le jeu Dinausore, aussi appelé Chrome Dino, est un jeu intégré à Google Chrome qui s'affiche lorsqu'il n'y a pas de connexion Internet. Il met en scène un dinosaure T-Rex qui court dans un désert et doit sauter par-dessus des obstacles, principalement des cactus et des ptérodactyles, pour survivre le plus longtemps possible.
Caractéristiques du jeu :
- Genre : Jeu d'arcade, endless runner (course infinie)
- Contrôles :
Appuyer sur la touche Espace ou fléche haut pour sauter
Appuyer sur la flèche bas pour s'accroupir
- Mécanique :
La vitesse du jeu augmente progressivement
Le jeu se termine si le dinosaure heurte un obstacle
Ce projet vise à recréer le Dino Game de Google Chrome sur une carte Arduino UNO.
1- Affichage sur l’écran LCD
Le dinosaure est représenté par un caractère personnalisé (T-Rex
sur la ligne du bas de l'écran LCD).
Les obstacles (cactus) défilent de la droite vers la gauche.
Le score s'affiche en haut à droite de l’écran.
2- Contrôle du dinosaure avec le bouton poussoir
Appuyer sur le bouton fait "sauter" le dinosaure (il passe temporairement sur la ligne du haut).
S'il est en l'air, il ne peut pas sauter à nouveau avant de revenir au sol.
3- Gestion des obstacles
Les obstacles apparaissent aléatoirement.
Ils avancent de droite à gauche à intervalles réguliers.
Si le dinosaure et un obstacle sont sur la même ligne → Game Over
4- Effets sonores avec le buzzer
Son de saut lorsque le joueur appuie sur le bouton.
Son de collision en cas de Game Over.
Arduino UNO
L'Arduino UNO est une carte de développement basée sur un microcontrôleur ATmega328P, qui permet d'exécuter du code et d'interagir avec divers composants électroniques.
Rôle dans le jeu :
- Elle exécute le programme du jeu
- Elle gère l'affichage sur l’écran LCD
- Elle lit l’entrée du bouton poussoir pour détecter les sauts
- Elle joue des sons avec le buzzer
- Elle Met à jour la position des obstacles et du dinosaure
Afficheur LCD 16x2 avec interface I2C
L’afficheur LCD 16x2 est un écran capable d’afficher 16 caractères sur 2 lignes. Grâce à l’interface I2C, il nécessite seulement deux fils pour la communication, ce qui simplifie le câblage.
Rôle dans le jeu :
- Il affiche le dinosaure, les obstacles et le score
- Il met à jour l’écran pour donner l’illusion du mouvement
- Il affiche le message "Game Over" en cas de collision
Bouton poussoir
Le bouton poussoir est un simple interrupteur qui ferme un circuit lorsqu'on appuie dessus. Il est utilisé pour contrôler le saut du dinosaure.
Rôle dans le jeu :
Il détecte l’appui du joueur pour faire sauter le dinosaure.
Il Empêche les doubles sauts tant que le dinosaure est en l'air.
Buzzer passif
Le buzzer passif est un petit haut-parleur qui produit des sons lorsque l'on envoie une fréquence.
Fils de connexion
Les fils de connexion sont utilisés pour relier tous les composants entre eux.
Breadboard
La breadboard (plaque d'essai) est une plateforme permettant d'assembler les composants électroniques sans soudure.
Afficheur LCD I2C → Arduino UNO
SDA → Broche analogique A4
SCL → Broche analogique A3
VCC → 5V
GND → GND
Bouton Poussoir → Arduino UNO
Une patte → Broche numérique N°2
Autre patte → GND
Placez une résistance de 10k Ohm entre une patte du bouton-poussoir et la broche 3V3
Buzzer → Arduino UNO
+ du buzzer → Broche numérique N°3
- du buzzer → GND
Voici le code simplifié pour Arduino UNO, utilisant un afficheur LCD I2C, un bouton poussoir pour le saut et un buzzer pour les sons.
Vous aurez besoin de la bibliothèque suivante "LiquidCrystal_I2C"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
#include <LiquidCrystal_I2C.h> // Initialisation de l'afficheur LCD (adresse I2C 0x27 ou 0x3F selon le module) LiquidCrystal_I2C lcd(0x27, 16, 2); // Définition des broches const int boutonPin = 2; // Bouton poussoir pour le saut const int buzzerPin = 3; // Buzzer // Variables du jeu int dinoPosition = 1; // Position du dinosaure (1 = sol, 0 = saut) int obstaclePosition = 15; // Position de l'obstacle bool enSaut = false; // Indique si le dinosaure est en train de sauter int score = 0; // Score du joueur // Définition des caractères personnalisés byte dino[8] = { B00100, B00100, B01110, B11111, B10101, B00100, B01010, B01010 }; byte cactus[8] = { B00010, B00010, B00010, B01010, B01011, B11010, B01110, B01100 }; void setup() { // Initialisation des broches pinMode(boutonPin, INPUT_PULLUP); // Bouton avec pull-up interne pinMode(buzzerPin, OUTPUT); // Initialisation du LCD lcd.init(); lcd.backlight(); // Création des caractères personnalisés lcd.createChar(0, dino); lcd.createChar(1, cactus); // Affichage initial lcd.clear(); lcd.setCursor(0, 1); lcd.write(byte(0)); // Affichage du dinosaure } void loop() { // Vérification de l'appui sur le bouton pour sauter if (digitalRead(boutonPin) == LOW && !enSaut) { enSaut = true; tone(buzzerPin, 1000, 200); // Son du saut dinoPosition = 0; // Monte sur la ligne du haut lcd.setCursor(0, 1); lcd.print(" "); // Efface l'ancien dinosaure lcd.setCursor(0, 0); lcd.write(byte(0)); // Affiche en haut delay(500); // Temps de saut dinoPosition = 1; // Redescend lcd.setCursor(0, 0); lcd.print(" "); // Efface en haut lcd.setCursor(0, 1); lcd.write(byte(0)); // Affiche en bas enSaut = false; } // Déplacement de l'obstacle lcd.setCursor(obstaclePosition, 1); lcd.print(" "); // Efface l'ancien obstacle obstaclePosition--; // Réapparition de l'obstacle après sortie de l'écran if (obstaclePosition < 0) { obstaclePosition = 15; score++; // Incrémentation du score } // Affichage du nouvel obstacle lcd.setCursor(obstaclePosition, 1); lcd.write(byte(1)); // Affiche le cactus // Affichage du score lcd.setCursor(10, 0); lcd.print("Score:"); lcd.setCursor(16 - String(score).length(), 0); lcd.print(score); // Détection de collision if (obstaclePosition == 0 && dinoPosition == 1) { lcd.clear(); lcd.setCursor(4, 0); lcd.print("GAME OVER!"); tone(buzzerPin, 500, 500); // Son de collision delay(2000); score = 0; obstaclePosition = 15; lcd.clear(); lcd.setCursor(0, 1); lcd.write(byte(0)); } // Pause entre chaque boucle pour ralentir le jeu delay(300 - (score * 5)); // Augmente la difficulté progressivement } |
Explication du code :
1- Initialisation :
Configure le LCD I2C
Définit les broches du bouton et du buzzer
Crée des caractères personnalisés pour le dinosaure et le cactus
2- Boucle du jeu (loop()
) :
Gestion du saut : Si le joueur appuie sur le bouton, le dinosaure monte puis redescend.
Déplacement des obstacles : Ils avancent de la droite vers la gauche.
Score : Augmente à chaque passage d’obstacle.
Collision : Si le dinosaure et l'obstacle sont au même endroit → Game Over
Augmentation de la difficulté : La vitesse du jeu accélère au fil du temps.
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info