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