Cours:StartMindstormEV3DEV

De troyesGEII
Révision datée du 9 octobre 2017 à 10:29 par Bjacquot (discussion | contributions) ({{Bleu|moteur de type "tacho"}})
Aller à : navigation, rechercher

Infos utiles

librairie brick

Pour commencer, nous utiliserons la librairie simplifiée "brick.h" dont nous allons explorer quelques aspects ici.

Programme minimum

Cette base minimum de programme devra être reprise systématiquement :

#include <stdio.h>
#include "brick.h"
#include <unistd.h>
#define Sleep( msec ) usleep(( msec ) * 1000 )

int main( void )
{
   if ( ev3_init() == -1 )
   {
     printf("\erreur d'initialisation\n");
     return ( 1 );
   }
   printf("initialisation des capteurs ... ");
   ev3_sensor_init();
   printf(" ok !\n");
   printf("initialisation des actionneurs ... ");
   while ( ev3_tacho_init() < 1 ) Sleep( 1000 );
   printf(" ok !\n");

   // début du programme


   // fin du programme
   ev3_uninit();
   printf("*** ( EV3 ) Bye! ***\n" );
   return(0);
}

Pour compiler et exécuter votre programme test.c , il suffit de :

gcc test.c -lev3dev-c -o test
./test

Capteurs

http://slideplayer.com/slide/10944320/

Capteur de couleur

On trouve 3 modes de mesure principaux :

COL-COLOR retourne un nombre entre 0 et 7 tel que :
0 ?? 1 noir 2 bleu
3 vert 4 jaune 5 rouge
6 blanc 7 marron
COL-REFLECT intensité de la lumière réfléchie entre 0 et 100
COL-AMBIENT intensité de la lumière ambiante entre 0 et 100

Il faudra tout d'abord initialiser le capteur et choisir le mode de mesure :

POOL_T capteurCouleur;
 
const char const *nomCouleur[] = { "?", "BLACK", "BLUE", "GREEN", "YELLOW", "RED", "WHITE", "BROWN" };
#define NB_COULEUR  (( int )( sizeof( nomCouleur ) / sizeof( nomCouleur[ 0 ])))
int couleur;
 
int initCapteurCouleur()
{
   capteurCouleur = sensor_search( LEGO_EV3_COLOR );
   if (capteurCouleur)
   {
       color_set_mode_col_color(capteurCouleur);
       //color_set_mode_col_reflect(capteurCouleur);
       //color_set_mode_col_ambient(capteurCouleur);
       printf( "capteur couleur connecté\n");
   }
   else
   {
       printf("vérifier le branchement du capteur couleur !\n");
       return (0);
   }
   return 1;
}

On utilisera ensuite le capteur par exemple de la façon suivante (à placer dans le main !!) :

   // début du programme
   if ( initCapteurCouleur()==0 )
   {
       ev3_uninit();
       return(-1);
   }
   int i;
   for (i=0;i<100;i++)
   {
       couleur=sensor_get_value0(capteurCouleur,0);
       if ( (couleur>=NB_COULEUR) || (couleur<0) )
       {
           printf("problème, couleur inconnue !");
       }
       else
       {
           printf("couleur n°:%d : %s\n",couleur,nomCouleur[couleur]);
       }
       Sleep(200);
   }
   // fin du programme

Actionneur

moteur de type "tacho"

On pensera bien évidemment à initialiser les moteurs :

#define moteurGauche   OUTC
#define moteurDroit    OUTB
int maxSpeedMoteurDroit;
int maxSpeedMoteurGauche;

int initMoteurs()
{
   if (tacho_is_plugged( moteurGauche|moteurDroit , TACHO_TYPE__NONE_ ))
   {
       maxSpeedMoteurDroit  = tacho_get_max_speed( moteurDroit, 0 );
       maxSpeedMoteurGauche = tacho_get_max_speed( moteurGauche, 0 );
       printf("moteurs trouvés, vitesses max : %d-%d\n",maxSpeedMoteurGauche,maxSpeedMoteurDroit);
   }
   else
   {
       printf("Attention, il faut brancher les moteurs !\n");
       printf("et au bon endroit !!!\n");
       return (0);
   }
   return 1;
}

Remarquons :

  • si on souhaite utiliser la même commande sur plusieurs moteur, on écrira par ex :
    • OUTA | OUTB | OUTC
    • moteurGauche | moteurDroit , si on a fait une association de moteur* avec OUT?
  • tacho_is_plugged : permet de vérifier la présence d'un (ou plusieurs) moteur tacho
  • tacho_get_max_speed : récupère la vitesse maximum d'un moteur

On pourra alors utiliser les moteurs par exemple de la façon suivante (toujours à placer dans le main bien entendu !) :

   if ( initMoteurs()==0 )
   {
       ev3_uninit();
       return(-1);
   }
   int i;
   for (i=0;i<10;i++)
   {
       tacho_set_speed_sp( moteurGauche|moteurDroit,  100);
       tacho_run_forever( moteurGauche|moteurDroit );
       Sleep(2000);
       tacho_stop(moteurDroit|moteurGauche);
       Sleep(200);
       tacho_set_speed_sp( moteurGauche,  -100);
       tacho_set_speed_sp( moteurDroit ,   100);
       tacho_run_forever( moteurGauche|moteurDroit );
       Sleep(1000);
       tacho_stop(moteurDroit|moteurGauche);
       Sleep(200);
   }
   tacho_stop(moteurDroit|moteurGauche);