• Aucun résultat trouvé

[PDF] Tutoriel carte Arduino pour debutant | Cours Arduino

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Tutoriel carte Arduino pour debutant | Cours Arduino"

Copied!
14
0
0

Texte intégral

(1)

Sommaire

1.Introduction...1

2.Présentation du matériel...2

2.1.Base...2

2.2.Caractéristiques du modèle Arduino UNO...3

2.3.Fonctionnement...3 3.Mise en œuvre...4 3.1.Connexions...4 3.2.Programmes...4 3.3.Logiciel de développement...6 3.4.Procédure d'utilisation...6 4.Résolution de problèmes...7 4.1.Erreur à la compilation...7 4.2.Erreur au téléversement...7 5.Écriture de programmes...8 5.1.Fonctions de base...8 5.2.Structuration, algorithmique...8

5.3.Liste des instructions du langage...10

6.Fonctionnalités avancées...12

6.1.Les interruptions...12

6.2.Temporisation non bloquante...13

6.3.Communications série...14

1 .

1 .

I

I

N T R O D U C T I O N

N T R O D U C T I O N

Arduino est une carte électronique à microprocesseur permettant le prototypage de traitements du signal et de l'information. Ce matériel peut être programmé afin d'acquérir, traiter, analyser et produire des signaux électriques. Il permet ainsi d'effectuer des tâches très diverses comme :

– la mesure de grandeurs physiques pour réaliser des capteurs, – le pilotage d'un robot,

– la domotique (le contrôle des appareils domestiques

-éclairage, chauffage…),

– etc.

En fait ce n’est qu’une sorte de calculatrice programmable qui va lire des informations externes provenant de capteurs, calculer, puis écrire les résultats sur des pré-actionneurs (distributeurs d’énergie) pour commander toutes sortes d’appareils.

Ce type de matériel est la base des activités « Systèmes d'Information et Numérique (SIN) ».

Entrées Sorties

Programme (configuration, suite d'instructions)

(2)

2 .

2 .

P

P

R É S E N T A T I O N

R É S E N T A T I O N

D U

D U

M A T É R I E L

M A T É R I E L

2.1. Base

Une carte Arduino est un circuit imprimé sur lequel sont soudés et reliés différents composants électroniques.

Le composant principal est un microcontrôleur, circuit intégré comprenant dans un seul boîtier :

– un microprocesseur pour effectuer les traitements,

– de la mémoire vive pour stocker les informations temporaires,

– de la mémoire Flash pour stocker le programme, les ordres à exécuter (conservés hors alimentation), – des interfaces d'entrées / sorties pour acquérir et produire les signaux électriques désirés.

Autour du microcontrôleur on trouve entre autres :

– une prise d'alimentation auxiliaire, – un quartz (horloge) qui cadence le

microprocesseur à une certaine fréquence,

un connecteur USB pour programmer la

carte à partir d'un ordinateur,

des connecteurs d'entrées / sorties

numériques, analogiques et

d'alimentations, pour y placer une carte électronique proposant des

fonctionnalités complémentaires : les « boucliers » (shield).

Exemples de boucliers « Shield » sur carte Arduino UNO :

Arduino UNO avec Shield afficheur LCD

+ micro-joystick

Arduino avec Shield interface de puissance pour moteurs à courant continu 28V / 3A (robotshop.com)

Arduino avec carte Seeedstudio Music Shield (source : seeedstudio.com)

(3)

2.2. Caractéristiques du modèle Arduino UNO

• Processeur : ATmega328P

• Mémoire : Flash (programme) 32 ko ; EEPROM (sauvegardée) 1 ko ; RAM (travail) 2 ko • Entrées / sorties :

14 broches (« Pin » en anglais) d'entrées / sorties numériques (Tout Ou Rien) repérées 0 à 13 ;

Imax = 40 mA

◦ dont 6 sorties PWM (=MLI : Modulation de largeur d'impulsion pour pseudo variation

analogique)

◦ 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.

◦ 6 entrées analogiques repérées A0 à A5

ATTENTION ! LESTENSIONSAPPLIQUÉESSURLESENTRÉESNEDOIVENTPASDÉPASSERLATENSIOND'ALIMENTATION SOUSPEINEDEDESTRUCTIONDUCIRCUIT.

• Communications :

◦ Liaison USB par circuit ATmega8U2 • Alimentation :

◦ par le connecteur USB

◦ ou une alimentation externe avec commutation automatique • Dimensions : 69 x 53 mm

2.3. Fonctionnement

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 le bouton poussoir "reset" sur la carte.

(4)

3 .

3 .

M

M

I S E

I S E

E N

E N

ΠU V R E

ΠU V R E

La carte Arduino UNO basée sur un ATMEGA 328 coûte environ 20 €. Les cartes d'extension de type SHIELD coûtent de 30 à 70 €.

! ! CEMATÉRIELESTFRAGILEETNEVOUSSERACONFIÉQUELORSQUECELASERANÉCESSAIRE ! !

SIVOUSL’ENDOMMAGEZCESERAUNE FAUTE ETNONPASUNEERREUR, PARCEQUEVOUSN’AUREZRESPECTÉNI LESCONSIGNESNILEMATÉRIEL ! VOUSDEVREZDONCREMPLACERCEMATÉRIELÀVOSFRAIS !

3.1. Connexions

La carte Arduino UNO se connecte sur un ordinateur (PC Windows, PC Linux, Mac) par un cordon standard USB. La carte peut être auto-alimentée par le port USB.

Le port USB de la carte ARDUINO est géré par l'ordinateur comme un port série virtuel (COMx). Après la première connexion USB, si le pilote Arduino est requis (ou depuis le gestionnaire de périphériques), demander la recherche de pilote dans le dossier \drivers de l'application Arduino. Exemple :

C:\Program files\Arduino\Arduino 1.05\Drivers

3.2. Programmes

Structure d'un programme Arduino:

Le langage de programmation Arduino dérive du langage C++ et il en respecte les règles de syntaxe : • Une ligne qui commence par "//" (2 slashes) 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, ouvrante "{" puis fermante "}".

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.

(5)

Premier exemple de programme

Le programme "Blink1": fait clignoter une Diode ElectroLuminescente (DEL).

#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 déclare une constante nommée "DEL" de type "nombre entier (int)". */

void setup(){

//On initialise la borne 13 de l'Arduino (nommée "DEL") comme une sortie.

pinMode(DEL, OUTPUT); }

// fonction "loop" exécutée en boucle

void loop(){

// On met la borne 13 au niveau logique haut (+5V): la diode s'allume

digitalWrite(DEL, HIGH);

// On attend un délai de 1000ms (soit 1s)

delay(1000);

// On met la borne 13 au niveau logique bas (0V): la diode s'éteint

digitalWrite(DEL, LOW);

// On attend 1s

delay(1000); }

(6)

3.3. Logiciel de développement

Présentation

Le programme de l'Arduino est saisi depuis le clavier sur l'ordinateur et téléversé dans la carte électronique grâce à une application que l'on nomme IDE :

« Integrated Development Environment ».

3.4. Procédure d'utilisation

Lancer l'IDE Arduino, un sketch vierge s'ouvre

A la première utilisation seulement :

◦ Menu Outils | Type de carte | Arduino Uno

◦ Menu Outils | Port série | ComXX (en général utiliser un port supérieur à 2, ex : COM4)

Saisir le programme au clavier, avec instructions ET commentaires

Fichier | Enregistrer (Ctrl-S) le programme dès 5 minutes de saisie ou de modification. • Menu Croquis | Vérifier / Compiler (Ctrl-R)

(7)

4 .

4 .

R

R

É S O L U T I O N

É S O L U T I O N

D E

D E

P R O B L È M E S

P R O B L È M E S

4.1. Erreur à la compilation

Lorsqu'une erreur de compilation survient, une zone inférieure apparaît, avec un entête à fond rouge, décrivant le type d'erreur : Blink:22: error : expected ';' before 'digitalWrite'

Blink: nom du programme • 22: numéro de ligne

expected ';' : Expected signifie 'attendu', donc

un point virgule est attendu et il n'est pas présent ;

before 'digitalWrite' : indique où l'erreur

a lieu dans la ligne

A noter que le saut de ligne n'est pas un séparateur d'instruction. Donc si le compilateur attend un ';' avant 'digitalWrite', c'est en fait à la fin de la ligne précédente qu'il a été oublié, dans cet exemple après delay(1000) !

4.2. Erreur au téléversement

avr_dude: stk500_getsync: not in sync: resp=0x00

Ici la compilation s'est bien déroulée

(Taille binaire du croquis: xxxx octets), mais un problème est apparu lors de l'envoi du programme dans la carte ARDUINO.

Ceci signifie que le logiciel de développement n'a pas été capable de communiquer avec la carte à travers le port USB.

Vérifier alors le numéro de port COM utilisé par le menu Outils | Port série | COMx.

Sur un ordinateur de bureau, le port USB est probablement attribué à un numéro de COM supérieur ou égal à 3 (les ports 1 et 2 étant les ports RS232 de la carte mère).

(8)

5 .

5 .

É

É

C R I T U R E

C R I T U R E

D E

D E

P R O G R A M M E S

P R O G R A M M E S

La programmation est l'écriture de l'ensemble d'instructions que le microprocesseur doit exécuter, selon l'ordre établi par la syntaxe de l'écriture, afin d'obtenir le résultat attendu.

5.1. Fonctions de base

Commentaires

Les commentaires et remarques sont nécessaires et obligatoires pour pouvoir reprendre un travail, l’expliquer ou le transmettre.

SANSCOMMENTAIRELEPROFESSEURNELEREGARDERA PAS ! ETNEVOUSAIDERA PAS.

//Commentaire sur une ligne

/* commentaires long sur plusieurs lignes … … … bla bla … bla bla …

*/

Définition de constantes

// DEL constamment connectée sur la broche N° 8, tout au long du programme

#define sortieDEL 8

// Bouton poussoir constamment connecté sur la broche N° 2

#define bouton 2

Déclaration de variables

int compteur = 0 ; // Réservation d'une mémoire de type Entier initialisée à 0

boolean etat = false ; // Réservation d'une mémoire de type Booléen

Acquisition d'une entrée, lecture logique boolean etat ;

etat = digitalRead( 2) ; // Lit l'état de l'entrée TOR N° 2

Activation d'une sortie, écriture logique

digitalWrite( 2, LOW) ; // Désactivation de la sortie N° 2

digitalWrite( 3, HIGH) ; // Activation de la sortie N° 2

5.2. Structuration, algorithmique

L'ensemble des langages de programmation informatique répond à une logique liée au cadencement des microprocesseurs actuels, représentée par un organigramme de programmation (parfois appelé

algorigramme, logigramme ou plus rarement ordinogramme) : voir ci-contre.

Opérateurs booléens (conditions multiples)

Lorsque dans une structure alternative (if … then … else …), l'on désire tester plusieurs

conditions simultanées ou inclusives, on utilise les opérateurs booléens adéquats :

&& pour une fonction ET || pour une fonction OU

etat1 = digitalRead( bouton1) ;

etat2 = digitalRead( bouton2) ;

if (etat1 = HIGH && etat2 = HIGH) { // traitement sur commande double

}

if (etat1 = HIGH || etat2 = HIGH) { // traitement sur commande simple

(9)

Début Traitement 1 Traitement 2 Fin Début Allumer la DEL Attendre 1s Fin Éteindre la DEL Attendre 1s

Logique d'exécution Organigramme Exemple d'instructions

pour Arduino

Séquence

digitalWrite(DEL, HIGH);

delay(1000);

digitalWrite(DEL, LOW);

delay(1000);

Alternative

if (etat == 1) {

digitalWrite(DEL1, HIGH); }

else {

digitalWrite(DEL2, HIGH); }

Boucle 0..n fois

Tant que Condition

• faire Traitement

Fin de Faire

Le traitement peut ne jamais être exécuté si la condition est déjà vraie avant le traitement demandé.

while (etat == 1) { y = y + 1 ;

deplace( y) ;

}

Boucle 1..n fois

Faire

• Traitement

jusqu'à Condition

Le traitement est exécuté au moins une fois !

var etat ;

do {

etat = digitalRead( BP1); }

while (etat == false)

Traitement 1 Traitement 2 Condition

Vrai

Faux

Allumer DEL1 Allumer DEL2 Si état actif Vrai Faux Traitement Condition Faux Vrai Avancer Si état actif Faux Vrai Traitement Condition Faux Lire le poussoir Poussoir Non

(10)

5.3. Liste des instructions du langage

Structure Variables Functions

• setup() • loop() Control Structures • if • if...else • for • switch case • while • do... while • break • continue • return • goto Further Syntax • ; (semicolon) • {} (curly braces)

• // (single line comment) • /* */ (multi-line comment) • #define • #include Arithmetic Operators • = (assignment operator) • + (addition) • - (subtraction) • * (multiplication) • / (division) • % (modulo) Comparison Operators • == (equal to) • != (not equal to) • < (less than) • > (greater than)

• <= (less than or equal to) • >= (greater than or equal

to) Constants • HIGH | LOW • INPUT | OUTPUT| INPUT_PULLUP • true | false • integer constants • floating point constants

Data Types • void • boolean • char • unsigned char • byte • int • unsigned int • word • long • unsigned long • short • float • double

• string - char array • String - object • array Conversion • char() • byte() • int() • word() • long() • float()

Variable Scope & Qualifiers

• variable scope • static • volatile • const Utilities • sizeof() Digital I/O • pinMode() • digitalWrite() • digitalRead() Analog I/O • analogReference() • analogRead() • analogWrite() - PWM Due only • analogReadResolution() • analogWriteResolution() Advanced I/O • tone() • noTone() • shiftOut() • shiftIn() • pulseIn() Time • millis() • micros() • delay() • delayMicroseconds() Math • min() • max() • abs() • constrain() • map() • pow() • sqrt() Trigonometry • sin() • cos() • tan()

(11)

Structure Variables Functions

Boolean Operators

• && (and) • || (or) • ! (not)

Pointer Access Operators

• * dereference operator • & reference operator

Bitwise Operators

• & (bitwise and) • | (bitwise or) • ^ (bitwise xor) • ~ (bitwise not) • << (bitshift left) • >> (bitshift right) Compound Operators • ++ (increment) • -- (decrement) • += (compound addition) • -= (compound subtraction) • *= (compound multiplication) • /= (compound division) • &= (compound bitwise

and)

• |= (compound bitwise or)

Random Numbers

• randomSeed() • random()

Bits and Bytes

• lowByte() • highByte() • bitRead() • bitWrite() • bitSet() • bitClear() • bit() External Interrupts • attachInterrupt() • detachInterrupt() Interrupts • interrupts() • noInterrupts() Communication • Serial • Stream

Quelques descriptions de fonctions :

• La fonction delay(duree_ms) effectue une pause pendant la durée en millisecondes passée en argument. Cette fonction est bloquante : aucune autre instruction du programme principal n'est exécutée tant que la durée n'est pas écoulée.

(12)

6 .

6 .

F

F

O N C T I O N N A L I T É S

O N C T I O N N A L I T É S

A VA N C É E S

A VA N C É E S

6.1. Les interruptions

Ce dispositif permet d'interrompre un traitement long du programme principal pour effectuer des tâches courtes, rapides, lancées par un événement prédéfini : changement d'état d'une entrée numérique, …

Sur Arduino UNO, seules les entrées I2 et I3 peuvent intercepter un changement d'état et lancer une tâche définie par une fonction. Les types d'événements interceptés sont :

• RISING = L’entrée passe d’un niveau bas à un niveau haut • FALLING = L’entrée passe d’un niveau haut à un niveau bas

• CHANGE = L’entrée a changé de niveau : d’un niveau bas vers un niveau haut ou inversement.

Programmation de base

Le paramétrage d'une interruption est défini dans la fonction setup() ;

#define intDI2 0

#define intDI3 1

void setup() {

// [...]

// Activation de l'interruption : Broche, Fonction, Evenement

attachInterrupt( intDI2, Reagir, FALLING); }

void loop() { // […]

}

// Déclaration de la fonction contenant la tâche rapide

void reagir() { // Aucun parametre à passer

// Ecrire ici l'action a accomplir sur l'evenement // Aucune valeur à retourner

} ;

Désactivation / ré-activation

Les interruptions peuvent être temporairement inhibées (désactivées) par : noInterrupts();

puis réactivées par : interrupts();

Une interruption peut être définitivement désactivée par : detachInterrupt( intDI2);

(13)

Précautions, restrictions

En anglais, les fonctions attachées à une interruption sont des Interrupt Service Routines • A l’intérieur de la fonction attachée à l'interruption :

• la fonction delay() ne fonctionnera pas ;

• la valeur retournée par millis() ne sera pas incrémentée ;

• la fonction delayMicroseconds() fonctionne car non basée sur une interruption. • Toute variable modifiée dans la fonction attachée à une interruption doit être déclarée comme

variable volatile : volatile int state = low ;

• Article très complet : http://www.gammon.com.au/forum/?id=11488

Exemple : comptage d'événements sur l'entrée DI2

#define intDI2 0

#define intDI3 1

volatile int compteur = 0

void setup() {

// Activation de l'interruption : Broche, Fonction, Evenement

attachInterrupt( intDI2, Compter, FALLING); } void loop() { // […] } void Compter() { compteur = compteur + 1; } ;

6.2. Temporisation non bloquante

La fonction millis() retourne le nombre de millisecondes écoulées depuis le lancement du programme.

La valeur retournée peut être testée pour savoir si un certain laps de temps s'est écoulé depuis un événement précédent dans le programme principal :

long jalon = 0; // Initialise la reference de temps

long tempsPasse = 0; // Iniitalise la variable temps

void setup() { // …

}

void loop() {

tempsPasse = millis() - jalon; // Calcul du temps d'execution ecoule

if(tempsPasse >= 1000) { // Si 1000ms ecoulees depuis le jalon

(14)

6.3. Communications série

Le bus de communication série permet d'émettre/recevoir des chaînes de caractères vers/depuis la

fenêtre terminal de la console de programmation (PC), ou d'envoyer des commandes vers un afficheur

graphique intelligent comme la gamme 4Display.

Le port de base Serial communique à travers les broches DI0 (RX) et DI1 (TX).

Mise en œuvre

Le port doit être initialisé dans la fonction setup() ; les caractères sont envoyés depuis la fonction loop() :

void setup() {

Serial.begin(9600); // open the serial port at 9600 bps:

}

void loop() {

Serial.print(78.25); }

Format d'envoi

L'envoi de chaînes de caractères dans la fonction loop() est assuré en ASCII directement par les fonctions print() et println() (avec retour à la ligne, code 13) avec différentes formes selon le type de variable. http://arduino.cc/en/Serial/Print

Commande Résultat Remarques

Serial.print(78) 78

Serial.print(1.23456) 1.23

Serial.print('N') N

Serial.print("top") top Guillemets doubles !

Serial.print(78, BIN) 1001110 Serial.print(78, OCT) 116 Serial.print(78, DEC) 78 Serial.print(78, HEX) 4E Serial.println(1.23456, 0) 1 Serial.println(1.23456, 2) 1.23 Serial.println(1.23456, 4) 1.2346 Serial.write( 13) ; [Retour à la

ligne] Envoi ASCII brut

Suivi et débogage

L'environnement de développement logiciel Arduino dispose d'un moniteur série intégré afin de communiquer avec une carte Arduino. Il est accessible par le bouton ci-contre ou le menu

Outils | Moniteur série. Vérifier alors que la vitesse de transmission sélectionnée dans le bas droit de la fenêtre correspond à celle définie dans le programme.

Références

Documents relatifs

Pour arriver à leur décision, les juges jouissent donc d’une certaine liberté dans l’exercice de ce pouvoir. Toutefois, rien ne garantit que leur décision sera la meilleure.

92 ( قحلملا 1 ) ةيلولأا هتروص يف ةيداشرلإا تاجاحلا نايبتسا داعبلأا تاـــــــــــــــــــــجاــــــحلا يناعأ لا هذه نم ةلكشملا اهنم يناعأ ةجردب ةطيسب اهنم

ﲪ ﺪﻴﻬﺸﻟﺍ ﺔﻌﻣﺎﺟ ـ ﺔﻴﺳﺎﻴﺴﻟﺍ ﻡﻮﻠﻌﻟﺍﻭ ﻕﻮﻘﳊﺍ ﺔﻴﻠﻛ ﻱﺩﺍﻮﻟﺍ ـ ﺮﻀﳋ ﺔ ﺔﺤﻔﺻ 171 ﻢـﻗر ﻲﺳﺎﺳﻻا نﻮﻧﺎﻘﻟا ﺎﻬﻴﻠﻋ ﺺﻧ ﺎﻣ ﺐﺴﺣ ﻲﺴﻧﻮﺘﻟا عﺮﺸﳌا ﺎﻫﺪﻤﺘﻋا ﱵﻟا ﺔﻣﺎﻌﻟا ةﺪﻋﺎﻘﻟا 38 ﺔﻨـﺴﻟ

Pourtant, le regard critique de l’artiste sur son travail et sur celui des autres est bel et bien présent à l’intérieur des œuvres contemporaines (ce serait

Même dans des champs comme ceux de l'architecture et de l'urbanisme se montraient les mythes de la conquête territoriale ; le régime utilisait le pouvoir

Electrical impedance measurements were then undertaken and results highlight their correlation to the changes in thermo-mechanical and physic-chemical parameters during curing

The MISE approach (mediation information system engineering) aims at defining and designing a platform, dedicated to initiate and support any collaborative situation among

We need to show that, with high probability, there exists a mechanism that for any node p, transforms any trace in such a way that the coalition of faulty nodes receives the