ENIB 2025 : LaGrueQuiDub : Différence entre versions
(→ne pas modifier sous cette ligne) |
(Ajout de la première version du code comme demandé : )) |
||
| Ligne 44 : | Ligne 44 : | ||
==Elémlent de présentation== | ==Elémlent de présentation== | ||
je met ici le document de présentation de mon projet | je met ici le document de présentation de mon projet | ||
| + | |||
| + | ===================Annexe===================== | ||
| + | |||
| + | ==CodeV1 contrôle servo avec graphique 2axes== | ||
| + | |||
| + | #include <ESP8266WiFi.h> | ||
| + | #include <ESP8266WebServer.h> | ||
| + | #include <Servo.h> | ||
| + | |||
| + | const int pwmPin = 5; //(D1 sur l'ESP8266) | ||
| + | Servo servoG; | ||
| + | Servo servoD; | ||
| + | |||
| + | // Crédential réseau | ||
| + | const char* ssid = "Formation"; | ||
| + | const char* password = "Apdgo29200!"; | ||
| + | |||
| + | // Lancer le serverWeb | ||
| + | ESP8266WebServer server(80); | ||
| + | |||
| + | // Coordonnées sliders et mémoire de détection de changement | ||
| + | float xCoord = 0; | ||
| + | float yCoord = 0; | ||
| + | float lastXCoord = -1; | ||
| + | float lastYCoord = -1; | ||
| + | |||
| + | unsigned long previousMillis = 0; | ||
| + | const long interval = 1000; | ||
| + | const float deadZone = 50.0; | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | |||
| + | initServos(); | ||
| + | |||
| + | connectToWiFi(); | ||
| + | server.on("/", handleRoot); | ||
| + | server.on("/coords", handleCoords); | ||
| + | server.begin(); | ||
| + | Serial.println("Serveur démarré"); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | unsigned long currentMillis = millis(); | ||
| + | if (currentMillis - previousMillis >= interval) { | ||
| + | previousMillis = currentMillis; | ||
| + | |||
| + | if (abs(xCoord - lastXCoord) > deadZone || abs(yCoord - lastYCoord) > deadZone) { | ||
| + | Serial.print("Coordonnées X: "); | ||
| + | Serial.print(xCoord); | ||
| + | Serial.print(", Y: "); | ||
| + | Serial.println(yCoord); | ||
| + | |||
| + | createServoMovement(xCoord, yCoord); | ||
| + | |||
| + | lastXCoord = xCoord; | ||
| + | lastYCoord = yCoord; | ||
| + | } | ||
| + | } | ||
| + | server.handleClient(); | ||
| + | } | ||
| + | |||
| + | void initServos() { | ||
| + | servoG.attach(5); // (D1 sur l'ESP8266) | ||
| + | servoD.attach(4); // (D2 sur l'ESP8266) | ||
| + | } | ||
| + | |||
| + | void connectToWiFi() { | ||
| + | Serial.println("Connexion au Wi-Fi..."); | ||
| + | WiFi.begin(ssid, password); | ||
| + | while (WiFi.status() != WL_CONNECTED) { | ||
| + | delay(500); | ||
| + | Serial.print("."); | ||
| + | } | ||
| + | Serial.println("\nConnecté !"); | ||
| + | Serial.print("Adresse IP : "); | ||
| + | Serial.println(WiFi.localIP()); | ||
| + | } | ||
| + | |||
| + | void handleRoot() { | ||
| + | String html = generateHTML(); | ||
| + | server.send(200, "text/html", html); | ||
| + | } | ||
| + | |||
| + | String generateHTML() { | ||
| + | return R"rawliteral( | ||
| + | <!DOCTYPE html> | ||
| + | <html> | ||
| + | <head> | ||
| + | <title>ESP8266 Interactive Page</title> | ||
| + | <style> | ||
| + | body { margin: 0; display: flex; justify-content: center; align-items: center; height: 100vh; background: #f3f3f3; } | ||
| + | canvas { border: 1px solid black; } | ||
| + | </style> | ||
| + | </head> | ||
| + | <body> | ||
| + | <canvas id="canvas" width="500" height="500"></canvas> | ||
| + | <script> | ||
| + | const canvas = document.getElementById('canvas'); | ||
| + | const ctx = canvas.getContext('2d'); | ||
| + | canvas.addEventListener('mousemove', (event) => { | ||
| + | const rect = canvas.getBoundingClientRect(); | ||
| + | const x = event.clientX - rect.left; | ||
| + | const y = event.clientY - rect.top; | ||
| + | ctx.clearRect(0, 0, canvas.width, canvas.height); | ||
| + | ctx.fillStyle = "blue"; | ||
| + | ctx.beginPath(); | ||
| + | ctx.arc(x, y, 5, 0, 2 * Math.PI); | ||
| + | ctx.fill(); | ||
| + | // Envoyer les coordonnées au serveur | ||
| + | fetch(`/coords?x=${x}&y=${y}`) | ||
| + | .then(response => response.text()) | ||
| + | .then(data => console.log(data)) | ||
| + | .catch(error => console.error('Erreur:', error)); | ||
| + | }); | ||
| + | </script> | ||
| + | </body> | ||
| + | </html> | ||
| + | )rawliteral"; | ||
| + | } | ||
| + | |||
| + | void handleCoords() { | ||
| + | xCoord = server.arg("x").toFloat(); | ||
| + | yCoord = server.arg("y").toFloat(); | ||
| + | |||
| + | server.send(200, "text/plain", "Coordonnées reçues et servos mis à jour !"); | ||
| + | } | ||
| + | |||
| + | void createServoMovement(float xCoord, float yCoord) { | ||
| + | // Mapper xCoord de [0, 500] à [0, 180] pour le servo gauche | ||
| + | int angleG = map(xCoord, 0, 500, 0, 180); | ||
| + | servoG.write(angleG); | ||
| + | |||
| + | // Mapper yCoord de [0, 500] à [0, 180] pour le servo droit | ||
| + | int angleD = map(yCoord, 0, 500, 0, 180); | ||
| + | servoD.write(angleD); | ||
| + | |||
| + | Serial.print("Servo gauche : "); | ||
| + | Serial.print(angleG); | ||
| + | Serial.print(" degrés, Servo droit : "); | ||
| + | Serial.print(angleD); | ||
| + | Serial.println(" degrés"); | ||
| + | } | ||
==ne pas modifier sous cette ligne== | ==ne pas modifier sous cette ligne== | ||
Version du 21 janvier 2025 à 10:59
Titre de la fiche expérience :
Sommaire
Description
Faire une grue à partir du petit bot en rajoutant un servomoteur, un capteur ultrason et un haut parleur. La grue sera sur 3 axes comme une grue traditionnelle et fonctionnera avec un système de poulie.
Introduction
éventuelle vidéo
outil et matériel
fichiers à joindre
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
Mettre du code Arduino
1
2 #define PIN 9
3 #include <Arduino_GFX_Library.h>
4
5 void setup() {
6 // put your setup code here, to run once:
7
8 }
9
10 void loop() {
11 // put your main code here, to run repeatedly:
12
13 }
étapes de fabrication
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
étape 1
Connecter la carte au Wifi, trouver son adresse IP et créer un serveur Web dessus.
é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
Elémlent de présentation
je met ici le document de présentation de mon projet
=============Annexe===============
CodeV1 contrôle servo avec graphique 2axes
- include <ESP8266WiFi.h>
- include <ESP8266WebServer.h>
- include <Servo.h>
const int pwmPin = 5; //(D1 sur l'ESP8266) Servo servoG; Servo servoD;
// Crédential réseau const char* ssid = "Formation"; const char* password = "Apdgo29200!";
// Lancer le serverWeb ESP8266WebServer server(80);
// Coordonnées sliders et mémoire de détection de changement float xCoord = 0; float yCoord = 0; float lastXCoord = -1; float lastYCoord = -1;
unsigned long previousMillis = 0; const long interval = 1000; const float deadZone = 50.0;
void setup() {
Serial.begin(115200);
initServos();
connectToWiFi();
server.on("/", handleRoot);
server.on("/coords", handleCoords);
server.begin();
Serial.println("Serveur démarré");
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (abs(xCoord - lastXCoord) > deadZone || abs(yCoord - lastYCoord) > deadZone) {
Serial.print("Coordonnées X: ");
Serial.print(xCoord);
Serial.print(", Y: ");
Serial.println(yCoord);
createServoMovement(xCoord, yCoord);
lastXCoord = xCoord;
lastYCoord = yCoord;
}
}
server.handleClient();
}
void initServos() {
servoG.attach(5); // (D1 sur l'ESP8266) servoD.attach(4); // (D2 sur l'ESP8266)
}
void connectToWiFi() {
Serial.println("Connexion au Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnecté !");
Serial.print("Adresse IP : ");
Serial.println(WiFi.localIP());
}
void handleRoot() {
String html = generateHTML(); server.send(200, "text/html", html);
}
String generateHTML() {
return R"rawliteral(
<!DOCTYPE html>
ESP8266 Interactive Page
)rawliteral";
}
void handleCoords() {
xCoord = server.arg("x").toFloat();
yCoord = server.arg("y").toFloat();
server.send(200, "text/plain", "Coordonnées reçues et servos mis à jour !");
}
void createServoMovement(float xCoord, float yCoord) {
// Mapper xCoord de [0, 500] à [0, 180] pour le servo gauche int angleG = map(xCoord, 0, 500, 0, 180); servoG.write(angleG);
// Mapper yCoord de [0, 500] à [0, 180] pour le servo droit int angleD = map(yCoord, 0, 500, 0, 180); servoD.write(angleD);
Serial.print("Servo gauche : ");
Serial.print(angleG);
Serial.print(" degrés, Servo droit : ");
Serial.print(angleD);
Serial.println(" degrés");
}
