StartUpGenerator : Différence entre versions
(21 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{Projet | {{Projet | ||
|status=Prototype | |status=Prototype | ||
− | |status_pub= | + | |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, | ||
}} | }} | ||
− | < | + | == Contraintes == |
− | </ | + | |
+ | Cube de 20cm * 20cm <br /> | ||
+ | |||
+ | Interactions avec l’utilisateur <br /> | ||
+ | |||
+ | 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 /> | ||
− | + | 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 == | ||
+ | '''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 59 : | Ligne 125 : | ||
'''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. 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 /> | ||
Ligne 110 : | Ligne 175 : | ||
<br /> | <br /> | ||
== //4 Personnalité == | == //4 Personnalité == | ||
+ | [[File:5.jpg|700px]] | ||
'''Objectifs:''' <br /> | '''Objectifs:''' <br /> | ||
− | + | «Lire» les lignes du doigt de l’utilisateur. | |
− | Capter | + | 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 /> | '''Matériels:''' <br /> | ||
− | Panneau de bois suivant ce model | + | Panneau de bois suivant ce model |
− | + | Anneau LED «NEO PIXEL RING» | |
− | + | Capteur de pression rond | |
− | + | Haut-parleur | |
+ | <br /> | ||
'''Principe:''' <br /> | '''Principe:''' <br /> | ||
− | <capter | + | Si l’utilisateur pose son doigt |
− | + | <capter une force> | |
− | => | + | => collier de Led s’allume pendant 5 sec |
− | => Joue Piste | + | => 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 /> | '''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 == | + | |
+ | == //5 Imprimer == | ||
+ | [[File:4.jpg|700px]] | ||
+ | |||
'''Objectifs:''' <br /> | '''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 /> | '''Matériels:''' <br /> | ||
− | Panneau de bois suivant ce model - | + | Panneau de bois suivant ce model |
− | + | Imprimante thermale «YM TECH BT-2 THERMAL PRINTER» | |
− | + | Rouleau de papier | |
− | + | Assemblage Shield + Arduino Mega <br /> | |
'''Principe:''' <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(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | //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); | ||
+ | }*/ |
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
Contributeur·ice·s
Statut du projet
Prototype
Statut de la publication
Publié
License
CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France
Inspiration
Post Tumblr & StartUp nation
Fichiers source
Machines
Matériaux
Lien
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.
Création de la maquette finale découpée au laser avec un système d’emboitement par encoches.
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
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é
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
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.
Branchement & Programmation
//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(); }
}
//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); }*/