C'est le printemps ! Fleur.gif

Passerelle.Infini 2025 : Communication non verbale démocratique : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(photos de la réalisation du projet)
(code)
 
Ligne 73 : Ligne 73 :
 
</gallery>
 
</gallery>
  
 +
==fichier decoupe laser==
 +
[[Media:BoitecomNV.svg|clic pour telecharger le fichier des petits boites]]
 
==code==
 
==code==
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  

Version actuelle datée du 24 mars 2025 à 19:51

résumé du projet

Notre projet est un système de communication non verbale destiné aux "groupes-classes" : le contentiomètre. Celui-ci permet aux jeunes de s'exprimer spontanément et anonymement, et de se rendre compte du mood du groupe.

membres du projet

Leds aléatoires.jpg

Bibliographie et webographie sur le projet

Mettre ici des exemples trouvés sur le web de projets qui ressemblent et des technologies qui s'en rapprochent ou qui peuvent servir d'inspiration.

pistes explorée, abandonnées ou fertiles

Au démarrage du projet nous avons envisagé plusieurs idées et exploré diverses pistes. Notre idée de départ était de fabriquer un objet qui suscite la communication par la découverte de l'objet. Nous voulions créer:

  • un objet ludique
  • qui nécessite d'être 2 pour fonctionner.
  • qui implique une collaboration
  • avec pour but l'inclusion.
  • qui pourrait fonctionner en tandem.
  • qui serait dans l'espace public.
  • ce serait un objet transportable.

Nous avons pensé à conceptualiser:

  • Un dispositif où il faudrait être 2 pour ouvrir une porte (portes de tram, porte donnant accès à un endroit de l'espace public - Capucins, MJC...) qui s'adapterait à n'importe quel système d'ouverture de porte. Ce dispositif fonctionnerait avec des aimants ou des capteurs thermiques.
  • un dispositif ou système ( pourquoi pas de bascule?) pour descendre où monter les escaliers
  • un dispositif pour bancs publics.

Nous avons ensuite repenser notre public cible et redéfini le lieu où notre objet serait utilisé et décidé que cet objet serait dans un foyer, une cantine, un EPHAD ou une école. Finalement nous avons choisi les ados comme public cible et de penser notre objet pour un lycée (cantine, foyer de jeune, classe) Nous avons envisager d'imaginer un objet qui s'inscrit dans un rituel:

  • un dispositif où il faut être deux pour activer la machine à café/ ou machine à smoothie.
  • un dispositif pour fontaine à eau
  • un système qui apporte les plateaux repas tout seul au self
  • un canapé inclinable où il faut âtre deux et communiquer sans se voir pour l'activer...

Après réflexion, nous nous sommes dit que toutes ces idées avait toutes une notions de "tortures" ou du moins de contraintes.

Nous nous sommes donc recentrés sur les caractéristiques des adolescents:

  • Les adolescents ont la "flemme".
  • C'est une période où on a facilement honte et où on a peur d'être jugé par le groupe.
  • Les adolescents ont du mal à exprimer verbalement vis à vis de leurs émotions et il leur est difficile de prendre la parole devant les autres.

De ces réflexions ont émergé l'idée de créer un système qui permettrait aux jeunes d'exprimer anonymement et spontanément leurs émotions de manière non verbale. Dans la classe, on installe un boitier doté de boutons (ou d'un potentiomètre) sur chaque table qui est relié à un tableau de leds lumineuses affichées au dessus du tableau. Chaque jeune est libre d'appuyer sur le bouton qui correspond à son mood du moment: content/ pas compris/ pas d'accord et ainsi de s'exprimer anonymement. On aurait ainsi le mood de la classe.

prototype qu'on souhaite réaliser

Notre prototype sera un système composé d'un tableau lumineux associé à des consoles de commandes. Celles-ci afficheront des leds de couleurs différentes avec des formes différentes. Le tableau est composé de 4 sections de 9 leds et 4 consoles avec chacune un potentiomètre qui contrôle la lumière donc l'émotion que l'on veut exprimer.

NOTICE Le contentiomètre est un outil d'expression démocratique et spontané pour les groupes-classes. Fabrication :

1) Conception

  • Découper et assembler un nombre de boitiers correspondants au nombre des membres du groupe.
  • Effectuer les branchements électroniques et téléverser le programme sur le arduino.
  • Afficher le panneau led au dessus du tableau.

2) Installation:

  • Disposer un boîtier sous chaque table.
  • Accrocher le panneau led au mur

Mise en application :

  • Présenter l'outil au groupe ;expliquer qu'il leur permet de communiquer silencieusement et instantanément une émotion au groupe en réaction avec ce qui se passe en classe.
  • Pour exprimer son émotion chaque élève à accès à un bouton pouvant se positionner en trois états. Un état correspond à une émotion qui s'affichera en direct sur une des sections du panneau de led.

Utilisations de bases et dérivées :

  • Possibilité d'établir un "code de l'émotion" commun au groupe classe (ex : rose=content, jaune=pas content, bleu=confus).
  • Possibilité de proposer au groupe de décider du code, par discussion ou en laissant se faire un accords tacite.
  • Possibilité de complexifier le contentiomètre par ajout de couleurs ou programmation de formes afin d'inclure différentes acuités visuelles.

photos de la réalisation du projet

fichier decoupe laser

clic pour telecharger le fichier des petits boites

code

  1  
  2 /////////////////////////////////////////////
  3 // communication non verbale démocratique  //
  4 /////////////////////////////////////////////
  5  /* matériel
  6  arduino uno,
  7  potentiomètre
  8  marice de led 16X16
  9 
 10  projet conçu et réalisé lors du hacakthon Passerelle.Infini en Mars 2025
 11  projet : https://wiki.lesfabriquesduponant.net/index.php?title=Passerelle.Infini_2025_:_Communication_non_verbale_d%C3%A9mocratique
 12     ___
 13  / ___ \
 14 |_|   | |
 15      /_/ 
 16      _   ___   _ 
 17     |_| |___|_| |_
 18          ___|_   _|
 19         |___| |_|
 20 Les petits Débrouillards - mars 2025 CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
 21 
 22  */
 23 #include <Adafruit_NeoPixel.h>
 24 
 25 #define broche 9 // broche 9 de l'Arduino UNO sur laquelle est connecté le ruban
 26 
 27 // Nombre de led de matrice de led
 28 #define nbpixels 256
 29 
 30 // Lors de la configuration de la bibliothèque NeoPixel, 
 31 // nous lui indiquons combien de pixels,
 32 // et quelle broche utiliser pour envoyer des signaux.
 33 Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);
 34 // pour configurer le ruban :
 35 // nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban)
 36 // Les différents types de ruban :
 37 //   NEO_KHZ800  800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812)
 38 //   NEO_KHZ400  400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811)
 39 //   NEO_GRB     Pixels cablés pour GRB bitstream (la plupart des produits Neopixel)
 40 //   NEO_RGB     Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2)
 41 //   NEO_RGBW    Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW)
 42 
 43 #define delai 30 // durée de la pause en millisecondes
 44 
 45 const int brochePotard1 = A0; // la broche du potentiomètre
 46 int valPot1; // valeur mesurée pour le potentiomètre
 47 int val1;
 48 int temps1;
 49 const int brochePotard2 = A1; // la broche du potentiomètre
 50 int valPot2; // valeur mesurée pour le potentiomètre
 51 int val2;
 52 int temps2;
 53 const int brochePotard3 = A2; // la broche du potentiomètre
 54 int valPot3; // valeur mesurée pour le potentiomètre
 55 int val3;
 56 int temps3;
 57 const int brochePotard4 = A3; // la broche du potentiomètre
 58 int valPot4; // valeur mesurée pour le potentiomètre
 59 int val4;
 60 int temps4;
 61 int humeur; // 1 = pas compris/confus/perdu - 2 - pas d'accord - 3 - content/d'accord
 62 int R=0; // 1 = bleu (G,B), 2 = jaune(R,G) 3 = rose (R,B)
 63 int G=0;
 64 int B=0;
 65 unsigned long debut;
 66 
 67 void setup() {
 68   Serial.begin(9600); //démarrae la communication série
 69   pinMode(brochePotard1, INPUT);
 70   pinMode(brochePotard2, INPUT);
 71   pinMode(brochePotard3, INPUT);
 72   pinMode(brochePotard4, INPUT);
 73   pixels.begin();           // INITIALISE l'object ruban NeoPixel
 74   pixels.show();            // éteint tout les pixels aussi vite que possible.
 75   pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255)
 76   debut = millis();
 77   val1 = analogRead(brochePotard1);
 78   val2 = analogRead(brochePotard2);
 79   val3 = analogRead(brochePotard3);
 80   val4 = analogRead(brochePotard4);
 81 }
 82 
 83 
 84 void loop() {
 85   valPot1 = analogRead(brochePotard1);
 86   //affichage des valeurs dans la console
 87   Serial.print("valPot1 : ");
 88   Serial.println(valPot1);
 89 
 90   valPot2 = analogRead(brochePotard2);
 91   //affichage des valeurs dans la console
 92   Serial.print("valPot2 : ");
 93   Serial.println(valPot2);
 94 
 95   valPot3 = analogRead(brochePotard3);
 96   //affichage des valeurs dans la console
 97   Serial.print("valPot3 : ");
 98   Serial.println(valPot3);
 99 
100   valPot4 = analogRead(brochePotard4);
101   //affichage des valeurs dans la console
102   Serial.print("valPot4 : ");
103   Serial.println(valPot4);
104 
105   if (abs(val1-valPot1)>10){
106   val1=valPot1;
107   choixHumeur(valPot1, 1);
108   temps1 = millis();
109   }
110   delay(100);
111   if (abs(val2-valPot2)>10){
112   val2=valPot2;
113   choixHumeur(valPot2, 2);
114   temps2 = millis();
115   }
116   delay(100);
117   if (abs(val3-valPot3)>10){
118   val3=valPot3;
119   choixHumeur(valPot3, 3);
120   temps3 = millis();
121   }
122   delay(100);
123   if (abs(val4-valPot4)>10){
124   val4=valPot4;
125   choixHumeur(valPot4, 4);
126   temps4 = millis();
127   }
128   delay(100);
129 
130   if ((millis()-temps1) > 120000){
131   R=0; G=0; B=0;
132   carreBD();  
133   pixels.show();   // met à jour le ruban
134   }
135 
136     if ((millis()-temps2) > 120000){
137   R=0; G=0; B=0;
138   carreBG();  
139   pixels.show();   // met à jour le ruban
140   }
141 
142     if ((millis()-temps3) > 120000){
143   R=0; G=0; B=0;
144   carreHD();  
145   pixels.show();   // met à jour le ruban
146   }
147 
148     if ((millis()-temps4) > 120000){
149   R=0; G=0; B=0;
150   carreHG();  
151   pixels.show();   // met à jour le ruban
152   }
153 }
154 
155 void choixHumeur(int hum, int pot)
156 {
157 //==choix de l'humeur==
158 if (hum<=330) {
159   humeur=1; // 1 = pas compris/confus/perdu - 2 - pas d'accord - 3 - content/d'accord
160   Serial.print("humeur : ");
161   Serial.println(humeur);
162   R = 0;G= 50; B = 50;
163 }
164 if ((331<=hum) && (hum<=661)) {
165   humeur=2; // 1 = pas compris/confus/perdu - 2 - pas d'accord - 3 - content/d'accord
166   Serial.print("humeur : ");
167   Serial.println(humeur);
168   R = 50;G= 50; B = 0;
169 }
170 if ((662<=hum) && (hum<=1023)) {
171   humeur=3; // 1 = pas compris/confus/perdu - 2 - pas d'accord - 3 - content/d'accord
172   Serial.print("humeur : ");
173   Serial.println(humeur);
174   R = 50;G= 0; B = 50;
175 }
176 if (pot==1){
177   carreBD();
178 }
179 if (pot==2){
180   carreBG();
181 }
182 if (pot==3){
183   carreHD();
184 }
185 if (pot==4){
186   carreHG();
187 }
188   pixels.show();   // met à jour le ruban
189 }
190 
191 void carreBD()
192 {
193   for(int i=0; i<=7; i++) { // Les pixels sont numérotés de 0 à ...
194   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
195   }
196   for(int i=24; i<=39; i++) { // Les pixels sont numérotés de 0 à ...
197   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
198   }
199     for(int i=56; i<=71; i++) { // Les pixels sont numérotés de 0 à ...
200   pixels.setPixelColor(i, pixels.Color(R, G, B));  
201   }
202     for(int i=88; i<=103; i++) { // Les pixels sont numérotés de 0 à ...
203   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
204   }
205     for(int i=120; i<=127; i++) { // Les pixels sont numérotés de 0 à ...
206   pixels.setPixelColor(i, pixels.Color(R, G, B));  
207   }
208 }
209 
210 void carreBG()
211 {
212   for(int i=128; i<=135; i++) { // Les pixels sont numérotés de 0 à ...
213   pixels.setPixelColor(i, pixels.Color(R, G, B));  
214   }
215   for(int i=152; i<=167; i++) { // Les pixels sont numérotés de 0 à ...
216   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
217   }
218     for(int i=184; i<=199; i++) { // Les pixels sont numérotés de 0 à ...
219   pixels.setPixelColor(i, pixels.Color(R, G, B));  
220   }
221     for(int i=214; i<=231; i++) { // Les pixels sont numérotés de 0 à ...
222   pixels.setPixelColor(i, pixels.Color(R, G, B));  
223   }
224     for(int i=248; i<=255; i++) { // Les pixels sont numérotés de 0 à ...
225   pixels.setPixelColor(i, pixels.Color(R, G, B));  
226   }
227 }
228 
229 void carreHD()
230 {
231   for(int i=8; i<=23; i++) { // Les pixels sont numérotés de 0 à ...
232   pixels.setPixelColor(i, pixels.Color(R, G, B));  
233   }
234   for(int i=40; i<=55; i++) { // Les pixels sont numérotés de 0 à ...
235   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
236   }
237     for(int i=72; i<=87; i++) { // Les pixels sont numérotés de 0 à ...
238   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
239   }
240     for(int i=104; i<=119; i++) { // Les pixels sont numérotés de 0 à ...
241   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
242   }
243 }
244 
245 void carreHG()
246 {
247   for(int i=136; i<=153; i++) { // Les pixels sont numérotés de 0 à ...
248   pixels.setPixelColor(i, pixels.Color(R, G, B));  
249   }
250   for(int i=168; i<=183; i++) { // Les pixels sont numérotés de 0 à ...
251   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
252   }
253     for(int i=200; i<=213; i++) { // Les pixels sont numérotés de 0 à ...
254   pixels.setPixelColor(i, pixels.Color(R, G, B)); 
255   }
256     for(int i=232; i<=247; i++) { // Les pixels sont numérotés de 0 à ...
257   pixels.setPixelColor(i, pixels.Color(R, G, B));  
258   }
259 }

ne pas toucher en dessous de ce paragraphe