Passerelle.infini: Totem
Les petites créatures sensorielles
Sommaire
L'historique
L'idée est de réaliser des petites créatures sensorielles en utilisant les sens. En premier abord, la vue et le toucher !
Recherche de surprises, d'inattendu et de fun. L'objet va produire quelque chose de nouveau quand il sera manipulé. Un jeu de manipulation d'objets: seul mais aussi plusieurs objets assemblés.
En bref des créatures vivantes qui nous emportent dans le monde de nos sens.
Les objectifs
Découvrir ou redécouvrir un langage, avec nos sens. Pouvoir manipuler les objets (se donner le droit) Créer tout seul ou à plusieurs. Apporter de la vie, du fun
Le public
Tous le monde est concerné, des enfants aux séniors, chacun peut découvrir de nouvelles expériences en accueillant ses émotions. Les familles ou les structures d'accueil pourront utiliser ces oeuvres.
Les créatures
cube
TOUFFU
Code TOUFFU
1
2 ///////////////
3 // TOUFFU //
4 ///////////////
5 // TOUFFU est une créature réalisée dans le cadre du hackathon "Passerelle.infini" les 24 & 25 février 2022.
6 // Le hackathon "Passerelle.infini" est organisé par le Centre d'Art Passerelle, Les petits débrouillards.
7 // Avec la participation de Tyfenn Leluc - designeuse et Thibault Beugin formateur.
8
9 // Ce programme est inspiré du petit bot, un programme pédagogique
10 // des petits débrouillards ?=+ pour gérer le robot "Petit Bot"
11 // Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
12 // Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
13 // Sous licence CC-By-Sa - Les petits débrouillards.
14
15 ////////////////////////////////////////////////////////////////////////////////
16 // /!\ ATTENTION /!\ //
17 // Le code n'est pas terminé, il faut ajouter la gestion du HC-SR04 //
18 // //
19 ////////////////////////////////////////////////////////////////////////////////
20 /*
21 * D1 mini
22 BROCHAGE
23 _________________
24 / D1 mini \
25 |[ ]RST TX[ ]|
26 |[ ]A0 -GPIO RX[ ]|
27 TRIG HC-SR04 |[X]D0-16 5-D1[X]| SCL - servogauche
28 ECHO HC-SR04 |[X]D5-14 4-D2[X]| SDA - servodroit
29 |[ ]D6-12 0-D3[ ]|
30 |[ ]D7-13 2-D4[ ]| LED_BUILTIN
31 |[ ]D8-15 GND[X]|
32 |[ ]3V3 . 5V[X]|
33 | +---+ |
34 |_______|USB|_______|
35
36 _________________________
37 | ___ (__) ___ |
38 | // \\ HC-SR04 // \\ |
39 ||( )| |( )||
40 | \\___// \\___// |
41 | VCC TRIG ECHO GND |
42 |------[X][X][X][X]-------|
43 | |
44 D0 D5
45
46 Matériel :
47 - des fils dupont.
48 - un shield petit bot
49 - un Wemos D1 mini
50 - 2 servo à rotation continue
51 - un capteur de distance HC-SR04
52 - un shield batterie 18650
53 - une batterie 18650
54 - un cable USB
55
56 Schéma de l'Arduino en ASCII-ART CC-By http://busyducks.com/ascii-art-arduinos
57 Sous licence CC-By-Sa (http://creativecommons.org/licenses/by-nc-sa/3.0/)
58 */
59 /*
60 ___
61 / ___ \
62 |_| | |
63 /_/
64 _ ___ _
65 |_| |___|_| |_
66 ___|_ _|
67 |___| |_|
68 Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
69 Antony Le Goïc-Auffret 25 février 2022
70 */
71
72 // on appelle la bibliothèque qui gère le Wemos D1 mini
73 #include <ESP8266WiFi.h>
74
75 // Gestion du Wifi
76 #include <ESP8266WebServer.h>
77 #include <DNSServer.h>
78 #include <ESP8266mDNS.h>
79 #include <WiFiClient.h>
80
81 // Definition du WiFi
82 const char *nomDuReseau = "TOUFFU"; // Nom du réseau wifi du petit bot
83 const char *motDePasse = ""; // Mot de passe du réseau wifi du petit bot
84 // ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon
85 // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !).
86 //création du monServeur
87 ESP8266WebServer monServeur(80); // Création de l'objet monServeur
88
89 //Gestion des servomoteurs
90 #include <Servo.h> //appel de la bibliothèque qui gère les servomoteurs
91 // création des servomoteurs
92 Servo servogauche; // Nom du servo qui gère la première roue
93 Servo servodroit; // Seconde roue
94
95 //déclaration des Variables
96 //int --- en cours
97 int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...).
98
99 void setup(){
100 delay(1000);
101 Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
102 Serial.println();
103 Serial.println();
104 configDuWifi();
105 servodroit.detach(); // Place les servos hors tension
106 servogauche.detach();
107 pinMode(LED_BUILTIN, OUTPUT); //met la led du Wemos en sortie
108 digitalWrite(LED_BUILTIN, LOW); //met la led du Wemos sur le niveau bas ce qui l'allume.
109 }
110
111 void loop(){
112 val = -1;
113 monServeur.handleClient();
114 }
115
116 ///////////////////////GESTION DES INSTRUCTIONS///////////////////////////
117 void GestionDesClics() {
118 monServeur.on("/avance", HTTP_GET, []() {
119 val = 1;
120 Serial.println("avance");
121 redactionPageWeb();
122 });
123
124 monServeur.on("/recule", HTTP_GET, []() {
125 val = 2;
126 Serial.println("recule");
127 redactionPageWeb();
128 });
129
130 monServeur.on("/droite", HTTP_GET, []() {
131 val = 4;
132 Serial.println("droite");
133 redactionPageWeb();
134 });
135
136 monServeur.on("/gauche", HTTP_GET, []() {
137 val = 3;
138 Serial.println("gauche");
139 redactionPageWeb();
140 });
141
142 monServeur.on("/stop", HTTP_GET, []() {
143 val = 0;
144 Serial.println("stop");
145 redactionPageWeb();
146 });
147
148 monServeur.on("/", HTTP_GET, []() {
149 val = -1;
150 redactionPageWeb();
151 });
152
153 }
154
155 ///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT/////////////////////////////////////////
156 void redactionPageWeb(){
157 // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
158 String pageWeb = "<!DOCTYPE HTML>\r\n";
159 pageWeb += "<html>\r\n";
160 pageWeb += "<center>"; //On ouvre la balise qui va centrer les boutons
161 pageWeb += "<h1 style=\"font-size:300%;\"\> Le petit bot ";
162 pageWeb += "<style type=\"text/css\"> body { color: #212121; background-color: #CC0C59 } </style>";
163
164 // On finalise l'écriture de la page Web et on donne les instructions aux servos
165 pageWeb += instruction(val); // pour cela on appelle la fonction "instruction"
166
167 // On termine l'écriture de la page Web
168 pageWeb += "</h1>";
169 pageWeb += "<br>"; //aller à la ligne
170 pageWeb += "<br>"; //aller à la ligne
171 pageWeb += "<a href=\"/stop\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Stop </button></a>\r\n"; // créer un bouton "Stop", qui envoie sur l'URL /stop
172 pageWeb += "<a href=\"/avance\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Avance </button></a>\r\n"; // créer un bouton "Avance"...
173 pageWeb += "<a href=\"/recule\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Recule </button></a>\r\n";
174 pageWeb += "<a href=\"/droite\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Droite </button></a>\r\n";
175 pageWeb += "<a href=\"/gauche\"\"><button style=\"font-size:200%; width: 18%; background-color:#0CCC16; border-radius: 12px\"\>Gauche </button></a><br />\r\n";
176 pageWeb += "</center>"; // tout est centré sur la page
177 pageWeb += "</html>\n"; //Fin de la page Web
178
179 // On envoie la page web
180 monServeur.send(200, "text/html", pageWeb);
181 delay(1);
182 }
183
184 ///////////////////INSTRUCTIONS/////////////////////////////////////////////////////////
185 String instruction(int valeur){ //Cette fonction traite les instructions qui sont reçues
186 int gauche; // Variable dont la valeur 180 ou 0 fera tourner le servo gauche dans un sens ou l'autre
187 int droite; // Idem pour le servo droit
188 String completePage; // Déclaration de la chaine de caractère qui sera renvoyée par cette fonction pour compléter la page web
189 switch(valeur){ // En fonction de la variable valeur on va donner un ordre aux servos
190 case 0 : // et un texte à la chaine de caractère "completePage"
191 completePage = " est a l’arrêt ";
192 droite = 90;
193 gauche = 90;
194 break;
195 case 1 :
196 completePage = " avance ";
197 droite = 180;
198 gauche = 0;
199 break;
200 case 2 :
201 completePage = " recule ";
202 droite = 0;
203 gauche = 180;
204 break;
205 case 3 :
206 completePage = " tourne a gauche ";
207 droite = 180;
208 gauche = 180;
209 break;
210 case 4 :
211 completePage = " tourne a droite ";
212 droite = 0;
213 gauche = 0;
214 break;
215 // que faire du cas ou val = -1 ? marquer ici ce qui doit être fait.
216 }
217 servogauche.attach(5); // Broche D1
218 servodroit.attach(4); // Broche D2
219 servogauche.write(gauche);
220 servodroit.write(droite);
221 return completePage; // on renvoie la chaine de caractère pour compléter la page web
222 }
223 ////////////////////////CONFIGURATION WIFI///////////////////////////////////////////////
224 void configDuWifi(){ // Fonction de configuratio du Wifi
225 WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
226 WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
227 MDNS.begin(nomDuReseau); // gérer les DNS ce qui rendra votre petit bot accessible
228 MDNS.addService("http", "tcp", 80); // via http://nomDuReseau.local
229 IPAddress monIP = WiFi.softAPIP(); // on récupère l'adresse IP du petit Bot
230 Serial.print("Adresse IP de ce Point d'Accès : ");
231 Serial.println(monIP); // on l'écrit sur le moniteur série
232 GestionDesClics();
233 monServeur.begin(); //Démarrage du monServeur
234 Serial.println("Serveur HTTP démarré");
235 return; // on retourne à l'endroit ou la fonction a été appelée.
236 }
La Goule à facette
Nénuphar
Le nénuphar est basé sur une forme pre-existante : https://www.instructables.com/Blooming-Marvelous-Flower-Lamp/ A nécessité près de 20h d'impression 3D (beaucoup de pièces) à partir des fichiers 3D trouvés ici : https://www.thingiverse.com/thing:1805365