ISN 2012/2013 Initiation à l'arduino : niveau 1 ss Stéphane Fossé / Marc Gyr 13 novembre 2012
Table des matières 1. Qu'est-ce que la carte ARDUINO?...3 a. Description...3 b. Un micro-ordinateur dans un circuit intégré: le microcontrôleur...3 c. Les entrées et les sorties... 4 d. La liaison Arduino-ordinateur... 4 e. Exercices à faire à la maison...4 2. Installation de l'environnement de développement (IDE):...5 3. Testons notre premier programme:...6 a. Le protocole de transfert...6 b. Structure d'un programme Arduino...6 c. Etude d'un exemple: le programme "Blink"...7 4. Améliorons notre premier programme...7 a. Affichage d'un texte dans le moniteur série: (Blink1)...7 b. Clignotement conditionnel: (Blink2)...7 c. Commande via le moniteur série: (Blink3)...8 2
1. Qu'est-ce ce que la carte ARDUINO? a. Description C'est un circuit imprimé comportant tous les composants électroniques nécessaires pour faire fonctionner un microcontrôleur (Atmega 328) associé à une interface USB lui permettant de communiquer avec un ordinateur. b. Un micro-ordinateur micro ordinateur dans un circuit intégré: le microcontrôleur Le cœur du système est un microcontrôleur c'est à dire l'équivalent d'un petit ordinateur. Il contient un microprocesseur (unité centrale) associé, associé par l'intermédiaire de bus de données, données à différentes mémoires et des interfaces lui permettant de communiquer avec l'extérieur, et bien sûr une horloge (16 Mhz) pour cadencer l'ensemble. L'alimentation électrique peut être fournie par le port USB ou une alimentation externe. externe Le microcontrôleur exécute en permanence un programme qui a été copié dans sa mémoire flash (EEPROM de 32 ko) depuis un ordinateur via le port USB (interface série). Ce programme est initialisé à la mise sous tension de la carte ARDUINO ou lorsqu'on actionne action le bouton poussoir "reset"" sur la carte. 3
c. Les entrées et les sorties La carte "ARDUNO Uno" que nous allons utiliser dispose de 14 broches ("pin" en anglais, numérotées de 0 à 13) qui peuvent être configurées en "entrées digitales" ou en "sorties digitales" susceptibles de délivrer une intensité maximale de 40 ma sous une tension égale à 0V ou 5V. Certaines de ces broches peuvent être configurées en "sorties PWM" (Pulse Width Modulation ou modulation de largeur d'impulsion). Elle possède également 6 entrées-sorties analogiques (notées A0 à A5) permettant de mesurer ou de délivrer des tensions comprises entre 0V et 5V grâce à un convertisseur A/N à 10 bits. Les broches pin0 et pin1 ne sont pas disponibles pour l'utilisateur de la carte car elles sont utilisées pour communiquer avec l'ordinateur via le port USB, et sont notées RX (réception) et TX (transmission) sur la carte. d. La liaison Arduino-ordinateur Le port USB de la carte ARDUINO est géré par l'ordinateur comme un port série virtuel (COMx) et il est nécessaire d'installer les drivers correspondants avant d'établir la liaison ordinateur-arduino. e. Exercices à faire à la maison Répondre aux questions ci-dessous à partir des informations données page 1 et de vos connaissances: 1. Quelle différence y a-t-il entre une entrée analogique et une entrée numérique de la carte Arduino? 2. - Combien y a-t-il d'entrées numériques disponibles pour l'utilisateur sur cette carte? - et de sorties? - Sont-elles utilisables simultanément? 3. - Dans quel intervalle doivent se situer les tensions appliquées aux entrées de l' 'Arduino? - Pourquoi? 4. - Sur combien de valeurs différentes sont numérisées les entrées analogiques? - Quelle est la résolution de cette conversion? 5. -Une DEL (diode électroluminescente) rouge standard présente une tension de seuil U 0 2 V avec un courant d'intensité nominale I 0 10mA. - Quel peut être l'intérêt de brancher une DEL sur une sortie de l'arduino? - Est-il possible de la brancherr directement sur une sortie numérique de l'arduino? - Pourquoi? - Calculer la valeur de la résistance R du conducteur ohmique nécessaire. 6. - Qu'est-ce qu'une sortie "PWM"? - Quel peut-être son intérêt? 7. - Rechercher sur internet ce qu'est un "servo" utilisé en modélisme. - Quel est son rôle dans un ensemble radiocommande? - Pour et quel est le type de tension électrique qu'il faut lui appliquer (en plus de l'alimentation continue +5V) pour l'actionner? - Un servo peut-il être contrôlé par une carte Arduino? - A quoi peut servir une carte Arduino dans le cadre de notre cours d'isn? 4
2. Installation de l'environnement de développement (IDE): Télécharger le programme de l'environnement de développement correspondant au système d'exploitation utilisé sur le site du fabricant www.arduino.cc onglet "download". Par exemple sous windows télécharger le fichier compressé "arduino-1.0.1-windows.zip" (ou une version plus récente). Décompresser le fichier ZIP téléchargé, puis extraire le répertoire obtenu "arduino-1.0.1" dans votre clé USB. Brancher la carte ARDUINO sur un port USB de l'ordinateur. Si la fenêtre "Nouveau matériel détecté" s'ouvre, ne laissez pas Windows update s'en mêler et cochez la case "Non, pas pour cette fois", puis cliquez sur "Suivant". Dans la fenêtre qui s'affiche, cochez la case "Installer à partir d'un emplacement spécifié", puis "Suivant". Dans la nouvelle fenêtre, sélectionner "Parcourir" puis indiquer le chemin du sous-répertoire "drivers" dans le répertoire "Arduino" créé précédemment. Autoriser Windows à installer le pilote. Sinon, il faut aller dans le Panneau de configuration / Système / Gestionnaire de Périphériques / Autres Périphériques / Arduino Uno Général / Mettre à jour le pilote / Rechercher un pilote sur mon ordinateur / Parcourir puis indiquer le chemin du sous-répertoire "drivers" dans le répertoire "Arduino" créé précédemment. Autoriser Windows à installer le pilote. Dans le Panneau de configuration / Système / Gestionnaire de Périphériques une nouvelle ligne apparait : Elle correspond à la création d'un convertisseur USB-Série. Noter le numéro affecté au port COM créé (ici le COM6). A partir de maintenant, la carte ARDUINO sera reconnue comme n'importe quel périphérique USB dès sa connexion au PC. Dans votre répertoire clé USB/Arduino cliquer sur l'icone "Arduino.exe" créé précédemment pour lancer l'environnement de développement. OUVRIR MONITEUR TRANSFERER VERIFIER 5
Dans le menu "Fichier" puis "Préférences", choisir la langue "français" si ce n'est déjà fait. Puis dans "Outils" vérifier le type de carte utilisé (Arduino UNO) puis indiquer le numéro du port affecté par l'ordinateur (ici le COM6). Remarque: On peut vérifier rapidement le numéro de port COM affecté par l'ordinateur à l'arduino en cliquant sur "Démarrer" puis "Périphériques et Imprimantes". Attention! si d'autres ports COM virtuels ont été créés précédemment sur le PC, la carte Arduino ne pourra pas fonctionner sur un numéro de port partagé, même si l'autre périphérique n'est pas branché. On peut éventuellement modifier le numéro du port affecté à la carte Arduino en allant dans Panneau de configuration / Système / Gestionnaire de Périph. / Ports (COM et LPT)/ Communications Port/ Paramètres du port/ Avancé/ numéro de port. Il faut également veiller à brancher la carte Arduino toujours sur le même port USB de l'ordinateur. 3. Testons notre premier programme: a. Le protocole de transfert Ouvrir l'environnement de développement (I.D.E.) puis cliquer sur l'icône "ouvrir": une liste de programmes conçus pour être directement transférés dans la mémoire flash de l'arduino apparait dans une fenêtre, classée par thèmes. Sélectionner dans "01Basics" le fichier "Blink" qui a simplement comme objectif de faire clignoter une DEL déjà connectée entre la borne 13 de l'arduino et la masse du montage (via une résistance de protection). Le script du programme s'ouvre dans la fenêtre principale de l'i.d.e. Cliquer sur l'icône "vérifier" de façon à déceler d'éventuels bugs dans la structure du programme (cela sera surtout nécessaire pour tester nos propres programmes). La taille du programme apparait dans la fenêtre d'édition en bas. Cliquer sur l'icône "transférer (téléverser)" afin d'enregistrer ce programme dans la mémoire flash de l'arduino qui va ensuite l'exécuter en boucle. b. Structure d'un programme Arduino Le langage de programmation Arduino dérive du langage C++. Il en respecte les règles de syntaxe: Une ligne qui commence par "//" est considérée comme un commentaire Un paragraphe qui commence par "/*" et qui se termine par "*/" est considéré comme un commentaire Toute ligne d'instruction de code doit se terminer par un point virgule ";" Un bloc d'instructions (définition d'une fonction, boucle "while" ou "if"/"else"...) doit être délimité par des accolades ouvrantes "{" puis fermantes "}". Toutes les variables doivent être déclarées, ainsi que leur type (int,float,...) avant d'être utilisées. Un programme (ou "sketch") Arduino est constitué de 2 fonctions distinctes: La fonction de configuration "void setup" exécutée une seule fois au lancement du programme. La fonction "void loop" qui est ensuite exécutée indéfiniment en boucle. Remarque: On peut relancer le programme en actionnant le bouton poussoir "reset" sur la carte. 6
c. Etude d'un exemple: le programme "Blink" int DEL = 13; ou #define DEL 13 On donne un nom à la broche 13 de façon à la repérer plus facilement dans le script: c'est celle qui est reliée à la DEL que l'on souhaite faire clignoter. On crée ainsi une nouvelle variable nommée "DEL" de type "nombre entier". void setup() { pinmode(del, OUTPUT); } On initialise la borne 13 de l'arduino (nommée "DEL") comme une sortie numérique. void loop() { digitalwrite(del, HIGH); delay(1000); digitalwrite(del, LOW); delay(1000); } On met la borne 13 (nommée "DEL") au niveau logique haut (+5V): la diode s'allume. On attend un délai de 1000ms (soit 1s). On met la borne 13 (nommée "DEL") au niveau logique bas (0V): la diode s'éteint. On attend un délai de 1000ms (soit 1s). Et ainsi de suite tant que le circuit est alimenté. 4. Améliorons notre premier programme a. Affichage d'un texte dans le moniteur série: (Blink1) Pour afficher "la DEL clignote avec une période de 2s" dans le moniteur série que l'on peut ouvrir en cliquant sur l'icône située en haut à droite de l'environnement de développement (voir page 3), il faut: ouvrir la liaison série entre l'arduino et l'ordinateur via le câble USB en intégrant le script Serial.begin(9600); dans la fonction "setup" (9600 définit en baud le nombre de bits échangés par seconde). introduire dans la fonction "loop" le script associé au texte à écrire à l'écran (en évitant les caractères accentués: é, è, ê, à,...) suivi d'un saut à la ligne: Serial.println("la DEL clignote avec une periode de 2s"); Exercices : 1. Tester ce nouveau programme et ouvrir le moniteur série. Que constate-t-on? 2. Modifier le script de façon à éviter ces répétitions. Détailler votre algorithme. b. Clignotement conditionnel: (Blink2) On souhaite maintenant provoquer le clignotement ou l'allumage continu de la DEL selon que l'entrée 6 est portée au niveau logique haut (+5V) ou au niveau bas (0V). Pour cela, il faut mettre la borne 7 au niveau haut, la borne 5 au niveau bas et confectionner un petit cavalier (fil de cuivre plié en forme de U) pour relier la borne 6 à l'une ou à l'autre : 7 6 5 7
Exercices : 1. Les bornes 5,6 et 7 de l'arduino doivent-elles être configurées en entrées ou sorties? 2. Ecrire et tester le script correspondant, après avoir conçu l'algorithme adapté à ces consignes, sachant que: Le script pinmode(6, INPUT); initialise la borne 6 de l'arduino comme une entrée numérique. Le script etat=digitalread(6); permet de lire l'état "haut" ou "bas" de la borne 6 de l'arduino et de le mémoriser dans une variable nommée "etat" (qui doit être définie au préalable!). 3. Compléter ce script de façon à afficher dans l'environnement de développement "la DEL est allumée" ou "la DEL clignote" une seule fois à chaque changement d'état. c. Commande via le moniteur série: (Blink3) Le moniteur série permet d'afficher des informations (textes, valeurs des variables,...) en provenance de l'arduino, mais il permet aussi d'envoyer des informations tapées au clavier de l'ordinateur vers l'arduino. L'objectif à atteindre est de provoquer l'allumage de la DEL en envoyant le caractère "A", son extinction en envoyant le caractère "E" et son clignotement en envoyant le caractère "C". Exercice : 1. Ecrire et testere le script correspondant, après avoir conçu l'algorithme adapté à ces consignes, sachant que: if (Serial.available() > 0) // lit l'octet entrant s'il y a des données disponibles sur le port série { lettrelue = Serial.read(); // la lettre correspondant à l'octet reçu est mémorisée dans la variable "lettrelue" if ((lettrelue = = 'A') (lettrelue = = 'E') (lettrelue = = 'C')) // le "ou" logique correspond à (ALT GR + touche 6) { lettre = lettrelue; // la variable "lettre" ne peut contenir que les caractères "A","E" ou "C" en excluant } tout autre caractère reçu. } 8