Modifications

Bouillon Cube

7 322 octets ajoutés, 13 avril 2018 à 09:48
aucun résumé de modification
{{Projet
|status=ConceptPrototype|status_pub=BrouillonPublié|image=Bouillons-cubes.png|description=Bouillon cube, serious game pour sensibiliser sur la déforestation.
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France
|contributeurs=Emma Boileau, Audrey Brousse, Alexandre Guyochet, Margot Ryckewaert,
}}
== Concept ==
<br />
Bouillon Cube est un serious game présenté au premier abord comme un jeu de rapidité.
Ce cube intéractif a pour but de sensibiliser le joueur sur la déforestation. Le jeu dénonce différents produits du quotidien qui font parti des principales causes de la déforestation. En plus de susciter le sens critique, le jeu apporte des conseils et solutions pour lutter contre cette catastrophe écologique.
<br />
 
== Déroulement du jeu ==
Le jeu se suit avec deux outils: le cube et une page web qui présente les différentes instructions.
Le but est de réaliser toutes les activités de la journée, resprésentées sur le cube, le plus vite possible.<br />
 
[[Fichier:Bouillons-cubes cube.jpg|vignette]]
=== Etape du jeu ===
6. Prenez note de la conférence.<br />
7. Enlever votre blouson de cuir.<br />
8. Faire réchauffer votre poulet au micro-ondesfour.<br />
9. Rechargez votre téléphone.<br />
<br />
Ces intéractions se font à l'aide de différents capteurs éléctroniques, habillés par le cube.
<br />
Une fois terminée terminé, le joueur réappuie ré-appuie sur le bouton pour stopper le chronomètre.<br />
<br />
=== Fin du jeu ===
La page web indique au joueur qu'une trappe va s'ouvrir pour lui afficher son score.<br />
Hors lorsque la trappe va s'ouvrir, le joueur va découvrir une animation d'arbres qui tombent pour illustrer la déforestation. Un chiffre qui va s'afficher sur le cadrant, ne sera pas en seconde mais convertie en nombre d'arbres coupés dans le monde, pendant le temps que le joueur aura mis à finir le jeu.<br /><br />
Hors lorsque la trappe va s'ouvrir, le joueur va découvrir une animation d'arbres qui tombent pour illustrer la déforestation[[Fichier:Bouillons-cubes Fin. Un chiffre qui va s'afficher sur le cadrant, ne sera pas en seconde mais convertie en nombre d'arbres coupés dans le monde, pendant le temps que le joueur aura mis à finir le jeu.<br />jpg|vignette]]
La page web découle aussi sur une landing page qui parle des différentes causes de la déforestation et permet au joueur de réaliser et comprendre le lien entre la déforestation et les activités qu'il aura réalisé pendant le jeu.<br />
 
A la fin de la page, le joueur est appelé à faire un don pour une des différentes associations qui luttent contre la déforestation.
<br />
 
 
<br />
 
 
==Concevoir le cube==
 
Nous avons commencez par faire les graphismes et la découpe extérieure du cube pour les passer à la découpeuse laser avec les logiciels Illustrator, Inkscape. Le cube entier devait être démontable facilement sans viser ou coller. La plaque à découper était une planche de contre-plaqué de 4mm d'épaisseur. Certain trou pour insérer les potentiomètre on été fait avec une visseuse électrique muni d'un forêt.
Pour les interactions du cube, nous avons utiliser trois potentiomètres (étapes 2, 5, 8), il y a quatre capteur de fin de courses (étapes 3, 4, 7, 9), un capteur de pression (étape 6) et de la peinture conductrice (étape 1). Pour montrer que les interactions sont validé il y a un ruban de trois leds sur les trois face.
Il y a aussi des interactions dans le cube. Quand le jeu est fini, la trappe s'ouvre grâce à un solenoïde. Les arbres pour tomber on chacun un servo moteur alternatif ainsi que l'écran à leds au fond qui à démarré des le début pour montrer le nombre d'arbre abattu le temps de la partie.
Nous n'avons pas pu faire toute les interactions par manque de place sur la carte photon et de temps.
 
[[Fichier:Bouillons-cubes planches.jpg|vignette]]
 
[[Fichier:Bouillons-cubes interieure.jpg|vignette]]
 
== Site Web ==
<br />
<gallery>
web.jpg|Les différentes pages du site web
</gallery>
<br />
Le site web est directement relié aux interactions du cube et permet d’enchaîner les instructions de façon fluide.
 
== Programmation du cube ==
 
Ce code a été réalisé avec particle pour être transféré sur la carte photon
 
//Importation des librairy pour l'écran 4x7 segments
#include <TM1637Display.h>
 
//Importation des librairy pour le ruban a led
#include <neopixel.h>
 
//Initialisation de l'écran 4x7 segments
#define CLK D1
#define DIO D2
 
TM1637Display display(CLK, DIO);
 
//Initialisation du ruban de led
#define PIN D6
#define N_LEDS 9
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN);
 
//Initialisation des Capteurs de fin de courses
#define FinCourse1 D4
#define FinCourse2 D5
#define FinCourse3 D7
 
//Initialisation du capteur de pression
int fsrAnalogPin = A2;
int fsrReading;
 
//Initialisation du solenoid
int solenoidPin = D4;
 
//Initialisation du bouton
int interrupteur = LOW;
int toggle = 0;
int buttonPin = D0;
int buttonState = 0;
 
//Initialisation des potentiomètres
int analogPin0 = A0;
int analogPin1 = A1;
int analogPin2 = A3;
int val0 = 0;
int val1 = 0;
int val2 = 0;
 
//Initiatilsation de variables pour changer la couleur des leds
int red0 = 0;
int red1 = 0;
int red2 = 0;
int red3 = 0;
int red4 = 0;
int red5 = 0;
int red6 = 0;
 
//Initialisation de la variable du nombre d'arbres découpés
int arbre=0;
 
void setup() {
strip.begin();
pinMode(buttonPin, INPUT);
display.setBrightness(0x0d);
Serial.begin(9600); // Envoi de message de déboggage sur connexion série
pinMode(fsrAnalogPin, OUTPUT);
pinMode(solenoidPin, OUTPUT);
//Variables envoyées au web
Particle.variable("interrupteur", interrupteur);
Particle.variable("red0", red0);
Particle.variable("red1", red1);
Particle.variable("red2", red2);
Particle.variable("red3", red3);
Particle.variable("red4", red4);
Particle.variable("red5", red5);
Particle.variable("red6", red6);
pinMode(FinCourse1, INPUT);
pinMode(FinCourse2, INPUT);
pinMode(FinCourse3, INPUT);
Serial.begin(115200);
}
void loop() {
//Lecture de la valeur du capteur de pression
fsrReading = analogRead(fsrAnalogPin);
val0 = analogRead(analogPin0);
val1 = analogRead(analogPin1);
val2 = analogRead(analogPin2);
//Lecture de la valeur des fin de courses
int fdc1 = digitalRead(FinCourse1);
int fdc2 = digitalRead(FinCourse2);
int fdc3 = digitalRead(FinCourse3);
//Lecture de la valeur du bouton
buttonState = digitalRead(buttonPin);
//Bouton avec 2 étâts comme un interrupteur (interrupteur ON et interrupteur OFF)
if (buttonState == HIGH) {
if (toggle == 1) {
interrupteur=!interrupteur;
toggle=0;
}
}
else {
toggle=1;
}
//Si l'interrupteur est ON
if(interrupteur == HIGH){
if(toggle == 0){ //Remise a 0 des valeurs de l'arbre et des leds au clic
arbre=0;
red0=0;
red1=0;
red2=0;
red3=0;
red4=0;
red5=0;
red6=0;
}
//Solenoid permettant d'ouvrir la porte se bloque
digitalWrite(solenoidPin, LOW);
for(int i=0; i<strip.numPixels(); i++) {
// Pour toute les leds ou le capteur est fonctionnel, elles deviennent rouges -> Début de l'expérience
strip.setPixelColor(i, strip.Color(255,0,0));
//Seules 2 capteurs ne sont pas fonctionnels -> Les leds s'allument vertes dès le début
strip.setPixelColor(0, strip.Color(0,255,0));
strip.setPixelColor(5, strip.Color(0,255,0));
//Pour chaque interaction avec un capteur -> Valeur de la led prend 1
if(val0 > 3800) {
red0 = 1;
}
if(val1 > 3800) {
red1 = 1;
}
if(val2 > 3800) {
red3 = 1;
}
if(fsrReading < 200){
red2 = 1;
}
if(fdc1 == HIGH){
red4 = 1;
}
if(fdc2 == HIGH){
red5 = 1;
}
if(fdc3 == HIGH){
red6 = 1;
}
//Si la valeur de la led est 1 -> Led s'allume en vert
if(red0 == 1){
strip.setPixelColor(6, strip.Color(0,255,0));
}
if(red1 == 1){
strip.setPixelColor(1, strip.Color(0,255,0));
}
if(red2 == 1){
strip.setPixelColor(3, strip.Color(0,255,0));
}
if(red3 == 1){
strip.setPixelColor(4, strip.Color(0,255,0));
}
if(red4 == 1){
strip.setPixelColor(2, strip.Color(0,255,0));
}
if(red5 == 1){
strip.setPixelColor(8, strip.Color(0,255,0));
}
if(red6 == 1){
strip.setPixelColor(7, strip.Color(0,255,0));
}
strip.show();
arbre++; //Incrementation du nombre d'arbres
delay(25);
display.showNumberDec(arbre);
}
} else //Si l'interrupteur est OFF {
for(int i=0; i<strip.numPixels(); i++) {//Toute les leds clignotent vert et blanc
strip.setPixelColor(i, strip.Color(0,255,0));
delay(50);
strip.show();
strip.setPixelColor(i, strip.Color(255,255,255));
delay(50);
strip.show();
digitalWrite(solenoidPin, HIGH); //Solenoid permettant d'ouvrir la porte s'e bloque s'ouvre
}
//Le nombre d'arbre se stop
arbre=arbre;
display.showNumberDec(arbre);
}
}
906
modifications