Passerelle.Infini 2023 : Camellia Sensibilis : Différence entre versions
(→pistes explorée, abandonnées ou fertiles) |
(→ne pas toucher en dessous de ce paragraphe) |
||
Ligne 102 : | Ligne 102 : | ||
Savoirs faire | Savoirs faire | ||
*Codeur pour associer le capteur à l’actionneur | *Codeur pour associer le capteur à l’actionneur | ||
+ | |||
+ | ==code== | ||
+ | <pre> | ||
+ | /* | ||
+ | * capteurs | ||
+ | - fin de course | ||
+ | - distance HC-SR04 | ||
+ | - température DS18B20 | ||
+ | |||
+ | Actionneurs : | ||
+ | - rubans de LED | ||
+ | - lecteurs MP3 | ||
+ | - vibreur | ||
+ | |||
+ | Scenario : | ||
+ | distance -> ruban de led | ||
+ | fin de course -> lecture aléatoire de son | ||
+ | temperature -> vibrations | ||
+ | */ | ||
+ | // Appel des Bibliuothèques | ||
+ | //Capteur de température DS18B20 | ||
+ | #include <OneWire.h> | ||
+ | #include <DallasTemperature.h> | ||
+ | |||
+ | // Ruban de Led | ||
+ | #include <Adafruit_NeoPixel.h> | ||
+ | |||
+ | // Lecteur MP3 | ||
+ | #include <SoftwareSerial.h> | ||
+ | #include <DFRobotDFPlayerMini.h> | ||
+ | int morceau=1; // numéro du morceau à lire de 1 à 5 | ||
+ | |||
+ | // Capteur de distance HC-SR04 | ||
+ | #include <Ultrasonic.h> | ||
+ | |||
+ | // déclaration DS18B20 - Thermomètre | ||
+ | #define ONE_WIRE_BUS 2 // broche du thermomètre | ||
+ | // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) | ||
+ | OneWire oneWire(ONE_WIRE_BUS); | ||
+ | // Pass our oneWire reference to Dallas Temperature. | ||
+ | DallasTemperature sensors(&oneWire); | ||
+ | int freq = 1000; //varaible qui fixe la fréquence du vibreur | ||
+ | |||
+ | //Capteur de distance HC-SR04 Création de l'objet ultrasonic | ||
+ | Ultrasonic ultrasonic(12, 13); //echo Broche 13, trig broche 12 | ||
+ | int calc=10; // variable de calcul de la distance | ||
+ | |||
+ | //--------Définitions Ruban de Led------------------------------------- | ||
+ | #define broche 9 // broche sur laquelle est connecté le ruban DE LED | ||
+ | |||
+ | // Nombre de led du ruban ? | ||
+ | #define nbpixels 8 | ||
+ | // Lors de la configuration de la bibliothèque NeoPixel, | ||
+ | // nous lui indiquons combien de pixels, | ||
+ | // et quelle broche utiliser pour envoyer des signaux. | ||
+ | Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800); | ||
+ | // pour configurer le ruban : | ||
+ | // nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban) | ||
+ | // Les différents types de ruban : | ||
+ | // NEO_KHZ800 800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812) | ||
+ | // NEO_KHZ400 400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811) | ||
+ | // NEO_GRB Pixels cablés pour GRB bitstream (la plupart des produits Neopixel) | ||
+ | // NEO_RGB Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2) | ||
+ | // NEO_RGBW Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW) | ||
+ | #define delai 30 // durée de la pause en millisecondes | ||
+ | |||
+ | // --------------Fin de course----------------- | ||
+ | const int brocheFinDeCourse = 11;// Broche où est connectée le fin de course. | ||
+ | // Variable d'etat | ||
+ | bool etatFinDeCourse = LOW; // Variable permettant de récupérer l'etat du fin de course | ||
+ | |||
+ | // --------------------Lecteur MP3-------------------- | ||
+ | SoftwareSerial mySoftwareSerial(5, 6); // TX, RX | ||
+ | DFRobotDFPlayerMini myDFPlayer ; // Creation du lecteur | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | //------------------------CAPTEURS------------------ | ||
+ | //Fin de course | ||
+ | pinMode(brocheFinDeCourse, INPUT_PULLUP);// Initialisation de la broche du bouton | ||
+ | |||
+ | //Capteur de température DS18B20 | ||
+ | Serial.println("Dallas Temperature IC Control Library Demo"); | ||
+ | // Start up the library | ||
+ | sensors.begin(); | ||
+ | |||
+ | // Capteur de distance HC-SR04 | ||
+ | //Rien à setup | ||
+ | |||
+ | //----------------------------ACTIONNEURS--------------- | ||
+ | //Ruban de Led | ||
+ | pixels.begin(); // INITIALISE l'object ruban NeoPixel | ||
+ | pixels.show(); // éteint tout les pixels aussi vite que possible. | ||
+ | pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255) | ||
+ | |||
+ | //Lecteur MP3 | ||
+ | mySoftwareSerial.begin(9600) ; | ||
+ | myDFPlayer.begin(mySoftwareSerial) ; | ||
+ | myDFPlayer.setTimeOut(500) ; | ||
+ | myDFPlayer.volume(30) ; // fixe le son à 10 (maximum) | ||
+ | |||
+ | // Vibreur | ||
+ | pinMode(4, OUTPUT); | ||
+ | |||
+ | //HASARD | ||
+ | randomSeed(analogRead(5)); // Lecture broche analogique 5 | ||
+ | |||
+ | } | ||
+ | |||
+ | //Gestion du temps | ||
+ | unsigned long currentMillis = 0; | ||
+ | unsigned long previousMillis = 0; | ||
+ | unsigned long previousVibMillis = 0; | ||
+ | |||
+ | void loop() { | ||
+ | //----------------les capteurs captent--------------- | ||
+ | //FIN DE COURSE | ||
+ | // Lecture de l'état du Fin de course et stockage dans la variable etatFinDeCourse | ||
+ | etatFinDeCourse = digitalRead(brocheFinDeCourse); | ||
+ | Serial.print("état du FindeCourse : "); // on écrit dans le moniteur série | ||
+ | Serial.println(etatFinDeCourse); | ||
+ | //le bouton est "tiré" vers l'état haut (HIGH) par la résistance de pullup | ||
+ | |||
+ | //DISTANCE | ||
+ | int distance = ultrasonic.read(); | ||
+ | // affichage de la distance dans le terminal série | ||
+ | Serial.print("Distance in CM: "); | ||
+ | Serial.println(distance); | ||
+ | calc = distance/10; | ||
+ | |||
+ | //Température | ||
+ | // call sensors.requestTemperatures() to issue a global temperature | ||
+ | // request to all devices on the bus | ||
+ | Serial.print("Requesting temperatures..."); | ||
+ | sensors.requestTemperatures(); // Send the command to get temperatures | ||
+ | Serial.println("DONE"); | ||
+ | // After we got the temperatures, we can print them here. | ||
+ | // We use the function ByIndex, and as an example get the temperature from the first sensor only. | ||
+ | float tempC = sensors.getTempCByIndex(0); | ||
+ | |||
+ | // Check if reading was successful | ||
+ | if(tempC != DEVICE_DISCONNECTED_C) | ||
+ | { | ||
+ | Serial.print("Temperature for the device 1 (index 0) is: "); | ||
+ | Serial.println(tempC); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Serial.println("Error: Could not read temperature data"); | ||
+ | } | ||
+ | |||
+ | //TEMPS | ||
+ | currentMillis = millis(); | ||
+ | |||
+ | //ACTIONNEURS | ||
+ | // Distance-Ruban de led | ||
+ | if (calc<9){ | ||
+ | calc = 8-calc; | ||
+ | Serial.print("distance calc = "); Serial.println(calc); | ||
+ | for(int i=0; i<=calc; i++) { // Les pixels sont numérotés de 0 à ... | ||
+ | pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // on allume la couleur rouge à fond de la ième led | ||
+ | } | ||
+ | for(int i=calc+1; i<nbpixels; i++) { // Les pixels sont numérotés de 0 à ... | ||
+ | pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // on allume la couleur rouge à fond de la ième led | ||
+ | } | ||
+ | pixels.show(); // met à jour le ruban | ||
+ | } | ||
+ | |||
+ | |||
+ | //Fin de course - lecture MP3 Aléatoire | ||
+ | if (currentMillis - previousMillis >= 1000) { // il faut qu'il se soit passé 1 seconde entre deux lancement de musique | ||
+ | // save the last time you act | ||
+ | previousMillis = currentMillis; | ||
+ | |||
+ | if (etatFinDeCourse==0){ | ||
+ | morceau = random(1,5); | ||
+ | myDFPlayer.play(morceau); // joue le fichier son. | ||
+ | Serial.print("je joue le morceau "); Serial.println(morceau); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | //Température - fréquence de vibration | ||
+ | // la température va varier de 15 à 30°C - probablement de 17 à 25°C | ||
+ | if (tempC>19){ | ||
+ | freq = map(tempC,15,35,900,100); // à la louche | ||
+ | Serial.print("freq = "); Serial.println(freq); | ||
+ | digitalWrite(4, HIGH); | ||
+ | delay(400); | ||
+ | digitalWrite(4, LOW); | ||
+ | delay(freq); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
==ne pas toucher en dessous de ce paragraphe== | ==ne pas toucher en dessous de ce paragraphe== | ||
[[Catégorie:Hackathon]] | [[Catégorie:Hackathon]] | ||
[[Catégorie:Passerelle.infini]] | [[Catégorie:Passerelle.infini]] |
Version du 11 mars 2023 à 11:05
Sommaire
résumé du projet
Pour qui : 4 à 6 personnes (2 personnes pour le prototype)
Quoi ? Stimuler les sens Ouvrir le groupe et à l’individu Pourquoi ? Vivre collectivement et individuellement une expérience sensorielle ? Outil de connexion à ses sensations.
Ou ? Outil de médiation dans un lieu culturel scolaire
Nom : Camélia sensibilis L’arbre sensoriel
Le but : Dispositif interactif et sensoriel donnant l’illusion de vivre une expérience pour soi alors que l’on nourrit l’exprérience de l’autre.
Comment il fonctionne Le participant émet des actions qui déclenchent des expériences
Qui va l’utiliser (prototype) 2 humains
Le récit
An 2875, fruit de centaines d’années de repli sur soi, les humains ont perdu leur faculté de communication sociale et verbale.
Dans cette société aux stimulations constantes et où les surcharges cognitives sont devenues la norme, les individus ont perdu leur rapport au corps et à l’autre. Poussés par un instinct primaire dont ils ont oubliés l’origine, chacun continu de vivre solitairement en groupe. L’évolution ayant fait son œuvre, l’espèce humaine n’est plus capable de parole. Son corps demeure physiquement le même mais l’absence de stimulations sensorielles semble l’avoir rendu insensible. Prisonnier de leur esprit et sans possibilité de communiquer avec les autres, les humains ne savent plus entrer en contact, échanger, partager, vivre des expériences communes. Le sentiment d’émerveillement, la curiosité et l’envie de découverte semble disparus.
Quatre scientifiques d’une petite planète du système lunaire observent cette humanité hypo-sensible.
Comparant leurs observations avec les archives des recherches sur cette espèce, ils se rendent compte que les humains n’ont pas toujours été ainsi.
En effet, fût un temps où ils vivaient collectivement échangeant verbalement entre eux, sensible à leur environnement grâce au concept ancestrale des 5 sens.
Afin de savoir si cette capacité a complètement disparu de la nature humaine, les quatre scientifiques décident de mener une expérience.
Partant d’une ancienne linogravure de camélia, une plante antique dont on retrouve des traces dans certaines régions terrestres, elles décident d’élaborer un dispositif sensoriel expérimental. Deux humains de laboratoires ont été capturé pour l’occasion. Présentant des caractères symptomatiques de surcharge cognitive et totalement déconnectés de leur enveloppe corporelle, ils semblent être des sujets pertinents.
Leur faisant croire à une expérience individuelle visant à comprendre leurs facultés sensorielles, les scientifiques leur réservent un dessein plus complexe. En pensant réaliser des actions individuels, le sujet A va en réalité entrer en contact avec le sujet B.
Grâce à un habile stratagème pensé par les scientifiques, les sens des individus vont être stimulés afin de permettre une exploration sensorielle créatrice d’expériences communes et de lien sociaux.
A quoi l’expérience aboutira-t-elle ? Les humains ont-ils définitivement perdu leur capacité originelle à ressentir et à communiquer ? Les sujets A et B seront-ils source d’espoir pour l’humanité ?
équipe du projet
- Bella Bates
- Caroline Denos
- Morgane Hornsperger
- Sarah Hassouni
- Élément de la liste à puces
Mentor= Sarah Maillot
Bibliographie et webographie sur le projet
Mettre ici des exemples trouvés sur web de projets qui ressemblent et des technologies qui s'en rapprochent ou qui servent d'inspiration.
sonotheque.org choix de musique entre 2 et 10 secondes
pistes explorée, abandonnées ou fertiles
Recherches pour le socle
Socle installé
Organigramme de montage électronique
prototype qu'on souhaite réaliser
Matériaux
- -branches de camélias
- -tubes en cartons de différents diamètres
- -tissus
- -matériaux diverses de récupération.
- -bois contreplaquer 18MM d’épaisseur base 45 cm hauteur 42cm
Outils
- -clef USB avec du son en MP3 (libre de droits)
- -Plezzo
- -détecteur de distance
- -détecteur de température
- -led
- -haut parleur
- -vibreur
- -scie circulaire et radiale
- -scie cloche
Savoirs faire
- Codeur pour associer le capteur à l’actionneur
code
/* * capteurs - fin de course - distance HC-SR04 - température DS18B20 Actionneurs : - rubans de LED - lecteurs MP3 - vibreur Scenario : distance -> ruban de led fin de course -> lecture aléatoire de son temperature -> vibrations */ // Appel des Bibliuothèques //Capteur de température DS18B20 #include <OneWire.h> #include <DallasTemperature.h> // Ruban de Led #include <Adafruit_NeoPixel.h> // Lecteur MP3 #include <SoftwareSerial.h> #include <DFRobotDFPlayerMini.h> int morceau=1; // numéro du morceau à lire de 1 à 5 // Capteur de distance HC-SR04 #include <Ultrasonic.h> // déclaration DS18B20 - Thermomètre #define ONE_WIRE_BUS 2 // broche du thermomètre // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); int freq = 1000; //varaible qui fixe la fréquence du vibreur //Capteur de distance HC-SR04 Création de l'objet ultrasonic Ultrasonic ultrasonic(12, 13); //echo Broche 13, trig broche 12 int calc=10; // variable de calcul de la distance //--------Définitions Ruban de Led------------------------------------- #define broche 9 // broche sur laquelle est connecté le ruban DE LED // Nombre de led du ruban ? #define nbpixels 8 // Lors de la configuration de la bibliothèque NeoPixel, // nous lui indiquons combien de pixels, // et quelle broche utiliser pour envoyer des signaux. Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800); // pour configurer le ruban : // nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban) // Les différents types de ruban : // NEO_KHZ800 800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812) // NEO_KHZ400 400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811) // NEO_GRB Pixels cablés pour GRB bitstream (la plupart des produits Neopixel) // NEO_RGB Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2) // NEO_RGBW Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW) #define delai 30 // durée de la pause en millisecondes // --------------Fin de course----------------- const int brocheFinDeCourse = 11;// Broche où est connectée le fin de course. // Variable d'etat bool etatFinDeCourse = LOW; // Variable permettant de récupérer l'etat du fin de course // --------------------Lecteur MP3-------------------- SoftwareSerial mySoftwareSerial(5, 6); // TX, RX DFRobotDFPlayerMini myDFPlayer ; // Creation du lecteur void setup() { Serial.begin(9600); //------------------------CAPTEURS------------------ //Fin de course pinMode(brocheFinDeCourse, INPUT_PULLUP);// Initialisation de la broche du bouton //Capteur de température DS18B20 Serial.println("Dallas Temperature IC Control Library Demo"); // Start up the library sensors.begin(); // Capteur de distance HC-SR04 //Rien à setup //----------------------------ACTIONNEURS--------------- //Ruban de Led pixels.begin(); // INITIALISE l'object ruban NeoPixel pixels.show(); // éteint tout les pixels aussi vite que possible. pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255) //Lecteur MP3 mySoftwareSerial.begin(9600) ; myDFPlayer.begin(mySoftwareSerial) ; myDFPlayer.setTimeOut(500) ; myDFPlayer.volume(30) ; // fixe le son à 10 (maximum) // Vibreur pinMode(4, OUTPUT); //HASARD randomSeed(analogRead(5)); // Lecture broche analogique 5 } //Gestion du temps unsigned long currentMillis = 0; unsigned long previousMillis = 0; unsigned long previousVibMillis = 0; void loop() { //----------------les capteurs captent--------------- //FIN DE COURSE // Lecture de l'état du Fin de course et stockage dans la variable etatFinDeCourse etatFinDeCourse = digitalRead(brocheFinDeCourse); Serial.print("état du FindeCourse : "); // on écrit dans le moniteur série Serial.println(etatFinDeCourse); //le bouton est "tiré" vers l'état haut (HIGH) par la résistance de pullup //DISTANCE int distance = ultrasonic.read(); // affichage de la distance dans le terminal série Serial.print("Distance in CM: "); Serial.println(distance); calc = distance/10; //Température // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperatures Serial.println("DONE"); // After we got the temperatures, we can print them here. // We use the function ByIndex, and as an example get the temperature from the first sensor only. float tempC = sensors.getTempCByIndex(0); // Check if reading was successful if(tempC != DEVICE_DISCONNECTED_C) { Serial.print("Temperature for the device 1 (index 0) is: "); Serial.println(tempC); } else { Serial.println("Error: Could not read temperature data"); } //TEMPS currentMillis = millis(); //ACTIONNEURS // Distance-Ruban de led if (calc<9){ calc = 8-calc; Serial.print("distance calc = "); Serial.println(calc); for(int i=0; i<=calc; i++) { // Les pixels sont numérotés de 0 à ... pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // on allume la couleur rouge à fond de la ième led } for(int i=calc+1; i<nbpixels; i++) { // Les pixels sont numérotés de 0 à ... pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // on allume la couleur rouge à fond de la ième led } pixels.show(); // met à jour le ruban } //Fin de course - lecture MP3 Aléatoire if (currentMillis - previousMillis >= 1000) { // il faut qu'il se soit passé 1 seconde entre deux lancement de musique // save the last time you act previousMillis = currentMillis; if (etatFinDeCourse==0){ morceau = random(1,5); myDFPlayer.play(morceau); // joue le fichier son. Serial.print("je joue le morceau "); Serial.println(morceau); } } //Température - fréquence de vibration // la température va varier de 15 à 30°C - probablement de 17 à 25°C if (tempC>19){ freq = map(tempC,15,35,900,100); // à la louche Serial.print("freq = "); Serial.println(freq); digitalWrite(4, HIGH); delay(400); digitalWrite(4, LOW); delay(freq); } }