revu de projet (1)

Upload: anasazio

Post on 03-Mar-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Revu de Projet (1)

    1/14

    1

    Communication arduino/android et

    commande des moteurs

    Tout dabord, quest ce quun Arduino ? Arduino est un projet open source cr par des passionns

    en Italie en 2005 pour des tudiants. Cest une plateforme lectronique basique laquelle on a

    affect un microcontrleur, ici lATMEGA 328. Loriginalit de ce projet tient dans le fait que

    lArduino seul ne peut faire quun nombre limit de choses mais en lui ajoutant des modules les

    possibilits offertes deviennent infinis. Il est programmable par ordinateur via un programme en

    JAVA ce qui garantie sa portabilit. La connexion avec lordinateur se fait via USB et le protocole

    RS232 est utilis. Le module basique est en plus de tout cela peu cher, son nom est larduino Uno Rev

    3, appel par abus de langage dans ce dossier Arduino .

    Ce dossier prsente comment lArduino peut permettre de rpondre aux besoins explicits dans lecahier des charges par le biais de rponse des problmatiques dpendantes les unes des autres.

    Problmatique : Comment permettre physiquement la carte Arduino de se

    connecter en Bluetooth au Smartphone ?

    Le Bluetooth :La carte Arduino seule na pas dantenne, il est donc impossible dtablir avec une connexion sans fil

    Bluetooth, il faut donc utiliser un module Bluetooth :

    Module Bluetooth :

    Permet dtablir la communication entre

    lArduino et le Smartphone grce au protocole

    Bluetooth et son antenne intgre.

    On peut ainsi relier larduino et le Smartphonegrce au protocole Bluetooth.

  • 7/26/2019 Revu de Projet (1)

    2/14

    2

    Problmatique : Comment permettre physiquement a la carte Arduino de

    commander les moteurs en respectant le cahier des charges ?

    Commande des moteurs :

    La carte arduino peut commander des moteurs, elle peut mme moduler cette vitesse grce

    lutilisation de signal PWM.

    Signal PWM : Le signal PWM est un signal permettant de moduler une tension moyenne que lon

    envoie le plus souvent un moteur, une tension et une priode T sont tablie, par exemple 5V

    pendant 10ms, cette tension est envoy sur la borne pendant une dure t, par exemple 4ms, ainsi, la

    borne est aliment en 5V pendant 4ms toutes les 10ms, la tension moyenne devient donc une

    tension de 2V. On obtient un

    taux de modulation valant t/T,

    ici 40%.

    En modifiant ce temps t onmodifie la tension

    dalimentation trs simplement.

    Si lArduino peut thoriquement commander les moteurs de cette faon, cela nest pas suffisant pour

    garantir son efficacit, un effet, en tudiant la documentation de larduino on apprend que lintensit

    sur chaque borne peut aller jusqu' 50mA (cf :http://arduino.cc/en/Main/ArduinoBoardUno)

    Or notre source de courant qui alimentera les moteur devra fournir une intensit pouvant aller

    jusqu' 800mA, il est donc impossible dutiliser directement larduino pour commander le moteur, il

    faut donc passer par un module dalimentation.

    Module dalimentation des moteurs:

    Ce module permet une alimentation en toute

    scurit des moteurs, il utilise une

    alimentation externe pour rcuprer le

    courant et le signal PWM de larduino pour

    alimenter jusqu' deux moteurs en courant

    continu. On notera aussi quil utilise 4 autres

    bornes de larduino pour permettre de

    paramtrer le sens de rotation de chaque

    moteur dans le sens horaire ou antihoraire.

    Il permet ainsi de respecter toutes les

    caractristiques du cahier des charges.

    http://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUnohttp://arduino.cc/en/Main/ArduinoBoardUno
  • 7/26/2019 Revu de Projet (1)

    3/14

    3

    Problmatique : Comment relier les deux modules lArduino ?

    Caractristique des connexions entre lArduino et ses modules :

    La connexion entre les diffrents modules et lArduino se fait par un empilement des modules sur

    lArduino ainsi, on peut connecter sur lArduino le module Bluetooth et au dessus du module

    Bluetooth le module dalimentation des moteurs.

    Chaque module Bluetooth utilise des bornes spcifiques dfinis dans la documentation technique de

    chacun deux:

    Cette connaissance du cblage est ncessaire pour la rsolution des problmatiques suivantes.

  • 7/26/2019 Revu de Projet (1)

    4/14

    4

    Problmatique : Comment programmer lArd ui no de fa o n po uv oi r dis cu ter

    avec le Smartphone et commander les moteurs ?

    Etablissement de la connexion Bluetooth entre larduino et le Smartphone:

    Pour se connecter en Bluetooth au Smartphone, lutilisation dune librairie t ncessaire, en effet

    ce module et vendu avec une librairie qui est ncessaire au bon fonctionnement de ce dernier, elle

    contient notamment une fonction qui permet de sauthentifier et de se connecter un autre

    priphrique Bluetooth, cette fonction appele au tout dbut du programme se divise en trois

    phases :

    - le paramtrage du module

    - la mise en attente de connexion

    - le vidage du buffer

    Quand la fonction est termin, mme si le module nest toujours pas connect, il va se mettre enattente et attendra quun Smartphone se connecte, voil le code C de ce paramtrage:

    Il a fallu aussi tablir un protocole denvoi des donnes du Smartphone vers lArduino.

    Paramtrage du

    module

    Mise en attente de

    connexion.

    Vidage du buffer

    blueToothSerial.begin(38400); // La vitesse de transmission est dfinie 38400 bauds

    blueToothSerial.print("\r\n+STWMOD=0\r\n"); // paramtrage du module en tant

    quesclave.

    blueToothSerial.print("\r\n+STNA=MotoDuino\r\n"); // paramtrage du nom du module en

    tant que MotoDuino

    blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permet a des priphriques dj connects

    de se connecter au module.

    blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Interdit la connexion automatique

    delay(2000); // This delay is required.

    blueToothSerial.print("\r\n+INQ=1\r\n"); // rend le priphrique connectable

    Serial.println("The slave bluetooth is inquirable!");

    delay(2000); // This delay is required.

    blueToothSerial.flush(); // Vidage du buffer, important pour ne pas lire des caractres

    rsiduels de la connexion ou dune dernire communication.

  • 7/26/2019 Revu de Projet (1)

    5/14

    5

    Problmatique : Sous quelle forme envoyer les donnes ncessai res lArduino

    pou r com man der les moteu rs ?

    Etablissement du protocole de communication entre le Smartphone et

    lArduino:

    Pour connaitre lorientation du tlphone, on dispose de trois informations, la position angulaire en

    Z, X et Y. Chacune de ces positions est dfinie par un nombre dcimal compris dans un usage normal

    entre -10 et 10 et ayant jusqu 5 dcimales. On a dfinit que le Smartphone devait envoyer ces

    informations sous la forme :

    Remarques :

    - On filtre le : qui ne sert pas sinon pour le debuguage.

    - La valeur envoy peut dpasser 10 ( ou tre infrieur -10), cela serait du des mouvement

    brusques.

    - La taille maximal dune valeur est donc de 10 caractres (lettre + signe - + 2 chiffres (nombre

    suprieur 10) + , + 5 dcimales ).

    On notera que pour obtenir les trois valeurs dans une mme entit il faudrait recevoir 40 caractres,

    en effet, il faut rcuprer lquivalent de 4 valeurs pour tre certain den avoir trois compltes(cf

    lexemple de trame), soit 40 caractres.

    Ex de trame potentiellement recevable :

    Ici X vaudrait -9,33257, Y vaudrait 2,73658 et Z vaudrait 10,23456.

    La position angulaire de laxe X,Y et Z sont ainsi envoys en continu et peuvent ainsi permettre a

    lArduino de connaitre linclinaison du tlphone sur chacun de ces axes.

    On se rappellera des informations donnes par Maxime sur limpact de lorientation Smartphone sur

    les valeurs envoys, nanmoins voici un petit rappel rapide ncessaire pour la comprhension de la

    partie suivante :

    X:1,23456Axe sur lequel t

    prlev linformation.Nombre dcimal

    entre -10 et 10.

    Dlimiteur.

    ,3456X:-9,33257Y:2,73658Z:10,23456X:1,27

    X>0 X

  • 7/26/2019 Revu de Projet (1)

    6/14

    6

    Problmatique : Comment traiter les informations reus de faon pouvoir

    commander les moteurs ?

    Cration du programme dinterprtation des donns reus et de contrle

    des moteurs :

    Tant que module

    Bluetooth non appair

    Tant que le

    tableau nest pas rempli

    Rception dun

    caractre Bluetooth et

    placement dans le

    tableau

    Extraction des

    valeurs en X, Y et

    Z du tableau

    Utilisation des valeurs

    prcdentes pourmoduler la vitesse du

    moteur

    Macro principale Variables Globales

    Cration dun

    tableau de 40 cases

    Cration des

    variables de type

    entier : X,Y et Z

    Extraction des valeurs en

    X, Y et Z du tableau

    Tant que le tableauna pas t lu entirement.

    Non

    Non

    Non

    Si la valeur

    est X

    Si la valeur

    est Y

    Si la valeur

    est Z

    Transformation en

    valeur numrique

    des 9 cases suivantes

    et placement dans la

    variable X.

    Transformation en

    valeur numrique

    des 9 cases suivantes

    et placement dans la

    variable Y.

    Transformation en

    valeur numrique

    des 9 cases suivantes

    et placement dans la

    variable Z.

    Lecture de la

    valeur dune case

    Oui

    Oui

    Oui

    Algorigramme du

    programme potentiel pour

    assurer la communication

    Arduino/Androd et la

    commande des moteurs.

    Tant que 1 vaut 1

    Paramtrage du module

    Bluetooth et mise en

    attente de connexion.

  • 7/26/2019 Revu de Projet (1)

    7/14

    7

    Lalgorithme dcoulant de cette algorigramme doit permettre de faire fonctionner lArduino en

    respectant le cahier des charges.

    Vidage du buffer.

    Modulation de la vitesse

    des moteurs

    Si Z plus grand

    que 0

    Paramtrage du

    module pour faire

    tourner le moteur

    dans le sens horaire.

    Paramtrage du module

    pour faire tourner le

    moteur dans le sens anti-

    horaire.

    Si X plus grand

    que 0

    Paramtrage du

    module tel que le

    vhicule tourne

    droite.

    Paramtrage dumodule tel que le

    vhicule tourne

    gauche.

    Dfinition de la vitesse

    de rotation des

    moteur en fonction de

    Y.

    Oui

    Oui

    Non

    Non

    Paramtrage du module Bluetooth

    et mise en attente de connexion.

    Paramtrage dumodule Bluetooth

    Mise en attente de

    connexion

    Pour plus

    dinformations

    retourner la page n4

    Toutes les problmatiques ont t rsolues et lalgorigramme t cr, il suffit

    maintenant de crer le programme et de passer aux phases de tests.

  • 7/26/2019 Revu de Projet (1)

    8/14

    8

    Cration du programme :

    Pour programmer larduino il faut utiliser un Environnement de Dveloppement Intgr

    communment appel IDE (en anglais), comme son nom lindique cest un logicielle qui permet de

    dvelopper pour une plateforme dans un ou plusieurs langages (compilation pour la plateforme

    donn). Il intgre un grand nombre doutil permettant de faciliter la cration des programmes, en

    voici une deux intgrs dans celui de larduino :

    - Un dbogueur, utile pour savoir o linterprtation du code chouera.

    - Un mulateur de moniteur srie, il permet de voir les messages que nous envoie larduino,

    extrmement utile lors du dveloppement des programmes, du dbogage ou encore des phases

    dexprimentations.

    Le langage utilis par lIDE est un langage extrmement proche du C, cest pour cela que lon dit par

    extension que lArduino est programm en C.

  • 7/26/2019 Revu de Projet (1)

    9/14

    9

    La phase dexprimentation est divise en trois parties :

    - la premire vrifie le bon fonctionnement de la partie Bluetooth et du traitement des donnes

    - la seconde vrifie que lArduino commande bien les moteurs sans quils soient connects

    - la dernire vrifie le bon fonctionnement de lArduino une fois mont sur le vhicule. ( faire)

    Vrification du bon fonctionnement de la partie Bluetooth et du traitement

    des donnes :

    Pour vrifier que cette partie fonctionner il faut dabord vrifier que les caractres envoys par le

    Smartphone sont bien reus, on utilise donc le moniteur Srie pour voir le contenu tableau :

    Chaque ligne reprsente le tableau remplie

    entirement, on voit qua chaque lignes

    sont prsentes au moins une fois les valeurs

    compltes de X, Y et Z. On peut donc

    extraire en toute scurit les valeurs.

    Il faut ensuite vrifier que lextraction des valeurs prsentes dans le tableau se fait bien de la faon

    que lon souhaite, on utilise de nouveau le moniteur srie et on affiche les valeurs extraites de

    chaque tableau :

    On voit que le contenu du tableau est

    chaque fois bien extrait. De plus, quand

    une valeur est suprieure 10

    (soulign), elle est rabaisse 9.99, cela

    permet de faciliter les calculs pour

    calculer la tension mettre dans les

    moteurs.

    On rcupre ainsi toutes les valeurs

    ncessaires la dfinition de la tension

    mettre dans les moteurs.

  • 7/26/2019 Revu de Projet (1)

    10/14

    10

    Vrification du bon fonctionnement de lArduino dans la commande des

    moteurs :

    Lalgorithme cr doit permettre de faire fonctionner la voiture en marche avant, marche arrire et

    de la faire tourner en avanant, le moniteur srie a tout dabord t utiliser pour vrifier cescaractristiques :

    Marche avant : Marche arrire :

    On voit que quand Z est positive le shield moteur est programm en marche avant et quand Z est

    ngatif le shield moteur est programm en marche arrire.

    Tournant vers la gauche : Tournant vers la droite :

    Modulation de la vitesse via linclinaison du tlphone sur laxe Y:

    Vhicule larrt: Vhicule en avance rapide :

    On voit que quand Y est proche de 10 (tlphone la vertical) les moteurs ne sont que trs peu

    aliments et qua linverse quand le tlphone est lhorizontal (Y proche de 0) les moteurs sont

    quasiment aliments au maximum.

    Ainsi lArduino devrait normalement pouvoir rpondre toutes les exigences dfinis dans le cahier

    des charges dans la communication arduino/androde en vue dune commande de vhicule motoris.

    Le vhicule ntant pas encore achev il est pour linstant impossible de tester larduino en

    conditions rels, le principe a tout de mme t vrifi avec un systme de LED.

    On voit ici que le moteur gauche serait moins

    aliment que le moteur droit ce qui permettrait

    au vhicule de tourner vers la gauche.

    On voit ici que le moteur droit serait moins

    aliment que le moteur gauche ce qui permettrait

    au vhicule de tourner vers la droite.

  • 7/26/2019 Revu de Projet (1)

    11/14

    11

    Maquette du montage effectu avec ISIS :

    Les Entrs M1 et M2

    simulent les mmes

    entrs prsentent sur le

    module dalimentation

    des moteurs, cest ces

    sorties que seront relis

    les moteurs. Cela permet

    de vrifier dans quel sens

    tournerait le moteur et

    lintensit lumineuse

    nous informe sur la

    tension libr.

  • 7/26/2019 Revu de Projet (1)

    12/14

    12

  • 7/26/2019 Revu de Projet (1)

    13/14

    13

    Annexe : Programme

    Arduino :

    #include

    //Software Serial Port

    #define RxD 6 // sont bienconfigurs mme si c'est

    bizarre...

    #define TxD 7

    #define DEBUG_ENABLED 1

    #define EA 9

    #define EB 10

    #define IN1 8

    #define IN2 11

    #define IN3 12

    #define IN4 13

    #define droite 1

    #define gauche 2

    SoftwareSerial

    blueToothSerial(RxD,TxD);

    void setup()

    {

    Serial.begin(9600);

    pinMode(RxD, INPUT);

    pinMode(TxD, OUTPUT);

    pinMode(13,OUTPUT);

    pinMode(12,OUTPUT);

    pinMode(11,OUTPUT);

    pinMode(10,OUTPUT);

    pinMode( 9,OUTPUT);

    pinMode( 8,OUTPUT);

    setupBlueToothConnection();

    }

    int restatVal(int val);

    void loop()

    {

    char recvChar;char tabVal[40];//(X-

    12.99999)10 max * 4

    int x;

    static float valX=0;

    static float valY=0;

    static float valZ=0;

    static int memZ=0;

    static int moteurA=0;

    static int moteurB=0;

    static int directionM = 0;

    while(1){

    if(blueToothSerial.available()){/

    /check if there's an , data sent

    from the remote bluetooth

    shield

    x=0;

    while(x='0'&&tabVal[x]='X'&&tabVal

    [x]

  • 7/26/2019 Revu de Projet (1)

    14/14

    14

    valeur+=(float)(tabVal[rang+2]-

    48)*0.1;

    valeur+=(float)(tabVal[rang+3]-

    48)*0.01;

    valeur+=(float)(tabVal[rang+4]-

    48)*0.001;

    if(tabVal[rang+2]==',')valeur=9.

    99;

    if(signe)valeur*=-1;

    valZ=valeur;

    }

    }

    Serial.print("X:");

    Serial.print(valX);

    Serial.print(" Y:");

    Serial.print(valY);

    Serial.print(" Z:");

    Serial.print(valZ);

    Serial.println("");

    if(valX=0&&memZ