5187-186-p84

Upload: issac-cain

Post on 19-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 5187-186-p84

    1/5

    T E C H N O L O G I E M A I J U I N 2 0 13

    ARDUINO

    Une carte pour vos projetsCHRISTOPHE ULTR []Les projets interdisciplinaires impliquent de faire lacquisition

    dun matriel adaptable et peu coteux qui rponde des

    problmatiques communes, comme le contrle-commande ou

    linterface homme-machine. La carte Arduino rpond parfaitement

    ces exigences. Dcouvrons-la travers un exemple de projet.

    e projet doit constituer un moment fort dans la sco-

    larit des lves de terminale. Leur implication etleur motivation se doivent dtre importantes. Il est

    donc ncessaire de leur offrir un maximum de libert

    pour la concrtisation de leurs ides. Et cela commencepar le choix du projet, qui doit rpondre au moins une des thmatiques du rfrentiel : mobilit ; sant ;

    confort ; protection ; nergie ; environnement ; assistance

    au dveloppement. Une fois un sujet choisi par chaque

    groupe dlves, les professeurs laborent des notes de

    cadrage du projet destination dune commission aca-

    dmique de validation. Ds que cette commission donneson accord, laventure commence, ou plutt continue...

    Le projetUne quipe dlves de terminale S option sciences delingnieur du lyce Jacquard, dans le 19earrondissement

    de Paris, sest lance dans un projet cratif et original :

    une bote aux lettres qui communique avec le facteur parRFID. Cette activit de conception sinscrit dans le cadre

    institutionnel du projet interdisciplinaire de terminale.

    La technologie mettre en uvre devant tre peucoteuse, le choix matriel sest rapidement port sur

    une carte de contrle de type Arduino pour assurerlautomatisation du produit.

    Lors de la constitution du cahier des charges, leslves ont propos que la bote aux lettres :

    renseigne, de la faon le plus simple possible, lutilisa-

    teur sur la quantit de courrier reu. La solution retenue a

    t de placer une balance lectronique au fond de la bote ;

    interdise toute personne non autorise la possibilit

    dy mettre quelque chose (par exemple de la publicit),tout en laissant la possibilit au facteur dy accder. La

    solution retenue a t de dverrouiller laccs la bote

    pour le facteur grce une carte RFID La Poste. Le casexceptionnel o une personne autre que le facteur aurait

    dposer quelque chose dans la bote a t envisag. Lasolution retenue consiste utiliser la fonction commu-nication en champ proche (NFC, pour near field com-

    munication) du lecteur de cartes RFID pour reconnatrele tlphone mobile de cette personne.

    mots-cls

    automatismes,partie commande,programmation, projet

    Lquipe pdagogique encadrant le projet, compo-se de professeurs en sciences industrielles de ling-

    nieur et dun professeur de physique, y a ajout unedimension : une recherche sur la manire dalimenter

    tous les quipements de la bote aux lettres en ner-

    gie lectrique et ventuellement, pour une habitation

    individuelle, de la rendre indpendante de ce point de

    vue ; elle a propos au groupe dlves que la fonction

    traiter de la chane dinformation (qui reoit des

    informations des capteurs et qui pilote les praction-neurs de la bote aux lettres) soit assure par un type

    de microcontrleurs prsent sur les cartes Arduino.

    Pourquoi les cartes Arduino ?

    Les aspects matriels

    Ds son origine, ce projet se devait dtre conomique,

    car les clients potentiels ne vont pas dpenser beaucoup

    dargent pour ajouter des fonctions leur bote aux lettres.

    Par consquent, il tait ncessaire de trouver un disposi-tif capable de piloter le systme et de communiquer aveclutilisateur un prix raisonnable (environ 20 ). De plus,

    il fallait trouver le moyen de le programmer simplementsans tre un expert en langage informatique. Les cartesArduino rpondent ces deux attentes nous verrons

    comment. Et, petit plus, elles sont fabriques dans unpays de la Communaut europenne : lItalie.

    Signalons que, si les cartes Arduino possdent leur

    propre interface de programmation, la version 5 dulogiciel FlowCode possde en option le compilateurpour cartes Arduino, de mme que Matlab et LabView.

    Nous allons ici nous intresser la carte Arduino

    Uno, mais il en existe dautres avec des caractris-tiques diffrentes : ATmega2560, Leonardo, Micro et

    la dernire en date, DUE.

    Les aspects pdagogiques

    La programmation des cartes Arduino est aise, et

    lensemble des outils ncessaires au dveloppementdes applications est open source,cest--dire que tous

    les schmas, programmes, bibliothques de priph-

    riques, etc., sont 100 % accessibles en consultation

    et/ou en tlchargement sur internet. La commu-naut des personnes utilisant ces cartes est trsnombreuse, et une recherche internet aboutit gn-

    ralement des bauches de solutions mises en ligne.

    On trouve aussi de plus en plus douvrages traitant dece type de cartes (voir le S-SI le mag p. 14). Par

    consquent, en prrequis, un apprentissage minimal

    des fonctions algorithmiques de base et une initiationaux microcontrleurs sont suffisants pour lexploiter.[]Professeur dlectrotechnique au lyce Jacquard de Paris (75019).

  • 7/23/2019 5187-186-p84

    2/5

    M A I J U I N 2 0 13 T E C H N O L O G I E

    Bouton Reset

    Gestion du port USB

    AREF : tension de rfrence

    des entres analogiquesPort dentres/

    sorties numriques

    Led On

    Led L

    Leds RX et TX indicatricesdune transmission srie

    C Atmel 328P

    Port dentres analogiquesConnecteur des alimentations

    Alimentation externe

    Rgulateur de tension

    Fusible lectronique

    Port USB

    Quartz 16 MHz

    Comme nous allons le voir, lutilisation de macrofonc-

    tions permet la concrtisation aise dune ide sans que

    lon soit informaticien. Ces cartes sont donc un outil

    parfaitement adapt pour le prototypage.

    Les retours dexprience dquipes pdagogiquesdautres tablissements ayant dj utilis des cartes

    Arduino en enseignement technologique prbac ontconfort notre choix : les cartes Arduino sont fiables,

    robustes et faciles programmer.

    La carte Arduino Uno

    Quand on regarde une carte Arduino Uno, on estdrout par sa sobrit ! On y retrouve le microcon-trleur entour du minimum de composants nces-saires son fonctionnement et sa programmation .

    La carte, de conception trs robuste, tient dans la main

    (755415 mm). Autre avantage, une connectique trsastucieuse permet aux cartes priphriques baptises

    shields en langage Arduino de venir se raccorder surla carte principale en formant une sorte de mille-feuille.

    Quelques prcisions techniques :

    La gestion du port USB se fait grce un microcon-trleur indpendant qui tablit une liaison srie RS232entre la carte et le PC, ce qui diminue la capacit destransferts. Si cet aspect constitue un inconvnient, il

    faudra utiliser la carte Arduino Leonardo qui permetune gestion native du port USB, tant vue par le PC

    comme un priphrique HID (human interface device). Exemples de shields

    b La carte Ethernet Shield

    a La carte Motor Shield Rev3 qui permet

    de commander 2 moteurs

    courant continu

    par un double pont

    en H (CI L298P)

    ou un moteur

    pas pas

    La carte Arduino

    La connexion AREF permet dutiliser une tension derfrence autre que les 5 volts de la carte (configura-

    tion par dfaut). Lutilisation de cette fonction ncessite

    quelques prcautions (voir les donnes du fabricant).

    Le symbole~qui prcde le numro de certainesconnexions du port dentres/sorties numrique dsigne

    leur capacit dlivrer un signal PWM (pour pulsewidth modulation, ou MLI pour modulation de largeur

    dimpulsion). Le microcontrleur ne possdant pas de

    convertisseur numrique-analogique, le seul moyen dedisposer dune tension variable dpendant dune donne

    numrique est de gnrer un signal rectangulaire de

    frquence 490 Hz dont le rapport cyclique est variable.La donne numrique pourra aller de 0 255 et cor-respondra un rapport cyclique allant de 0 100 %.

  • 7/23/2019 5187-186-p84

    3/5

    T E C H N O L O G I E M A I J U I N 2 0 13

    Le mille-feuille de cartes

    Le programme de lexemple dans la version 1.0.3 du logiciel

    de programmation

    compilateur. Cette bibliothque fonctionne exactementcomme le pilote dun priphrique de PC. Au niveau de

    la programmation, ce pilote va nous permettre duti-liser des macrofonctions qui ne ncessitent pas derelles comptences en programmation. Par cons-quent, il nest pas ncessaire dentrer dans les dtails

    de la structure du traitement du priphrique mais

    un niveau minimal danglais technique est souhaitable.La structure du programme, classique, est baptissketch,

    ou croquis dans la version franaise. Le programme com-mence par la dclaration des variables et par lappel aux

    bibliothques (si ncessaire). Puis viennent deux parties :La partievoid setup( )est la partie du programme

    qui ne va sexcuter quune seule fois, la mise en route(ou aprs unreset,ou quand on se connecte au port COM).

    On y crit gnralement les fonctions dinitialisation.La partie void loop( )est une boucle infinie danslaquelle le programme crit sexcute tant que la carte

    est alimente.

    Le programmeur peut galement crire ses propresfonctions annexes, quil pourra utiliser dans les fonc-

    tions setup( )et loop( ).

    Remarque :On vrifiera avant de lancer un tlverse-ment du programme vers le microcontrleur que la carte

    Arduino et le port COM utiliss sont correctement slec-tionns dans le menu Outils. Ces renseignements sont rap-

    pels en bas droite de linterface de programmation .

    Le programme et le cblage permettent depiloter un servomoteur en fonction de la position dunpotentiomtre. Le convertisseur analogique-numrique

    convertit la tension prsente lentre AO allant de 0

    La led L est directement relie la connexion 13,

    elle permet donc de vrifier ltat dune sortie dun pro-

    gramme sans que lon ait effectuer le moindre cblage.Une sortie de lArduino Uno peut dlivrer un courantdune intensit de 40 mA, cependant lintensit totale

    de toutes les sorties ne pourra pas excder 200 mA.La carte possde 6 entres analogiques associablesavec un convertisseur 10 bits. La dure de la conver-

    sion analogique-numrique est d environ 100 ms.

    La connexion Vin permet de rcuprer, en liaisondirecte, la tension de lalimentation externe.

    Le cblage dunshield

    Pour le projet, il a fallu associer la carte ArduinoUno un shieldRFID pour lautorisation daccs. Un

    shieldLCD 2 x16 (2 lignes, 16 colonnes) a t ajoutpour laffichage des informations utiles lutilisateur.

    Les deux shieldscommuniquent via le bus srie IC, et

    leur alimentation est fournie par la carte mre. Il ny aaucun cblage faire, il suffit dempiler les cartes .Pour des raisons videntes de lisibilit, le shieldLCD

    est install au sommet de la pile.

    Remarque :Il faut vrifier, lors de lachat dun shield

    compatible Arduino, que les connecteurs permettant

    dempiler les cartes sont fournis, car ce nest pas sys-

    tmatiquement le cas.

    La programmationIllustrons par un exemple (sans lien avec la bote aux

    lettres intelligente) la simplicit de programmation de

    la carte Arduino.

    Le langage utilis nest pas propritaire, il utilise lesinstructions et la structure du langage C et du langage

    C++ (plus rcent). Les instructions disponibles sontlimites, car adaptes aux possibilits du microcon-trleur. Linterface de programmation est tlchar-

    geable en version franaise cette adresse :

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

    Notons que ce logiciel est portable, cest--dire quon

    peut linstaller sur une cl USB, par exemple. Il permet

    de programmer nimporte quel microcontrleur avec unlangage de haut niveau sans restrictions pour un cot nul.

    De plus, les shieldsou les priphriques que lon vient

    ajouter la carte mre possdent tous leur bibliothque

    (library), tlchargeable ou prsente par dfaut dans le

  • 7/23/2019 5187-186-p84

    4/5

    M A I J U I N 2 0 13 T E C H N O L O G I E

    Laffichage de ladresse de la bote aux lettres

    Dans un premier temps, le programme teste que le

    shieldRFID est bien connect la carte Arduino, puis

    il se met en attente dun badge et affiche ladresse de

    la bote aux lettres en bleu sur lcran LCD .

    Lorsque lon prsente un badge proximit de

    lantenne du shieldRFID, le programme lidentifie etrcupre les 4 octets de son UID (Unique IDentifica-

    tion number). Lidentification du facteur se fait grce au

    4eoctet de lUID de son badge (la valeur hexadcimale0x95 dans notre cas). LUID du badge est stock defaon permanente dans la puce et nest pas modifiable.Pour simplifier la reconnaissance du badge, les lves

    ont choisi de ne tester que le dernier octet.

    Par contre, le contenu du bloc 4 tant modifiable parlutilisateur, les lves y ont inscrit (avec un autre pro-

    gramme) Badge Facteur et Badge Inconnu

    en guise de vrification visuelle immdiate des diff-

    rents badges sur le moniteur srie de dialogue avecle microcontrleur (voir lencadr).

    Si le badge du facteur est identifi, le programmeaffiche en vert sur lcran LCD que laccs la bote auxlettres est autoris . Pour tout autre badge, il affiche

    en rouge que laccs la bote aux lettres est interdit .La fin du programme permet aux lves dtre aver-

    tis, par un affichage sur le moniteur srie, dun ventuel

    problme avec le badge ou quun badge est reconnu par

    le lecteur mais incompatible avec cette application.

    Remarque :Linterface de programmation ne permet pas desimuler le fonctionnement dun programme. Cest pourquoi,

    dans une phase de mise au point, il est trs utile dinsrerdans le programme des lignes qui vont permettre denvoyer

    et de recevoir des informations sur le moniteur srie enfait une fentre qui souvre sur un PC permettant dafficher

    5 V issue du potentiomtre en une grandeur code

    sur 10 bits allant de 0 1023. La macrofonction

    ServoMoteur.write(valeur)pilote intgrale-ment le servomoteur dans les deux sens. Nul besoin deconnatre la logique de commande des servomoteurs en

    fonction de la largeur et de la frquence des impulsions.

    Remarque :la macrofonction ServoMoteur.write(valeur)ayant besoin, en argument, de la

    variable valeur de 0 179, nous avons procd unemise l chelle avec la fonction :

    map(donne, limite_basse_source, limite_

    haute_source, limite_basse_destination,

    limite_haute_destination);

    Nous constatons dans cet exemple que la mobilisationdes connaissances et la rflexion principale vont vers lar-

    chitecture du programme et du prototype. Il ny a pas deperte de temps en programmation fastidieuse, et en quelques

    lignes on est capable de piloter un petit systme ludique.

    Une production des lves

    Pour le projet la bote aux lettres, lencadr montre une

    partie de programme qui permet dobtenir les rsultats illus-

    trs par les figures de . Elle concerne la rsolution

    du problme de lidentification du facteur. Ce programmesemble plus complexe que celui de lexemple prcdent,

    mais son criture na pourtant pas ncessit normment

    plus de travail. En effet, les lves sont partis des exemplesfournis avec les bibliothques du shieldRFID et du shield

    LCD, en ont analys les solutions, puis ils ont modifi les

    programmes en fonction de ce dont ils avaient besoin.

    Le cblage ncessaire au programme de lexemple

    (schma ralis avec le logiciel gratuit Fritzing)

    La prsentation du badge facteur

    La prsentation dun badge inconnu

  • 7/23/2019 5187-186-p84

    5/5

    T E C H N O L O G I E M A I J U I N 2 0 13

    dutilisation dun tel matriel. Ils ont t sduits par les

    progrs rapides de ce groupe et ont tous voulu intgrer

    les cartes Arduino dans leur projet. Par exemple, dansle cadre dun projet de maison thermodynamique, des

    lves ont ralis le pilotage en puissance du module

    effet Peltier ainsi que lacquisition et le traitement des

    mesures de temprature laide de ce type de cartes.

    des messages texte reus de la carte Arduino et denvoyer

    des caractres vers la carte Arduino. Le dialogue entre lacarte et le PC seffectue par une liaison srie.

    Une sduisante simplicit

    Le choix de la technologie Arduino sest rvl trs fruc-tueux : aprs quelques ttonnements, les lves affects ce projet de bote aux lettres intelligente ont rapide-

    ment obtenu des rsultats concluants. Nous avons gale-

    ment constat un intrt des lves des autres groupes,pour le projet desquels le choix des solutions technolo-

    giques ntait pas compltement fix, devant la facilit

    Le moniteur srie de dialogue avec le microcontrleur

    Pour aller plus loin

    TAVERNIER (Christian), Arduino: Matrisez sa programmation etses cartes dinterface ( shields ),Dunod, 2011

    www.arduino.cc/fr

    www.adafruit.com

    https://github.com/adafruit/Adafruit-PN532

    https://github.com/adafruit/Adafruit-RGB-LCD-Shield-Library

    www.fritzing.org

    Remerciements

    Bruno Guilbert (professeur en STS IRIS au lyce Jacquard)pour son assistance technique sur les cartes Arduino et laprogrammation en C++, et galement aux lves du groupe bote aux lettres intelligente : Gustave Corpet, Samy Kettani,Bilel Souabni et Ugo Vidberg.

    #include < Wire .h>#include // Appel aux bibliothques#include #include

    #define ROUGE 0x1 // Couleurs d'clairage de l'afficheur#define VERT 0x2#define BLANC 0x7

    Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield(); Adafruit_NFCShield_I2C nfc( 2, 3); // Dclaration du protocole I2C

    void setup(void) {

    Serial.begin(115200);lcd.begin(16, 2); // Attribution des dimensions de l'afficheur LCDnfc.begin();

    uint32_t versiondata = nfc.getFirmwareVersion();if(! versiondata) {

    Serial .print("Pas de carte PN53x");while(1); // Arrt si pas de shield NFC/RFID reconnu}

    // Renseignements propos de la carte PN53xSerial .print(" Chip PN5."); Serial .println((versiondata>>24) & 0xFF, HEX);Serial .print(" Firmware ver. "); Serial .print((versiondata>>16) & 0xFF, DEC);Serial .print(' .'); Serial .println((versiondata>>8) & 0xFF, DEC);

    nfc.SAMConfig(); // Configuration pour lire la carte RFID Serial .println(" En attente de carte ISO14443A ..."); // Voir fig. 9}

    void loop(void) {

    intIDcarte = 0;booleanacquisition; // Identification de la carte uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Tableau pour retourner l'adresse UIDuint8_t uidLength; // Taille de l'UID (4 ou 7 octets)lcd.clear(); // Effacer lcran LCDlcd.print(" LYCE Jacquard"); // Affichage de l'adresse sur l'cran LCD lcd.setCursor(0, 1); // de la boite aux lettres lcd.print(" 2, rue Bouret "); // Voir fig. 6 lcd.setBacklight (BLANC);

    // En attente de la carteacquisition = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);if(acquisition) {

    Serial .println(" Carte ISO14443A identifie "); // Info sur la carte dtecteSerial .print(" Taille UID : "); Serial .print(uidLength, DEC); Serial .println(" Octets");

    if(uidLength == 4) { // Si lUID de la carte comporte 4 octets

    IDcarte =uid[3]; // Gnration du code d'identificationSerial .println(" Mifare Classic (4 Octets UID) "); // Carte Mifare Classicuint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };acquisition = nfc.mifareclassic_AuthenticateBlock(uid,uidLength, 4, 0, keya);if(acquisition) {

    Serial .println(" Lecture du bloc 4 ");uint8_t data[16];nfc.Print HexChar(data, 16); // Vrification du bloc 4 et du codeSerial .println(" Code ID : "); Serial .print(IDcarte, HEX); Serial .println("");

    if(IDcarte ==0x95) { // Code de la carte du facteurlcd.clear();lcd.setCursor(0, 0);lcd.print(" Badge facteur"); // Voir fig. 7lcd.setCursor(0, 1);lcd.print(" Autoriser acc s");lcd.setBacklight (VERT); // Rtroclairage vert

    delay(6000);}else { // Tous les autres codes

    lcd.clear();lcd.setCursor(0, 0);lcd.print(" Badge inconnu"); // Voir fig. 8lcd.setCursor(0, 1);lcd.print(" Accs interdit ");lcd.setBacklight (ROUGE); // Rtroclairage rouge delay(6000);}}

    else{Serial .println(" Secteur illisible "); // Prise en compte dautres cas } // de figure

    }else {

    Serial .println(" DFAUT d'identification ");}

    }

    if(uidLength == 7) {Serial .println(" Mifare Ultralight (7 Octets UID) non utilise ");

    }}

    Programme de gestion daccs par badge RFID avec afficheur LCD