|
|
(27 révisions intermédiaires par le même utilisateur non affichées) |
Ligne 2 : |
Ligne 2 : |
| ==description (résumé)== | | ==description (résumé)== |
| | | |
| + | Premiers essais et compréhension du système de base |
| | | |
− | [[Fichier:PaperToy2 schema.png|200px]] | + | [[Fichier:PaperToy2 schema.png|300px]] |
| | | |
− | [[Fichier:Premier prototype Ptitbolide.png|200px]]
| |
| | | |
− | [[Fichier:Prototype2 ptitbolide.png|200px]]
| + | Premières créations avec des matériaux simples |
| | | |
− | ==Introduction==
| + | [[Fichier:Premier prototype Ptitbolide.png|300px]] |
| | | |
− | éventuelle vidéo
| |
− | ==outil et matériel==
| |
| | | |
− | ==fichiers à joindre==
| + | Réalisation d'un prototype plus solide |
− | """
| |
− | code, ficher d'impression 3D, de découpe laser ou vinyle, ...
| |
− | #include <ESP8266WiFi.h>
| |
− | #include <ESP8266WebServer.h>
| |
− | #include <Servo.h> // Inclusion de la bibliothèque Servo
| |
| | | |
| + | [[Fichier:Prototype2 ptitbolide.png|300px]] |
| | | |
− | // Informations réseau (réseau Wi-Fi existant)
| |
− | const char* mySSID = "Formation"; // SSID de votre réseau Wi-Fi
| |
− | const char* mySecKey = "Apdgo29200!"; // Clé Wi-Fi de votre réseau
| |
| | | |
| + | Ajout d'un boitier pour faire tenir les composants |
| | | |
− | // Déclaration du serveur Web
| + | [[Fichier:Ptitbolide boite.jpg|300px]] |
− | ESP8266WebServer myWeb(80);
| |
| | | |
| | | |
− | // Pin pour contrôler les servos
| + | Finalisation de l'interface web pour controler le véhicule |
− | const int servoPin1 = D4; // Pin pour le premier servo-moteur
| |
− | const int servoPin2 = D1; // Pin pour le deuxième servo-moteur
| |
| | | |
| + | [[Fichier:Ptitbolide Control panel.png|300px]] |
| | | |
− | // Déclaration des objets Servo
| |
− | Servo myServo1; // Objet Servo pour contrôler le premier servo
| |
− | Servo myServo2; // Objet Servo pour contrôler le deuxième servo
| |
| | | |
| + | Finalisation du design |
| | | |
− | // Variables pour stocker la position des servos
| + | ==Introduction== |
− | int servoPosition1 = 90; // Position par défaut du premier servo
| |
− | int servoPosition2 = 90; // Position par défaut du deuxième servo
| |
| | | |
| + | En partant d'un papertoy, nous avons choisi de créer un projet de véhicule roulant commandé par une interface web : le Ptit bolide. |
| | | |
− | // Fonction pour générer la page HTML
| + | ==outil et matériel== |
− | String webPage01() {
| + | Code Arduino : |
− | String p = "<html lang=fr-FR><head>\n";
| |
− | p += "<title>Commande des Servos</title>\n";
| |
− | p += "<meta charset='UTF-8'>\n";
| |
− | p += "<style>\n";
| |
− | p += "body { background-color: #000088; color: white; font-size: 25px; }\n";
| |
− | p += "input { width:25%; margin:10px; font-size:20px; border-radius: 5px; }\n";
| |
− | p += "</style>\n";
| |
− | p += "<script>\n";
| |
− | p += "function updateServoPosition1(val) {\n";
| |
− | p += " document.getElementById('servoValue1').innerText = val + '°';\n";
| |
− | p += " window.location = window.location.pathname + '?servo1=' + val;\n";
| |
− | p += "}\n";
| |
− | p += "function updateServoPosition2(val) {\n";
| |
− | p += " document.getElementById('servoValue2').innerText = val + '°';\n";
| |
− | p += " window.location = window.location.pathname + '?servo2=' + val;\n";
| |
− | p += "}\n";
| |
− | p += "</script>\n";
| |
| | | |
| + | [[Fichier:Ptitbolide_code.odt]] |
| | | |
− | p += "<body><center>\n";
| |
− | p += "<h3>Commandes Servo 1 (Pin D4)</h3>\n";
| |
| | | |
| + | Matériel utilisé : |
| | | |
− | // Affichage de la position actuelle du premier servo
| + | - Papertoy kit |
− | p += "<p>Position actuelle du servo 1 : <span id='servoValue1'>" + String(servoPosition1) + "°</span></p>\n";
| |
| | | |
| + | - 3 Roues |
| | | |
− | // Curseur pour ajuster l'angle du premier servo
| + | - 1 Servomoteur continu |
− | p += "<input type='range' min='0' max='180' value='" + String(servoPosition1) + "' onchange='updateServoPosition1(this.value)'>\n";
| |
| | | |
| + | - planche de plastique/bois |
| | | |
− | p += "<h3>Commandes Servo 2 (Pin D1)</h3>\n";
| + | - carton |
| | | |
| + | ==Sources et documentation complémentaire== |
| | | |
− | // Affichage de la position actuelle du deuxième servo
| + | Plan/Schéma du projet : |
− | p += "<p>Position actuelle du servo 2 : <span id='servoValue2'>" + String(servoPosition2) + "°</span></p>\n";
| |
− | | |
− | | |
− | // Curseur pour ajuster l'angle du deuxième servo
| |
− | p += "<input type='range' min='0' max='180' value='" + String(servoPosition2) + "' onchange='updateServoPosition2(this.value)'>\n";
| |
− | | |
− | | |
− | p += "</center></body></html>";
| |
− | return p;
| |
− | }
| |
− | | |
− | | |
− | // Fonction pour gérer les commandes et envoyer la page web
| |
− | void runPage01() {
| |
− | // Commandes pour contrôler le premier servo-moteur
| |
− | if (myWeb.hasArg("servo1")) {
| |
− | servoPosition1 = myWeb.arg("servo1").toInt(); // Récupère l'angle du premier servo
| |
− | myServo1.write(servoPosition1); // Déplace le premier servo à l'angle spécifié
| |
− | }
| |
− | | |
− | | |
− | // Commandes pour contrôler le deuxième servo-moteur
| |
− | if (myWeb.hasArg("servo2")) {
| |
− | servoPosition2 = myWeb.arg("servo2").toInt(); // Récupère l'angle du deuxième servo
| |
− | myServo2.write(servoPosition2); // Déplace le deuxième servo à l'angle spécifié
| |
− | }
| |
− | | |
− | | |
− | // Envoi de la page web
| |
− | myWeb.send(200, "text/html", webPage01());
| |
− | }
| |
− | | |
| | | |
− | // Fonction d'initialisation
| + | [[Fichier:Ptitbolide_dessin.jpg|400px]] |
− | void setup() {
| |
− | // Initialisation de la liaison série
| |
− | Serial.begin(115200);
| |
− | delay(100);
| |
− | Serial.println("----------------------");
| |
− | Serial.println("Exemple de serveur WEB");
| |
− | Serial.println("----------------------");
| |
− | | |
− | | |
− | // Connexion au réseau Wi-Fi existant
| |
− | Serial.print("Connexion au réseau Wi-Fi : ");
| |
− | WiFi.begin(mySSID, mySecKey);
| |
− | | |
− | | |
− | // Attendre que l'ESP8266 se connecte au réseau Wi-Fi
| |
− | int attempts = 0;
| |
− | while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Attendre 30 secondes max
| |
− | delay(500);
| |
− | Serial.print(".");
| |
− | attempts++;
| |
− | }
| |
− | | |
− | | |
− | if (WiFi.status() == WL_CONNECTED) {
| |
− | Serial.println("\nConnexion Wi-Fi réussie!");
| |
− | Serial.print("Adresse IP du serveur Web : ");
| |
− | Serial.println(WiFi.localIP());
| |
− | } else {
| |
− | Serial.println("\nErreur de connexion Wi-Fi !");
| |
− | }
| |
− | | |
− | | |
− | // Initialisation des servos
| |
− | myServo1.attach(servoPin1); // Attache le premier servo à la broche D4
| |
− | myServo2.attach(servoPin2); // Attache le deuxième servo à la broche D1
| |
− | | |
− | | |
− | // Définir la page d'accueil du serveur web
| |
− | myWeb.on("/", runPage01);
| |
− | myWeb.begin();
| |
− | }
| |
− | | |
− | | |
− | // Fonction appelée en boucle
| |
− | void loop() {
| |
− | // Traitement des requêtes web
| |
− | myWeb.handleClient();
| |
− | }
| |
− | """
| |
− | | |
− | =#include <ESP8266WiFi.h>
| |
− | #include <ESP8266WebServer.h>
| |
− | #include <Servo.h> // Inclusion de la bibliothèque Servo
| |
− | | |
− | | |
− | // Informations réseau (réseau Wi-Fi existant)
| |
− | const char* mySSID = "Formation"; // SSID de votre réseau Wi-Fi
| |
− | const char* mySecKey = "Apdgo29200!"; // Clé Wi-Fi de votre réseau
| |
− | | |
− | | |
− | // Déclaration du serveur Web
| |
− | ESP8266WebServer myWeb(80);
| |
− | | |
− | | |
− | // Pin pour contrôler les servos
| |
− | const int servoPin1 = D4; // Pin pour le premier servo-moteur
| |
− | const int servoPin2 = D1; // Pin pour le deuxième servo-moteur
| |
− | | |
− | | |
− | // Déclaration des objets Servo
| |
− | Servo myServo1; // Objet Servo pour contrôler le premier servo
| |
− | Servo myServo2; // Objet Servo pour contrôler le deuxième servo
| |
− | | |
− | | |
− | // Variables pour stocker la position des servos
| |
− | int servoPosition1 = 90; // Position par défaut du premier servo
| |
− | int servoPosition2 = 90; // Position par défaut du deuxième servo
| |
− | | |
− | | |
− | // Fonction pour générer la page HTML
| |
− | String webPage01() {
| |
− | String p = "<html lang=fr-FR><head>\n";
| |
− | p += "<title>Commande des Servos</title>\n";
| |
− | p += "<meta charset='UTF-8'>\n";
| |
− | p += "<style>\n";
| |
− | p += "body { background-color: #000088; color: white; font-size: 25px; }\n";
| |
− | p += "input { width:25%; margin:10px; font-size:20px; border-radius: 5px; }\n";
| |
− | p += "</style>\n";
| |
− | p += "<script>\n";
| |
− | p += "function updateServoPosition1(val) {\n";
| |
− | p += " document.getElementById('servoValue1').innerText = val + '°';\n";
| |
− | p += " window.location = window.location.pathname + '?servo1=' + val;\n";
| |
− | p += "}\n";
| |
− | p += "function updateServoPosition2(val) {\n";
| |
− | p += " document.getElementById('servoValue2').innerText = val + '°';\n";
| |
− | p += " window.location = window.location.pathname + '?servo2=' + val;\n";
| |
− | p += "}\n";
| |
− | p += "</script>\n";
| |
− | | |
− | | |
− | p += "<body><center>\n";
| |
− | p += "<h3>Commandes Servo 1 (Pin D4)</h3>\n";
| |
− | | |
− | | |
− | // Affichage de la position actuelle du premier servo
| |
− | p += "<p>Position actuelle du servo 1 : <span id='servoValue1'>" + String(servoPosition1) + "°</span></p>\n";
| |
− | | |
− | | |
− | // Curseur pour ajuster l'angle du premier servo
| |
− | p += "<input type='range' min='0' max='180' value='" + String(servoPosition1) + "' onchange='updateServoPosition1(this.value)'>\n";
| |
− | | |
− | | |
− | p += "<h3>Commandes Servo 2 (Pin D1)</h3>\n";
| |
− | | |
− | | |
− | // Affichage de la position actuelle du deuxième servo
| |
− | p += "<p>Position actuelle du servo 2 : <span id='servoValue2'>" + String(servoPosition2) + "°</span></p>\n";
| |
− | | |
− | | |
− | // Curseur pour ajuster l'angle du deuxième servo
| |
− | p += "<input type='range' min='0' max='180' value='" + String(servoPosition2) + "' onchange='updateServoPosition2(this.value)'>\n";
| |
− | | |
− | | |
− | p += "</center></body></html>";
| |
− | return p;
| |
− | }
| |
− | | |
− | | |
− | // Fonction pour gérer les commandes et envoyer la page web
| |
− | void runPage01() {
| |
− | // Commandes pour contrôler le premier servo-moteur
| |
− | if (myWeb.hasArg("servo1")) {
| |
− | servoPosition1 = myWeb.arg("servo1").toInt(); // Récupère l'angle du premier servo
| |
− | myServo1.write(servoPosition1); // Déplace le premier servo à l'angle spécifié
| |
− | }
| |
− | | |
− | | |
− | // Commandes pour contrôler le deuxième servo-moteur
| |
− | if (myWeb.hasArg("servo2")) {
| |
− | servoPosition2 = myWeb.arg("servo2").toInt(); // Récupère l'angle du deuxième servo
| |
− | myServo2.write(servoPosition2); // Déplace le deuxième servo à l'angle spécifié
| |
− | }
| |
− | | |
− | | |
− | // Envoi de la page web
| |
− | myWeb.send(200, "text/html", webPage01());
| |
− | }
| |
− | | |
− | | |
− | // Fonction d'initialisation
| |
− | void setup() {
| |
− | // Initialisation de la liaison série
| |
− | Serial.begin(115200);
| |
− | delay(100);
| |
− | Serial.println("----------------------");
| |
− | Serial.println("Exemple de serveur WEB");
| |
− | Serial.println("----------------------");
| |
− | | |
− | | |
− | // Connexion au réseau Wi-Fi existant
| |
− | Serial.print("Connexion au réseau Wi-Fi : ");
| |
− | WiFi.begin(mySSID, mySecKey);
| |
− | | |
− | | |
− | // Attendre que l'ESP8266 se connecte au réseau Wi-Fi
| |
− | int attempts = 0;
| |
− | while (WiFi.status() != WL_CONNECTED && attempts < 30) { // Attendre 30 secondes max
| |
− | delay(500);
| |
− | Serial.print(".");
| |
− | attempts++;
| |
− | }
| |
− | | |
− | | |
− | if (WiFi.status() == WL_CONNECTED) {
| |
− | Serial.println("\nConnexion Wi-Fi réussie!");
| |
− | Serial.print("Adresse IP du serveur Web : ");
| |
− | Serial.println(WiFi.localIP());
| |
− | } else {
| |
− | Serial.println("\nErreur de connexion Wi-Fi !");
| |
− | }
| |
− | | |
− | | |
− | // Initialisation des servos
| |
− | myServo1.attach(servoPin1); // Attache le premier servo à la broche D4
| |
− | myServo2.attach(servoPin2); // Attache le deuxième servo à la broche D1
| |
− | | |
− | | |
− | // Définir la page d'accueil du serveur web
| |
− | myWeb.on("/", runPage01);
| |
− | myWeb.begin();
| |
− | }
| |
− | | |
− | | |
− | // Fonction appelée en boucle
| |
− | void loop() {
| |
− | // Traitement des requêtes web
| |
− | myWeb.handleClient();
| |
− | }
| |
− | | |
− | ==Sources et documentation complémentaire==
| |
| | | |
| ==Elémlent de présentation== | | ==Elémlent de présentation== |
− | je met ici le document de présentation de mon projet
| + | [[Fichier:Ptit bolide affiche.png|400px]] |
| | | |
| ==ne pas modifier sous cette ligne== | | ==ne pas modifier sous cette ligne== |