ENIB 2025 : LaGrueQuiDub : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(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 :

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.

LaGrueQuiDobe1.jpg

é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

  1. include <ESP8266WiFi.h>
  2. include <ESP8266WebServer.h>
  3. 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");

}

ne pas modifier sous cette ligne