Passerelle.Infini 2025 : MOUMOUNAN
Sommaire
résumé du projet
MOUMOUNA - dérivé du mot câliner "moumounan" en breton - est un objet interactif distributeur de câlins à distance. A l'échelle de notre prototype celui-ci peut être déployé dans l'espace familial ou à taille humaine disposé dans l'espace public.
Le principe : Enlacer cet objet textile afin de faire baisser son anxiété ou trouver du réconfort. La pression contre son corps active Moumouna qui émet une douce vibration et s'illumine. Cet étreinte envoie un signal au deuxième "moumouna" disposé dans un autre espace ou une autre ville, qui s'illumine en attendant un câlin en réponse. Les vibrations annoncent que deux personnes s'enlacent par Moumouna interposé.
Un QR code est imprimé sur les deux objets qui vous renvoie vers un bande sonore (bruits de vagues) à télécharger pour renforcer l'expérience du câlin.
membres du projet
Aude Mouillot - Catherine Huve - Mélissa Rosingana - Claire Denieul
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.
- calinothérapie
https://www.24heures.ch/les-bienfaits-de-la-calinotherapie-expliques-par-une-experte-803631900339
pistes explorée, abandonnées ou fertiles
Inspiration Oeuvre de Catherine Huve " LE GRAND HUG " textiles, mixtes - Dimensions: 40x70cm, 2024
prototype qu'on souhaite réaliser
PROTOTYPE EN MOUSSE DES DEUX MOUMOUNA
PROTOTYPE TISSUS
COUTURE DU PROTOTYPE FINAL
REMPLISSAGE AVEC COPEAUX DE BOIS ET COTON
BOITE NUMERIQUE
![]()
Bande LED
Vibreur
![]()
ASSEMBLAGE DE NOS PROTOTYPES
PROTOTYPE FINAL
code
1
2 /////////////////////////
3 // POCL Poke //
4 /////////////////////////
5 /*
6 * Un POCL imaginé et réalisé au Hackathon POCL à l'édulab Rennes 2 les 9 et 10 décembre 2021.
7 *
8 * Difficultés :
9 * Configurez le logiciel Arduino pour gérer la carte D1 mini (ESP8266).
10 * Intégrer les biobliothèues requises par le projet :
11 ** #include <MQTT.h> -> pour gérer le protocole de communication, c'est la bibliothèque MQTT de Joël Gähwiler : https://github.com/256dpi/arduino-mqtt
12 ** #include <Adafruit_NeoPixel.h> -> pour gérer les rubans de led
13 ** #include <WiFiManager.h> -> Bibliothèque WiFiManager pour configurer automatiquement le réseau wifi et le mot de passe.
14 *
15 * BROCHAGE
16 _________________
17 / D1 mini \
18 - |[ ]RST TX[ ]| -
19 - |[ ]A0 -GPIO RX[ ]| -
20 |[ ]D0-16 5-D1[ ]| -
21 |[ ]D5-14 4-D2[x]| - Vibreur In
22 Bouton - |[X]D6-12 0-D3[X]| - ruban de leds
23 - |[ ]D7-13 2-D4[ ]| -
24 - |[ ]D8-15 GND[X]| - GND (Boutons, ruban de leds)
25 - |[ ]3V3 . 5V[X]| - ruban de Led
26 | +---+ |
27 |_______|USB|_______|
28
29 Matériel :
30 - des fils dupont.
31 - un ruban de led RGB WS28B12
32 - D1 mini (Wemos, LOLIN,...)
33 - bouton poussoir
34 - une alimentation 5V
35 */
36
37 /*
38 * Un travail d'équipe de :
39 * Alma Oskouei
40 * Gaëlle Bescond
41 * Tony Vanpoucke
42 * Wing-Anh Luy
43 * Antony Le Goïc-Auffret
44 ___
45 / ___ \
46 |_| | |
47 /_/
48 _ ___ _
49 |_| |___|_| |_
50 ___|_ _|
51 |___| |_|
52 Les petits Débrouillards - décembre 2021 CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
53 // Programme inspiré de celui par Joël Gähwiler
54 // https://github.com/256dpi/arduino-mqtt
55 */
56
57 #include <ESP8266WiFi.h>
58 #include <MQTT.h> // Bibliothèque MQTT par Joël Gaehwiler
59 #include <Adafruit_NeoPixel.h> // Bibliothèque NeoPixel d'Adafruit
60 #include <WiFiManager.h> // Bibliothèque WiFiManager pour configurer automatiquement le réseau wifi et le mot de passe.
61
62 WiFiClient net; //on crée l'objet WiFiClient "Net"
63 MQTTClient client;
64
65 #define BROKER_IP "debrouillards.ddns.net" //IP du serveur sur lequel est installé le Broker MQTT
66 unsigned long lastMillis = 0;
67
68 //=============élément pour le ruban de led et le bouton===============
69
70 // Broche de connexion du ruban de LED
71 #define PIN D3
72
73 const int brocheBouton = 12; //GPIO de la broche D6
74 const int vib = D2;
75
76 // Nombre de Led RDGB dans votre ruban
77 #define NUMPIXELS 13
78
79 // on configurer un riban nommé "pixels"
80 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
81
82 #define T 1 // temps pour gérer le fade du ruban
83
84 //==============================================================
85
86 void connect() {
87 Serial.print("Vérification de la connexion Wifi...");
88 while (WiFi.status() != WL_CONNECTED) {
89 Serial.print(".");
90 delay(1000);
91 }
92
93 Serial.print("\nconnexion au serveur MQTT en cours...");
94 //connection au serveur MQTT : identifiant, User, mot de passe
95
96 while (!client.connect("Antony", "poclpokou", "pokou")) {
97 Serial.print(".");
98 delay(1000);
99 }
100
101 Serial.println("\nconnecté à MQTT !");
102
103 // on s'abonne au sujet (topic) "/mou"
104 client.subscribe("/mou"); // Attention à la casse !! La casse c'est maj ou minuscule
105 Serial.println("Abonné à /mou");
106 // client.unsubscribe("/mou");// Pour se désinscrire
107 }
108
109 void messageReceived(String &topic, String &payload) {
110 digitalWrite(LED_BUILTIN, HIGH);
111 fade();
112 Serial.println("incoming: " + topic + " - " + payload);
113
114 if (payload == "calin"){
115 Serial.println("clic !");
116 digitalWrite(LED_BUILTIN, LOW);
117 delay(100);
118 digitalWrite(LED_BUILTIN, HIGH);
119 }
120 }
121
122
123 void fade() {
124 for (int sig=0; sig<3; sig++){
125 for (int b=0; b<255; b++){
126 pixels.setBrightness(b);
127
128 for(int i=0; i<NUMPIXELS; i++) {
129 pixels.setPixelColor(i, pixels.Color(250, 150, b));
130 }
131
132 pixels.show(); // On allume les rubans
133 digitalWrite(vib, HIGH);
134 delay(T);
135 }
136
137 for (int b=255; b>1; b--){ //boucle de gestion de la brillance
138 pixels.setBrightness(b);
139
140 // n'oubliez pas que le premier pixel porte le Numéro 0
141 for(int i=0; i<NUMPIXELS; i++) { // Pour chaque pixel...
142 // pixels.Color() prends les valeurs RGB de 0,0,0 jusqu'à 255,255,255
143 pixels.setPixelColor(i, pixels.Color(b, 50, 255));
144 }
145
146 pixels.show(); // on affiche les pixels
147 digitalWrite(vib, LOW);
148 delay(T);
149 }
150 }
151 }
152
153 void setup() {
154 Serial.begin(115200);
155 WiFi.mode(WIFI_STA); // la carte D1 mini est mise en mode STATION
156 WiFiManager MonReseauWifi; // on crée l'objet "MonReseauWifi"
157
158 bool res;
159 res = MonReseauWifi.autoConnect("Wifi POCL Pokou"); // le POCL diffuse un réseau wifi en accès libre nommé "Wifi POCL Pokou"
160
161 if(!res) {
162 Serial.println("La connexion n'a pas fonctionnée...");
163 }
164 else {
165 Serial.println("Vous êtes connecté au Wifi... :-)");
166 }
167
168 pixels.begin(); //on initialise le ruban "pixels"
169 pinMode(brocheBouton,INPUT_PULLUP);
170
171 pinMode(LED_BUILTIN, OUTPUT);
172 digitalWrite(LED_BUILTIN, HIGH);
173 pinMode(vib, OUTPUT);
174 digitalWrite(vib, LOW);
175
176 // on se connecte au client
177 client.begin(BROKER_IP, 1883, net); // (IP, port, Client Wfi défini plus haut)
178 client.onMessage(messageReceived);
179
180 connect();
181 }
182
183 void loop() {
184 pixels.clear(); // Set all pixel colors to 'off'
185 pixels.show();
186 digitalWrite(vib, LOW);
187
188 client.loop();
189 delay(100); // <- fixes some issues with WiFi stability
190
191
192 if (!client.connected()) {
193 connect();
194 }
195
196 // publish a message roughly every second.
197 if ( digitalRead(brocheBouton) == LOW ){
198 Serial.println("Appuis Bouton");
199 client.publish("/mou", "calin");
200 delay(250);
201 }
202 }