Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Petit Bot un robot controlable en Wifi

Petit Bot un robot controlable en Wifi

De Wikidebrouillard.

(Matériel)
(Le code)
Ligne 38 : Ligne 38 :
==Le code==
==Le code==
-
<pre>////////////////
+
<pre>
-
//Le Petit Bot//
+
///////////////
-
////////////////
+
// Petit Bot //
-
/* un programme conçu par Julien Rat sous licence CC-By-Sa.
+
///////////////
-
Ce programme sert à piloter le "Petit Bot".
+
// Un programme pedagogique des petits debrouillards ?=+ pour gerer le robot "Petit Bot"
-
C'est un robot pédagogique, très peu cher, utilisé par les petits débrouillards*/
+
// "Petit Bot" est un robot simple, a bas cout, realisable de multiples facons.
-
 
+
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
-
#include <ESP8266WiFi.h>
+
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
-
 
+
// Sous licence CC-By-Sa
-
//////////////////////
+
// Par des gens bien
-
//Définition du Wifi//
+
-
//////////////////////
+
-
const char WiFiAPPSK[] = "1234567890"; //mot de passe
+
 +
#include <ESP8266WiFi.h> // on appelle la bibliotheque qui gere le WemosD1 mini
//////////////////////////
//////////////////////////
-
//Définition des broches//
+
// Definition du WiFi //
//////////////////////////
//////////////////////////
 +
const char WiFiAPPSK[] = "1234567890"; //C'est le mot de passe du wifi "petit bot"
 +
 +
/////////////////////////////
 +
// Attribution des broches //
 +
/////////////////////////////
-
#include <Servo.h>
+
#include <Servo.h> //on appelle la bibliotheque qui gere les servomoteurs
-
Servo monservo1;
+
Servo monservo1; //nom du servo qui gere la premiere roue
-
Servo monservo2;
+
Servo monservo2; //seconde roue
WiFiServer server(80);
WiFiServer server(80);
Ligne 71 : Ligne 74 :
   monservo1.attach(5);
   monservo1.attach(5);
   monservo2.attach(4);
   monservo2.attach(4);
-
   monservo1.write(91);  
+
   monservo1.write(91); //pour mettre les servomoteur à l'arret, on leur donne une valeur au milieu entre 0 et 180.
   monservo2.write(93);  
   monservo2.write(93);  
Ligne 78 : Ligne 81 :
void loop()
void loop()
{
{
-
   // Regarder si un client s'est connecté
+
   // Vérifie si il y a navigateur connecte
   WiFiClient client = server.available();
   WiFiClient client = server.available();
   if (!client) {
   if (!client) {
Ligne 84 : Ligne 87 :
   }
   }
-
   // Lire la première ligne de la requête
+
   // Lit la premiere ligne de la requete
   String req = client.readStringUntil('\r');
   String req = client.readStringUntil('\r');
    
    
   client.flush();
   client.flush();
-
   // Tester la requête pour identifier la consigne
+
   // affecte une valeur a "val" suivant la requete
   int val = -1;  
   int val = -1;  
Ligne 105 : Ligne 108 :
-
   // Prépare la page web de réponse. Débute par le l’en-tête (header) commun :
+
   // Prepare la page web de réponse. on commence par le "header" commun; (le code HTML sera ecrit dans la chaine de carcatere s).
   String s = "HTTP/1.1 200 OK\r\n";
   String s = "HTTP/1.1 200 OK\r\n";
   s += "Content-Type: text/html\r\n\r\n";
   s += "Content-Type: text/html\r\n\r\n";
-
   s += "<!DOCTYPE HTML>\r\n<html>\r\n";
+
   s += "<!DOCTYPE HTML>\r\n";
-
   if (req.indexOf("/commande") != -1 ) {
+
   s += "<html>\r\n";
-
    s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/1';\" value=\" OFF \" />";
+
-
    s += "<input type=\"button\" onclick=\"location.href='192.168.4.1/led/0';\" value=\" ON \" />";
+
 +
  s += "Le petit bot ";
 +
 +
  // on va finaliser la chaine de caracteres et envoyer les instructions
 +
  if (val == 2 ) //Recule
 +
  {
 +
    s += " recule ";      //comme les servomoteurs sont colles un dans un sens et le second dans l'autre sens, il faut leur donner a chacun des instructions inverses.
 +
    monservo2.write(0);  //servo 2 roule vers l'arriere.
 +
    monservo1.write(180); //servo 1 roule vers l'arriere.
   }
   }
-
  // Si on a reçu l’instruction, il faut la l’appliquer au robot
+
   if (val == 1)//Avance
-
   if (val == 2 ) //avance
+
   {
   {
     s += " avance ";
     s += " avance ";
-
     monservo2.write(0); //avance
+
     monservo2.write(180); //vers l'avant.
-
     monservo1.write(180); //avance
+
     monservo1.write(0);   //vers l'avant.
   }
   }
-
   if (val == 1)//recule
+
   if (val == 0)//stop
   {  
   {  
-
     s += " recule ";
+
     s += " est a l'arret ";
-
     monservo2.write(180);  //recule
+
     monservo1.write(91);  //stop
-
     monservo1.write(0);  //recule
+
     monservo2.write(93);  //stop
   }
   }
-
   if (val == 0)
+
   if (val == 3)//tourne a gauche
   {  
   {  
-
     s += " recule ";
+
     s += " tourne a gauche "; //Pour faire tourner, il suffit qu'une roue tourne dans un sens et la seconde dans le sens inverse
-
     monservo1.write(91); //recule
+
     monservo1.write(180);     //vers l'avant.
-
     monservo2.write(93); //recule
+
     monservo2.write(180);     //vers l'arriere.
   }
   }
-
   if (val == 3)
+
   if (val == 4)//tourne a droite
   {  
   {  
-
     s += " gauche ";
+
     s += " tourne a droite ";
-
     monservo1.write(180);  //gauche
+
     monservo1.write(0);  //vers l'arriere.
-
     monservo2.write(180);  //recule
+
     monservo2.write(0);  //vers l'avant.
   }
   }
-
   if (val == 4)
+
    
-
   {
+
   s += "<br>"; //aller a la ligne
-
    s += " droite ";
+
  s += "<br>"; //aller a la ligne
-
    monservo1.write(0); //droite
+
  s += "<a href=\"/stop\"\"><button>Stop </button></a>\r\n";// creer un boutton "Stop"
-
    monservo2.write(0); //recule
+
  s += "<a href=\"/avance\"\"><button>Avance </button></a>\r\n";
-
   }
+
  s += "<a href=\"/recule\"\"><button>Recule </button></a>\r\n";
-
 
+
   s += "<a href=\"/droite\"\"><button>Droite </button></a>\r\n";
 +
  s += "<a href=\"/gauche\"\"><button>Gauche </button></a><br />\r\n";
-
   s += "</html>\n";
+
   s += "</html>\n"; //Fin de la page Web
-
   // Envoie la réponse au client
+
   // Envoie de la reponse au navigateur
   client.print(s);
   client.print(s);
   delay(1);
   delay(1);
-
   Serial.println("Client deconnectay »);
+
   Serial.println("Client disconnected");
   client.flush();
   client.flush();
}
}
-
void setupWiFi()
+
void setupWiFi() //reglage du reseau wifi emis par le WemosD1 mini
{
{
   WiFi.mode(WIFI_AP);
   WiFi.mode(WIFI_AP);
Ligne 165 : Ligne 174 :
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
   macID.toUpperCase();
   macID.toUpperCase();
-
   String AP_NameString = "PetitBot";
+
   String AP_NameString = "PetitBot"; //nom du reseau
   char AP_NameChar[AP_NameString.length() + 1];
   char AP_NameChar[AP_NameString.length() + 1];
-
   memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar
+
   memset(AP_NameChar, 0, AP_NameString.length() + 1);
   for (int i = 0; i < AP_NameString.length(); i++)
   for (int i = 0; i < AP_NameString.length(); i++)
Ligne 178 : Ligne 187 :
void initHardware()
void initHardware()
{
{
-
   Serial.begin(115200);//ouvre le moniteur série
+
   Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur
-
} //Ce programme est inspiré de celui-ci : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
+
} </pre>
-
</pre>
+
== '''Liens avec d'autres réalisation''' ==
== '''Liens avec d'autres réalisation''' ==

Version du 29 janvier 2017 à 23:52

Article incomplet en cours de rédaction
Modèle:Vidéo


Sommaire

Présentation de la réalisation

Tutoriel pour construire et un petit robot contrôlable en Wifi.

Il sera contrôlable depuis un ordinateur mais aussi tablette ou smartphone, quelque soit l'appareil.

Matériel

Version imprimée en 3D

A imprimer avec une imprimante 3D

Sans imprimante 3D

A réaliser dans du carton rigide :

  • un châssis de 12cm par 7,5cm.
  • réaliser en mode débrouille, un support pour 4 piles de 1,5V

La réalisation

Coller les différentes pièces du petit bot.

1 - l'axe des servo-moteurs aux roues

2 - Les servos à fixer au châssis

3 - installez un marqueur à l'avant

Schéma de cablage

Le code

///////////////
// Petit Bot //
///////////////
// Un programme pedagogique des petits debrouillards ?=+ pour gerer le robot "Petit Bot"
// "Petit Bot" est un robot simple, a bas cout, realisable de multiples facons.
// Voir sur http://wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi
// Ce programme est inspire de : http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
// Sous licence CC-By-Sa
// Par des gens bien

#include <ESP8266WiFi.h> // on appelle la bibliotheque qui gere le WemosD1 mini
//////////////////////////
//  Definition du WiFi //
//////////////////////////
const char WiFiAPPSK[] = "1234567890"; //C'est le mot de passe du wifi "petit bot"

/////////////////////////////
// Attribution des broches //
/////////////////////////////

#include <Servo.h> //on appelle la bibliotheque qui gere les servomoteurs

Servo monservo1; //nom du servo qui gere la premiere roue

Servo monservo2; //seconde roue

WiFiServer server(80);

void setup()
{
  initHardware();
  setupWiFi();
  server.begin();
  monservo1.attach(5);
  monservo2.attach(4);
  monservo1.write(91); //pour mettre les servomoteur à l'arret, on leur donne une valeur au milieu entre 0 et 180.
  monservo2.write(93); 

}

void loop()
{
  // Vérifie si il y a navigateur connecte
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Lit la premiere ligne de la requete
  String req = client.readStringUntil('\r');
  
  client.flush();

  // affecte une valeur a "val" suivant la requete 
  int val = -1; 

  if (req.indexOf("/stop") != -1)
    val = 0; 
  else if (req.indexOf("/avance") != -1)
    val = 1;
  else if (req.indexOf("/recule") != -1)
    val = 2; 
  else if (req.indexOf("/gauche") != -1)
    val = 3; 
  else if (req.indexOf("/droite") != -1)
    val = 4; 



  // Prepare la page web de réponse. on commence par le "header" commun; (le code HTML sera ecrit dans la chaine de carcatere s).
  String s = "HTTP/1.1 200 OK\r\n";
  s += "Content-Type: text/html\r\n\r\n";
  s += "<!DOCTYPE HTML>\r\n";
  s += "<html>\r\n";

  s += "Le petit bot ";

  // on va finaliser la chaine de caracteres et envoyer les instructions
  if (val == 2 ) //Recule
  {
    s += " recule ";      //comme les servomoteurs sont colles un dans un sens et le second dans l'autre sens, il faut leur donner a chacun des instructions inverses.
    monservo2.write(0);   //servo 2 roule vers l'arriere. 
    monservo1.write(180); //servo 1 roule vers l'arriere. 
  }
  if (val == 1)//Avance
  {
    s += " avance ";
    monservo2.write(180); //vers l'avant.
    monservo1.write(0);   //vers l'avant.
  }
  if (val == 0)//stop
  { 
    s += " est a l'arret ";
    monservo1.write(91);  //stop
    monservo2.write(93);  //stop
  }
  if (val == 3)//tourne a gauche
  { 
    s += " tourne a gauche "; //Pour faire tourner, il suffit qu'une roue tourne dans un sens et la seconde dans le sens inverse
    monservo1.write(180);     //vers l'avant. 
    monservo2.write(180);     //vers l'arriere.
  }
  if (val == 4)//tourne a droite
  { 
    s += " tourne a droite ";
    monservo1.write(0);  //vers l'arriere.
    monservo2.write(0);  //vers l'avant. 
  }
  
  s += "<br>"; //aller a la ligne
  s += "<br>"; //aller a la ligne
  s += "<a href=\"/stop\"\"><button>Stop </button></a>\r\n";// creer un boutton "Stop"
  s += "<a href=\"/avance\"\"><button>Avance </button></a>\r\n";
  s += "<a href=\"/recule\"\"><button>Recule </button></a>\r\n";
  s += "<a href=\"/droite\"\"><button>Droite </button></a>\r\n";
  s += "<a href=\"/gauche\"\"><button>Gauche </button></a><br />\r\n";

  s += "</html>\n"; //Fin de la page Web

  // Envoie de la reponse au navigateur
  client.print(s);
  delay(1);
  Serial.println("Client disconnected");
  client.flush();

}

void setupWiFi() //reglage du reseau wifi emis par le WemosD1 mini
{
  WiFi.mode(WIFI_AP);
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "PetitBot"; //nom du reseau

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);

  for (int i = 0; i < AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

  WiFi.softAP(AP_NameChar, WiFiAPPSK, 7);
}

void initHardware()
{
  Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur
} 

Liens avec d'autres réalisation

Expériences sur Wikidébrouillard

Voir la Catégorie

Applications : liens avec le quotidien

le wifi peut être utilisé pour diverses applications, ici, contrôler un robot.

Lieux propices à sa réalisation

Fablab, dans l'atelier de bidouille électronique le plus proche ?

Catégories

AR
TE

Petit Bot un robot controlable en Wifi

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique