Projet ENIB2017 - Ptit Bot Laser : Différence entre versions
(36 révisions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 8 : | Ligne 8 : | ||
== Auteurs == | == Auteurs == | ||
+ | [[Catégorie:GroupeD]] | ||
Ont participé à la rédaction de cette fiche : | Ont participé à la rédaction de cette fiche : | ||
− | * [[Utilisateur: | + | * [[Utilisateur:Couraj|Henri]] |
− | * [[Utilisateur:Hizzy-Sama| | + | * [[Utilisateur:Hilleria|Océane]] |
− | [[ | + | * [[Utilisateur:Hizzy-Sama|Thomas]] |
+ | * [[Utilisateur:Minnie|Sandrine]] | ||
== Outils et matériaux == | == Outils et matériaux == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== Outils ==== | ==== Outils ==== | ||
− | * | + | * Pistocolle |
− | * | + | * Colle à bois |
− | * | + | * Marqueurs |
− | * | + | * Paire de ciseaux |
− | * | + | * Découpeuse laser |
==== Liste du matériel ==== | ==== Liste du matériel ==== | ||
* 2 servo Moteur | * 2 servo Moteur | ||
− | * 1 Wemos + | + | * 1 Wemos + Accessoires |
* 1 interrupteur | * 1 interrupteur | ||
− | |||
* 4 piles AA 1,5V | * 4 piles AA 1,5V | ||
− | * Bois et carton | + | * Bois, MDF et carton |
+ | * Canette métallique | ||
+ | * Fil électrique 'à spécifier la quantité | ||
+ | * Fichier 2D à créer pour la découpeuse laser | ||
+ | Plans : '''les déposer''' | ||
==== Compétences ==== | ==== Compétences ==== | ||
− | * Bricolage, découpeuse laser | + | * Bricolage, découpeuse laser (& inkscape) |
==== Budget ==== | ==== Budget ==== | ||
+ | Achat sur des site de commande en Chine : 10~20€ | ||
+ | |||
+ | == Réaliser le projet == | ||
+ | |||
+ | Construisons notre robot étape par étape. | ||
+ | |||
+ | === Préparation === | ||
+ | |||
+ | Ouvrir ''et modifier si besoin'' les plans sur inkscape | ||
+ | |||
+ | Grace au plugin FabLab, exporter vers la découpeuse laser | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 3.jpeg | 250px]] | ||
+ | |||
+ | Placer le matériaux dans la machine puis commander la tête laser avec les flèches afin d'initier sa position. | ||
+ | |||
+ | Monter la plaque en forme de nid d'abeille à l'aide du niveau en métal grâce à la flèche du haut de la découpeuse laser. | ||
+ | |||
+ | Placer le dessin en fonction de la position de la tête laser indiquée sur le logiciel en temps réel en glissant celui-ci vers le plan en nid d'abeille et en faisant en sorte d'avoir assez de matière pour effectuer la découpe entièrement. | ||
+ | |||
+ | S'assurer que les ventilateurs et la pompe à air soit allumés car le logiciel ne détecte pas si celle-ci est active. | ||
+ | |||
+ | Lancer la découpe. | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 4.jpeg | 250px]] | ||
+ | |||
+ | En cas de problème, soulever la plaque transparente ce qui provoquera un arrêt d'urgence. | ||
+ | |||
+ | Une fois la découpe finie, récupérer les matériaux découpés et restants puis aspirer le fond de la machine en retirant la plaque. | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 5.jpeg | 250px]] | ||
+ | |||
+ | Découper la canette à l'aide des ciseaux et plier les plaques conductrices | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 7.jpeg | 250px]] | ||
+ | |||
+ | === Assemblage === | ||
+ | |||
+ | Assembler le châssis, fixer le conducteur et les paroi au pistolet à colle | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 6.jpeg | 250px]] | ||
+ | |||
+ | Visser les servo moteurs au châssis | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 8.jpeg | 250px]] | ||
+ | |||
+ | Brancher les servo moteurs à la carte | ||
+ | |||
+ | [[Fichier:Ptit Bot Laser 9.jpeg | 250px]] | ||
+ | |||
+ | === Flash de la carte === | ||
− | ... | + | Charger dans la carte le code suivant (ou une version modifiée) à l'aide du [https://www.arduino.cc/en/Main/Software logiciel d'arduino] en ayant modifié [http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json les préférences] |
− | == | + | <source lang="c"> |
− | '' | + | |
+ | #include <ESP8266WiFi.h> | ||
+ | ////////////////////// | ||
+ | // WiFi Definitions // | ||
+ | ////////////////////// | ||
+ | const char WiFiAPPSK[] = "o4ollivi"; //password | ||
+ | WiFiServer server(80); | ||
+ | |||
+ | #include <Servo.h> | ||
+ | /////////////////////// | ||
+ | // Servo Definitions // | ||
+ | /////////////////////// | ||
+ | Servo servo1; | ||
+ | Servo servo2; | ||
+ | |||
+ | ///////////////////// | ||
+ | // Pin Definitions // | ||
+ | ///////////////////// | ||
+ | //none | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | initHardware(); | ||
+ | setupWiFi(); | ||
+ | server.begin(); | ||
+ | servo1.attach(5); //pin 5 | ||
+ | servo2.attach(4); //pin 4 | ||
+ | servo1.write(91); | ||
+ | servo2.write(93); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | // Check if a client has connected | ||
+ | WiFiClient client = server.available(); | ||
+ | if (!client) return; | ||
+ | |||
+ | // Read the first line of the request | ||
+ | String req = client.readStringUntil('\r'); | ||
+ | |||
+ | // Clean the buffer | ||
+ | client.flush(); | ||
+ | |||
+ | // Match the request | ||
+ | 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 the web page response. Start with the common header: | ||
+ | String s = "HTTP/1.1 200 OK\r\n"; | ||
+ | s += "Content-Type: text/html\r\n\r\n"; | ||
+ | s += "<!DOCTYPE HTML>\r\n<html>\r\n"; | ||
+ | if (req.indexOf("/commande") != -1 ) | ||
+ | { | ||
+ | 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 \" />"; | ||
+ | } | ||
+ | |||
+ | // If we're setting the LED, print out a message saying we did | ||
+ | |||
+ | //////////// | ||
+ | //STOP | ||
+ | /////// | ||
+ | if (val == 0)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " stop "; //" recule " ?! | ||
+ | servo1.write(91); servo2.write(93); | ||
+ | } | ||
+ | |||
+ | //////////// | ||
+ | //RECULE | ||
+ | /////// | ||
+ | if (val == 1)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " recule "; | ||
+ | servo1.write(0); servo2.write(180); | ||
+ | } | ||
+ | |||
+ | //////////// | ||
+ | //AVANCE | ||
+ | /////// | ||
+ | if (val == 2 ) | ||
+ | { | ||
+ | s += " avance "; | ||
+ | servo1.write(180); servo2.write(0); | ||
+ | } | ||
+ | |||
+ | //////////// | ||
+ | //GAUCHE | ||
+ | /////// | ||
+ | if (val == 3)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " gauche "; | ||
+ | servo1.write(180); servo2.write(180); | ||
+ | } | ||
+ | |||
+ | //////////// | ||
+ | //DROITE | ||
+ | /////// | ||
+ | if (val == 4)//this left over from the sparkfun demo, not currently used | ||
+ | { // If we're reading pins, print out those values: | ||
+ | s += " droite "; | ||
+ | servo1.write(0); servo2.write(0); | ||
+ | } | ||
+ | |||
+ | s += "</html>\n"; | ||
+ | |||
+ | // Send the response to the client | ||
+ | client.print(s); | ||
+ | delay(1); | ||
+ | Serial.println("Client disconnected"); | ||
+ | client.flush(); | ||
+ | |||
+ | } | ||
+ | |||
+ | void setupWiFi() | ||
+ | { | ||
+ | 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 = "PtitBotLaser"; | ||
+ | |||
+ | char AP_NameChar[AP_NameString.length() + 1]; | ||
+ | memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar | ||
+ | |||
+ | 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); | ||
+ | } | ||
+ | //Modified version by Hizzy-sama | ||
+ | //See more at: http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf | ||
+ | </source> | ||
+ | |||
+ | === Programmation === | ||
+ | |||
+ | Commencer par se connecter au signal WiFi "PtitBotLaser" avec mot de passe "o4ollivi" | ||
+ | |||
+ | Il y a deux façons de contrôler le robot : | ||
+ | |||
+ | ==== De manière directe ==== | ||
+ | |||
+ | Envoyer des requêtes HTML au bot à l'aide d'un navigateur. | ||
− | + | * [http://192.168.4.1/avance http://192.168.4.1/avance] | |
+ | * [http://192.168.4.1/recule http://192.168.4.1/recule] | ||
+ | * [http://192.168.4.1/gauche http://192.168.4.1/gauche] | ||
+ | * [http://192.168.4.1/droite http://192.168.4.1/droite] | ||
+ | * [http://192.168.4.1/stop http://192.168.4.1/stop] | ||
− | === | + | ==== De manière ordonnée ==== |
− | |||
− | + | On rédige un script qui va envoyer les requête à notre place. | |
− | |||
+ | On peut par exemple utiliser [http://letsmakerobots.com/node/ai2.appinventor.mit.edu/?galleryId=5535939351019520 AppInventor] ou [http://snap4arduino.org/ Snap4Arduino] | ||
− | == Comment ça marche ? == | + | == Comment ça marche ? == |
=== Observations === | === Observations === | ||
Ligne 63 : | Ligne 273 : | ||
=== Explications === | === Explications === | ||
− | ''Etre capable de vulgariser au maximum ces connaissances de façon simple et ludique, afin de les transmettre à un plus grand nombre. | + | ''Etre capable de vulgariser au maximum ces connaissances de façon simple et ludique, afin de les transmettre à un plus grand nombre.'' |
− | '' | ||
''Texte + images/photos'' | ''Texte + images/photos'' | ||
Ligne 72 : | Ligne 281 : | ||
''Texte + images/photos'' | ''Texte + images/photos'' | ||
− | |||
== Et dans la vie de tous les jours ? == | == Et dans la vie de tous les jours ? == | ||
− | '' | + | Ce petit robot est simple à créer et montre la facilité qu'on a de comprendre et réaliser les jouets d'aujourd'hui |
− | |||
== Vous aimerez aussi == | == Vous aimerez aussi == | ||
''Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.'' | ''Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.'' | ||
+ | * [[Ptit_bot_3D|Version imprimante 3D]] | ||
+ | * [[Ptit_bot_debrouille|Version débrouille]] | ||
+ | == Sources et ressources utiles == | ||
− | == | + | * [http://www.ancien.wikidebrouillard.org/index.php?title=Petit_Bot_un_robot_controlable_en_Wifi Tuto sur le wiki débrouillard] |
− | + | * [http://letsmakerobots.com/node/48201 Tuto sur let's make robots] | |
+ | ==catégorie== | ||
+ | [[Catégorie:Arduino]] | ||
+ | [[Catégorie:Robot]] | ||
+ | [[Catégorie:découpeuse laser]] |
Version actuelle datée du 26 août 2024 à 09:36
Cette page est une fiche écrite dans le cadre de l'Inter Semestre ENIB 2017
Le contenu de cette fiche est en cours de rédaction, elle va s'étoffer pendant tout le mois de janvier !
Sommaire
P'tit Bot version découpeuse laser
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.
Auteurs
Ont participé à la rédaction de cette fiche :
Outils et matériaux
Outils
- Pistocolle
- Colle à bois
- Marqueurs
- Paire de ciseaux
- Découpeuse laser
Liste du matériel
- 2 servo Moteur
- 1 Wemos + Accessoires
- 1 interrupteur
- 4 piles AA 1,5V
- Bois, MDF et carton
- Canette métallique
- Fil électrique 'à spécifier la quantité
- Fichier 2D à créer pour la découpeuse laser
Plans : les déposer
Compétences
- Bricolage, découpeuse laser (& inkscape)
Budget
Achat sur des site de commande en Chine : 10~20€
Réaliser le projet
Construisons notre robot étape par étape.
Préparation
Ouvrir et modifier si besoin les plans sur inkscape
Grace au plugin FabLab, exporter vers la découpeuse laser
Placer le matériaux dans la machine puis commander la tête laser avec les flèches afin d'initier sa position.
Monter la plaque en forme de nid d'abeille à l'aide du niveau en métal grâce à la flèche du haut de la découpeuse laser.
Placer le dessin en fonction de la position de la tête laser indiquée sur le logiciel en temps réel en glissant celui-ci vers le plan en nid d'abeille et en faisant en sorte d'avoir assez de matière pour effectuer la découpe entièrement.
S'assurer que les ventilateurs et la pompe à air soit allumés car le logiciel ne détecte pas si celle-ci est active.
Lancer la découpe.
En cas de problème, soulever la plaque transparente ce qui provoquera un arrêt d'urgence.
Une fois la découpe finie, récupérer les matériaux découpés et restants puis aspirer le fond de la machine en retirant la plaque.
Découper la canette à l'aide des ciseaux et plier les plaques conductrices
Assemblage
Assembler le châssis, fixer le conducteur et les paroi au pistolet à colle
Visser les servo moteurs au châssis
Brancher les servo moteurs à la carte
Flash de la carte
Charger dans la carte le code suivant (ou une version modifiée) à l'aide du logiciel d'arduino en ayant modifié les préférences
#include <ESP8266WiFi.h>
//////////////////////
// WiFi Definitions //
//////////////////////
const char WiFiAPPSK[] = "o4ollivi"; //password
WiFiServer server(80);
#include <Servo.h>
///////////////////////
// Servo Definitions //
///////////////////////
Servo servo1;
Servo servo2;
/////////////////////
// Pin Definitions //
/////////////////////
//none
void setup()
{
initHardware();
setupWiFi();
server.begin();
servo1.attach(5); //pin 5
servo2.attach(4); //pin 4
servo1.write(91);
servo2.write(93);
}
void loop()
{
// Check if a client has connected
WiFiClient client = server.available();
if (!client) return;
// Read the first line of the request
String req = client.readStringUntil('\r');
// Clean the buffer
client.flush();
// Match the request
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 the web page response. Start with the common header:
String s = "HTTP/1.1 200 OK\r\n";
s += "Content-Type: text/html\r\n\r\n";
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
if (req.indexOf("/commande") != -1 )
{
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 \" />";
}
// If we're setting the LED, print out a message saying we did
////////////
//STOP
///////
if (val == 0)//this left over from the sparkfun demo, not currently used
{ // If we're reading pins, print out those values:
s += " stop "; //" recule " ?!
servo1.write(91); servo2.write(93);
}
////////////
//RECULE
///////
if (val == 1)//this left over from the sparkfun demo, not currently used
{ // If we're reading pins, print out those values:
s += " recule ";
servo1.write(0); servo2.write(180);
}
////////////
//AVANCE
///////
if (val == 2 )
{
s += " avance ";
servo1.write(180); servo2.write(0);
}
////////////
//GAUCHE
///////
if (val == 3)//this left over from the sparkfun demo, not currently used
{ // If we're reading pins, print out those values:
s += " gauche ";
servo1.write(180); servo2.write(180);
}
////////////
//DROITE
///////
if (val == 4)//this left over from the sparkfun demo, not currently used
{ // If we're reading pins, print out those values:
s += " droite ";
servo1.write(0); servo2.write(0);
}
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disconnected");
client.flush();
}
void setupWiFi()
{
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 = "PtitBotLaser";
char AP_NameChar[AP_NameString.length() + 1];
memset(AP_NameChar, 0, AP_NameString.length() + 1);//zero out AP_NameChar
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);
}
//Modified version by Hizzy-sama
//See more at: http://www.esp8266.com/viewtopic.php?f=29&t=6419#sthash.gd1tJhwU.dpuf
Programmation
Commencer par se connecter au signal WiFi "PtitBotLaser" avec mot de passe "o4ollivi"
Il y a deux façons de contrôler le robot :
De manière directe
Envoyer des requêtes HTML au bot à l'aide d'un navigateur.
- http://192.168.4.1/avance
- http://192.168.4.1/recule
- http://192.168.4.1/gauche
- http://192.168.4.1/droite
- http://192.168.4.1/stop
De manière ordonnée
On rédige un script qui va envoyer les requête à notre place.
On peut par exemple utiliser AppInventor ou Snap4Arduino
Comment ça marche ?
Observations
Texte + images/photos
Explications
Etre capable de vulgariser au maximum ces connaissances de façon simple et ludique, afin de les transmettre à un plus grand nombre.
Texte + images/photos
Plus d'explications
Entrer dans des explications techniques et scientifiques plus complexes, mais toujours de manière ludique.
Texte + images/photos
Et dans la vie de tous les jours ?
Ce petit robot est simple à créer et montre la facilité qu'on a de comprendre et réaliser les jouets d'aujourd'hui
Vous aimerez aussi
Liens vers des projets ou des expériences complémentaires pour mieux comprendre son fonctionnement.