From MRduino

Partie 2 : Contrôle du robot MRduino Wireless par UDP

Un tutoriel pour contrôler le robot MRduino Wireless par UDP avec un programme python.

UDP = User Datagram Protocol

MRduino-wireless_UDP

Le contrôle du robot est réaliser par un programme en langage python.

Le programme pour le robot

Ce programme permet au robot MRduino Wireless de

Il faut modifier votre SSID et mot de passe de votre réseau Wifi :

const char* ssid = "YOUR_SSID";  
const char* pass = "YOU_PASSWORD";  

Le programme complet :

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include <mrduino.h>

static void read_receptionCommande(String Commande);

int status = WL_IDLE_STATUS;
const char* ssid = "YOUR_SSID";  //  your network SSID (name)
const char* pass = "YOUR_PASS";       // your network password

unsigned int localPort = 12345;  

WiFiUDP Udp;
int tries=0;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);

  // setting up Station AP
  WiFi.begin(ssid, pass);
 
  // Wait for connect to AP
  Serial.print("[Connecting]");
  Serial.print(ssid);
  
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
    tries++;
    if (tries > 30)
    {
      break;
    }
  }
  Serial.println();

  printWifiStatus();

  Serial.println("Connected to wifi");
  Serial.print("Udp server started at port ");
  Serial.println(localPort);
  Udp.begin(localPort);
}

void loop()
{
int noBytes = Udp.parsePacket();
String received_command = "";
byte packetBuffer[512]; 

  if ( noBytes )
  {

    Serial.print("received a packet");

    // We've received a packet, read the data from it
    Udp.read(packetBuffer,noBytes); // read the packet into the buffer

    for (int i=1;i<=noBytes;i++)
    {
      received_command = received_command + char(packetBuffer[i - 1]);
    } // end for
   
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.endPacket();

    // execution de la commande
    Serial.println(received_command);

  } // end if
}

void printWifiStatus() 
{
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
} 

  • Compiler et télécharger le programme dans le robot MRduino Wireless

Le programme de contrôle

  • Lien pour télécharger le programme de contrôle (dossier Zip): MrduinoControler

Remarque : programme pour Windows

  • Dézipper le dossier :

dossier

  • Lancer le programme MRduinoControler.exe

Controler

Ce programme permet de contrôler les mouvements du robot et les trois leds. Ne pas oublier de saisir l’adresse IP correct du robot.

 

 

Les maths avec le robot MRduino !

L’apprentissage des mathématiques avec le robot mobile MRduino avec la programmation graphique (Blockly).

 


Les distances

Le premier exemple est le concept de distance.

Cet exemple permet de faire avancer le robot en ligne droite de 20 cm.

“Comment faire avancer MRduino d’une distance de 20 cm ?”

Voici l’algorithme pour faire avancer le robot de 20 cm :

  • Initialiser le robot MRduino,
  • Activer le contrôle : ceci permet d’activer le contrôle en distance et orientation du robot,
  • Appel du bloc avancer distance,

 

Étape n°1

Initialisation du robot MRduino avec l’ajout du bloc “Initialisation robot MRduino” :

math1

Étape n°2

Activation du contrôle, pour gérer les distances et les angles.

math2

Étape n°3

Appel du bloc “Avancer distance” avec en paramètre le nombre 20, afin d’avancer le robot de 20 cm.

math4


Les angles

Cette deuxième partie présente les angles géométriques :

“Comment faire tourner MRduino d’un angle de 90° ?”

C’est très simple !

Il faut appeler le bloc “Tourner à gauche degré” avec en paramètre l’angle de 90 °.

  • Voici le programme en Blockly pour tourner à gauche de 90° :

math5

Un autre exemple :

  • tourner à gauche de 45°,
  • allumer la led n°1
  • tourner droite de 180°
  • allumer la led n°2

math6


Forme géométrique

Maintenant, place à la réalisation d ‘une forme géométrique avec le robot MRduino :

Exercice n°1 :

Réaliser un carré de 10 cm de coté.

Réponses de l’exercice n°1:

math7

 

 

 

MRduino à l’Euro 2016 !

Le robot MRduino joue au football pour l’Euro 2016.

MRduino est équipé d’un bras avec deux servomoteurs SG90 :

  • Alimentation des servomoteurs avec le +BATT

FootEuro2016

Vidéo :

 

Le programme :

#include <Servo.h>
#include <mrduino.h>

Servo Servo1;
Servo Servo2;

int reception;
 
void setup()
{
    Servo1.attach(2, 1000, 2000);
    Servo2.attach(4, 1000, 2000);

    Servo1.write(90);
    Servo2.write(180);

    delay(500);

    Serial.begin(115200);
}

void loop() {


   // read IR reception sensor
  reception = irReceiver();

  // read command
  switch(reception)
  {
    case 2:
      forward(30);// Forward
    break;

    case 6:
      turnRight(30);// turn right
    break;

    case 4:
      turnLeft(30);// turn left
    break;

    case 8:
      back(30);// back
    break;

    case 5:
      stop();// stop
    break;

    case 7:
     Servo1.write(160);
     Servo2.write(90);
    break;

    case 9:
     Servo1.write(90);
     Servo2.write(180);
    break;
  }


}

 

 

Détection des chocs avec le robot MRPi1

Le robot MRPi1 est équipé d’un accéléromètre 3 axes permettant de détecter les chocs.

Voici une petite vidéo :

Ce programme lit les 3 axes de l’accéléromètre et suivant un seuil d’accélération de 0.1 g une led est allumé ou éteinte.

  • led n°1 : axe X
  • led n°2 : axe Y
  • led n°3 : axe Z

Le programme python :

from mrpi1_lib import *
import time

while 1:

  axeX = acceleroX();
  axeY = acceleroY();
  axeZ = acceleroZ();

  time.sleep(0.01)

  if(axeX > 0.1):
    led(1,1)
  else:
    led(1,0)   

  if(axeY > 0.1):
    led(2,1)
  else:
    led(2,0) 

  if(axeZ > 0.1):
    led(3,1)
  else:
    led(3,0)

 

Contrôle de MRduino avec une télécommande

Programme de contrôle du robot MRduino avec une télécommande :

#include <mrduino.h>

int reception;

void setup() 
{
  // init serial communication
  Serial.begin(115200);
}

void loop()
{
  // read IR reception sensor
  reception = irReceiver();

  // read command
  switch(reception)
  {
    case 2:
      forward(30);// Forward
    break;

    case 6:
      turnRight(30);// turn right
    break;

    case 4:
      turnLeft(30);// turn left
    break;

    case 8:
      back(30);// back
    break;

    case 5:
      stop();// stop
    break;
  }
  
}