Smartmobile : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Résumé)
(Téléchargement)
 
(35 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 5 : Ligne 5 :
  
 
La smartmobile utilise un Wemos pour communiquer avec le smartphone par Wifi.
 
La smartmobile utilise un Wemos pour communiquer avec le smartphone par Wifi.
 +
 +
  
 
== '''Matériel''' ==
 
== '''Matériel''' ==
Ligne 11 : Ligne 13 :
 
* 2 packs de 3 piles AAA
 
* 2 packs de 3 piles AAA
 
* Un module Wemos
 
* Un module Wemos
* Controleur de moteur
+
* Controleur de moteur (https://tronixstuff.com/2014/11/25/tutorial-l298n-dual-motor-controller-modules-and-arduino/)
 
* Cables  
 
* Cables  
* 2 Motoréducteurs avec roues
+
* 2 Motoréducteurs avec roues ( https://fr.aliexpress.com/item/TT-Motor-Voiture-Smart-Robot-Motor-ducteur-pour-arduino-Diy-Kit-Roues-Ch-ssis-De-la/32955649869.html?spm=a2g0s.9042311.0.0.27426c37wg8JSG)
 
* 1 Roue folle  
 
* 1 Roue folle  
 
* Boulons  
 
* Boulons  
Ligne 19 : Ligne 21 :
  
 
== '''Réalisation''' ==
 
== '''Réalisation''' ==
-Decouper la planche de cette façon :
+
*Decouper la planche de cette façon :
  
  
Ligne 25 : Ligne 27 :
 
   
 
   
 
[[Fichier:Plansmartmobile.png]]
 
[[Fichier:Plansmartmobile.png]]
 +
 +
*Percer 2 ou 4 trous devant (au centre) pour fixer la roue.
 +
*Coller les blocs de piles sur les cotés et les cartes au millieu (exemple si dessous)
 +
[[Image:vuedessus.jpg|500px]]
 +
*Coller les moteurs dessous (exemple si dessous)
 +
[[Image:vuedessous.jpg|500px]]
 +
*Percer un trou devant chaque moteur pour laisser passez les câbles
 +
*Souder les fils sur les moteurs
 +
[[Image:smartsoudure.jpg|500px]]
 +
*Pour le cablâge voir vidéo (et faire correspondre les broches avec celle de la wemos):
 +
https://www.youtube.com/watch?v=2AL7HfiRlp4&t=242s
 +
*Vous pouvez mettre de la colle sur la roue pour eviter qu'elle ce coince :
 +
 +
[[Fichier:cacolle.jpg |500px]]
 +
 +
== '''Code''' ==
 +
Code pour recupèré l'IP du robot :
 +
 +
<pre>#include <ESP8266WiFi.h>
 +
WiFiClient client;
 +
WiFiServer server(80);
 +
const char* ssid = "Test";
 +
const char* password = "12345678";
 +
 +
void setup()
 +
{
 +
  Serial.begin(115200);
 +
  connectWiFi();
 +
  server.begin();
 +
}
 +
 +
void loop()
 +
{
 +
 +
}
 +
 +
void connectWiFi()
 +
{
 +
  Serial.println("Connecting to WIFI");
 +
  WiFi.begin(ssid, password);
 +
  while ((!(WiFi.status() == WL_CONNECTED)))
 +
  {
 +
    delay(300);
 +
    Serial.print("..");
 +
  }
 +
  Serial.println("");
 +
  Serial.println("WiFi connected");
 +
  Serial.println("NodeMCU Local IP is : ");
 +
  Serial.print((WiFi.localIP()));
 +
}
 +
</pre>
 +
Code permetant de faire fonctionner le robot :
 +
 +
*Pour cela il faut avoir le logiciel arduino et ajouter le pilote ESP8266 pour la carte wemos.
 +
* voici le liens de téléchargement le pilote :(https://wiki.wemos.cc/tutorials:get_started:get_started_in_arduino/).
 +
*installer ensuite de pilote.
 +
 +
<pre>
 +
#include <ESP8266WiFi.h>
 +
 +
 +
/* define port */
 +
WiFiClient client;
 +
WiFiServer server(80);
 +
 +
/* WIFI settings */
 +
const char* ssid = "Test";
 +
const char* password = "12345678";
 +
 +
/* data received from application */
 +
String  data ="";
 +
 +
/* define L298N or L293D motor control pins */
 +
int leftMotorForward = 2;    /* GPIO2(D4) -> IN3  */
 +
int rightMotorForward = 15;  /* GPIO15(D8) -> IN1  */
 +
int leftMotorBackward = 0;    /* GPIO0(D3) -> IN4  */
 +
int rightMotorBackward = 13;  /* GPIO13(D7) -> IN2  */
 +
 +
 +
/* define L298N or L293D enable pins */
 +
int rightMotorENB = 14; /* GPIO14(D5) -> Motor-A Enable */
 +
int leftMotorENB = 12;  /* GPIO12(D6) -> Motor-B Enable */
 +
 +
void setup()
 +
{
 +
  /* initialize motor control pins as output */
 +
  pinMode(leftMotorForward, OUTPUT);
 +
  pinMode(rightMotorForward, OUTPUT);
 +
  pinMode(leftMotorBackward, OUTPUT); 
 +
  pinMode(rightMotorBackward, OUTPUT);
 +
 +
  /* initialize motor enable pins as output */
 +
  pinMode(leftMotorENB, OUTPUT);
 +
  pinMode(rightMotorENB, OUTPUT);
 +
 +
  /* start server communication */
 +
  server.begin();
 +
}
 +
 +
void loop()
 +
{
 +
    /* If the server available, run the "checkClient" function */ 
 +
    client = server.available();
 +
    if (!client) return;
 +
    data = checkClient ();
 +
 +
 +
    /* If the incoming data is "forward", run the "MotorForward" function */
 +
    if (data == "forward") MotorForward();
 +
    /* If the incoming data is "backward", run the "MotorBackward" function */
 +
    else if (data == "backward") MotorBackward();
 +
    /* If the incoming data is "left", run the "TurnLeft" function */
 +
    else if (data == "left") TurnLeft();
 +
    /* If the incoming data is "right", run the "TurnRight" function */
 +
    else if (data == "right") TurnRight();
 +
    /* If the incoming data is "stop", run the "MotorStop" function */
 +
    else if (data == "stop") MotorStop();
 +
}
 +
 +
void MotorForward(void) 
 +
{
 +
  digitalWrite(leftMotorENB,HIGH);
 +
  digitalWrite(rightMotorENB,HIGH);
 +
  digitalWrite(leftMotorForward,HIGH);
 +
  digitalWrite(rightMotorForward,HIGH);
 +
  digitalWrite(leftMotorBackward,LOW);
 +
  digitalWrite(rightMotorBackward,LOW);
 +
}
 +
 +
void MotorBackward(void) 
 +
{
 +
  digitalWrite(leftMotorENB,HIGH);
 +
  digitalWrite(rightMotorENB,HIGH);
 +
  digitalWrite(leftMotorBackward,HIGH);
 +
  digitalWrite(rightMotorBackward,HIGH);
 +
  digitalWrite(leftMotorForward,LOW);
 +
  digitalWrite(rightMotorForward,LOW);
 +
}
 +
 +
 +
void TurnLeft(void) 
 +
{
 +
  digitalWrite(leftMotorENB,HIGH);
 +
  digitalWrite(rightMotorENB,HIGH);
 +
  digitalWrite(leftMotorForward,LOW);
 +
  digitalWrite(rightMotorForward,HIGH);
 +
  digitalWrite(rightMotorBackward,LOW);
 +
  digitalWrite(leftMotorBackward,HIGH); 
 +
}
 +
 +
 +
void TurnRight(void) 
 +
{
 +
  digitalWrite(leftMotorENB,HIGH);
 +
  digitalWrite(rightMotorENB,HIGH);
 +
  digitalWrite(leftMotorForward,HIGH);
 +
  digitalWrite(rightMotorForward,LOW);
 +
  digitalWrite(rightMotorBackward,HIGH);
 +
  digitalWrite(leftMotorBackward,LOW);
 +
}
 +
 +
 +
void MotorStop(void) 
 +
{
 +
  digitalWrite(leftMotorENB,LOW);
 +
  digitalWrite(rightMotorENB,LOW);
 +
  digitalWrite(leftMotorForward,LOW);
 +
  digitalWrite(leftMotorBackward,LOW);
 +
  digitalWrite(rightMotorForward,LOW);
 +
  digitalWrite(rightMotorBackward,LOW);
 +
}
 +
 +
String checkClient (void)
 +
{
 +
  while(!client.available()) delay(1);
 +
  String request = client.readStringUntil('\r');
 +
  request.remove(0, 5);
 +
  request.remove(request.length()-9,9);
 +
  return request;
 +
}
 +
</pre>
 +
 +
 +
 +
== Téléchargement ==
 +
Application android :
 +
[[Fichier:AplliAndroidCommande.zip]]
 +
 +
Dezipper les fichiers et coller les dans votre telephone.
 +
 +
Voila l'interface sur votre téléphone :
 +
 +
[[Fichier:interf.jpg|500px]]
 +
 +
[[catégorie:Enib2019]]
 +
[[catégorie:Enib]]

Version actuelle datée du 18 janvier 2019 à 15:59

Résumé

Le projet consistant en la création d'un véhicule commandé via un smartphone android.

La smartmobile utilise un Wemos pour communiquer avec le smartphone par Wifi.


Matériel

Réalisation

  • Decouper la planche de cette façon :



Plansmartmobile.png

  • Percer 2 ou 4 trous devant (au centre) pour fixer la roue.
  • Coller les blocs de piles sur les cotés et les cartes au millieu (exemple si dessous)

Vuedessus.jpg

  • Coller les moteurs dessous (exemple si dessous)

Vuedessous.jpg

  • Percer un trou devant chaque moteur pour laisser passez les câbles
  • Souder les fils sur les moteurs

Smartsoudure.jpg

  • Pour le cablâge voir vidéo (et faire correspondre les broches avec celle de la wemos):

https://www.youtube.com/watch?v=2AL7HfiRlp4&t=242s

  • Vous pouvez mettre de la colle sur la roue pour eviter qu'elle ce coince :

Cacolle.jpg

Code

Code pour recupèré l'IP du robot :

#include <ESP8266WiFi.h>
WiFiClient client;
WiFiServer server(80);
const char* ssid = "Test";
const char* password = "12345678";

void setup() 
{
  Serial.begin(115200);
  connectWiFi();
  server.begin();
}

void loop() 
{

}

void connectWiFi()
{
  Serial.println("Connecting to WIFI");
  WiFi.begin(ssid, password);
  while ((!(WiFi.status() == WL_CONNECTED)))
  {
    delay(300);
    Serial.print("..");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("NodeMCU Local IP is : ");
  Serial.print((WiFi.localIP()));
}

Code permetant de faire fonctionner le robot :

 
#include <ESP8266WiFi.h>


/* define port */
WiFiClient client;
WiFiServer server(80);

/* WIFI settings */
const char* ssid = "Test";
const char* password = "12345678";

/* data received from application */
String  data =""; 

/* define L298N or L293D motor control pins */
int leftMotorForward = 2;     /* GPIO2(D4) -> IN3   */
int rightMotorForward = 15;   /* GPIO15(D8) -> IN1  */
int leftMotorBackward = 0;    /* GPIO0(D3) -> IN4   */
int rightMotorBackward = 13;  /* GPIO13(D7) -> IN2  */


/* define L298N or L293D enable pins */
int rightMotorENB = 14; /* GPIO14(D5) -> Motor-A Enable */
int leftMotorENB = 12;  /* GPIO12(D6) -> Motor-B Enable */

void setup()
{
  /* initialize motor control pins as output */
  pinMode(leftMotorForward, OUTPUT);
  pinMode(rightMotorForward, OUTPUT); 
  pinMode(leftMotorBackward, OUTPUT);  
  pinMode(rightMotorBackward, OUTPUT);

  /* initialize motor enable pins as output */
  pinMode(leftMotorENB, OUTPUT); 
  pinMode(rightMotorENB, OUTPUT);

  /* start server communication */
  server.begin();
}

void loop()
{
    /* If the server available, run the "checkClient" function */  
    client = server.available();
    if (!client) return; 
    data = checkClient ();


    /* If the incoming data is "forward", run the "MotorForward" function */
    if (data == "forward") MotorForward();
    /* If the incoming data is "backward", run the "MotorBackward" function */
    else if (data == "backward") MotorBackward();
    /* If the incoming data is "left", run the "TurnLeft" function */
    else if (data == "left") TurnLeft();
    /* If the incoming data is "right", run the "TurnRight" function */
    else if (data == "right") TurnRight();
    /* If the incoming data is "stop", run the "MotorStop" function */
    else if (data == "stop") MotorStop();
} 

void MotorForward(void)   
{
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorForward,HIGH);
  digitalWrite(rightMotorForward,HIGH);
  digitalWrite(leftMotorBackward,LOW);
  digitalWrite(rightMotorBackward,LOW);
}

void MotorBackward(void)   
{
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorBackward,HIGH);
  digitalWrite(rightMotorBackward,HIGH);
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(rightMotorForward,LOW);
}


void TurnLeft(void)   
{
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH); 
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(rightMotorForward,HIGH);
  digitalWrite(rightMotorBackward,LOW);
  digitalWrite(leftMotorBackward,HIGH);  
}


void TurnRight(void)   
{
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorForward,HIGH);
  digitalWrite(rightMotorForward,LOW);
  digitalWrite(rightMotorBackward,HIGH);
  digitalWrite(leftMotorBackward,LOW);
}


void MotorStop(void)   
{
  digitalWrite(leftMotorENB,LOW);
  digitalWrite(rightMotorENB,LOW);
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(leftMotorBackward,LOW);
  digitalWrite(rightMotorForward,LOW);
  digitalWrite(rightMotorBackward,LOW);
}

String checkClient (void)
{
  while(!client.available()) delay(1); 
  String request = client.readStringUntil('\r');
  request.remove(0, 5);
  request.remove(request.length()-9,9);
  return request;
}


Téléchargement

Application android : Fichier:AplliAndroidCommande.zip

Dezipper les fichiers et coller les dans votre telephone.

Voila l'interface sur votre téléphone :

Interf.jpg