40
Institut supérieur de l'aéronautique et de l'espace STAGE DE FIN DE SCOLARITE Réalisé par : SAINT-JULIEN Jérôme Tuteurs Paul Sabatier : LEYMARIE Hélène VIALLON Christophe Tuteur ISAE : CALMETTES Vincent Année 2010-2011

STAGE DE FIN DE SCOLARITE - Freethierryperisse.free.fr/documents/projet_linel/... · 3 I – Description du projet II-1 Rappel du sujet Avec ce stage, il est proposé au candidat

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • Institut supérieur de l'aéronautique et de l'espace

    STAGE DE FIN DE SCOLARITE

    Réalisé par : SAINT-JULIEN Jérôme

    Tuteurs Paul Sabatier : LEYMARIE Hélène VIALLON Christophe

    Tuteur ISAE : CALMETTES Vincent

    Année 2010-2011

  • 2

    I – Description du projet _____________________________________________________ 3

    II-1 Rappel du sujet ____________________________________________________________ 3

    II-2 Détail et réalisation pratique du sujet __________________________________________ 3

    II - Choix des matériels utilisés : _______________________________________________ 5

    III – Le système Arduino : ____________________________________________________ 6

    III-1 Introduction ______________________________________________________________ 6

    III-2 La carte UNO _____________________________________________________________ 7 a) Synthèse des caractéristiques __________________________________________________________ 7 b) Brochage de la carte Uno : ___________________________________________________________ 8 c) Alimentation ______________________________________________________________________ 8 d) Mémoire _________________________________________________________________________ 9 e) Entrées et sorties numériques _________________________________________________________ 9 f) Broches analogiques _______________________________________________________________ 10 g) Autres broches ____________________________________________________________________ 10 h) Communication ___________________________________________________________________ 10

    IV – Le ZigBee : ___________________________________________________________ 11

    IV-1 Le protocole Zigbee: _______________________________________________________ 11 a) Introduction : qu’est-ce que le Zigbee . _________________________________________________ 11 b) Architecture protocolaire ____________________________________________________________ 11 c) Couche physique IEEE 802.15.4 ______________________________________________________ 12 d) Sous-couche MAC IEEE 802.15.4 ____________________________________________________ 14 e) Couche Zigbee ____________________________________________________________________ 16 f) Bilan ____________________________________________________________________________ 17

    IV-2 Interface ZigBee : le module XBee ___________________________________________ 18 a) Introduction ______________________________________________________________________ 18 b) Brochage ________________________________________________________________________ 18 c) Communication avec le module Xbee __________________________________________________ 19

    IV – Réalisation pratique : ___________________________________________________ 20

    IV-1 Forme d’one à générer, protocole : ___________________________________________ 20 a) Observation initiale ________________________________________________________________ 20 b) Observation plus détaillée ___________________________________________________________ 21

    IV-2 Installation des logiciels et gestionnaire de périphérique idoines : _________________ 23 a) Côté PC _________________________________________________________________________ 23 b) Coté drone _______________________________________________________________________ 26

    V – Programmation de la carte Arduino : _______________________________________ 27

    V-1 Structure du programme – Langage __________________________________________ 27

    V-2 Programme _______________________________________________________________ 28 a) Présentation de la paquette __________________________________________________________ 28 b) Déclaration ____________________________________________________________________ 28 c) Fonction setup _________________________________________________________________ 29 d) Boucle _______________________________________________________________________ 31

    VI – Guidage et tests ________________________________________________________ 35

    Conclusion _______________________________________________________________ 38

    Remerciements : ___________________________________________________________ 39

    ANNEXE : schéma de l’adaptateur Xbee _______________________________________ 40

  • 3

    I – Description du projet

    II-1 Rappel du sujet

    Avec ce stage, il est proposé au candidat de concevoir une liaison sans fil entre un organe de

    commande et un drone placé à distance sur lequel seront disposés plusieurs types de capteurs

    (télémètre, caméra embarquée, etc...). Cette liaison devra être bi-directionnelle et à faible

    consommation, d'où le choix de la technologie Zigbee fonctionnant dans la bande des

    2,4 GHz.

    Dans un premier temps, le candidat aura en charge la mise en œuvre de modules Zigbee. Il

    sera amené à développer des routines de commande et de test en langage C. Il aura également

    en charge la conception de cartes d'interfaçage des modules avec le reste du système.

    Dans un second temps, des tests grandeur nature sont prévus pour, d'une part, caractériser les

    modules (vérifier les puissances d'émission, sensibilité, consommation, etc...) et vérifier

    l'impact de différents paramétrages sur la portée, le débit et la robustesse de la transmission.

    La liaison bidirectionnelle sera également évaluée.

    Enfin, une dernière partie concernera la mise en place d'une gestion multi-nœud,

    caractéristique propre à la technologie Zigbee et qui offre de nombreuses perspectives. Par

    exemple, il serait possible d'interroger le même drone depuis différents endroits.

    II-2 Détail et réalisation pratique du sujet

    L’objet de ce stage a été précisé et modifié lors de réunions préliminaires avec les enseignants

    concernés. Le but est de réaliser un système qui sera mis en place pour des travaux pratiques à

    l’université Paul Sabatier afin que les étudiants se familiarisent avec la technologie Zigbee et

    l’utilisation du circuit logique programmable qu’est le FPGA (Field-Programmable Gate

    Array).

    Ainsi, il a été décidé de remplacer émetteur et récepteur d’un drone quadri-rotor du commerce

    (c’est-à-dire télécommande et récepteur) par côté émission, un FPGA associé à un module

    Xbee et de l’autre un module Xbee en réception associé à un microcontrôleur pour générer les

    formes des signaux requis.

    Afin de rendre la liaison bidirectionnelle il sera également ajouté sur le drone un capteur

    d’altitude qui retournera, sur demande, au FPGA, la hauteur atteinte par le drone.

  • 4

    Le drone utilisé est l’UFO #5 de Walkera :

    Voici une vue de l’électronique côté récepteur :

    Ce drone, utilisé en salle de TP, ne devra évidemment pas pouvoir se déplacer dans toutes les

    directions. Un support devra permettre de le guider et ne lui laisser la possibilité que de

    monter ou descendre.

    Il y aura plusieurs binômes d’étudiants agissant sur un même drone. Il devra donc y avoir un

    système permettant au drone de dialoguer avec chaque binôme individuellement.

    Travail demandé :

    La gestion du FPGA n’est pas du domaine de ce stage. Il sera remplacé, à mon niveau, par un

    PC dialoguant avec le module Xbee à l’aide d’un terminal. La liste des taches à effectuer est

    donc la suivante :

    faire le choix, en relation avec le tuteur, des matériels utilisés,

    programmer, côté récepteur, les signaux requis, les trimes de la télécommande, le capteur d’altitude retenu ainsi que la gestion des différents réseaux,

    utiliser un terminal pour l’envoi des commandes au drone,

    réaliser le système de guidage du drone,

    faire les tests.

  • 5

    II - Choix des matériels utilisés :

    Afin de réaliser les opérations demandées, il a été décidé d’utiliser les matériels suivants :

    2 modules Xbee professionnels série 1 (marque DIGI, référence XBP24-ACI-001)

    Les modules professionnels ont été préférés pour leurs caractéristiques supérieures,

    notamment en terme de portée. La série une a été retenue pour la topologie de réseau qu’elle

    permet d’obtenir (point à multipoints). Qui plus est, les modules de la série 1 sont mieux

    connus et les exemples à leur sujet sont très nombreux dans les bases de données sur internet.

    Leur prise en main en est donc facilitée. Le module Xbee sera traité plus particulièrement

    dans le paragraphe suivant. A posteriori, disposant de modules de chaque série, il est à noter

    qu’il n’y a aucune différence pour l’utilisation que l’on en fait.

    1 carte « Xbee explorer USB » (marque Sparkfun, référence WRL-08687) :

    Ces cartes permettent d’avoir un accès direct à la liaison série du module xbee par

    l’intermédiaire d’un mini câble USS et ainsi de paramétrer ce dernier.

    1 carte Arduino Uno : le système est détaillé dans le paragraphe suivant.

  • 6

    1 XBee shield pour Arduino :

    C’est une carte d’extension qui se branche directement sur la carte Arduino. Cette carte ajoute

    des leds, un convertisseur 3.3 volts et des cavaliers de configuration permettant de conserver

    la liaison USB-série pour le chargement du programme. Son utilisation est très simple : il faut

    mettre les cavaliers vers l’intérieur (i.e. selon l’inscription « XBee/USB », se mettre en

    position « XBee ») et désormais les pattes RX/TX de la carte Arduino son connectées au

    Shield XBee.

    III – Le système Arduino :

    III-1 Introduction

    Le système Arduino est un outil pour fabriquer de petits ordinateurs qui peuvent capter et

    contrôler davantage de choses du monde matériel qu’un ordinateur de bureau. C'est une

    plateforme open-source d'électronique programmée qui est basée sur une simple carte à

    microcontrôleur (de la famille AVR), et un logiciel, véritable environnement de

    développement intégré, pour écrire, compiler et transférer le programme vers la carte à

    microcontrôleur.

    Le système Arduino simplifie la façon de travailler avec les microcontrôleurs, tout en offrant

    plusieurs avantages pour les enseignants, les étudiants et les amateurs intéressés :

    Peu onéreux : les cartes Arduino sont relativement peu coûteuses comparativement aux autres plateformes ; la moins chère des versions du module Arduino peut être

    assemblée à la main. Les cartes Arduino pré-assemblées coûtent moins de 25 Euros

    (microcontrôleur inclus...).

    Multi-plateforme : le logiciel Arduino, écrit en Java, tourne sous les systèmes d'exploitation Windows, Macintosh et Linux. La plupart des systèmes à

    microcontrôleurs sont limités à Windows.

    Un environnement de programmation clair et simple: l'environnement de programmation Arduino est facile à utiliser, tout en étant assez flexible pour que les

    utilisateurs avancés puissent en tirer profit également.

    Logiciel Open Source et extensible : le logiciel Arduino et le langage Arduino sont publiés sous licence open source, disponible pour être complété par des

    programmateurs expérimentés. Le langage peut être aussi étendu à l'aide de librairies

    C++.

    Matériel Open source et extensible : les cartes Arduino sont basées sur les microcontrôleurs Atmel ATMEGA8, ATMEGA168, ATMEGA 328, etc... Les

    schémas des modules sont publiés sous une licence Creative Commons, et les

    concepteurs de circuits expérimentés peuvent réaliser leur propre version des cartes

    Arduino, en les complétant et en les améliorant.

  • 7

    III-2 La carte UNO

    La carte Arduino Uno est une carte à microcontrôleur basée sur l'ATmega328. Elle dispose:

    de 14 broches numériques d'entrées/sorties (dont 6 peuvent être utilisées en sorties PWM (largeur d'impulsion modulée),

    de 6 entrées analogiques (qui peuvent également être utilisées en broches entrées/sorties numériques),

    d'un quartz 16Mhz,

    d'une connection USB,

    d'un connecteur d'alimentation jack,

    d'un connecteur ICSP (programmation "in-circuit"),

    et d'un bouton de réinitialisation (reset).

    Elle contient tout ce qui est nécessaire pour le fonctionnement du microcontrôleur. Pour

    pouvoir l'utiliser, il suffit de la connecter à un ordinateur à l'aide d'un câble USB (ou de

    l'alimenter avec un adaptateur secteur ou une pile, mais ceci n'est pas indispensable,

    l'alimentation étant fournie par le port USB).

    a) Synthèse des caractéristiques

    Microcontrôleur ATmega328

    Tension de fonctionnement 5V

    Tension d'alimentation (recommandée) 7-12V

    Tension d'alimentation (limites) 6-20V

    Broches E/S numériques 14 (dont 6 disposent d'une sortie PWM)

    Broches d'entrées analogiques 6 (utilisables en broches E/S numériques)

    Intensité maxi disponible par broche E/S (5V) 40 mA (ATTENTION : 200mA cumulé pour

    l'ensemble des broches E/S)

    Intensité maxi disponible pour la sortie 3.3V 50 mA

    Intensité maxi disponible pour la sortie 5V Fonction de l'alimentation utilisée - 500 mA max si

    port USB utilisé seul

    Mémoire Programme Flash 32 KB (ATmega328) dont 0.5 KB sont utilisés par le

    bootloader

    Mémoire SRAM (mémoire volatile) 2 KB (ATmega328)

    Mémoire EEPROM (mémoire non volatile) 1 KB (ATmega328)

    Vitesse d'horloge 16 MHz

  • 8

    b) Brochage de la carte Uno :

    c) Alimentation

    La carte Arduino Uno peut-être alimentée soit via la connexion USB (qui fournit 5V jusqu'à

    500mA) ou à l'aide d'une alimentation externe. La source d'alimentation est sélectionnée

    automatiquement par la carte.

    L'alimentation externe (non-USB) peut être soit un adaptateur secteur (pouvant fournir

    typiquement de 3V à 12V sous 500mA) ou des piles (ou accus). L'adaptateur secteur peut être

    connecté en branchant une prise 2.1mm positif au centre dans le connecteur jack de la carte.

    Les fils en provenance d'un bloc de piles ou d'accus peuvent être insérés dans les connecteurs

    des broches de la carte appelées Gnd (masse ou 0V) et Vin (Tension positive en entrée) du

    connecteur d'alimentation.

    La carte peut fonctionner avec une alimentation externe de 6 à 20 volts. Cependant, si la carte

    est alimentée avec moins de 7V, la broche 5V pourrait fournir moins de 5V et la carte pourrait

    être instable. Si on utilise plus de 12V, le régulateur de tension de la carte pourrait chauffer et

    endommager la carte. Aussi, la plage idéale recommandée pour alimenter la carte Uno est

    entre 7V et 12V.

  • 9

    Les broches d'alimentation sont les suivantes :

    VIN. C’est la tension d'entrée positive lorsque la carte est utilisée avec une source de tension externe (à distinguer du 5V de la connexion USB ou autre source 5V régulée).

    La carte peut être alimentée à l'aide de cette broche, ou, si l'alimentation est fournie

    par le jack d'alimentation, accéder à la tension d'alimentation sur cette broche.

    5V. C’est la tension régulée utilisée pour faire fonctionner le microcontrôleur et les autres composants de la carte. Le 5V régulé fourni par cette broche peut donc provenir

    soit de la tension d'alimentation VIN via le régulateur de la carte, ou bien de la

    connexion USB (qui fournit du 5V régulé) ou de tout autre source d'alimentation

    régulée.

    3V3. C’est une alimentation de 3.3V fournie par le circuit intégré FTDI (circuit intégré faisant l'adaptation du signal entre le port USB de l’ordinateur et le port série de

    l'ATmega) de la carte. L'intensité maximale disponible sur cette broche est de 50mA

    GND. Broche de masse (ou 0V).

    d) Mémoire

    L'ATmega 328 a 32Ko de mémoire FLASH pour stocker le programme (dont 0.5Ko

    également utilisés par le bootloader*). L'ATmega 328 a également 2ko de mémoire SRAM

    (volatile) et 1Ko d'EEPROM (non volatile - mémoire qui peut être lue à l'aide de la librairie

    EEPROM).

    *Le bootloader est un programme pré-saisi dans l'ATméga qui permet la communication entre

    l'ATmega et le logiciel Arduino via le port USB, notamment lors de chaque programmation

    de la carte.

    e) Entrées et sorties numériques

    Chacune des 14 broches numériques de la carte UNO (numérotées des 0 à 13) peut être

    utilisée soit comme une entrée numérique, soit comme une sortie numérique, en utilisant les

    instructions pinMode(), digitalWrite() et digitalRead() du langage Arduino. Ces broches

    fonctionnent en 5V. Chaque broche peut fournir ou recevoir un maximum de 40mA

    d'intensité et dispose d'une résistance interne de "rappel au plus" (pull-up) (déconnectée par

    défaut) de 20-50 KOhms. Cette résistance interne s'active sur une broche en entrée à l'aide de

    l'instruction digitalWrite(broche, HIGH).

    De plus, certaines broches ont des fonctions spécialisées :

    Communication série: broches 0 (RX) et 1 (TX). Utilisées pour recevoir (RX) et transmettre (TX) les données séries de niveau TTL. Ces broches sont connectées aux

    broches correspondantes du circuit intégré ATmega8U2 programmé en convertisseur

    USB-vers-série de la carte, composant qui assure l'interface entre les niveaux TTL et

    le port USB de l'ordinateur.

    Interruptions externes: broches 2 et 3. Ces broches peuvent être configurées pour déclencher une interruption sur une valeur basse, sur un front montant ou descendant,

    ou sur un changement de valeur. Voir l'instruction attachInterrupt() pour plus de

    détails.

    Impulsion PWM (largeur d'impulsion modulée): Broches 3, 5, 6, 9, 10, et 11. Elles fournissent une impulsion PWM 8-bits à l'aide de l'instruction analogWrite().

    http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieEEPROMhttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieEEPROMhttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.PinModehttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.DigitalWritehttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.DigitalReadhttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.DigitalWritehttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ConstantesPredefinieshttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AttachInterrupthttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AnalogWrite

  • 10

    SPI (Interface Série Périphérique): broches 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ces broches supportent la communication SPI (Interface Série Périphérique)

    disponible avec la librairie pour communication SPI. Les broches SPI sont également

    connectées sur le connecteur ICSP qui est mécaniquement compatible avec les cartes

    Mega.

    I2C: broches 4 (SDA) et 5 (SCL). Elles supportent les communications de protocole I2C (ou interface TWI (Two Wire Interface - Interface "2 fils"), disponible en utilisant

    la librairie Wire/I2C (ou TWI - Two-Wire interface - interface "2 fils") .

    LED: broche 13. Il y a une LED incluse dans la carte connectée à la broche 13. Lorsque la broche est au niveau HAUT, la LED est allumée, lorsque la broche est au

    niveau BAS, la LED est éteinte.

    f) Broches analogiques

    La carte Uno dispose de 6 entrées analogiques (numérotées de 0 à 5), chacune pouvant fournir

    une mesure d'une résolution de 10 bits (i.e sur 1024 niveaux soit de 0 à 1023) à l'aide de la

    très utile fonction analogRead() du langage Arduino. Par défaut, ces broches mesurent entre

    le 0V (valeur 0) et le 5V (valeur 1023), mais il est possible de modifier la référence supérieure

    de la plage de mesure en utilisant la broche AREF et l'instruction analogReference() du

    langage Arduino.

    Remarque : les broches analogiques peuvent être utilisées en tant que broches numériques :

    elles sont numérotées en tant que broches numériques de 14 à 19.

    g) Autres broches

    Il y a deux autres broches disponibles sur la carte :

    AREF : tension de référence pour les entrées analogiques (si différent du 5V).

    Reset : mettre cette broche au niveau BAS entraîne la réinitialisation c'est-à-dire le

    redémarrage du microcontrôleur. Typiquement, cette broche est utilisée pour ajouter un

    bouton de réinitialisation sur le circuit qui bloque celui présent sur la carte.

    h) Communication

    La carte Arduino Uno dispose de toute une série de facilités pour communiquer avec un

    ordinateur, une autre carte Arduino, ou avec d'autres microcontrôleurs. L'ATmega 328

    dispose d'une UART (Universal Asynchronous Receiver Transmitter ou émetteur-récepteur

    asynchrone universel en français) pour les communications série de niveau TTL (5V) et qui

    est disponible sur les broches 0 (RX) et 1 (TX). Un circuit intégré ATmega8U2 sur la carte

    assure la connexion entre cette communication série vers le port USB de l'ordinateur et

    apparaît comme un port COM virtuel pour les logiciels de l'ordinateur. Le code utilisé pour

    programmer l'ATmega8U2 utilise le driver standard USB COM, et aucun autre driver externe

    n'est nécessaire.

    Le logiciel Arduino inclut une fenêtre terminal série (ou moniteur série) sur l'ordinateur et qui

    permet d'envoyer des textes simples depuis et vers la carte Arduino. Les LEDs RX et TX sur

    la carte clignotent lorsque les données sont transmises via le circuit intégré USB-vers-série et

    la connexion USB vers l'ordinateur (mais pas pour les communications série sur les broches 0

    et 1).

    http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieSPIhttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieWirehttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AnalogReadhttp://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AnalogReference

  • 11

    Une librairie Série Logicielle permet également la communication série sur n'importe quelle

    broche numérique de la carte UNO.

    IV – Le ZigBee :

    IV-1 Le protocole Zigbee:

    a) Introduction : qu’est-ce que le Zigbee .

    ZigBee est un standard de communication sans fil à bas coût pour échanger des données

    issues d’équipements sans fil simples et de faible consommation dans le milieu industriel.

    Avec la convergence de l’informatique, de l’électronique et des télécommunications, il est

    ainsi possible de mettre en place des réseaux de capteurs sans fil dans un contexte domotique

    ou de contrôle industriel. Il existe un marché que ZigBee permet de combler : surveillance de

    locaux pour la détection de départ de feu, surveillance de bâtiments contre les intrusions,

    Gestion Technique de Bâtiment (GTB), aide à la personne, assistance aux personnes…

    Ce standard est promu par l’alliance ZigBee qui regroupe un ensemble d’industriels

    travaillant sur l’élaboration de spécifications afin de pouvoir développer des applications sans

    fil bon marché, de faible consommation et sécurisées.

    La norme ZigBee s’appuie sur la norme IEEE 202.15.4. Elle est librement téléchargeable sur

    le site de l’Alliance ZigBee : http://www.zigbee.org/. Mais les grandes lignes seront détaillées

    ici.

    b) Architecture protocolaire

    L’architecture protocolaire est donnée par la figure suivante. ZigBee s’appuie sur la norme

    IEEE 802.15.4 pour les niveaux physique et MAC (Medium ACcess).

    http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieSerialSoftwarehttp://www.zigbee.org/

  • 12

    La norme IEEE 802.15.4 a les caractéristiques générales suivantes :

    3 bandes de fréquence de fonctionnement : 868 MHz (1 canal), 915 MHz (10 canaux) et 2,4 GHz (16 canaux).

    Débit de 20 kb/s, 40 kb/s et 250 kb/s suivant la fréquence.

    Méthode d’accès au support de type CSMA-CA (Carrier Sense Multiple Access – Collision Avoidance).

    Protocole fiable avec acquittement.

    Faible consommation (alimentation sur pile de type AA).

    La norme ZigBee apporte en plus les éléments suivants :

    Au niveau réseau de la couche ZigBee, topologie de type point à point (direct), en étoile, en cluster ou maillé (mesh).

    Au niveau représentation de la couche ZigBee, la sécurité avec l’emploi optionnel d’un chiffrement AES 128 des données.

    Au niveau application, la définition de profils d’utilisation : exemple profil domotique HA (Home Automation).

    c) Couche physique IEEE 802.15.4

    La norme IEEE 802.15.4 supporte les 3 bandes ISM (Industrial, Scientific, Medical) de

    868 MHz, 915 MHz et 2,4 GHz.

  • 13

    Pour la bande 2,4 GHz, on a les caractéristiques générales suivantes :

    Débit binaire de 250 kb/s.

    4 bits par symbole soit un débit symbole de 62.5 kBaud.

    Modulation orthogonale O-QPSK avec 16 symboles.

    Correspondance à chaque symbole d’une séquence d’étalement « 32 chips » pour un étalement DSSS, soit 2 Mchip/s.

    Pour la bande 915 MHz, on a les caractéristiques générales suivantes :

    Débit binaire de 40 kb/s.

    1 bit par symbole, soit un débit symbole de 40 kBaud.

    Modulation BPSK.

    Correspondance à chaque symbole d’une séquence « 15 chips » pour un étalement DSSS, soit 600 kchip/s.

    Pour la bande 868 MHz, on a les caractéristiques générales suivantes :

    Débit binaire de 20 kb/s.

    1 bit par symbole, soit un débit symbole de 20 kBaud.

    Modulation BPSK.

    Correspondance à chaque symbole d’une séquence « 15 chips » pour un étalement DSSS, soit 300 kchip/s.

  • 14

    La structure du « paquet » de données émis/reçu est donnée ci-dessous :

    Le niveau physique gère les fonctionnalités suivantes :

    Activation/désactivation de l’interface radio.

    Détection de l’énergie dans le canal. Choix du canal radio.

    Qualité du lien radio.

    Évaluation du canal pour la mise en œuvre du protocole d’accès CSMA.

    Émission/réception des paquets dans le canal radio.

    d) Sous-couche MAC IEEE 802.15.4

    La sous-couche MAC possède les caractéristiques suivantes :

    Mise en œuvre de trames avec un adressage IEEE 64 bits ou un adressage court sur 16 bits, soit 65536 équipements adressables au plus dans ce dernier cas.

    Structure de trame simple.

    Mode de transmission fiable.

    Gestion de l’association/dé association d’équipements.

    3 niveaux de sécurité possibles sur les communications : aucun, liste ACL, chiffrement AES 128 de la charge (payload) de la trame.

    Mode de transfert de type half duplex.

    Deux mécanismes d’accès au réseau sont possibles :

    ● Réseau en mode non beacon (balise) : on utilise des communications avec une politique

    d’accès au médium de type CSMA-CA. Les trames de données reçues correctement sont

    acquittées.

    ● Réseau en mode beacon : un coordinateur du réseau émet périodiquement des trames

    beacon (de 15 ms jusqu’à 252 s) délimitant ainsi une supertrame. Le format de la supertrame

    est fixé par le coordinateur. Elle se compose de 16 intervalles de temps. Cela permet ainsi de

    synchroniser tous les équipements (nœuds) du réseau. Un équipement pourra émettre ses

    données dans un intervalle de temps donné pendant la durée de l’intervalle de temps. L’accès

    aux premiers intervalles de temps est non garanti donc soumis à contention (Contention

  • 15

    Access Period), alors que sur les derniers, il est garanti (Contention Free Period), ce qui

    permet d’assurer un certain déterminisme et une certaine qualité de service.

    4 trames sont définies :

    Trame de données (Data Frame) : transfert de données.

    Trame d’acquittement (Acknowledgment Frame) : confirmation de données bien reçues.

    Trame beacon (Beacon Frame) : émise par le coordinateur de réseau en mode beacon.

    Trame de commande MAC (MAC Command Frame) : pour le contrôle des nœuds.

    La structure de la trame de données est donnée ci-dessous :

    Un échange d’une trame de données à l’initiative d’un nœud est donné dans la figure qui suit

    dans le cas d’un réseau en mode beacon d’un réseau et en mode non beacon.

  • 16

    Enfin, la norme IEEE 802.1.5.4 définit 3 types d’équipements (nœuds du réseau) :

    Le coordinateur du réseau.

    L’équipement à fonctionnalités complètes FFD (Full Function Device).

    L’équipement à fonctionnalités réduites RFD (Reduced Function Device).

    L’équipement FFD peut être soit un coordinateur, soit un routeur, soit un équipement terminal

    (capteur). L’équipement RFD est un équipement simplifié comme un équipement terminal

    (End Device) muni de capteurs.

    Pour communiquer au sein d’un même réseau, au moins un équipement FFD et des

    équipements RFD utilisent de concert le même canal radio parmi ceux définis dans la norme.

    Un équipement FFD peut dialoguer avec des équipements RFD ou FFD, mais un équipement

    RFD ne peut dialoguer qu’avec un équipement FFD.

    e) Couche Zigbee

    Le niveau ZigBee précise les algorithmes de routage pouvant être mis en œuvre dans le

    réseau. Il autorise aussi le chiffrement des données par AES-128. Le routage mis en œuvre

    peut être soit direct, soit indirect.

    Dans le cas du routage direct, l’équipement source connaît l’adresse de l’équipement

    destinataire. L’adresse est celle définie au niveau de la trame MAC.

    Dans le cas d’un routage indirect, l’équipement source ne connaît pas l’adresse de

    l’équipement destinataire. Dans ce cas, un équipement routeur ou coordinateur fera la mise en

    relation avec l’équipement destinataire en utilisant sa table de routage.

    L’algorithme de routage préconisé dans la norme ZigBee pour les réseaux maillés est

    l’algorithme AODV (Ad hoc On-Demand Vector Routing). C’est un algorithme de routage

    réactif : une route est établie uniquement sur demande.

    Si l’on regarde maintenant la topologie réseau et sa taille, le réseau ZigBee est un réseau PAN

    (Personal Area Network). C’est un réseau de quelques dizaines de mètres permettant un

    échange de données avec des équipements électroniques. On peut mettre dans la catégorie

    PAN les normes suivantes : USB, Bluetooth, Infrarouge IR et ZigBee et éventuellement

    Wifi…Les topologies mises en œuvre avec ZigBee dépendent de la complexité de

    l’application utilisée. Voici quelques topologies possibles :

    .

  • 17

    Des topologies plus complexes peuvent être mises en œuvre en utilisant des routeurs ZigBee :

    La figure qui suit donne un exemple d’une telle topologie.

    f) Bilan

    ZigBee a toute sa place dans les réseaux de capteurs sans fil. C’est un concurrent sérieux à

    Bluetooth. La figure suivante précise la place de ZigBee dans le panorama des réseaux sans

    fil.

    ZigBee a donc bien un marché ciblé dans la domotique dans le cadre des réseaux de capteurs

    sans fil.

  • 18

    C’est d’ailleurs un choix judicieux pour ce type de réseau sans fil par rapport à Bluetooth

    comme le montre le tableau suivant :

    IV-2 Interface ZigBee : le module XBee

    a) Introduction

    Réaliser un transmetteur RF ZigBee est hors de portée d’un électronicien amateur. Il faut donc

    se tourner vers une solution intégrée.

    La société Maxstream (rachetée par Digi) propose des modules intégrés ZigBee prêts à

    l’emploi : le module XBee. Ce module permet grossièrement une conversion de données série

    TTL vers le réseau ZigBee.

    Pouvant être utilisés sans aucun paramétrage, ils ont différents modes de fonctionnement

    programmables par la liaison série en utilisant des commandes AT. Ce point est important

    pour la programmabilité, car il suffira d’écrire des programmes simples capables de générer

    ces commandes AT.

    b) Brochage

    Le tableau suivant présente le brochage du module XBee.

    Broche Nom Direction Description

    1 VCC - Alimentation

    2 DOUT Out Sortie UART

    3 DIN/CONFIG In Entrée UART

    4 DO8 Out Sortie digitale 8

    5 RESET - Reset (au moins 200 ns)

    6 PWM0/RSSI Out Sortie PWM0/Indication puissance Rx

  • 19

    7 PWM1 Out Sortie PWM1

    8 Réservé - -

    9 DTR*/SLEEP_RQ/DI8 In Contrôle Sleep/Entrée digitale 8

    10 GND - Ground

    11 AD4/DIO4 Inout Entrée analogique 4 ou E/S digitale 4

    12 CTS/DIO7 Inout Clear To Send/ E/S digitale 7

    13 ON/SLEEP Out Indicateur état

    14 VREF - Tension de référence pour conversion

    15 Associate/AD5/DIO5 Inout

    Indication association/Entrée analogique 5

    ou E/S digitale 5

    16 RTS/AD6/DIO6 Inout

    Reday To Send/Entrée analogique 6 ou E/S

    digitale 6

    17 AD3/DIO3 Inout Entrée analogique 3 ou E/S digitale 3

    18 AD2/DIO2 Inout Entrée analogique 2 ou E/S digitale 2

    19 AD1/DIO1 Inout Entrée analogique 1 ou E/S digitale 1

    20 AD0/DIO0 Inout Entrée analogique 0 ou E/S digitale 0

    Au minimum, le module XBee nécessite de câbler les broches d’alimentation (VCC et GND)

    et les signaux DIN et DOUT pour respectivement les données entrantes et sortantes de

    l’interface UART. Les autres broches utilisées servent à configurer le module…

    Il est à noter qu’il existe différentes versions de modules XBee :

    ● Version avec antenne chip intégrée (XBee1).

    ● Version avec connecteur U.FL (MMCX) pour antenne externe (XBee2).

    ● Version avec antenne filaire intégrée (XBee3).

    c) Communication avec le module Xbee

    Le module XBee peut être connecté à n’importe processeur possédant une interface série

    UART comme indiqué sur cette figure :

  • 20

    Le processeur envoie ses données (caractères) sur le port DI en mode série asynchrone.

    Chaque caractère est composé d’un bit de start (niveau logique 0), suivi de 8 bits de données

    avec le bit de poids faible en premier et enfin un bit de stop.

    La figure qui suit présente le mode de fonctionnement interne du module XBee.

    Il existe un buffer à l’émission (DI buffer) et un buffer en réception (DO buffer). Un contrôle

    de flux matériel peut être mis en place en utilisant le traditionnel couple CTS/RTS pour gérer

    le flux à l’émission et à la réception des données suivant le taux de remplissage des buffers

    (comme dans un circuit UART classique).

    IV – Réalisation pratique :

    IV-1 Forme d’one à générer, protocole :

    Afin de pouvoir reproduire les ondes générées par le récepteur du drone, nous avons observé

    et mesuré ces dernières à l’oscilloscope. Il nous faut pouvoir reproduire les signaux des quatre

    voies :

    avant, arrière ;

    rotation gauche droite ;

    roulis gauche droite ;

    puissance des moteurs, c'est-à-dire montée et descente.

    a) Observation initiale

    Les trois premières voies ne seront reproduites qu’en position repos, avec la possibilité d’un

    réglage de la trime remplacée par un potentiomètre. Sur ces trois voies, le récepteur,

    télécommande en position neutre, génère 3 ondes identiques : une onde PWM (Pulse Width

    Modulation) d’une période de 15,5 ms et une largeur d’impulsion de 1,5 ms.

    Pour la puissance des moteurs, le récepteur génère également une onde PWM de même

    période et dont la largeur d’impulsion varie de 1 ms (télécommande en position repos, c'est-à-

  • 21

    dire moteur à l’arrêt) à 2ms (moteur à pleine puissance). De même, la trime de la

    télécommande sera reproduite.

    Résumé : notre carte Arduino devra donc générer 4 ondes PWM de 15,5 ms. Trois d’entre

    elles auront une largeur d’impulsion fixe (en dehors des réglages de trime) de 1,5 ms. Celle de

    puissance aura une largeur d’impulsion qui devra varier entre 1ms et 2 ms en fonction des

    commandes envoyées par les étudiants.

    Commandes : j’ai retenu des commandes simples. Il faut envoyer au drone, en hexadécimal,

    le pourcentage de la puissance que l’on veut avoir sur les moteurs. Ainsi, les étudiants

    enverront des chiffres compris entre 0 et 100.

    Pour demander au drone son altitude, il faudra envoyer FF.

    Toute commande d’un octet différente de FF et non comprise entre 0 et 100 renverra un

    message d’erreur.

    Toute commande d’une longueur supérieure à 1 octet ne sera pas prise en compte.

    b) Observation plus détaillée

    Lors de la première observation nous avions utilisé un oscilloscope en n’utilisant qu’une seule

    voie de ce dernier. Ainsi nous n’avions pas observé la synchronisation des signaux. Cette

    erreur a impliqué un programme plus difficile à réaliser et de grosses surprises lors des tests

    (d’autant plus que le récepteur initial avait été débranché de manière quasiment irréversible).

    Après de longs tests infructueux (ou l’on s’est tout de même rendu compte que le drone

    recevait les informations et que la place d’un signal par rapport aux autres avait son

    importance), il a été décidé d’observer plus finement la synchronisation des signaux. Voici ci-

    dessous les images obtenues à l’oscilloscope.

    Les 4 voies ont un ordre précis :

    1) la voie « gauche/droite », 2) la voie « puissance », 3) la voie « avant/arrière », 4) la voie « rotation ».

  • 22

    Si l’on modifie la puissance, on obtient alors l’image suivante :

    On constate bien un élargissement de la modulation PWM (jaune ici). La voie suivante attend

    que la puissance soit passée à 0 avant de passer à 1. Ceci est vrai pour toutes les voies, et que

    la largeur soit modifiée par une trime ou une commande.

  • 23

    Voici les formes d’ondes qu’envoyait le premier programme :

    Avec cette configuration, seule la voie de la puissance était systématiquement reconnue. En

    fonction de la position de montée de cette voie de puissance (lors du passage à 1 il y a un

    léger décalage de quelques microsecondes, non visible ici sans zoom) une ou deux trimes

    parvenaient à fonctionner.

    IV-2 Installation des logiciels et gestionnaire de périphérique idoines :

    a) Côté PC

    Côté ordinateur, il faut installer le « configurateur » XCTU, disponible sur le site digi.com.

    Il faut d’abord commencer par télécharger les pilotes à l’adresse suivante :

    http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=0&s=316&tp=1

    Puis lancer l’application CDM20600.exe.

    Puis télécharger le logiciel XCTU à l’adresse suivante :

    http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&s=316&tp=5&tp2=0

    Puis lancer l’application XSCTU 40002637.exe.

    Il faut également installer les pilotes de « l’USB serial port » dans le gestionnaire de

    périphérique. Cette opération doit être effectuée souvent deux fois, que ce soit sous windows

    XP ou sous Vista.

    Remarque : il est important d’obtenir la dernière version du logiciel XCTU, au risque de ne

    pas voir reconnaître un module Xbee récent. Ainsi, il faut immédiatement accepter les mises à

    jours (et vérifier lors de l’achat d’un nouveau module). C’est une opération assez longue.

    http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=0&s=316&tp=1http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&s=316&tp=5&tp2=0

  • 24

    Un guide d’utilisation de ce logiciel (assez sommaire) est disponible à l’adresse suivante :

    http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&s=316&tp=3&tp2=0

    Je vais détailler dans ce rapport uniquement les étapes qui nous intéressent.

    Au lancement du logiciel, l’écran suivant doit apparaître si la plaquette sparkfun ainsi que le

    module Xbee sont bien connectés au PC et les périphériques bien installés :

    Les paramètres (Baud, Flow Control, Data Bits, Parity et Stop Bits) sont renseignés par défaut

    et ne seront pas modifiés pour l’objectif à atteindre.

    Un clic sur la touche « Test/Query » permet de voir que le bon port a été sélectionné (USB

    Serial Port), que le module est bien connecté et qu’il est reconnu.

    http://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&s=316&tp=3&tp2=0

  • 25

    L’écran suivant doit alors être visible :

    Si ce n’est pas le cas il faut tout d’abord vérifier le port, débrancher et rebrancher si

    nécessaire. Si ce n’est pas suffisant, vérifier une nouvelle fois les mises à jour.

    Ensuite, l’onglet « Modem Configuration » permet de lire les paramètres par défaut du

    module Xbee et également de les modifier. En cliquant sur le bouton « Read » on obtient alors

    l’écran suivant :

  • 26

    On peut constater, en branchant plusieurs modules xbee, qu’ils ont tous les mêmes paramètres

    par défaut. Ainsi, ils sont tous sur le même canal, le même réseau…Ils communiquent donc

    tous entre eux sans aucun réglage.

    Dans le travail pratique, j’ai fait le choix de modifier l’ « Identifiant Réseau ». Du côté du

    configurateur, il suffit de modifier ce paramètre au clavier et de cliquer sur le bouton

    « Write » pour l’inscrire dans la mémoire non volatile. Un clic sur le bouton « Restore »

    restaure les paramètres par défaut.

    Pour communiquer avec le drone, le choix du format hexadécimal a été retenu. Il faut donc

    utiliser le configurateur conformément à ce choix en cliquant sur l’onglet « Terminal » puis

    « Assemble Packet » et sélectionner « Hex ».

    Pour le TP, les données à envoyer auront une taille d’un octet. Après avoir inscrit la

    commande, il faut faire « Send Data ».

    b) Coté drone

    Les pilotes de la carte Arduino Uno ainsi que l’environnement de développement sont

    disponibles à cette adresse :http://arduino.cc/en/Main/Software. Pour installer les pilotes, il

    faut, bien évidemment passer par le gestionnaire de périphérique. Ensuite, la carte peut être

    branchée el le logiciel arduino.exe lancé. Voici ce que l’on doit alors avoir à l’écran :

    http://arduino.cc/en/Main/Software

  • 27

    Voici les icônes à connaître au minimum :

    : Cet icône sert à compiler le programme en cours.

    : Celui-ci permet de charger le programme sur la carte branchée au PC. Pour que la carte

    puisse accepter le programme, il faut que les deux cavaliers soient enlevés (et remis en mode

    fonctionnement).

    : Celui-ci permet d’avoir accès au terminal, et donc voir ce qui est inscrit sur la liaison

    série du module xbee du drone.

    Si le port n’est pas reconnu automatiquement, il faut débrancher le carte et rebrancher. Le cas

    échéant, un choix manuel peut être utile en procédant comme suit :

    Le programme à ouvrir s’appelle « drone ».

    Une explication détaillée, en français, et apparemment bien faite (je ne m’en suis pas servie,

    donc ce n’est pas indispensable) est disponible à cette adresse :

    http://arduino.cc/fr/Main/DebuterPresentationLogiciel.

    V – Programmation de la carte Arduino :

    V-1 Structure du programme – Langage

    Les différentes fonctions utilisées dans le programme qui va suivre sont toutes disponibles à

    l’adresse suivante : http://www.arduino.cc/en/Reference/HomePage. Le langage utilisé est un

    dérivé du langage C.

    La structure d’un programme contient toujours d’abord une zone de déclaration de variables,

    suivie de la création de fonctions auxiliaires. Ensuite, un appel à la fonction setup() assigne le

    http://arduino.cc/fr/Main/DebuterPresentationLogicielhttp://www.arduino.cc/en/Reference/HomePage

  • 28

    sens (entré ou sortie) aux pins de Arduino qui sont connectés à des capteurs ou actuateurs.

    Finalement la fonction principale loop() exécute en boucle le programme. Des fonctions

    peuvent être appelées. Elles sont détaillées en fin de programme à l’extérieur de la boucle.

    Une fois sauvegardé et compilé, le programme peut être exporté vers le microprocesseur de la

    carte.

    V-2 Programme

    a) Présentation de la paquette

    Au matériel déjà présenté s’ajoute 4 potentiomètres pour remplir le rôle des trimes, un capteur

    d’altitude SRF05 (module ultrason fabriqué par Devantech) et quelques composants dont les

    rôles seront détaillés plus loin.

    b) Déclaration

    Pour cette première partie, les commentaires du programme sont suffisants pour la

    compréhension, le langage Arduino étant très proche du C.

    //utile pour la fonction principale

    float hauteur = 0; //variable pour stocker l'altitude du drone

    int identifiant_reseau; //variable pour stocker le numéro de l'ID réseau;

    nécessaire pour passer d'un groupe à l'autre.

    int i; //compteur

    unsigned long commande=0; //variable pour stocker la commande envoyée par les étudiants; comprise entre 0 et 100 en héxa elle

    correspond à la puissance en %. Si la commande

    est FF, c'est pour demander l'altitude.

    int lecture=300; //variable pour stocker ce qui arrive sur la liaison

  • 29

    série.

    int trime[4]={0,511,511,511}; //tableau pour stocker la position des trimes initialisé en position "neutre" ou "repos" pour la

    première trame.

    int exedent_PWM[4]={1000,1500,1500,1500}; //tableau pour stocker la largeur des impulsions

    //utile pour la fonction mesure de hauteur

    int broche_echo = 2 ; // broche "echo" du SRF05 (digital 2)

    int broche_trigger = 3; // broche "trigger" du SRF05 (digital 3)

    //utile pour la gestion de l'ID via l’interrupteur

    const int nb_interrupteur = 4; // définit le nombre d'interrupteur nécessaire pour différencier l'ID réseau, ici 4 (donc 16 réseaux possibles)

    int interupteur[nb_interrupteur]={4,5,6,7}; //définit les broches de branchement des interrupteurs

    c) Fonction setup

    Les instructions suivantes sont nécessaires pour cette partie :

    pinMode : configure la broche spécifiée pour qu'elle se comporte soit en entrée, soit en sortie.

    Serialbegin : fixe le débit de communication en bits par secondes (l'unité est le baud) pour la communication série (et l’initialise).

    delay : réalise une pause dans l'exécution du programme pour la durée (en millisecondes) indiquée en paramètre.

    Serialprint : affiche les données sous le port série sous forme lisible.

    analogread : lit la valeur de la tension présente sur la broche spécifiée. La carte Arduino comporte 6 voies connectées à un convertisseur analogique-numérique 10

    bits. Cela signifie qu'il est possible de transformer la tension d'entrée entre 0 et 5V en

    une valeur numérique entière comprise entre 0 et 1023.

    De plus, pour que chaque groupe d’étudiants puisse communiquer indépendamment avec le

    drone, j’ai choisi de modifier « l’identifiant réseau » comme indiqué précédemment. Du côté

    du configurateur, la manipulation est simple (expliqué au paragraphe IV-2, a). Du côté de la

    carte, il a été retenu de modifier l’identifiant réseau automatiquement en fonction de la

    position de 4 interrupteurs. L’étudiant, souhaitant dialoguer avec le drone, devra positionner

    les interrupteurs en fonction du numéro de son identifiant réseau (4 interrupteurs à « 0 »

    correspondent au numéro 0, les 4 en position « 1 » correspondant à l’identifiant 15…).

    Chaque modification de la position d’un interrupteur devra être suivie d’un appui sur le

    bouton RESET de la carte (la lecture de l’identifiant se faisant dans la partie initialisation et

    non dans la boucle car trop couteux en temps).

    La démarche pour modifier ce registre est la suivante. Il faut tout d'abord passer dans le mode

    "commande" en envoyant 3 fois le caractère "+" en moins de 1 seconde. Il faut également

  • 30

    respecter un temps de garde (de 1 seconde) avant et après l'envoi de ces 3 caractères. Le

    module répond par "OK" + "CR" (retour à la ligne ; « chariot return »).

    Les commandes AT sont alors possibles. Il nous faut ici utiliser la commande ATID. ATID +

    paramètre ( ) : modifie ou lit l'adresse du Pan ID.

    Il faut que cette valeur soit la même pour que les modules puissent communiquer entre eux.

    La fonction ATCN permet de sortir du mode commande.

    Remarque : la valeur de l’identifiant réseau est stockée dans la mémoire volatile du module.

    En effet, il faudrait sinon utiliser la commande ATWR (write), mais cette commande génère

    un dysfonctionnement du programme. Donc, si le module est débranché, il récupère

    l’identifiant par défaut. Mais dès le lancement du programme, il se reconfigure avec

    l’identifiant associé aux interrupteurs.

    La fonction fct_retourne_ID () permet de récupérer simplement la valeur du numéro de

    l’identifiant en fonction du positionnement des interrupteurs. Pour cette fonction, les

    instructions suivantes sont nécessaires :

    digitalWrite : si la broche est configurée en ENTREE, écrire un niveau HAUT sur cette broche a pour effet d'activer la résistance interne de 20K de "rappel au plus"

    (pullup) sur cette broche.

    digitalRead : lit l’état (le niveau logique) d'une broche précise en entrée numérique, et renvoie la valeur HIGH ou LOW.

    void setup()

    {

    pinMode(11, OUTPUT); //déclaration de la sortie 11, PWM voie 2 (avant arrière)

    pinMode(12, OUTPUT) ; //déclaration de la sortie 12, PWM voie 3 (rotation gauche, droite)

    pinMode(10, OUTPUT); //déclaration de la sortie 10, PWM voie 1 (puissance ie montée ou descente)

    pinMode(13, OUTPUT); //déclaration de la sortie 13, PWM voie 4 (Roulis gauche, droite)

    pinMode(broche_echo, INPUT); // déclaration de la broche écho (2) en tant qu'entrée

    pinMode(broche_trigger, OUTPUT); // déclaration de la broche trigger (3) en tant que sortie

    for (i=0; i

  • 31

    commande de l'xbee) delay(2000); //initialisation de l'ID réseau (temps de

    garde obligatoire)

    Serial.print ("ATID"); //initialisation de l'ID réseau (commande AT pour le changement de réseau) Serial.print (identifiant_reseau, DEC); //initialisation de l'ID réseau (valeur de l'ID

    que l'on a récupérée)

    Serial.print ("\r"); //initialisation de l'ID réseau (retour chariot obligatoire)

    Serial.print ("ATCN\r"); //initialisation de l'ID réseau (sortie du mode commande)

    // lecture des valeurs des 4 trimes

    trime[0] = analogRead(A0);

    trime[1] = analogRead(A1);

    trime[2] = analogRead(A2);

    trime[3] = analogRead(A3);

    }

    En fin de programme :

    int fct_retourne_ID () {

    int valeur_interupteur[nb_interrupteur]={0,0,0,0}; //pour stocker la position de chaque interrupteur

    int poids_binaire[nb_interrupteur]={1,2,4,8}; //pour passer en décimal le numéro de l'ID

    int ID=0; //pour stocker l'ID réseau correspondant au positionnement des interrupteurs.

    for (i=0; i

  • 32

    Le drone ne réclame qu’une tension de 3.3V. Celle-ci est obtenue à l’aide de diodes zener et

    de résistances (une diode et une résistance par voie). Ne connaissant pas exactement le

    courant demandé par le drone, la résistance a été calculée avec un courant faible et ajustée

    avec l’expérience.

    Mesure de l’altitude du drone à l’aide du SRF05

    Pour utiliser le SRF-05, il faut lui envoyer une demande de mesure (Trigger). C’est un signal

    carré de 5V dont la période est de 10 µs minimum. Dès qu’il reçoit ce signal, le SRF-05

    envoie 8 bursts d’ultrasons de 40 kHz. Dès l’envoi du dernier ultrason, le capteur envoie un

    signal sur la pin Echo qu’il maintient à 5V jusqu’il reçoive un retour des ultrasons. A ce

    moment là, il redescend le signal Echo à la masse.

    Nous avons donc un signal Echo qui est proportionnel à la distance entre le SRF-05 et l’objet.

    Pour le programme, l’instruction PulseIn qui lit la durée d'une impulsion appliquée sur une

    broche (configurée en ENTREE) est nécessaire.

    Enfin, la fréquence d’utilisation du SRF-05 est tous les 50 ms. C’est un temps de sécurité

    recommandé par le constructeur, pour s’assurer qu’un signal envoyé par une mesure

    précédente ne vienne pas fausser la nouvelle.

  • 33

    Commandes

    Sont également gérées ici les commandes envoyées par les étudiants à l’aide des instructions :

    - Serial.available : donne le nombre d'octets disponible à la lecture dans la file d'attente du port série.

    - Serial.print : affiche les données sur le port série - Serial.read : lit les données entrantes sur le port Série.

    void loop()

    {

    for (i=1; i

  • 34

    if(Serial.available() == 1) //lecture de la commande, s'il y a une donnée disponible sur la liaison série {

    lecture = Serial.read(); //la donnée disponible est stockée dans la variable lecture

    if (lecture == 0xFF) //si l'étudiant envoie OxFF,

    {

    hauteur = fct_mesure_hauteur(); //alors le drone mesure sa hauteur,

    Serial.println(hauteur, DEC); //et l'imprime sur la liaison série, l'étudiant la recevra sur son terminal

    Serial.flush(); //remise a 0 des données en attente sur la liaison

    }

    else

    {

    if (0

  • 35

    VI – Guidage et tests

    Le système de guidage a été réalisé à partir de bois et de fils de pêche. Une mousse placée en

    bas protège le drone des atterrissages non maîtrisés et des plombs l’empêchent de frapper la

    planche supérieure. Le système est démontable en détendant les fils et en faisant passer les

    petites boucles dans « train d’atterrissage » du drone.

    Ce système simple a, me semble t-il, l’avantage de ne pas modifier la structure du drone.

  • 36

    Une vérification à l’oscilloscope des signaux émis par la carte Arduino nous indique un

    fonctionnement normal du programme :

    Position neutre :

    Modification de la trime de puissance :

    Envoie de la commande 100%

    vérification des tensions :

  • 37

    Modification d’une autre trime :

    Les tests réalisés sont concluants. La difficulté réside dans le fait que le drone ne semble pas

    conserver dans le temps ses réglages initiaux. Ou bien, le fil de pêche le déséquilibre un peu.

    Quoiqu’il en soit, il me semble, que le guidage ne puisse être plus doux. Le drone est

    vraiment très léger et très sensible. Pour l’utilisation que l’on en fait, il ne me semble pas

    possible de faire mieux (ou bien je n’ai pas d’idée). Quoiqu’il en soit, ça me paraît très

    satisfaisant tel que.

  • 38

    Conclusion

    Les fils de commande du drone sont gênants pour la réalisation du TP. En effet, comme écrit

    précédemment, le drone est très sensible au moindre frottement. Ces fils sont pour l’instant

    nécessaires car la plaquette est trop volumineuse pour être supportée par les hélices. La suite

    pourrait donc être la miniaturisation de cette plaquette. En effet, il existe une carte Arduino

    plus petite et proposant les mêmes fonctions : la carte nano. De même, si l’adaptateur xbee

    pour cette carte n’est pas disponible sur le site Arduino il existe chez d’autres revendeurs.

    Voici une image de l’ensemble que l’on peut obtenir :

    De plus, si cet adaptateur est encore trop volumineux, les plans des cartes Arduino sont tous

    disponibles. Il est donc réalisable dans un laboratoire disposant du matériel nécessaire (cf

    annexe pour le schéma).

    Il reste les potentiomètres choisis un peu volumineux, mais surtout le capteur d’altitude.

    Celui-ci pourrait être géré par une autre carte et être fixé en haut ou en bas du support.

    Quoiqu’il en soit, le programme fonctionnera de même avec cette autre carte.

    Le contenu du stage m’a semblé très complet. J’ai découvert le Zigbee, ainsi que le système

    Arduino. J’ai progressé dans la connaissance des microcontrôleurs et ai manipulé quelques

    composants électroniques. J’ai fait le lien entre électronique et informatique, matière qui

    jusqu’à présent, était assez cloisonnée à mes yeux.

    J’ai pris beaucoup de plaisir dans la réalisation de ce projet.

  • 39

    Remerciements :

    - Merci à monsieur Calmettes quant à sa souplesse pour la date de soutenance. - Merci à madame Leymarie, monsieur Viallon ainsi que monsieur Nohlier pour

    ce sujet passionnant. Merci pareillement pour cette ambiance de travail très

    sereine et agréable (le retour au sein de l’armée va piquer les yeux). Merci

    également pour la confiance (enfin je crois) accordée.

    - Merci à Nicolas Monnereau pour son aide patiente et précieuse à mes débuts sur le système Arduino et pour son conseil final qui m’a bien débloqué.

  • 40

    ANNEXE : schéma de l’adaptateur Xbee