StartUpGenerator : Différence entre versions

De fablabo
Aller à : navigation, rechercher
 
(23 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{Projet
 
{{Projet
 
|status=Prototype
 
|status=Prototype
|status_pub=Brouillon
+
|status_pub=Publié
 +
|image=29856081 1827286557336729 554850370 n.png
 
|description=Projet réalisé ds le cadre d'un workshop de l'Ecole de design Nantes Atlantique
 
|description=Projet réalisé ds le cadre d'un workshop de l'Ecole de design Nantes Atlantique
 
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France
 
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France
 +
|contributeurs=Marc Launay, Lisa mouen, Valentine Milliand, Maëva Hemon,
 +
|inspiration=Post Tumblr & StartUp nation
 +
|machines=Laser-Smoothignstech,
 
}}
 
}}
<big>StartupGénérator
+
== Contraintes ==
</big>
+
 
 +
Cube de 20cm * 20cm <br />
 +
 
 +
Interactions avec l’utilisateur <br />
  
== Contraintes ==
+
Utilisation de capteurs pour recueillir des données <br />
 +
 
 +
Dialogue entre la carte éléctronique et une interface web <br />
 +
 
 +
== Concept ==
 +
 
 +
Cube permettant à l'utilisateur de trouver une idée pour un futur projet de Startup.
 +
A travers une série de tests improbables le cube va définir un concept de startup personnalisé.
 +
L'utilisateur recevra son idée de Startup sur un ticket qu'il pourra garder avec lui.<br />
  
Cube de 20cm * 20cm
+
Le principe réside dans l'absurdité de la proposition finale sur le ticket qui se compose de phrases crées à partir de variables aléatoires. On se retrouve alors avec une Startup définie par des "buzzwords", des termes tendances qui en eux même ne veulent pas dire grand chose.
Interractions avec l’utilisateur
 
Utilisation de capteurs pour recceuillir des données
 
Dialogue entre la carte éléctronique et une interface web
 
  
 
== Réalisation ==
 
== Réalisation ==
 +
'''Réalisation d'une pré-maquette pour valider le positionnement des modules interactifs.'''<br />
  
 +
[[File:20180328_190350(0).jpg|700px]]
 +
'''Création de la maquette finale découpée au laser avec un système d’emboitement par encoches.'''<br />
 +
 +
[[File:Sans titre-1.jpg|700px]]
 +
[[Fichier:Montage|vignette]]
 
== Fonctionnement ==
 
== Fonctionnement ==
 +
'''6 étapes réparties sur 5 faces du cube:'''<br />
 +
1) (LANCEMENT du programme)
 +
<h4>2) Défis d'AUDACE</h4>
 +
<h4>3) Défis d'EFFICACITE </h4>
 +
<h4>4) Défis d'INVESTISSEMENT </h4>
 +
<h4>5) Test de PERSONNALITE</h4>
 +
6)(IMPRESSION du ticket)
 +
 +
<h3>Code processing random pour la production du ticket:</h3>
 +
int irole, iconcept, istartup, iqualificatif, icible, idestiny ;
 +
 +
String role[] = { "Idea Shaper", "CEO", "DRH", "Happiness officer", "Disruptive Cofounder", "Digital Storyteller", "Head of Talent", "Disruptive Coach", "Ninja Consultant", "Assistante Marketing", "Software Engineer", "Team Leader", "Digital Influencer", "Talent Hunter", "Growthhacker", "Blockchain Guru", "Scrum Master", "Agile Specialist", "Collective Intelligence Booster", "Design Thinker", "Marketing Philosopher", "Super Weapon", "Emotion Creator", "Experience Designer", "Cosmic Dataminer", "Robot Pilot", "Trader de deals", "VR Architect", "Data Scientist", "Virtual Sociologist", "Community Manager", "Lead Brainstormer", "Data Analyst", "Digital Creator" };
 +
String concept[] = { "Tinder", "Uber", "Deliveroo", "Bracelet connecte", "Activity tracker", "Fablab", "Incubateur", "Facebook", "Poele connectee", "Frigo connectee", "Robot", "Bitcoin", "Casque VR", "Imprimante 3D", "Crypto-monnaie", "Cigarette electronique", "Messagerie instantanee", "Airbnb", "Espace de coworking", "Hackathon", "Intelligence artificielle", "Paiement sans contact", "Blockchain", "Linkedin", "SmartTV", "Objet connecte", "Wearable", "Lunette de realite augmentee", "Brosse a dents connectee", "Serious game", "Plateforme de e-learning", "Outil de brainstorming", "Drone", "Chatbot"  };
 +
String startup[] = { "disruptif(ve)", "diabolique", "innovant(e)", "inspirant(e)", "sexy", "illegal(e)", "immersif(ve)", "malveillant(e)", "gamifie(e)", "viral(e)", "toxique", "ingenieux(se)", "virtuel(le)", "agressif(ve)", "agile", "tyrannique", "sonore", "dynamique", "hardcore", "violent(e)", "emouvant(e)", "geant(e)", "mignon(ne)", "vocal(e)", "en bluetooth", "auto-destructeur(ice)", "seduisant(e)", "polyvalent(e)", "genant(e)", "sportif(ve)", "social(e)", "gamifie(e)", "personnalise(e)", "emotionnel(le)" };
 +
String cible[] = { "millenials", "animaux de compagnie", "la generation Y", "employes d usine", "enfants", "commerciaux", "directeurs d entreprises", "nouveaux-nes", "nourissons", "alcooliques", "collegiens", "professeurs", "depressifs", "orphelins", "ministres", "stagiaires sous-payes", "graphistes", "animaux en voie d extinction", "policiers", "macronistes", "gauchistes", "CRS", "secretaires", "lyceens", "enthousiastes du crossfit", "influenceurs Linkedin", "intermittents du spectacle", "enfants en bas age", "personnes agees", "fans de Johnny Hallyday", "Nazis", "Heterosexuels", "Robots", "Les 2000"};
 +
String destiny[] = { "vous êtes rachete par Google car votre idee est trop innovante", "vous êtes rachete par Facebook car votre idee est trop innovante", "vous manquez de financements : votre startup coule", "vos fonds sont épuises : vous n'avez pas prevu assez large", "les investisseurs vous lachent : votre projet prend fin brutalement ", "le public n'etait pas pret pour autant d'innovation : personne n'achete votre produit", "la France n'etait pas prete pour votre innovation : votre startup rencontre un echec cuisant", "votre innovation tue un utilisateur : vous etes contraint de fermer boutique", "vous n'avez pas respecte le Code du Travail : votre startup croule sous les procès", "vos employes portent plainte contre vous pour exploitation abusive", "vous etes accuses de plagiat et perdez le proces", "vous avez trop de concurrence : impossible de vendre votre concept", "le prix que vous avez fixe est trop haut : personne n'achete votre produit", "vous vous disputez avec votre associe et il quitte la startup", "votre concept est inutile : votre startup coule", "votre concept est trop dangereux et nocif pour ses utilisateurs : votre startup fait faillite", "vos utilisateurs ne sont pas à la hauteur de votre concept : votre startup coule", "votre concept releve du genie mais vous etes incompris", "l'incubateur qui vous heberge vous vire des locaux", "le stagiaire de votre startup efface la sauvegarde du cloud qui contenait tous vos fichiers d'entreprise", "le community manager a supprime la page Linkedin de votre startup : vous n'existez plus", "le scrumboard est tombe sur vos collaborateurs : vous perdez 80% de votre effectif et etes contraint de fermer votre startup", "vous mourrez ecrase par votre livraison mensuelle de post-its : sans CEO, votre startup ne peut pas survivre", "un brief avec vos investisseurs tourne mal : vous projetez vos photos de vacances au lieu de votre powerpoint convaincant", "votre business model n'est pas rentable : vous faites faillite", "vous n’etes ni passionne, ni passionant : votre startup tombe à l'eau", "votre concept est totalement illegal : vous êtes arrete par la police, vous et vos collaborateurs", "vous perdez un proces contre votre ancien stagiaire qui vous accuse de l'avoir exploite", "vous etes invites au CES mais votre concept est moque par toutes les autres startups : vous perdez en credibilite et faites faillite", "votre scrum master vous lache : plus personne ne travaille et votre startup coule", "vous vendez des donnees confidentielles sur vos utilisateurs a d'autres entreprises mais un lanceur d'alerte vous denonce : votre reputation est ruinee", "vous avez besoin de designers mais aucun d'eux n'accepte d'être paye en influence et en experience : votre projet ne peut pas avancer", "votre community manager poste accidentellement des photos compromettantes de vous sur le compte Twitter de la startup : vous perdez en credibilite", "vous procrastinez trop et le projet finit par ne jamais voir le jour" };
 +
String text1, text2, text3, text4;
 +
 +
void setup()
 +
{
 +
noLoop();
 +
}
 +
 +
void draw() { 
 +
    //entiers aléatoires
 +
  int entier1 = int(random(0, 34));
 +
  int entier2 = int(random(0, 34));
 +
  int entier3 = int(random(0, 34));
 +
  int entier4 = int(random(0, 34));
 +
  int entier5 = int(random(0, 34));
 +
  int entier6 = int(random(0, 34));
 +
 
 +
  //role
 +
  text1 = "Role : " + role[entier1];
 +
  text2 = "Concept : " + concept[entier2] + " " + startup[entier3] + " pour " + cible[entier4];
 +
  text3 = "Duree de vie : " + entier5 + " mois";
 +
  text4 = "Cause de faillite : " + destiny[entier6] ;
 +
 
 +
  //print
 +
  println(text1);
 +
  println(text2);
 +
  println(text3);
 +
  println(text4);
 +
  println("_");
 +
}
 +
 +
void keyPressed() {
 +
redraw();
 +
}
  
 
== //0 Lancement ==
 
== //0 Lancement ==
Ligne 26 : Ligne 93 :
  
 
'''Matériels:''' <br />
 
'''Matériels:''' <br />
Panneau de bois suivant le model ci-dessous<br />
+
Panneau de bois suivant le model ci-dessous <br />
  
 
'''Principe:''' <br />
 
'''Principe:''' <br />
Ligne 35 : Ligne 102 :
 
'''Speech:'''<br />
 
'''Speech:'''<br />
 
  Vous pensez être le Steve Jobs ou le Elon Musk de demain ? Vous êtes accro à LinkedIn, vous n’avez peur de rien, et êtes prêt à tout sacrifier pour faire partie de la Start-up Nation ?
 
  Vous pensez être le Steve Jobs ou le Elon Musk de demain ? Vous êtes accro à LinkedIn, vous n’avez peur de rien, et êtes prêt à tout sacrifier pour faire partie de la Start-up Nation ?
Vous avez tout, sauf une idée révolutionnaire ?  
+
Vous avez tout, sauf une idée révolutionnaire ? Notre générateur de start-up est là pour vous aider.  
Notre générateur de start-up est là pour vous aider.  
 
 
Pour avoir un aperçu de votre futur, il vous faudra passer un test pour évaluer les 4 qualités qui feront de vous l’entrepreneur le plus disruptif de l’année.<br />
 
Pour avoir un aperçu de votre futur, il vous faudra passer un test pour évaluer les 4 qualités qui feront de vous l’entrepreneur le plus disruptif de l’année.<br />
 
  
 
== //1 Audace ==
 
== //1 Audace ==
 +
[[File:29884403_1846219175423453_355768318_o.jpg|700px]]
 
'''Objectifs:''' <br />
 
'''Objectifs:''' <br />
 
Tester la capacité de l’utilisateur à prendre un risque.
 
Tester la capacité de l’utilisateur à prendre un risque.
Ligne 57 : Ligne 123 :
 
=> Led s’allume
 
=> Led s’allume
 
=> Joue Piste 2<br />
 
=> Joue Piste 2<br />
 +
 +
'''Speech:'''<br />
 +
Un bon startupper doit être audacieux et prêt à relever tous les défis : vous n’avez peur de rien. Alors prenez votre courage à 2 mains et restez appuyé sur ce bouton pendant 3 secondes. Rester appuyé au min 3 s sur un bouton sous un piège à souris.<br />
 +
 +
 +
 +
== //2 Efficacité ==
 +
'''Objectifs:''' <br />
 +
Concours d’ajout de contact sur Linkedin en 10 secondes.
 +
Compter le nombre clics sur le bouton dans le temps impartis à l’utilisateur. <br />
 +
 +
'''Matériels:''' <br />
 +
Panneau de bois suivant ce model
 +
Bouton
 +
LED<br />
 +
 +
'''Principe:''' <br />
 +
 +
Si l’utilisateur appuie sur le bouton  1 2 3 4 fois pendant 10 secondes
 +
<capter la pression>
 +
while 10 sec:
 +
=> int = int + 1
 +
=> return Led s’allume
 +
=> Joue Piste 3<br />
 +
 +
'''Speech:'''<br />
 +
L’audace n’est rien sans un bon réseau. Vous aimez étendre votre reach, et vous passez vos journées à growthhacker vos comptes de réseaux sociaux? Combien de demandes d’ajouts LinkedIn pouvez-vous accepter en 10 secondes?
 +
<br />
 +
 +
== //3 Investissement ==
 +
'''Objectifs:''' <br />
 +
Inviter l’utilisateur à investir dans sa startup pour la lancer.
 +
Déposer une pièce dans une fente sur la face de la boite.
 +
<br />
 +
 +
'''Matériels:''' <br />
 +
Panneau de bois suivant ce model
 +
Detecteur optique «HOA1881-012»
 +
LED<br />
 +
 +
'''Principe:''' <br />
 +
 +
Si l’utilisateur met une pièce
 +
<capter la presence>
 +
=> Led s’allume
 +
=> Joue Piste 4
 +
<br />
 +
 +
'''Speech:'''<br />
 +
Pour carry un projet solide, votre network ne suffira pas, il faut faire le leap of faith financier nécessaire pour planter les graines de la réussite. Mettez une pièce dans la fente pour continuer le test.
 +
<br />
 +
== //4 Personnalité ==
 +
[[File:5.jpg|700px]]
 +
'''Objectifs:''' <br />
 +
«Lire» les lignes du doigt de l’utilisateur.
 +
Capter la pression sur une plaque en verre, terminer le processus de tests, imprimer le ticket et envoyer un tweet avec le contenu du ticket sur le compte «Startupr».
 +
Enceinte guidant l’utilisateur avec une bande son. <br />
 +
 +
'''Matériels:''' <br />
 +
Panneau de bois suivant ce model
 +
Anneau LED «NEO PIXEL RING»
 +
Capteur de pression rond
 +
Haut-parleur
 +
<br />
 +
 +
'''Principe:''' <br />
 +
 +
Si l’utilisateur pose son doigt
 +
<capter une force>
 +
=> collier de Led s’allume pendant 5 sec
 +
=> Envoyer à IFFTT tweet
 +
<br />
 +
 +
=> Role (« random »)
 +
=> Concept (« random » + « random » + »random »)
 +
=> Durée de vie ( « (random(2 - 24) « + « mois »)
 +
=> Cause (« random » + « random » )
 +
<br />
 +
 +
=> Joue Piste 5<br />
 +
 +
'''Speech:'''<br />
 +
Dans la start-up nation, rien n’est plus précieux que votre personnalité. Vous êtes unique, vous êtes l’élite, mais plus important encore : vous êtes vous-mêmes. Votre entreprise est irremplaçable et exceptionnelle, tout comme vous. Posez votre main sur le scanner de personnalité pour générer votre startup de demain.
 +
<br />
 +
 +
== //5 Imprimer ==
 +
[[File:4.jpg|700px]]
 +
 +
'''Objectifs:''' <br />
 +
Imprimer un ticket résumant sa startup générée à partir des tests réalisés au préalable.<br />
 +
 +
'''Matériels:''' <br />
 +
Panneau de bois suivant ce model
 +
Imprimante thermale «YM TECH BT-2 THERMAL PRINTER»
 +
Rouleau de papier
 +
Assemblage Shield + Arduino Mega <br />
 +
 +
'''Principe:''' <br />
 +
 +
Le ticket doit contenir:
 +
Le concept de start-up --> Nous + “Variable1” + “Variable2” + “Variable3”+»Variable4»
 +
Le rôle dans la start-up --> Variable1
 +
La cause de faillite -->
 +
La durée d’existence de la startup --> 24 mois <br />
  
 
'''Speech:'''<br />
 
'''Speech:'''<br />
 
  Un bon startupper doit être audacieux et prêt à relever tous les défis : vous n’avez peur de rien. Alors prenez votre courage à 2 mains et restez appuyé sur ce bouton pendant 3 secondes.  
 
  Un bon startupper doit être audacieux et prêt à relever tous les défis : vous n’avez peur de rien. Alors prenez votre courage à 2 mains et restez appuyé sur ce bouton pendant 3 secondes.  
 
Rester appuyé au min 3 s sur un bouton sous un piège à souris.<br />
 
Rester appuyé au min 3 s sur un bouton sous un piège à souris.<br />
 +
[[File:6.jpg|700px]]
 +
 +
== Branchement & Programmation ==
 +
 +
[[File:29894325_1825262810872437_162955786_o.png|700px]]<br />
 +
<br />
 +
 +
 +
//START UP GENERATOR
 +
// le Cube connecté qui prédit l'avenir de votre startup
 +
 +
//LIBRAIRIES IMPRIMANTES : les ports peuvent être redéfinis ci-dessous
 +
#include "SoftwareSerial.h"
 +
#include "Adafruit_Thermal.h"
 +
#include <avr/pgmspace.h>
 +
 +
//LIBRAIRIES AUDIO : attention à ne pas utiliser les ports ci-dessous
 +
#include <SPI.h>
 +
#include <Adafruit_VS1053.h>
 +
#include <SD.h>
 +
#define BREAKOUT_RESET  9      // VS1053 reset pin (output)
 +
#define BREAKOUT_CS    10    // VS1053 chip select pin (output)
 +
#define BREAKOUT_DCS    8      // VS1053 Data/command select pin (output)
 +
// These are the pins used for the music maker shield
 +
#define SHIELD_RESET  -1      // VS1053 reset pin (unused!)
 +
#define SHIELD_CS    7      // VS1053 chip select pin (output)
 +
#define SHIELD_DCS    6      // VS1053 Data/command select pin (output)
 +
// These are common pins between breakout and shield
 +
#define CARDCS 4    // Card chip select pin
 +
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
 +
#define DREQ 3      // VS1053 Data request, ideally an Interrupt pin
 +
Adafruit_VS1053_FilePlayer musicPlayer =
 +
// create shield-example object!
 +
Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
 +
 +
 +
 +
//BOUTONS
 +
 +
//bouton piste 1
 +
const int buttonPin1 = 39;
 +
int buttonState1 = 0;
 +
 +
//bouton piste 2
 +
const int buttonPin2 = 2;
 +
int buttonState2 = 0;
 +
 +
//bouton piste 3
 +
const int buttonPin3 = 16;
 +
int buttonState3 = 0;
 +
 +
//capteur imprimer
 +
const int buttonPressure = A0;
 +
int pressureState = 0;
 +
 +
//tweet
 +
//const int tweetPin = 41;
 +
//int tweetState = 0;
 +
 +
//led
 +
const int ledPin13 =  13;
 +
 +
 +
//PRINTER
 +
//Paramètres de l'imprimante
 +
String s;
 +
int n;
 +
boolean b = false;
 +
Adafruit_Thermal printer(5, 22); //ports utilisés : 5 = fil rouge, 22 = fil jaune;
 +
 +
 +
//millis
 +
unsigned long previousMillis = 0;
 +
unsigned long currentMillis;
 +
unsigned long interval = 5000; //delay pour la led
 +
 +
 +
void setup() {
 +
 +
  //PRINTER
 +
  Serial.begin(9600);
 +
  printer.begin();
 +
 +
  //Initialisation entrée et sorties
 +
  pinMode(ledPin13, OUTPUT);
 +
  pinMode(buttonPin2, INPUT);
 +
  pinMode(buttonPin1, INPUT);
 +
  pinMode(buttonPressure, INPUT);
 +
  pinMode(buttonPin3, INPUT);
 +
  //pinMode(tweetPin, OUTPUT);
 +
 +
  //AUDIO
 +
  if (! musicPlayer.begin()) { // initialise the music player
 +
    Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
 +
    while (1);
 +
  }
 +
  Serial.println(F("VS1053 found"));
 +
  if (!SD.begin(CARDCS)) {
 +
    Serial.println(F("SD failed, or not present"));
 +
    while (1);  // don't do anything more
 +
  }
 +
  // list files
 +
  printDirectory(SD.open("/"), 0);
 +
  musicPlayer.setVolume(20, 20);
 +
  musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);  // DREQ int
 +
 +
}
 +
 +
void loop() {
 +
 +
  //Initiatlisation - Vérifications
 +
  buttonState1 = digitalRead(buttonPin1);
 +
  buttonState2 = digitalRead(buttonPin2);
 +
  buttonState3 = digitalRead(buttonPin3);
 +
  //tweetState = digitalRead(tweetPin);
 +
  pressureState = analogRead(buttonPressure);
 +
  //Serial.print("val:");
 +
  //Serial.println(pressureState);
 +
 +
  //algorithme
 +
 +
  //PART 1 : La piste 1 se lance
 +
  if (buttonState1 == HIGH) {
 +
    digitalWrite(ledPin13, HIGH);
 +
    musicPlayer.playFullFile("track001.mp3");
 +
    Serial.println("bouton1appuyé");
 +
  }
 +
 +
  //PART 2 : la piste 2 se lance
 +
  if (buttonState2 == HIGH) {
 +
      musicPlayer.playFullFile("track002.mp3");
 +
      Serial.println("bouton2appuyé");
 +
    /*au bout de 3 secondes la led s'allume
 +
    currentMillis = millis();
 +
 +
    if (currentMillis - previousMillis >= interval) {
 +
      previousMillis = currentMillis;
 +
      //Led
 +
      digitalWrite(ledPin13, LOW);
 +
      unsigned long currentMillis = millis();
 +
    }
 +
    musicPlayer.playFullFile("track003.mp3");*/
 +
  }
 +
 +
 
 +
     
 +
  //PART 3 : la piste 3 se lance
 +
  //Serial.println(buttonState3);
 +
 +
  if (buttonState3 == HIGH) {
 +
    digitalWrite(ledPin13, HIGH);
 +
    musicPlayer.playFullFile("track004.mp3");
 +
    Serial.println("bouton3appuyé");
 +
  }
 +
 +
 +
  //PART 4 : l'imprimante imprime + envoie IFFTT
 +
  if (pressureState > 500) {
 +
    digitalWrite(ledPin13, LOW);
 +
    b = true; // lancer l'impression
 +
    //tweetState = 1;
 +
    //tweetState = 0;
 +
  }
 +
 +
 +
  //FONCTION IMPRIMANTE
 +
  if (b) {
 +
    Serial.println("button2");
 +
    //Serial.println("hello");
 +
    n = random(34);
 +
    ligne1(n);
 +
    printer.feed(1);
 +
    printer.boldOn();
 +
    n = random(34);
 +
    ligne2(n);
 +
    n = random(34);
 +
    printer.boldOff();//text en gras
 +
    ligne3(n);
 +
    printer.feed(1);
 +
    n = random(34);
 +
    ligne4(n);
 +
    printer.feed(1);
 +
    n = random(34);
 +
    ligne5(n);
 +
 +
    printer.feed(5);  //space
 +
    printer.sleep();      // Tell printer to sleep
 +
    printer.wake();      // MUST call wake() before printing again, even if reset
 +
    printer.setDefault(); // Restore printer to defaults
 +
    b = false;
 +
  }
 +
 +
 +
}
 +
  
 +
/// File listing helper
 +
void printDirectory(File dir, int numTabs) {
 +
  while (true) {
  
 +
    File entry =  dir.openNextFile();
 +
    if (! entry) {
 +
      // no more files
 +
      //Serial.println("*nomorefiles*");
 +
      break;
 +
    }
 +
    for (uint8_t i = 0; i < numTabs; i++) {
 +
      Serial.print('\t');
 +
    }
 +
    Serial.print(entry.name());
 +
    if (entry.isDirectory()) {
 +
      Serial.println("/");
 +
      printDirectory(entry, numTabs + 1);
 +
    } else {
 +
      // files have sizes, directories do not
 +
      Serial.print("\t\t");
 +
      Serial.println(entry.size(), DEC);
 +
    }
 +
    entry.close();
 +
  }
 +
}
  
//2 Efficacité
 
  
//3 Investissement
+
//imprimer une led : test
  
//4 Personnalité
 
  
//5 Imprimer
+
  /*buttonState1 = digitalRead(22);
 +
    //Serial.println(buttonState1);
 +
    if (buttonState1 == HIGH) {
 +
    // turn LED on:
 +
    digitalWrite(ledPin13, HIGH);
 +
    } else {
 +
    // turn LED off:
 +
    digitalWrite(ledPin13, LOW);
 +
    }*/

Version actuelle en date du 3 avril 2018 à 16:29


Projet réalisé ds le cadre d'un workshop de l'Ecole de design Nantes Atlantique



Contraintes

Cube de 20cm * 20cm

Interactions avec l’utilisateur

Utilisation de capteurs pour recueillir des données

Dialogue entre la carte éléctronique et une interface web

Concept

Cube permettant à l'utilisateur de trouver une idée pour un futur projet de Startup. A travers une série de tests improbables le cube va définir un concept de startup personnalisé. L'utilisateur recevra son idée de Startup sur un ticket qu'il pourra garder avec lui.

Le principe réside dans l'absurdité de la proposition finale sur le ticket qui se compose de phrases crées à partir de variables aléatoires. On se retrouve alors avec une Startup définie par des "buzzwords", des termes tendances qui en eux même ne veulent pas dire grand chose.

Réalisation

Réalisation d'une pré-maquette pour valider le positionnement des modules interactifs.

20180328 190350(0).jpg Création de la maquette finale découpée au laser avec un système d’emboitement par encoches.

Sans titre-1.jpg

Fonctionnement

6 étapes réparties sur 5 faces du cube:
1) (LANCEMENT du programme)

2) Défis d'AUDACE

3) Défis d'EFFICACITE

4) Défis d'INVESTISSEMENT

5) Test de PERSONNALITE

6)(IMPRESSION du ticket)

Code processing random pour la production du ticket:

int irole, iconcept, istartup, iqualificatif, icible, idestiny ;

String role[] = { "Idea Shaper", "CEO", "DRH", "Happiness officer", "Disruptive Cofounder", "Digital Storyteller", "Head of Talent", "Disruptive Coach", "Ninja Consultant", "Assistante Marketing", "Software Engineer", "Team Leader", "Digital Influencer", "Talent Hunter", "Growthhacker", "Blockchain Guru", "Scrum Master", "Agile Specialist", "Collective Intelligence Booster", "Design Thinker", "Marketing Philosopher", "Super Weapon", "Emotion Creator", "Experience Designer", "Cosmic Dataminer", "Robot Pilot", "Trader de deals", "VR Architect", "Data Scientist", "Virtual Sociologist", "Community Manager", "Lead Brainstormer", "Data Analyst", "Digital Creator" }; String concept[] = { "Tinder", "Uber", "Deliveroo", "Bracelet connecte", "Activity tracker", "Fablab", "Incubateur", "Facebook", "Poele connectee", "Frigo connectee", "Robot", "Bitcoin", "Casque VR", "Imprimante 3D", "Crypto-monnaie", "Cigarette electronique", "Messagerie instantanee", "Airbnb", "Espace de coworking", "Hackathon", "Intelligence artificielle", "Paiement sans contact", "Blockchain", "Linkedin", "SmartTV", "Objet connecte", "Wearable", "Lunette de realite augmentee", "Brosse a dents connectee", "Serious game", "Plateforme de e-learning", "Outil de brainstorming", "Drone", "Chatbot" }; String startup[] = { "disruptif(ve)", "diabolique", "innovant(e)", "inspirant(e)", "sexy", "illegal(e)", "immersif(ve)", "malveillant(e)", "gamifie(e)", "viral(e)", "toxique", "ingenieux(se)", "virtuel(le)", "agressif(ve)", "agile", "tyrannique", "sonore", "dynamique", "hardcore", "violent(e)", "emouvant(e)", "geant(e)", "mignon(ne)", "vocal(e)", "en bluetooth", "auto-destructeur(ice)", "seduisant(e)", "polyvalent(e)", "genant(e)", "sportif(ve)", "social(e)", "gamifie(e)", "personnalise(e)", "emotionnel(le)" }; String cible[] = { "millenials", "animaux de compagnie", "la generation Y", "employes d usine", "enfants", "commerciaux", "directeurs d entreprises", "nouveaux-nes", "nourissons", "alcooliques", "collegiens", "professeurs", "depressifs", "orphelins", "ministres", "stagiaires sous-payes", "graphistes", "animaux en voie d extinction", "policiers", "macronistes", "gauchistes", "CRS", "secretaires", "lyceens", "enthousiastes du crossfit", "influenceurs Linkedin", "intermittents du spectacle", "enfants en bas age", "personnes agees", "fans de Johnny Hallyday", "Nazis", "Heterosexuels", "Robots", "Les 2000"}; String destiny[] = { "vous êtes rachete par Google car votre idee est trop innovante", "vous êtes rachete par Facebook car votre idee est trop innovante", "vous manquez de financements : votre startup coule", "vos fonds sont épuises : vous n'avez pas prevu assez large", "les investisseurs vous lachent : votre projet prend fin brutalement ", "le public n'etait pas pret pour autant d'innovation : personne n'achete votre produit", "la France n'etait pas prete pour votre innovation : votre startup rencontre un echec cuisant", "votre innovation tue un utilisateur : vous etes contraint de fermer boutique", "vous n'avez pas respecte le Code du Travail : votre startup croule sous les procès", "vos employes portent plainte contre vous pour exploitation abusive", "vous etes accuses de plagiat et perdez le proces", "vous avez trop de concurrence : impossible de vendre votre concept", "le prix que vous avez fixe est trop haut : personne n'achete votre produit", "vous vous disputez avec votre associe et il quitte la startup", "votre concept est inutile : votre startup coule", "votre concept est trop dangereux et nocif pour ses utilisateurs : votre startup fait faillite", "vos utilisateurs ne sont pas à la hauteur de votre concept : votre startup coule", "votre concept releve du genie mais vous etes incompris", "l'incubateur qui vous heberge vous vire des locaux", "le stagiaire de votre startup efface la sauvegarde du cloud qui contenait tous vos fichiers d'entreprise", "le community manager a supprime la page Linkedin de votre startup : vous n'existez plus", "le scrumboard est tombe sur vos collaborateurs : vous perdez 80% de votre effectif et etes contraint de fermer votre startup", "vous mourrez ecrase par votre livraison mensuelle de post-its : sans CEO, votre startup ne peut pas survivre", "un brief avec vos investisseurs tourne mal : vous projetez vos photos de vacances au lieu de votre powerpoint convaincant", "votre business model n'est pas rentable : vous faites faillite", "vous n’etes ni passionne, ni passionant : votre startup tombe à l'eau", "votre concept est totalement illegal : vous êtes arrete par la police, vous et vos collaborateurs", "vous perdez un proces contre votre ancien stagiaire qui vous accuse de l'avoir exploite", "vous etes invites au CES mais votre concept est moque par toutes les autres startups : vous perdez en credibilite et faites faillite", "votre scrum master vous lache : plus personne ne travaille et votre startup coule", "vous vendez des donnees confidentielles sur vos utilisateurs a d'autres entreprises mais un lanceur d'alerte vous denonce : votre reputation est ruinee", "vous avez besoin de designers mais aucun d'eux n'accepte d'être paye en influence et en experience : votre projet ne peut pas avancer", "votre community manager poste accidentellement des photos compromettantes de vous sur le compte Twitter de la startup : vous perdez en credibilite", "vous procrastinez trop et le projet finit par ne jamais voir le jour" }; String text1, text2, text3, text4;

void setup() { noLoop(); }

void draw() {

   //entiers aléatoires
 int entier1 = int(random(0, 34));
 int entier2 = int(random(0, 34));
 int entier3 = int(random(0, 34));
 int entier4 = int(random(0, 34));
 int entier5 = int(random(0, 34));
 int entier6 = int(random(0, 34));
 
 //role
 text1 = "Role : " + role[entier1];
 text2 = "Concept : " + concept[entier2] + " " + startup[entier3] + " pour " + cible[entier4];
 text3 = "Duree de vie : " + entier5 + " mois";
 text4 = "Cause de faillite : " + destiny[entier6] ;
 
 //print
 println(text1);
 println(text2);
 println(text3);
 println(text4);
 println("_");

}

void keyPressed() {

redraw(); 

}

//0 Lancement

Objectifs:
Démarrer le programme

Matériels:
Panneau de bois suivant le model ci-dessous

Principe:

si l'utilisateur appuie sur le bouton --> jouer Piste_1

Speech:

Vous pensez être le Steve Jobs ou le Elon Musk de demain ? Vous êtes accro à LinkedIn, vous n’avez peur de rien, et êtes prêt à tout sacrifier pour faire partie de la Start-up Nation ?

Vous avez tout, sauf une idée révolutionnaire ? Notre générateur de start-up est là pour vous aider. Pour avoir un aperçu de votre futur, il vous faudra passer un test pour évaluer les 4 qualités qui feront de vous l’entrepreneur le plus disruptif de l’année.

//1 Audace

29884403 1846219175423453 355768318 o.jpg Objectifs:
Tester la capacité de l’utilisateur à prendre un risque. Capter l’appuit sur un bouton insérer dans un piège à sourits

Matériels:
Panneau de bois suivant ce model --> Bouton LED Piège à sourits armé mais sécurisé pour ne pas se déclencher

Principe:

<capter la pression> Si l’utilisateur appuie sur le bouton pendant 3 secondes => Led s’allume => Joue Piste 2

Speech:
Un bon startupper doit être audacieux et prêt à relever tous les défis : vous n’avez peur de rien. Alors prenez votre courage à 2 mains et restez appuyé sur ce bouton pendant 3 secondes. Rester appuyé au min 3 s sur un bouton sous un piège à souris.


//2 Efficacité

Objectifs:
Concours d’ajout de contact sur Linkedin en 10 secondes. Compter le nombre clics sur le bouton dans le temps impartis à l’utilisateur.

Matériels:
Panneau de bois suivant ce model Bouton LED

Principe:

Si l’utilisateur appuie sur le bouton 1 2 3 4 fois pendant 10 secondes <capter la pression> while 10 sec: => int = int + 1 => return Led s’allume => Joue Piste 3

Speech:
L’audace n’est rien sans un bon réseau. Vous aimez étendre votre reach, et vous passez vos journées à growthhacker vos comptes de réseaux sociaux? Combien de demandes d’ajouts LinkedIn pouvez-vous accepter en 10 secondes?

//3 Investissement

Objectifs:
Inviter l’utilisateur à investir dans sa startup pour la lancer. Déposer une pièce dans une fente sur la face de la boite.

Matériels:
Panneau de bois suivant ce model Detecteur optique «HOA1881-012» LED

Principe:

Si l’utilisateur met une pièce <capter la presence> => Led s’allume => Joue Piste 4

Speech:
Pour carry un projet solide, votre network ne suffira pas, il faut faire le leap of faith financier nécessaire pour planter les graines de la réussite. Mettez une pièce dans la fente pour continuer le test.

//4 Personnalité

5.jpg Objectifs:
«Lire» les lignes du doigt de l’utilisateur. Capter la pression sur une plaque en verre, terminer le processus de tests, imprimer le ticket et envoyer un tweet avec le contenu du ticket sur le compte «Startupr». Enceinte guidant l’utilisateur avec une bande son.

Matériels:
Panneau de bois suivant ce model Anneau LED «NEO PIXEL RING» Capteur de pression rond Haut-parleur

Principe:

Si l’utilisateur pose son doigt <capter une force> => collier de Led s’allume pendant 5 sec => Envoyer à IFFTT tweet

=> Role (« random ») => Concept (« random » + « random » + »random ») => Durée de vie ( « (random(2 - 24) « + « mois ») => Cause (« random » + « random » )

=> Joue Piste 5

Speech:

Dans la start-up nation, rien n’est plus précieux que votre personnalité. Vous êtes unique, vous êtes l’élite, mais plus important encore : vous êtes vous-mêmes. Votre entreprise est irremplaçable et exceptionnelle, tout comme vous. Posez votre main sur le scanner de personnalité pour générer votre startup de demain. 


//5 Imprimer

4.jpg

Objectifs:
Imprimer un ticket résumant sa startup générée à partir des tests réalisés au préalable.

Matériels:
Panneau de bois suivant ce model Imprimante thermale «YM TECH BT-2 THERMAL PRINTER» Rouleau de papier Assemblage Shield + Arduino Mega

Principe:

Le ticket doit contenir: Le concept de start-up --> Nous + “Variable1” + “Variable2” + “Variable3”+»Variable4» Le rôle dans la start-up --> Variable1 La cause de faillite --> La durée d’existence de la startup --> 24 mois

Speech:

Un bon startupper doit être audacieux et prêt à relever tous les défis : vous n’avez peur de rien. Alors prenez votre courage à 2 mains et restez appuyé sur ce bouton pendant 3 secondes. 

Rester appuyé au min 3 s sur un bouton sous un piège à souris.
6.jpg

Branchement & Programmation

29894325 1825262810872437 162955786 o.png


//START UP GENERATOR // le Cube connecté qui prédit l'avenir de votre startup

//LIBRAIRIES IMPRIMANTES : les ports peuvent être redéfinis ci-dessous

  1. include "SoftwareSerial.h"
  2. include "Adafruit_Thermal.h"
  3. include <avr/pgmspace.h>

//LIBRAIRIES AUDIO : attention à ne pas utiliser les ports ci-dessous

  1. include <SPI.h>
  2. include <Adafruit_VS1053.h>
  3. include <SD.h>
  4. define BREAKOUT_RESET 9 // VS1053 reset pin (output)
  5. define BREAKOUT_CS 10 // VS1053 chip select pin (output)
  6. define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output)

// These are the pins used for the music maker shield

  1. define SHIELD_RESET -1 // VS1053 reset pin (unused!)
  2. define SHIELD_CS 7 // VS1053 chip select pin (output)
  3. define SHIELD_DCS 6 // VS1053 Data/command select pin (output)

// These are common pins between breakout and shield

  1. define CARDCS 4 // Card chip select pin

// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt

  1. define DREQ 3 // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = // create shield-example object! Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);


//BOUTONS

//bouton piste 1 const int buttonPin1 = 39; int buttonState1 = 0;

//bouton piste 2 const int buttonPin2 = 2; int buttonState2 = 0;

//bouton piste 3 const int buttonPin3 = 16; int buttonState3 = 0;

//capteur imprimer const int buttonPressure = A0; int pressureState = 0;

//tweet //const int tweetPin = 41; //int tweetState = 0;

//led const int ledPin13 = 13;


//PRINTER //Paramètres de l'imprimante String s; int n; boolean b = false; Adafruit_Thermal printer(5, 22); //ports utilisés : 5 = fil rouge, 22 = fil jaune;


//millis unsigned long previousMillis = 0; unsigned long currentMillis; unsigned long interval = 5000; //delay pour la led


void setup() {

 //PRINTER
 Serial.begin(9600);
 printer.begin();
 //Initialisation entrée et sorties
 pinMode(ledPin13, OUTPUT);
 pinMode(buttonPin2, INPUT);
 pinMode(buttonPin1, INPUT);
 pinMode(buttonPressure, INPUT);
 pinMode(buttonPin3, INPUT);
 //pinMode(tweetPin, OUTPUT);
 //AUDIO
 if (! musicPlayer.begin()) { // initialise the music player
   Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
   while (1);
 }
 Serial.println(F("VS1053 found"));
 if (!SD.begin(CARDCS)) {
   Serial.println(F("SD failed, or not present"));
   while (1);  // don't do anything more
 }
 // list files
 printDirectory(SD.open("/"), 0);
 musicPlayer.setVolume(20, 20);
 musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);  // DREQ int

}

void loop() {

 //Initiatlisation - Vérifications
 buttonState1 = digitalRead(buttonPin1);
 buttonState2 = digitalRead(buttonPin2);
 buttonState3 = digitalRead(buttonPin3);
 //tweetState = digitalRead(tweetPin);
 pressureState = analogRead(buttonPressure);
 //Serial.print("val:");
 //Serial.println(pressureState);
 //algorithme
 //PART 1 : La piste 1 se lance
 if (buttonState1 == HIGH) {
   digitalWrite(ledPin13, HIGH);
   musicPlayer.playFullFile("track001.mp3");
   Serial.println("bouton1appuyé");
 }
 //PART 2 : la piste 2 se lance
 if (buttonState2 == HIGH) {
     musicPlayer.playFullFile("track002.mp3");
      Serial.println("bouton2appuyé");
   /*au bout de 3 secondes la led s'allume
   currentMillis = millis();
   if (currentMillis - previousMillis >= interval) {
     previousMillis = currentMillis;
     //Led
     digitalWrite(ledPin13, LOW);
     unsigned long currentMillis = millis();
   }
   musicPlayer.playFullFile("track003.mp3");*/
 }


 //PART 3 : la piste 3 se lance
 //Serial.println(buttonState3); 
 if (buttonState3 == HIGH) {
   digitalWrite(ledPin13, HIGH);
   musicPlayer.playFullFile("track004.mp3");
    Serial.println("bouton3appuyé");
 }


 //PART 4 : l'imprimante imprime + envoie IFFTT
 if (pressureState > 500) {
   digitalWrite(ledPin13, LOW);
   b = true; // lancer l'impression
   //tweetState = 1;
   //tweetState = 0;
 }


 //FONCTION IMPRIMANTE
 if (b) {
   Serial.println("button2");
   //Serial.println("hello");
   n = random(34);
   ligne1(n);
   printer.feed(1);
   printer.boldOn(); 
   n = random(34);
   ligne2(n);
   n = random(34);
   printer.boldOff();//text en gras
   ligne3(n);
   printer.feed(1); 
   n = random(34);
   ligne4(n);
   printer.feed(1); 
   n = random(34);
   ligne5(n);
   printer.feed(5);  //space
   printer.sleep();      // Tell printer to sleep
   printer.wake();       // MUST call wake() before printing again, even if reset
   printer.setDefault(); // Restore printer to defaults
   b = false;
 }


}


/// File listing helper void printDirectory(File dir, int numTabs) {

 while (true) {
   File entry =  dir.openNextFile();
   if (! entry) {
     // no more files
     //Serial.println("*nomorefiles*");
     break;
   }
   for (uint8_t i = 0; i < numTabs; i++) {
     Serial.print('\t');
   }
   Serial.print(entry.name());
   if (entry.isDirectory()) {
     Serial.println("/");
     printDirectory(entry, numTabs + 1);
   } else {
     // files have sizes, directories do not
     Serial.print("\t\t");
     Serial.println(entry.size(), DEC);
   }
   entry.close();
 }

}


//imprimer une led : test


 /*buttonState1 = digitalRead(22);
   //Serial.println(buttonState1);
   if (buttonState1 == HIGH) {
   // turn LED on:
   digitalWrite(ledPin13, HIGH);
   } else {
   // turn LED off:
   digitalWrite(ledPin13, LOW);
   }*/