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 à 09: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");
}