ENIB 2026 :Gestion de toilettes
Titre de la fiche expérience :
Sommaire
description (résumé)
éventuelle photo de l'équipe
Introduction
éventuelle vidéo
outil et matériel
Pour réaliser ce projet avec succès, nous avons eu recours à plusieurs composants essentiels. Nous avons utilisé deux microcontrôleurs ESP32, accompagnés de deux servomoteurs pour le contrôle mécanique. Pour l’alimentation et la communication, deux câbles USB ont été nécessaires. Afin de faciliter les connexions et les expérimentations, nous avons également employé deux breadboards, un bouton-poussoir pour les interactions, ainsi qu’une dizaine de fils permettant de relier l’ensemble des éléments entre eux
fichiers à joindre
code, ficher d'impression 3D, de découpe laser ou vinyle, ... Fichier:Gestion de toilettes.pdf
Mettre du code Arduino
1
2 //code de la carte du sender
3
4 #include <esp_now.h>
5 #include <WiFi.h>
6
7 #define buttonPin 18
8 #define ledPin 4
9
10 bool systemState = false;
11 bool lastButtonState = HIGH;
12
13 uint8_t broadcastAddress1[] = {0x20,0xe7,0xc8,0xac,0xb1,0x48};
14 esp_now_peer_info_t peerInfo;
15
16 // Callback
17 void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
18 Serial.print("Send status: ");
19 Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Success" : "Fail");
20 }
21
22 void setup() {
23 Serial.begin(115200);
24
25 pinMode(buttonPin, INPUT_PULLUP);
26 pinMode(ledPin, OUTPUT);
27
28 WiFi.mode(WIFI_STA);
29
30 if (esp_now_init() != ESP_OK) {
31 Serial.println("ESP-NOW init failed");
32 return;
33 }
34
35 esp_now_register_send_cb(OnDataSent);
36
37 memcpy(peerInfo.peer_addr, broadcastAddress1, 6);
38 peerInfo.channel = 0;
39 peerInfo.encrypt = false;
40
41 if (esp_now_add_peer(&peerInfo) != ESP_OK) {
42 Serial.println("Failed to add peer");
43 }
44 }
45
46 void loop() {
47 char message = '2'; // default value
48 bool buttonState = digitalRead(buttonPin);
49
50 // Detect button press (falling edge)
51 if (lastButtonState == HIGH && buttonState == LOW) {
52 systemState = !systemState;
53
54 if (systemState) {
55 digitalWrite(ledPin, 0);
56 message = '1';
57 } else {
58 digitalWrite(ledPin, 1);
59 message = '0';
60 }
61
62 esp_err_t result = esp_now_send(
63 broadcastAddress1,
64 (uint8_t *)&message,
65 sizeof(message)
66 );
67
68 if (result == ESP_OK) {
69 Serial.print("Sent: ");
70 Serial.println(message);
71 } else {
72 Serial.println("Send error");
73 }
74 }
75
76 lastButtonState = buttonState;
77 delay(50); // debounce
78 }
79
80
81
82
83 //code de la carte du receiver
84 #include <esp_now.h>
85 #include <WiFi.h>
86 #include <ESP32Servo.h>
87 #define led1 18
88 #define servoPin 5
89 Servo myServo;
90
91 // Callback function executed when data is received
92 void OnDataRecv(const esp_now_recv_info_t *recv_info, const uint8_t *incomingData, int len) {
93 if (len > 0) {
94 char receivedChar = incomingData[0]; // extract the first byte
95
96 // Convert MAC to string
97 char macStr[18];
98 snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
99 recv_info->src_addr[0], recv_info->src_addr[1], recv_info->src_addr[2],
100 recv_info->src_addr[3], recv_info->src_addr[4], recv_info->src_addr[5]);
101
102 Serial.print("Received from: ");
103 Serial.println(macStr);
104 Serial.print("Character received: ");
105 Serial.println(receivedChar);
106 if(receivedChar=='1'){
107 digitalWrite(led1, 1);
108
109 myServo.write(180);
110 }
111 else if(receivedChar=='0'){
112 digitalWrite(led1, 0);
113
114 myServo.write(0);
115 }
116 else{
117 for (int i=0;i<180;i+=10){
118 myServo.write(i);
119 digitalWrite(led1, 0);
120 delay(1000);
121 digitalWrite(led1, 1);
122 }
123 }
124
125 }
126 }
127
128 void setup() {
129 Serial.begin(115200);
130
131 // Set device as a Wi-Fi Station
132 WiFi.mode(WIFI_STA);
133
134 // Initialize ESP-NOW
135 if (esp_now_init() != ESP_OK) {
136 Serial.println("Error initializing ESP-NOW");
137 return;
138 }
139
140 // Register callback for receiving data
141 esp_now_register_recv_cb(OnDataRecv);
142
143 Serial.println("ESP-NOW Receiver Ready");
144 pinMode(led1,OUTPUT);
145 myServo.attach(servoPin);
146 myServo.write(0); // position initiale du servo
147 digitalWrite(led1,0); // éteindre la led
148 }
149
150 void loop() {
151 // Nothing needed here; data is handled in the callback
152 }
étapes de fabrication
La réalisation de ce projet a nécéssité plusieurs étapes: Etape1: Boutton poussoir câblé sur le sender ainsi qu'une led Etape2: servomoteur câblé sur le receiver ainsi qu'une led Etape3: câblage complet du prototype ainsi que test
étape 1
étape 2
étape ...
Troubleshouting
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
Sources et documentation complémentaire
- Rédаctiоn et illustratiоn :
Pоur tоus vоs trаvauх, qu'ils sоient écrits оu visuels, l'utilisatiоn de l'intеlligеnce artificiеllе générativе, que сe sоit pоur le teхte оu les images, n'еst pas conseillé.
- Prоgrammаtiоn :
En сe qui cоncernе la prоgrаmmatiоn, il est еssentiеl de ne pаs faire dе l'IA vоtrе prеmier rеcоurs. Cоncеntrеz-vоus d'abоrd sur vоtre prоpre lоgiquе, votre experience еt lеs ressоurcеs disponibles.
- Transpаrence et dосumеntatiоn :
Si vоus utilisеz l'IA pоur déblоquer оu améliоrеr une pаrtiе de vоtre cоdе, il est cruciаl de l'indiquеr сlairеmеnt dans vоtre dосumentatiоn tеchniquе.
- Traçabilité :
Chаque ехtrait de cоde généré avес l'аidе de l'IA dоit êtrе accоmpagné de la sоurce, ainsi que du prоmpt eхact qui a été utilisé pоur sа créatiоn, afin d'аssurеr une évaluatiоn clаire dе vоtre prоcessus.
Elément de présentation
je met ici le document de présentation de mon projet