ENIB 2025 : LaGrueQuiDub
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");
}