(→Matériel) |
(→Le code) |
||
Ligne 38 : | Ligne 38 : | ||
==Le code== | ==Le code== | ||
- | <pre> | + | <pre> |
- | // | + | /////////////// |
- | + | // 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> | + | #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() | ||
{ | { | ||
- | // | + | // Vérifie si il y a navigateur connecte |
WiFiClient client = server.available(); | WiFiClient client = server.available(); | ||
if (!client) { | if (!client) { | ||
Ligne 84 : | Ligne 87 : | ||
} | } | ||
- | // | + | // Lit la premiere ligne de la requete |
String req = client.readStringUntil('\r'); | String req = client.readStringUntil('\r'); | ||
client.flush(); | client.flush(); | ||
- | // | + | // affecte une valeur a "val" suivant la requete |
int val = -1; | int val = -1; | ||
Ligne 105 : | Ligne 108 : | ||
- | // | + | // 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 | + | 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 | |
- | if (val == | + | |
{ | { | ||
s += " avance "; | s += " avance "; | ||
- | monservo2.write( | + | monservo2.write(180); //vers l'avant. |
- | monservo1.write( | + | monservo1.write(0); //vers l'avant. |
} | } | ||
- | if (val == | + | if (val == 0)//stop |
{ | { | ||
- | s += " | + | s += " est a l'arret "; |
- | + | monservo1.write(91); //stop | |
- | + | monservo2.write(93); //stop | |
} | } | ||
- | if (val == | + | if (val == 3)//tourne a gauche |
{ | { | ||
- | s += " | + | 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( | + | monservo1.write(180); //vers l'avant. |
- | monservo2.write( | + | monservo2.write(180); //vers l'arriere. |
} | } | ||
- | if (val == | + | if (val == 4)//tourne a droite |
{ | { | ||
- | s += " | + | s += " tourne a droite "; |
- | monservo1.write( | + | monservo1.write(0); //vers l'arriere. |
- | monservo2.write( | + | 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"; | + | s += "</html>\n"; //Fin de la page Web |
- | // Envoie la | + | // Envoie de la reponse au navigateur |
client.print(s); | client.print(s); | ||
delay(1); | delay(1); | ||
- | Serial.println("Client | + | 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); | + | 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 | + | Serial.begin(115200); //ouvre une connection serie pour monitorer le fonctionnement du code quand on reste branche a l'ordinateur |
- | } | + | } </pre> |
- | </pre> | + | |
== '''Liens avec d'autres réalisation''' == | == '''Liens avec d'autres réalisation''' == |
Sommaire |
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.
A imprimer avec une imprimante 3D
A réaliser dans du carton rigide :
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
/////////////// // 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 }
Voir la Catégorie
le wifi peut être utilisé pour diverses applications, ici, contrôler un robot.
Fablab, dans l'atelier de bidouille électronique le plus proche ?
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique