PAPIFAB 2024-2025
PAPIFAB est un projet de la ville Brest.
Sommaire
PAPIFAB 9 janvier
visite du CERV.
Présentation du Centre Européen de Réalité Virtuelle
- Sur le web : https://cerv.enib.fr/
Crée en 2004 (il vient de fêter ses 20 ans !), le CERV est situé sur le technopole Brest-Iroise et rassemble laboratoires, entreprises et étudiants dans un contexte multidisciplinaire. Ses chercheurs travaillent sur des thèmes de recherche autours de l’informatique, la psychologie, les mathématiques, l’histoire et les sciences de l’éducation. Le CERV est spécialisé dans les domaines de recherche liés à l’Intelligence artificielle, les simulations d’activités humaines et de phénomènes complexes, ainsi que la validation formelle et expérimentale des simulations dans un contexte de réalité virtuelle et augmentée.
Le CERV est une plateforme technologique de l'ENIB.
C'est ou ?
25 Rue Claude Chappe, 29280 Plouzané
Afficher une carte plus grande
PAPIFAB 19 décembre
des leds et du son !
PAPIFAB 14 novembre 2024 - ESCAPE GAME 2
/!\ les feuillles de présence !
Au programme : fabrication de dispositifs énigmlatiques numériques :
- Fausse Bombe à retardement
- console de potentiomètres linéaires
https://mypads2.framapad.org/p/papifab-2425-bm3f979m5
codes
Afficheur LED 4 digit display avec ESP32
1 /* compte à rebours pour ESP32 ça marche !
2 afficher 4 digitledDisplay
3 source : https://www.instructables.com/Countdown-TimerMinutes-and-Seconds-With-Arduino-an/
4
5 */
6 #include <TM1637Display.h>
7
8
9 // Countdown Timer
10 const unsigned long COUNTDOWN_TIME = 300; // 5 minutes in seconds
11
12
13 // Pins for TM1637 display module
14 #define CLK_PIN 26
15 #define DIO_PIN 27
16
17
18 TM1637Display display(CLK_PIN, DIO_PIN);
19
20
21 unsigned long startTime;
22 unsigned long currentTime;
23 unsigned long elapsedTime;
24
25
26 void setup() {
27 display.setBrightness(7); // Set the brightness of the display (0-7)
28 display.clear(); // Clear the display
29 startTime = millis(); // Record the starting time
30 }
31
32
33 void loop() {
34 currentTime = millis(); // Get the current time
35 elapsedTime = (currentTime - startTime) / 1000; // Calculate elapsed time in seconds
36
37
38 if (elapsedTime <= COUNTDOWN_TIME) {
39 unsigned long remainingTime = COUNTDOWN_TIME - elapsedTime;
40
41
42 // Display remaining time in Minutes:Seconds format
43 unsigned int minutes = remainingTime / 60;
44 unsigned int seconds = remainingTime % 60;
45 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
46
47
48 if (remainingTime == 0) {
49 // Start blinking when countdown reaches 00:00
50 while (true) {
51 display.showNumberDecEx(0, 0b01000000, true); // Display "00:00"
52 delay(500);
53 display.clear(); // Clear the display
54 delay(500);
55 }
56 }
57 }
58
59
60 delay(1000); // Wait for 1 second
61 }
afficheur LED - 4 digit display avec D1 mini
1 /*
2 Lolin (Wemos) D1 mini
3
4 _________________
5 / D1 mini \
6 |[ ]RST TX[ ]|
7 |[ ]A0 -GPIO RX[ ]|
8 - |[X]D0-16 5-D1[X]| SCL
9 SCK - |[ ]D5-14 4-D2[X]| SDA
10 CLK_PIN - MISO - |[X]D6-12 0-D3[X]|
11 DIO_PIN - MOSI - |[X]D7-13 2-D4[ ]| LED_BUILTIN
12 SS - |[ ]D8-15 GND[X]|
13 |[X]3V3 5V[ ]|
14 | +---+ |
15 |_______|USB|_______|
16
17
18
19 _______________________________________________________
20 |(O) _____ _____ _____ _____ (O)|
21 | |\\___//| |\\___//| |\\___//| |\\___//| |
22 |[ ]CLK| | | | | | | | | | | | | | | |CLK[X]|- vers D6
23 |[ ]DIO|//---\\| |//---\\| o |//---\\| |//---\\|DIO[X]|- vers D7
24 |[ ]GND|\\---//| |\\---//| o |\\---//| |\\---//|GND[X]|- vers GND
25 |[ ]5V | |___| | | |___| | | |___| | | |___| | 5V[X]|- vers 3V3
26 | |//___\\|o |//___\\|o |//___\\|o |//___\\|o |
27 |(O)_________________________________________________(O)|
28
29 Matériel :
30
31 ___
32 / ___ \
33 |_| | |
34 /_/
35 _ ___ _
36 |_| |___|_| |_
37 ___|_ _|
38 |___| |_|
39 Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
40 Antony Le Goïc-Auffret Août 2024
41 */
42 #include <TM1637Display.h>
43 // Broches pour le module TM1637 (afficheur 4 chiffre à leds 7 segments)
44 #define CLK_PIN D6
45 #define DIO_PIN D7
46 TM1637Display display(CLK_PIN, DIO_PIN);
47
48 const unsigned long COUNTDOWN_TIME = 300; // 5 minutes in seconds
49
50 unsigned long startTime;
51 unsigned long currentTime;
52 unsigned long elapsedTime;
53
54
55 void setup() {
56 // put your setup code here, to run once:
57 Serial.begin(9600);
58 display.setBrightness(7); // luminosité de l'afficheur (0-7)
59 display.clear(); // effacer l'afficheur
60 startTime = millis(); // Record the starting time
61 }
62
63 void loop() {
64 currentTime = millis(); // Get the current time
65 elapsedTime = (currentTime - startTime) / 1000; // Calculate elapsed time in seconds
66
67
68 if (elapsedTime <= COUNTDOWN_TIME) {
69 unsigned long remainingTime = COUNTDOWN_TIME - elapsedTime;
70
71
72 // Display remaining time in Minutes:Seconds format
73 unsigned int minutes = remainingTime / 60;
74 unsigned int seconds = remainingTime % 60;
75 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
76
77
78 if (remainingTime == 0) {
79 // Start blinking when countdown reaches 00:00
80 while (true) {
81 display.showNumberDecEx(0, 0b01000000, true); // Display "00:00"
82 delay(500);
83 display.clear(); // Clear the display
84 delay(500);
85 }
86 }
87 }
88
89
90 delay(1000); // Wait for 1 second
91 }
Bombe à retardement avec ESP32
1 /* compte à rebours
2 révision 17102024
3 afficher 4 digitledDisplay
4 source d'infos : https://www.instructables.com/Countdown-TimerMinutes-and-Seconds-With-Arduino-an/
5
6 ESP32 à 30 broches
7 _______________________
8 |(O) ESP32-devKit V1 (O)|
9 | WIFI-BLUETOOTH |
10 | 30 broches |
11 |[ ]EN 23-D23[ ]|
12 |[ ]VP-36 22-D22[ ]|
13 |[ ]VN-39 1-TXo[ ]|
14 |[ ]D34-34 3-RXo[ ]|
15 |[ ]D35-35 21-D21[ ]|
16 GND-accélération CàR-|[X]D32-32r 19-D19[ ]|
17 GND-Désamorce-|[X]D33-33r 18-D18[ ]|
18 -|[ ]D25-25r r5-D5[ ]|
19 Afficheur CLK-|[X]D26-26r 17-TX2[ ]|
20 Afficheur DIO-|[X]D27-27r 16-RX2[ ]|
21 |[ ]D14-14r r4-D4[ ]|
22 Piezo-|[X]D12-12r 2-D2[ ]|
23 GND-Lancement du CàR-|[X]D13-13r r15-D15[ ]|
24 |[X]GND GND[ ]|
25 |[ ]VIN 3V3[X]| /!\ Alim Afficheur + piezo
26 | EN Boot |
27 |(O)[o] +---+ [o](O)|
28 |_________|USB|_________| r pour résistances interne (PULLUP ou PULLDOWN).
29
30 ____
31 / (o) \
32 |\______/|
33 | Piezo |
34 \______/
35 | |
36 + -
37 12 GND
38
39
40 _______________________________________________________
41 |(O) _____ _____ _____ _____ (O)|
42 | |\\___//| |\\___//| |\\___//| |\\___//| |
43 |[ ]CLK| | | | | | | | | | | | | | | |CLK[X]|- vers D26
44 |[ ]DIO|//---\\| |//---\\| o |//---\\| |//---\\|DIO[X]|- vers D27
45 |[ ]GND|\\---//| |\\---//| o |\\---//| |\\---//|GND[X]|- vers GND
46 |[ ]5V | |___| | | |___| | | |___| | | |___| | 5V[X]|- vers 3V3
47 | |//___\\|o |//___\\|o |//___\\|o |//___\\|o |
48 |(O)_________________________________________________(O)|
49
50 Matériel :
51
52 ___
53 / ___ \
54 |_| | |
55 /_/
56 _ ___ _
57 |_| |___|_| |_
58 ___|_ _|
59 |___| |_|
60 Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
61 Antony Le Goïc-Auffret Août 2024
62 */
63 #include <TM1637Display.h>
64
65
66 // Compte à rebours
67 const unsigned long COUNTDOWN_TIME = 600; // 10 minutes en secondes
68 unsigned long tempsPrecedent = 0;
69 int vitesse = 1000;
70
71 //Fil
72 int brocheFilAcc = 32; //GPIO32
73 int brocheFilStop = 33;//GPIO33
74 bool stop = LOW;
75
76 //piezo
77 int piezo = 12; // GPIO12
78 unsigned long tempsPrecedentPiezo = 0;
79 // démarrage
80 int brocheLancement = 13; // GPIO13
81 bool demarre = 0;
82
83 // Broches pour le module TM1637 (afficheur 4 chiffre à leds 7 segments)
84 #define CLK_PIN 26
85 #define DIO_PIN 27
86
87
88 TM1637Display display(CLK_PIN, DIO_PIN);
89
90
91 unsigned long tempsDemarrage;
92 unsigned long tempsT;
93 unsigned long tempsEcoule;
94
95
96 void setup() {
97 Serial.begin(57600);
98 display.setBrightness(3); // luminosité de l'afficheur (0-7)
99 display.clear(); // effacer l'afficheur
100 tempsDemarrage = millis(); // stocker la valeur du temps au démarrage
101
102
103 pinMode(brocheFilAcc,INPUT_PULLUP);
104 pinMode(brocheFilStop,INPUT_PULLUP);
105 pinMode(brocheLancement,INPUT_PULLUP);
106 pinMode(piezo,OUTPUT);
107 demarre = digitalRead(brocheLancement);
108 }
109
110
111 void loop() {
112 if (demarre==0){ // teste si
113 Serial.print("état démarre : "); Serial.println(demarre);
114 demarre = digitalRead(brocheLancement);
115 tempsDemarrage = millis(); // stocker la valeur du temps au démarrage
116 }
117 else {
118 Serial.print("état démarre : "); Serial.println(demarre);
119 tempsT = millis(); // récupérer la valuer du temps au temps "t"
120 tempsEcoule = (tempsT - tempsDemarrage) / vitesse; // Calculer le temps écoulé en secondes.
121
122 //gestion du bip
123 if((tempsT-tempsPrecedentPiezo)>50){
124 digitalWrite(piezo,LOW); // éteint le buzzer
125 Serial.println("état piezo : éteint");
126 }
127
128 Serial.println(tempsEcoule);
129
130 bool coupeAcc = digitalRead(brocheFilAcc);
131 bool coupeStop = digitalRead(brocheFilStop);
132 Serial.println(coupeAcc);
133 Serial.println(vitesse);
134
135 if (coupeAcc == HIGH) { // contrôle du mauvais fil
136 vitesse=100;
137 Serial.print(coupeAcc);
138 Serial.println(vitesse);
139 }
140
141 if (coupeStop == HIGH) { // contrôle du fil qui arrête la bombe
142 stop=1;
143 Serial.print(coupeStop);
144 }
145 if (stop == 0){ // le compte à rebours fonctionne normalement tant que le fil n'est pas coupé
146 if((tempsT-tempsPrecedent)>=vitesse){
147 digitalWrite(piezo,HIGH); // allume le buzzer
148 tempsPrecedentPiezo = millis(); tempsPrecedent = millis();
149 if (tempsEcoule <= COUNTDOWN_TIME) {
150 unsigned long remainingTime = COUNTDOWN_TIME - tempsEcoule;
151
152
153 // affiche le temps restant en format Minutes:Secondes
154 unsigned int minutes = remainingTime / 60;
155 unsigned int seconds = remainingTime % 60;
156 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
157
158
159 if (remainingTime == 0) {
160 // clignote lorsque le temps arrive à 00:00
161 digitalWrite(piezo,LOW); // éteint le buzzer
162 while (true) {
163 display.showNumberDecEx(0, 0b01000000, true); // affiche "00:00"
164 delay(500);
165 display.clear(); // vide l'afficheur
166 delay(500);
167 }
168 }
169 }
170 }
171 }
172
173 if (stop==1){
174 // clignote avec la valeur de temps qu'il y a au moment ou le fil est coupé
175 digitalWrite(piezo,LOW); // éteint le buzzer
176 while (true) {
177 unsigned long remainingTime = COUNTDOWN_TIME - tempsEcoule;
178 // affiche le temps restant en format Minutes:Secondes
179 unsigned int minutes = remainingTime / 60;
180 unsigned int seconds = remainingTime % 60;
181 display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true); // affiche le temps
182 delay(500);
183 display.clear(); // vide l'afficheur
184 delay(500);
185 }
186 }
187 }
188 }
codes
potentiometre lineaire sur esp32
1 // Déclaration de la broche du potentiomètre
2 const int potPin = 34; // Utilisation de la broche ADC1 pour ESP32
3
4 // Variable pour stocker la valeur lue
5 int potValue = 0;
6
7 void setup() {
8 // Initialisation de la communication série pour l'affichage des valeurs
9 Serial.begin(115200);
10 }
11
12 void loop() {
13 // Lecture de la valeur du potentiomètre
14 potValue = analogRead(potPin);
15 // Affichage de la valeur lue sur le moniteur série
16
17 Serial.println(potValue);
18
19 // Petite pause avant de lire la valeur suivante
20 delay(100);
21 }
potentiometre lineaire et bandeau de LED sur arduino UNO
1 #include <Adafruit_NeoPixel.h>
2
3 #define LED_PIN 6 // Broche à laquelle le ruban LED est connecté
4 #define NUM_LEDS 48 // Nombre de LEDs dans le ruban
5 #define POT_PIN A0 // Broche à laquelle le potentiomètre est connecté
6
7 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
8
9 void setup() {
10 strip.begin();
11 strip.show(); // Initialise toutes les LEDs à "off"
12 Serial.begin(9600);
13 }
14
15 void loop() {
16 int potValue = analogRead(POT_PIN); // Lecture de la valeur du potentiomètre
17 int colorValue = map(potValue, 0, 710, 0, 255); // Conversion de la valeur en une plage de 0 à 255
18
19 // Détermination de la couleur en fonction de la valeur du potentiomètre
20 int red = colorValue;
21 int green = 255 - colorValue;
22 int blue = (colorValue / 4);
23
24 // Application de la couleur sur toutes les LEDs
25 for(int i=0; i<strip.numPixels(); i++) {
26 strip.setPixelColor(i, strip.Color(red, green, blue));
27 }
28 strip.show(); // Mise à jour du ruban LED
29
30 delay(100); // Petite pause avant la lecture suivante
31 }
ATTENTION ----
il faut penser a mettre a jour la bibliotheque adafruit , de bien compter le nombre de led et d'alimenter le potentiometre en 3,3V et le ruban de led en 5V
code
potentiometre lineaire et bandeau de LED sur wemos D1 mini
1 #include <Adafruit_NeoPixel.h>
2
3 #define LED_PIN D5 // Broche à laquelle le ruban LED est connecté
4 #define NUM_LEDS 15 // Nombre de LEDs dans le ruban
5 #define POT_PIN A0 // Broche à laquelle le potentiomètre est connecté
6 #define BRIGHTNESS 50 // Luminosité (0-255)
7
8 // Création de l'objet NeoPixel
9 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
10
11 void setup() {
12 strip.begin();
13 strip.setBrightness(BRIGHTNESS); // Ajustement de la luminosité
14 strip.show(); // Initialise toutes les LEDs à "off"
15 Serial.begin(115200);
16 }
17
18 void loop() {
19 int potValue = analogRead(POT_PIN); // Lecture de la valeur du potentiomètre
20 int mappedValue = map(potValue, 0, 1024, 0, 1530); // Conversion de la valeur en une plage de 0 à 1530
21
22 int red = 0, green = 0, blue = 0;
23
24 if (mappedValue < 510) {
25 // Vert à Bleu
26 green = 255 - (mappedValue % 510);
27 blue = mappedValue % 510;
28 } else if (mappedValue < 1020) {
29 // Bleu à Rouge
30 blue = 255 - (mappedValue % 510);
31 red = mappedValue % 510;
32 } else {
33 // Rouge à Vert
34 red = 255 - (mappedValue % 510);
35 green = mappedValue % 510;
36 }
37
38 // Application de la couleur sur toutes les LEDs
39 for (int i = 0; i < strip.numPixels(); i++) {
40 strip.setPixelColor(i, strip.Color(red, green, blue));
41 }
42 strip.show(); // Mise à jour du ruban LED
43 Serial.println(potValue);
44 delay(100); // Petite pause avant la lecture suivante
45 }
46
47 ==codes==
48 ===potentiometre lineaire sur arduino===
49 <syntaxhighlight lang="Arduino" line>
50 // Déclaration de la broche du potentiomètre
51 const int potPin = A0;
52
53 // Variable pour stocker la valeur lue
54 int potValue = 0;
55
56 void setup() {
57 // Initialisation de la communication série pour l'affichage des valeurs
58 Serial.begin(9600);
59 }
60
61 void loop() {
62 // Lecture de la valeur du potentiomètre
63 potValue = analogRead(potPin);
64
65 // Affichage de la valeur lue sur le moniteur série
66 Serial.println(potValue);
67
68 // Petite pause avant de lire la valeur suivante
69 delay(100);
70 }
PAPIFAB 17 octobre 2024 - ESCAPE GAME 1
- Escape Game
- Faire sur wikidebrouillard la fiche Piezo : https://www.wikidebrouillard.org/wiki/Item:Buzzer
Pour la séance deux :
- Bombe : Damien, Brendan, Alex, Emmeline, Mathieu
- Potards : Nadia, Josselin voir avec pro Micro !!
Programme des PAPIFAB 2024-2025
- Septembre : 19 - accueil forum des u-sages ! Spygeon, l'OSS117 de la vidéosurveillance !
- Octobre : 17 ( car la semaine précédete c'est fête de la sience) - Escape Game 1/2
- Novembre : 14 - Escape Game 2/2
- Décembre : 19 - LEd et musique - des paillettes dans la vie !
- Janvier : 9 - visite du CERV (sous réserve de confirmation)
- Février : 6 - Expérimentation RV (casque au stang Alar, voir médiathèque).
- Mars : 6 - IA et éducation.
- Avril : 3 - Création et hébergement de site web. du html au CMS voir
- Mai : 15 - fabrication lowtech et numérique - base de lancement à électrovannes
- Juin : 12 - bilan et perspectives
Evénements dans le contexte
Septembre
- Mi-septembre Date butoir de l'appel à projet Médiation et Usages du Numérique (AAP MUN) ? (à confirmer). les projets de l'an passé : https://www.a-brest.net/rubrique308.html
- Mardi 17 septembre : Conférence Bastien Masse IA et éudcation + ateleir dans l'après-midi.
- samedi 21 et dimanche 22 : journée européenne du patrimoine
- Vendredi 27 septembre : nuit européenne des chercheuses et des chercheurs
- La comète Tsuchinshan-ATLAS pourrait être très brillante et visible à l'oeil nu fin septembre et début octobre.
Octobre
- Mercredi 9 octobre : soirée de lancement Super Brest
- Jeudi 10 au dimanche 13 octobre : village des sciences au Quartz - Fabuleux laboratoire
Novembre
- Samedi 9 Novembre : Open Bidouille, journée aux capucins
- A définir novembre - Plénière de l'AAP MUN.
- Vendredi 22, samedi 23 et dimanche 24 novembre : Super Brest #10 !
Mars
- 14 mars éclipse de lune visible en partie