Outils pour utilisateurs

Outils du site


wiki:projets:chaperon-rouge:chaperon-rouge

Le Chaperon Rouge

  • Porteur du projet : Elodie Lyonnais
  • Date : 26/01/2015
  • Contexte : MACROPROJET#2

lepetitchaperonrouge.pdf

Le projet

PRÉSENTATION

Des contes de Charles Perrault, à ceux des frères Grimm en passant par les contes d’Andersen, tous ces contes ont bercé mon enfance et me fascinent encore aujourd’hui. C’est pourquoi, j’ai envisagé d’orienter mon mémoire autour du Conte. La question cruciale que je me pose en tant que graphiste autour du conte c'est Comment, par le biais du graphisme, peut-on aménager des espaces d'expression favorisant l'imaginaire ? Ainsi aujourd'hui sachant que nous sommes dans une époque basé sur les nouvelles technologie je me suis intéressée à la place de ces nouvelles technologie dans le conte. Ce support permettant d'introduire une idées fondamentale : l’interactivité. Dans ce sens j'ai choisis de créer un jeux en reprenant un conte connue: Le Petit Chaperon Rouge. Ici je montre en quelque sorte que tout les contes peuvent être réinventer, il n'y a pas de forme fixe au conte ni de visuel fixe. Ce jeux que j'ai mis au point est pour moi une base de travail pour la suite, ceci est une première phase dans l'élaboration de mon projet de fin d'année qui gardera cette même idée d'interactivité mais plus centré sur la question de l'imaginaire.

Rappelons que la cible principale sont les enfants.

ENJEUX

*Introduire de l'interactivité dans le conte

*Proposer une nouvelle forme de conte

Matériel

  • 1 carte ARDUINO
  • 1 breadboard
  • 1 connecteur ARDUINO/USB
  • 5 fils connecteurs mâle/mâle
  • 1 potentiomètre

Montage

Code Arduino

//PARAMETRAGE DES ENTIERS, déclaration des variables
int firstSensor = 0;    // Premier capteur analogique
int secondSensor = 0;   // deuxième capteur analogique
int inByte = 0;         // Entrée d'une série de Byte


// INSTRUCTION D'INITIALISATION DES RESSOURCES
    //Définition des entrées et sorties
void setup() {
  Serial.begin(9600); // Initialisation de la communication série a 9600 bps; initialisation du port begin() précision de la vitesse de transfert
  while (!Serial) { // Attendre la connection du port serie
    ;
  }
}


// INSTRUCTIONS REPETEES UNE INFINITE DE FOIS TANT QUE LA CARTE EST SOUS TENSION
void loop() {
  if (Serial.available() > 0) {  // si nous obtenons un Byte valide, lire les branches analogiques
    inByte = Serial.read(); // lire les Bytes entrant
    firstSensor = analogRead(A0)/4; // lire la premiere entree analogique, divise par quatre
    delay(10); // patienter 10 ms
  
    
    // envoyer les valeurs :
    Serial.write(firstSensor);
    Serial.write(secondSensor);
    Serial.write(etatBouton);               
  }
}


/// PARAMETRAGES POUR ETABLIR LE CONTACT
void establishContact() {
  while (Serial.available() <= 0) { //instructions à exécuter dans la boucle tant que la condition finale n'est pas atteinte
    Serial.print('A');   // envoyer la lettre A
    delay(300); //patienter 300ms
  }
}

Code Processing

/// Declaration des entiers
// Initialisation du lien entre processing et arduino
import processing.serial.*; // importer de la librairie
Serial myPort;  // Le port serie                    
int[] serialInArray = new int[3];  // tableau d'entree de 3 éléments 
int serialCount = 0;             
boolean firstContact = false;
int value = 0;
int xpos;

// Librairies son
import ddf.minim.*; // Importer de la librairie
// Variable son
Minim minim;
// Declaration de la chanson
AudioSnippet jeu;

// Chargement des variable images pour les différentes images du jeu
PImage bg;
PImage loup;

// X et Y position du loup, coordonnées du loup
float X_loup = 350;
float Y_loup = 20;
boolean loup_mort = false; // Variable boolean (vraie ou fausse) pour le loup mort
float etat_de_mort = 0;
int deplacement_auto = 0; // 0 = rien, 1 = droite, 2 = gauche
final float vitesse_loup = 5.0; // Vitesse de déplacement du loup

// x and y position du vaisseau, coordonnées du vaisseau
float x = 380;
float y = 580;
 
// x and y postion de tir, coordonnées du tir
float tir_x = 380;
float tir_y = 580;
final float vitesse_balle = 16; // Vitesse de la balle

// Taille du tir
int taille_tir_x = 12;
int taille_tir_y = 12;


 /// Le contenue de cette fonction est appelé une foi au démarrage du programme
void setup() {
  size (1000,750); // Taille de la fenetre
  bg = loadImage("fondarbre.png"); // Chargement du fond d'écran
  rectMode(CENTER); // Emplacement au centre
  smooth(); // Contours régulier
  xpos = width/2; // Position x, valeur de x = width/2
  
  // Chargement de l'audio
  minim = new Minim(this);
  jeu =  minim.loadSnippet("petitchaperonrouge.mp3");
  
  //Chargement du loup
  loup = loadImage("loup-okay.png");
  println("loup.height = " + loup.height); // Dimension du loup

 // Liste les ports series
  printArray(Serial.list());
  println("portname");
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  }
  
 /// Le contenue de cette fonction est appelé en boucle
void draw() {
 
  background (bg); // Fond d'écran
  noStroke(); // Pas de contours
  fill(255); // Couleur du fond
 
  // Essai tir
  tir_y = tir_y - vitesse_balle;
 
  // Vaiseau
  String name;
  float pos = map(xpos, 245, 12, 0, 1000); // Parametrages pour le déplacement du vaiseau via le potentiometre compris entre 12 et 245, valeurs de pos
  smooth(); // Contours régulier
  fill(255,0,0); // Couleur du vaisseau
  ellipse(pos,y,100,100); // Taille du vaiseau
 
  // Dessiner le tir
  fill(255); // Couleur du tir
  rect(pos, tir_y, taille_tir_x, taille_tir_y ); // Dimension du tir
  
  // Déclaration des différents programmes crée
  loup();
  musique();
 }
  
  // Comportement du loup
  void loup() {
  float pos = map(xpos, 245, 12, 0, 1000); // Parametrages pour le déplacement du vaiseau compris entre 12 et 245, valeurs de pos

  // Colision loup balle, si la balle atteint le format du loup il disparait
  if (   tir_y - taille_tir_y / 2 < Y_loup + loup.height
        && tir_y + taille_tir_y / 2 > Y_loup
        && pos + taille_tir_x / 2 > X_loup
        && pos - taille_tir_x / 2 < X_loup + loup.width) { 
      loup_mort = true;
    }
    
    // Affichage loup
    if (!loup_mort) {
      tint(255); // Couleur du loup quand il meurt
      image(loup, X_loup, Y_loup); // Taille de l'image loup
    }
    else if (etat_de_mort < 4) { 
      float p = 180 * sin(etat_de_mort) + 50; 
      tint(p, 0, 0, p); // Vitesse du loup
      image(loup, X_loup, Y_loup); // Taille de l'image loup
      etat_de_mort += 0.1;
    }
    
    // Déplacement aléatoire du loup 
    int hasard = (int) random(300); // Genere un nombre entre 0 et 300
    
    if (hasard < 4)
      deplacement_auto = 2;
    else if (hasard < 8)
      deplacement_auto = 1;
    hasard = (int) random(6); // Genere un nombre entre 0 et 6
    if (deplacement_auto == 0 && hasard > 4)
      deplacement_auto = (int) random(1, 3); // Genere un nombre netre 1 et 3
    
    boolean bloque = true;
    if (deplacement_auto == 1 && X_loup + vitesse_loup < width - loup.width) {
      X_loup += min(vitesse_loup, width - (X_loup + loup.width));
      bloque = false;
    }
    if (deplacement_auto == 2 && X_loup - vitesse_loup > 0) {
      X_loup -= min(vitesse_loup, X_loup);
      bloque = false;
    }
    
    if (bloque)
      deplacement_auto = 2 - deplacement_auto + 1;
  }


/// Cette fonction est utilisé pour tout action sur le clavier
void keyPressed() {
 
  // Tirer = Espace
  if (key == ' ') {// si j'appuie sur la touche espace lancement du tir
    if (!loup_mort) {
      tir_y = y;
      tir_x = xpos;
    }
    else {
      X_loup = random(50, width - loup.width - 50);
      loup_mort = false;
      etat_de_mort = 0;
    }
  }
  }
  
  
  /// Parametre de la musique
  void musique(){
  //Pour que le son continue à jouer
  if ( jeu.isPlaying()== false  ){
                jeu.rewind();
                jeu.play();}  
}


/// Parametrages de la connection à arduino
void serialEvent(Serial myPort) {
  
  int inByte = myPort.read(); // Lire les bytes entrant
  if (firstContact == false) { // Parametre entrés pour verifier le bon fonctiionnement du programme
    println("debut first contact");
    if (inByte == 'A') { // Si le premier Byte reçu est un "A"
      myPort.clear(); // Vider la memoire tampn serie
      firstContact = true; // Noter que le premier contact du microcontroleur s'est effectué
      println("ecriture sur le port serie de la lettre A");
      myPort.write('A');
      println("fin first contact");
    } 
  } 
  // Sinon ajouter le Byte entrant au tableau
  else {
    serialInArray[serialCount] = inByte;
    serialCount++;

    if (serialCount > 2 ) { // Si on a 3 Bytes, que serialCount est superieur a 2
      xpos = serialInArray[0]; // Envoyer la valeur xpos au premier serialInArray
      myPort.write('A'); // Envoyer un "A" pour demander de nouvelles captures du lecteur
      serialCount = 0; // Remettre a zero le serialCount
    }
  }
}

Remarques

Espace d'échange concernant ce sujet. Cliquez sur modifier et commentez!

TR: images?

wiki/projets/chaperon-rouge/chaperon-rouge.txt · Dernière modification: 2015/02/04 20:45 (modification externe)