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