Mortal robot

De Les Fabriques du Ponant
Révision datée du 19 janvier 2018 à 16:06 par Phycelot (discussion | contributions) (Code Robot)
Aller à : navigation, rechercher

Sur la base des petits bots, il s'agit d'ajouter un laser et un récepteur avec un système de point de vie.


Pédagogie

  • construire
  • programmer


Membres de l'équipe

  • Prouteau Antonin
  • Jegou Gergaud Nils
  • Kerouanton Jeremy
  • Ridae Hamdani
  • Asaad ALAKOUM

IMG 0359.jpg

Matériel pour le 1er robot

  • Carte wemos D1 mini
  • 1 interrupteur
  • 4 piles + son socle
  • 2 LED
  • 3 Résistances
  • 2 Roues + 1 petite roue à l'avant
  • 2 Moteurs à courant continu
  • 1 pont en H
  • 1 photo résistance
  • 1 émetteur lazer KY008

Avancement du projet

Le 1er robot est terminé. Le 2ème est en cours, nous avons imprimé le châssis ainsi que les roues et le socle des piles .

Fichier

Fichier:Diaporama-HackENIB2018.odp

Impression final svg.svg

Code Robot

{ ////////////////// // Mortal Robot // //////////////////

// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf, http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi // Sous licence CC-By-Sa // Par des gens bien

// on appelle la bibliothèque qui gère le Wemos D1 mini

  1. include <ESP8266WiFi.h>

// Gestion du Wifi

  1. include <ESP8266WebServer.h>
  2. include <DNSServer.h>
  3. include <ESP8266mDNS.h>
  4. include <WiFiClient.h>

// Definition du WiFi const char *nomDuReseau = "mortalRobot"; // Nom du réseau wifi const char *motDePasse = ""; // Mot de passe du réseau wifi // ATTENTION - le mot de passe doit faire soit 0 caractères soit 8 ou plus sinon // La configuration de votre réseau wifi ne se fera pas (ni mot de passe, ni nom de réseau !). //création du monServeur ESP8266WebServer monServeur(80); // Création de l'objet monServeur

//déclaration des Variables //int --- en cours int val = -1; // Val nous sert à stocker la commande de l'utilisateur (stop, avance, ...). int life = 3; //point de vie du robot bool shoot = false; long shootStartTime = 0;; long shootDuration = 2000; int light = 0; int prevLight = 0;

void setup() {

 delay(1000);
 Serial.begin(9600); // Ouvre une connexion série pour monitorer le fonctionnement du code quand on reste branché a l'ordinateur
 Serial.println();
 Serial.println();
 configDuWifi();
 pinMode(D0, OUTPUT);
 pinMode(D1, OUTPUT);
 pinMode(D2, OUTPUT);
 pinMode(D3, OUTPUT);
 pinMode(D4, OUTPUT);
 pinMode(D5, OUTPUT);
 pinMode(D6, OUTPUT);
 pinMode(D7, OUTPUT);
 pinMode(D8, OUTPUT);
 //Moteur à l'arrêt
 //  analogWrite(D6, LOW);
 //  analogWrite(D7, LOW);
 pinMode(LED_BUILTIN, OUTPUT);    //met la led du Wemos en sortie
 digitalWrite(LED_BUILTIN, LOW);  //met la led du Wemos sur le niveau bas ce qui l'allume.

}

void loop() {

 val = -1;
 monServeur.handleClient();
 //  lifeManage();
 shootManage();
 light = analogRead(A0);
 digitalWrite(D0, (light > prevLight+40));
 prevLight = light;
 Serial.println(analogRead(A0));
 //  digitalWrite(D0,analogRead(A0));

}

void shootManage() {

 if (shoot)
 {
   if ((millis() - shootStartTime) > shootDuration) {
     digitalWrite(D8, false);
     shoot = false;
   } else {
     digitalWrite(D8, true);
   }
 } else
 {
   digitalWrite(D8, false);
 }

}

bool isShoot() {

 //  Serial.println("slt");
 //  Serial.println(analogRead(A0));
 return (analogRead(A0) > 800);

}

void lifeManage() //gere les points de vie et l'affichage {

 if (isShoot())
 {
   life--;
 }
 switch (life) {
   case (3) :
     digitalWrite(D0, true);
     digitalWrite(D5, false);
     break;
   case (2) :
     analogWrite(D0, 135);
     digitalWrite(D5, false);
     break;
   case (1) :
     analogWrite(D0, 90);
     digitalWrite(D5, false);
     break;
   case (0) :
     digitalWrite(D0, false);
     digitalWrite(D5, true);
     break;
   case (5) : //shoot
     Serial.println("shoot");
     shoot = true;
     shootStartTime = millis();
     break;
 }

}

///////////////////////GESTION DES INSTRUCTIONS/////////////////////////// void GestionDesClics() {

 monServeur.on("/avance", HTTP_GET, []() {
   val = 1;
   Serial.println("avance");
   redactionPageWeb();
 });
 monServeur.on("/recule", HTTP_GET, []() {
   val = 2;
   Serial.println("recule");
   redactionPageWeb();
 });
 monServeur.on("/droite", HTTP_GET, []() {
   val = 4;
   Serial.println("droite");
   redactionPageWeb();
 });
 monServeur.on("/gauche", HTTP_GET, []() {
   val = 3;
   Serial.println("gauche");
   redactionPageWeb();
 });
 monServeur.on("/stop", HTTP_GET, []() {
   val = 0;
   Serial.println("stop");
   redactionPageWeb();
 });
 monServeur.on("/shoot", HTTP_GET, []() {
   val = 5;
   Serial.println("shoot");
   redactionPageWeb();
 });
 monServeur.on("/", HTTP_GET, []() {
   val = -1;
   redactionPageWeb();
 });

}

///////////////////////////LA PAGE WEB DE CONROLE DU PETIT BOT///////////////////////////////////////// void redactionPageWeb() {

 // Prépare la page web de réponse (le code HTML sera écrit dans la chaine de caractère "pageWeb").
 String pageWeb = "<!DOCTYPE HTML>\r\n";
 pageWeb += "\r\n";
  pageWeb += "
"; //On ouvre la balise qui va centrer les boutons pageWeb += ""; instruction(val); // pour cela on appelle la fonction "instruction" // On termine l'écriture de la page Web pageWeb += "
"; //aller à la ligne pageWeb += "
"; //aller à la ligne pageWeb += "
\r\n"; // créer un bouton "Avance"... pageWeb += "\r\n"; pageWeb += "
\r\n"; pageWeb += "

\r\n"; pageWeb += "
\r\n"; // créer un bouton "Stop", qui envoie sur l'URL /stop pageWeb += "
\r\n"; pageWeb += "
"; // tout est centré sur la page pageWeb += "\n"; //Fin de la page Web
 // On envoie la page web
 monServeur.send(200, "text/html", pageWeb);
 delay(1);

}

///////////////////INSTRUCTIONS///////////////////////////////////////////////////////// void instruction(int valeur) { //Cette fonction traite les instructions qui sont reçues

 switch (valeur) {                     // En fonction de la variable valeur on va donner un ordre aux servos
   case 0 : //stop
     digitalWrite(D1, false);
     digitalWrite(D2, false);
     digitalWrite(D3, false);
     digitalWrite(D4, false);
     break;
   case 1 : //avance
     digitalWrite(D1, true);
     digitalWrite(D2, false);
     digitalWrite(D3, true);
     digitalWrite(D4, false);
     //      analogWrite(D6, true);
     //      analogWrite(D7, true);
     break;
   case 2 : //recule
     digitalWrite(D1, false);
     digitalWrite(D2, true);
     digitalWrite(D3, false);
     digitalWrite(D4, true);
     //      analogWrite(D6, 100);
     //      analogWrite(D7, 100);
     break;
   case 3 : //gauche
     digitalWrite(D1, true);
     digitalWrite(D2, false);
     digitalWrite(D3, false);
     digitalWrite(D4, false);
     //      analogWrite(D7, 180);
     break;
   case 4 : //droite
     digitalWrite(D1, false);
     digitalWrite(D2, false);
     digitalWrite(D3, true);
     digitalWrite(D4, false);
     //      analogWrite(D6, 180);
     break;
   case 5 : //shoot
     shoot = true;
     shootStartTime = millis();
     break;
 }

} ////////////////////////CONFIGURATION WIFI/////////////////////////////////////////////// void configDuWifi() { // Fonction de configuratio du Wifi

 WiFi.mode(WIFI_AP); // le wemos est en mode "Point d'Accès" (il déploie un réseau wifi)
 WiFi.softAP(nomDuReseau, motDePasse, 2); // on démarre le "Point d'Accès".
 MDNS.begin(nomDuReseau);                 // gérer les DNS ce qui rendra votre petit bot accessible
 MDNS.addService("http", "tcp", 80);      // via http://nomDuReseau.local
 IPAddress monIP = WiFi.softAPIP();       // on récupère l'adresse IP du petit Bot
 Serial.print("Adresse IP de ce Point d'Accès : ");
 Serial.println(monIP);                   // on l'écrit sur le moniteur série
 GestionDesClics();
 monServeur.begin();                          //Démarrage du monServeur
 Serial.println("Serveur HTTP démarré");
 return;                                  // on retourne à l'endroit ou la fonction a été appelée.

} }