Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
l’Arduino
[Sous-titre du document]
Introduction
Ce cours à pour but de présenter et d’initier à l’utilisation d’Arduino.
Les cartes Arduino sont conçues pour réaliser des prototypes et des
maquettes de cartes électroniques pour l’informatique embarquée. Ces cartes
permettent un accès simple et peu couteux à l’informatique embarquée. De
plus, elles sont entièrement libres de droit, autant sur l’aspect du code source
(Open Source) que sur l’aspect matériel (Open Hardware). Ainsi, il est possible
de refaire sa propre carte Arduino dans le but de l’améliorer ou d’enlever des
fonctionnalités inutiles au projet.
1. Présentation de l’arduino
1.1. Généralités
Arduino est un projet créé par une équipe de développeurs, composée de six
individus : Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino,
David Mellis et Nicholas Zambetti. Cette équipe a créé le "système Arduino".
C’est un outil qui va permettre aux débutants, amateurs ou professionnels de
créer des systèmes électroniques plus ou moins complexes.
[Date] 1
initiAtion à l’Arduino
1.1.2. Applications
1.2.1.Le matériel
La carte Uno
[Date] 2
initiAtion à l’Arduino
La carte Mega
La carte Arduino Mega est une autre carte qui offre toutes les fonctionnalités
des précédentes, mais avec des options en plus. On retrouve notamment un
nombre d’entrées et de sorties plus importantes ainsi que plusieurs liaisons
séries.
1.2.2.Le logiciel
[Date] 3
initiAtion à l’Arduino
[Date] 4
initiAtion à l’Arduino
b. Charger un programme
Ça y est ! L’IDE Arduino est lancé. Un projet vierge est ouvert par défaut,
vous présentant également la structure d’un programme Arduino
[Date] 5
initiAtion à l’Arduino
[Date] 6
initiAtion à l’Arduino
[Date] 7
initiAtion à l’Arduino
[Date] 8
initiAtion à l’Arduino
Une fois que la bonne carte est sélectionnée, vous allez pouvoir commencer
le chargement. Votre configuration de carte est rappelée en bas à droite
de l’IDE Arduino :
Par défaut, votre port COM ne sera jamais le port COM1. Comment faire
pour connaître le numéro du port COM de votre Arduino ? Tout d’abord,
lancez votre gestionnaire de périphériques :
[Date] 9
initiAtion à l’Arduino
[Date] 10
initiAtion à l’Arduino
Cliquez sur vérifier, puis sur téléverser ! Ça y est, “Blink” est transféré ! Vous
devriez voir la LED présente sur votre Arduino se mettre à clignoter. Il s’agit
de la LED notée “L” à côté. Elle est de couleur orange sur les cartes Arduino
officielles.
[Date] 11
initiAtion à l’Arduino
2. Le langage Arduino
Un ordinateur
Une carte Arduino
Et connaitre le langage Arduino
C’est ce dernier point qu’il nous faut acquérir. Le but même de ce chapitre est
de vous apprendre à programmer avec le langage Arduino. Ce document ne
donne que les bases de la programmation Arduino.
Avec Arduino, nous devons utiliser un code minimal lorsque l'on crée un
programme. Ce code permet de diviser le programme que nous allons créer
en deux grosses parties.
2.1.2.La fonction
Dans le code ci-dessus se trouvent deux fonctions. Les fonctions sont en fait
des portions de code.
[Date] 12
initiAtion à l’Arduino
Cette fonction setup() est appelée une seule fois lorsque le programme
commence. C'est pourquoi c'est dans cette fonction que l'on va écrire le code
qui n'a besoin d'être exécuté qu’une seule fois. On appelle cette fonction:
"fonction d'initialisation". On y retrouvera la mise en place des différentes
sorties et quelques autres réglages. C'est un peu le check-up de démarrage.
Imaginez
un pilote d'avion dans sa cabine qui fait l'inventaire :
- patte 2 en sortie, état haut ?
- OK
- timer 3 à 15 millisecondes ? - OK
...
Une fois que l'on a initialisé le programme il faut ensuite créer son "cœur",
autrement dit le programme en lui-même.
2.1.3.Les instructions
Les instructions sont des lignes de code qui disent au programme : "fait ceci,
fait cela, ...". Les instructions sont terminées par un point-virgule. Une
instruction non terminé par un point-virgule est source d’erreur et le
programme ne compile pas.
2.1.4.Les accolades
Les accolades sont les "conteneurs" du code du programme. Elles sont propres
aux fonctions, aux conditions et aux boucles. Les instructions du programme
sont écrites à l'intérieur de ces accolades.
Ce sont des lignes de codes qui seront ignorées par le programme. Elles ne
servent en rien lors de l'exécution du programme. Elles permettent juste à
ceux qui liront le code de savoir ce que signifie la ligne de code que vous avez
écrite. C'est très important de mettre des commentaires et cela permet aussi
de reprendre un programme laissé dans l'oubli plus facilement !
Ligne unique de commentaire :
[Date] 13
initiAtion à l’Arduino
2.1.6.Les accents
2.2.1.Type de variables
Void
Exemple
Boolean ou bool
Exemple
[Date] 14
initiAtion à l’Arduino
char
Les données char sont des données pouvant contenir un caractère. C’est un
type de donnée qui occupe un octet de mémoire. Un caractère s’écrit dans une
variable char entre guillemets simples comme ceci : ‘A’. Pour écrire plusieurs
caractères, ce qu’on appelle aussi une chaîne de caractères (string), on
utilisera les guillemets doubles comme ceci : “ABC”. Mais derrière chaque
caractère se cache un nombre. Vous pouvez voir l’encodage spécifique dans
le tableau ASCII. Cela signifie qu’il est possible d’effectuer des opérations
arithmétiques sur des caractères, dans lesquels la valeur ASCII du caractère
est utilisée. Par exemple, ‘A’ + 1 a la valeur 66, car la valeur ASCII du caractère
‘A’ est 65.
Exemple
Unsigned Char
Exemple
Byte
Une donnée byte peut stocker un nombre non signé sur 8 bits, de 0 à 255.
[Date] 15
initiAtion à l’Arduino
Int
Les données int représentent les données de stockage des nombres entiers.
Il s’agit du type de donnée principal pour le stockage des nombres. int stocke
une valeur sur 16 bits, soit 2 octets. Cela donne une fourchette de -32 768 à
32 767 (soit une valeur minimale de -215 et une valeur maximale de 215-1).
Unsigned Int
Les Unsigned Int fonctionnent de la même manière que les Int. La différence
ici, c’est que les nombres négatifs ne sont plus pris en compte. Le nombre est
toujours encodé sur 2 bytes, soit 16 bits, soit 2 octets. La plage positive est
donc plus grande : de 0 à 65 535 (216-1).
Long
Les variables Long peuvent stocker des nombres entiers sur 4 bytes, soit 32
bits : de -2 147 483 648 (-231) à 2 147 483 647 (231+1).
Unsigned long
Les variables unsigned long peuvent stocker des nombres non signés
entiers sur 32 bits : de 0 à 4 294 967 295 (232-1).
Short
Une donnée de type short peut stocker un nombre entier sur 16 bits quel
que soit la carte Arduino utilisée : de -32 768 à 32 767 (soit une valeur
minimale de -215 et une valeur maximale de 215-1).
Float
[Date] 16
initiAtion à l’Arduino
Exemple
Double
Pour déclarer une variable est déclarée selon son type de donnée. Une variable
peut être initialisée à la création ou non. On peut également déclarer
plusieurs variables du même type en même temps. Par exemple :
Les variables utilisées dans un langage C que Arduino utilise possèdent tous
une portée dans le programme selon l’endroit où ces dernières sont déclarées.
Les variables ne peuvent être utilisées que par des instructions qui se
trouvent à l’intérieur de la fonction où ces variables ont été déclarées. On
distingue 3 emplacements dans le code où une variable peut être déclarée.
Les variables déclarées à l’intérieur d’une fonction ou d’un bloc sont des
variables locales. Ils ne peuvent être utilisés que par les instructions qui se
[Date] 17
initiAtion à l’Arduino
Les variables peuvent être des paramètres d’une fonction. Prenons l’exemple
d’une fonction d’addition de deux nombres entiers que l’on va appeler dans
la boucle principale :
[Date] 18
initiAtion à l’Arduino
L’exemple suivant utilise des variables globales et locales ainsi que des
variables paramètres de fonction :
[Date] 19
initiAtion à l’Arduino
Un #define ne fait pas partie du langage Arduino. #define est ce qu’on appelle
une fonction préprocesseur ou une macro. C’est une fonction qui va être
appelée par le compilateur avant que ce dernier effectue son travail de
compilation.
Comme vous pouvez le voir dans l’exemple, le type de donnée n’est même pas
à être spécifié. Du fait que ce n’est pas du code C, la syntaxe n’accepte pas le
point-virgule ni le signe “=”.
2.3.1.Opérateurs arithmétiques
Nom de
Opérateur Description Exemple
l’opérateur
A+B
Addition + Additionne les deux opérandes.
donne 30
[Date] 20
initiAtion à l’Arduino
A*B
Multiplication * Multiplie les deux opérandes.
donne 200
2.3.2.Comparaison d’opérateurs
Nom de
Opérateur Description Exemple
l’opérateur
[Date] 21
initiAtion à l’Arduino
2.3.3.Opérateurs booléens
Nom de
Opérateur Description Exemple
l’opérateur
2.3.4.Opérateurs binaires
Nom de
Opérateur Description Exemple
l’opérateur
[Date] 22
initiAtion à l’Arduino
2.3.5.Compositions d’opérateurs
Nom de
Opérateur Description Exemple
l’opérateur
A++ donne
Incrémenter ++ Augmentation d’une valeur par 1.
11
Décrémenter — Diminution d’une valeur par 1. A– donne 9
Permets d’incrémenter une valeur
B += A est
Addition d’une autre valeur souhaitée tout
+= égal à B =
composée en stockant le résultat dans le
B+ A
premier opérande.
[Date] 23
initiAtion à l’Arduino
2.4. Conditions
Les contrôles d’état vont permettre d’évaluer des conditions pour permettre
l’exécution d’une partie de programme. Les contrôles d’état vont déterminer
si une condition est vraie ou fausse. La réponse est forcément binaire. Elle
peut être retournée par la réponse à la condition ou par le retour d’une
fonction. Voici la forme générale d’un contrôle d’état (valable pour la plupart
des langages de programmation) :
[Date] 24
initiAtion à l’Arduino
Exemple
[Date] 25
initiAtion à l’Arduino
Une instruction if peut être suivie d’une instruction else facultative, qui
s’exécute lorsque l’expression est fausse.
Séquence d’exécution
Appel de la condition if… else
if… else
Exemple
[Date] 26
initiAtion à l’Arduino
L’instruction if peut être suivie d’une instruction else if… puis d’une
instruction else, ce qui est très utile pour tester diverses conditions. On
appelle ça une imbrication de conditions.
Une condition if peut être suivit d’autre if avant une instruction else.
L’instruction else correspondra à sa propre imbrication de if. Veillez à
bien vérifier vos imbrications grâce aux “{}”.
Si une boucle if retourne un résultat vrai, les conditions if suivantes (de
la même imbrication), ne seront pas testées.
[Date] 27
initiAtion à l’Arduino
Exemple
[Date] 28
initiAtion à l’Arduino
[Date] 29
initiAtion à l’Arduino
Exemple
[Date] 30
initiAtion à l’Arduino
Syntaxe
Exemple
[Date] 31
initiAtion à l’Arduino
La boucle do…while est similaire à la boucle while. La différence ici, c’est que
la condition de répétabilité de la boucle est testée à la fin de celle-ci. Donc la
boucle est au minimum exécutée une fois. Si la condition while est vraie, la
boucle est répétée. De même que pour la boucle while simple, pour sortir de
la boucle, un élément du programme devra changer la condition de
répétabilité, sinon le programme ne sortira jamais de la boucle.
C’est l’un des concepts les plus utilisés dans le domaine de la programmation
! Une boucle for a pour but d’exécuter une partie du code un certain nombre
de fois. Une boucle for est déterminée par 3 expressions : la valeur initiale, la
valeur à contrôler et la valeur d’incrémentation ou de décrémentation.
Exemple
[Date] 32
initiAtion à l’Arduino
Syntaxe
[Date] 33
initiAtion à l’Arduino
Dans un programme, les lignes sont souvent très nombreuses. Il devient alors
impératif de séparer le programme en petits bouts afin d'améliorer la lisibilité
de celui-ci, en plus d'améliorer le fonctionnement et de faciliter le débogage.
Nous allons voir ensemble ce qu'est une fonction, puis nous apprendrons à
les créer et les appeler.
[Date] 34
initiAtion à l’Arduino
Pour fabriquer une fonction, nous avons besoin de savoir trois choses :
Quel est le type de la fonction que je souhaite créer ?
Quel sera son nom ?
Quel(s) paramètre(s) prendra-t-elle ?
Les paramètres servent à nourrir votre fonction. Ils servent à donner des
informations au traitement qu'elle doit effectuer. Prenons un exemple concret.
Pour changer l'état d'une sortie du microcontrôleur, Arduino nous propose la
fonction suivante: digitalWrite(pin, value). Ainsi, la référence nous explique
que la fonction a les caractéristiques suivantes:
- paramètre pin: le numéro de la broche à changer
- paramètre value: l'état dans lequel mettre la broche (HIGH, (haut, +5V) ou
LOW (bas, masse))
- retour: pas de retour de résultat
Comme vous pouvez le constater, l'exemple est explicite sans lire le code de
la fonction. Son nom, digitalWrite ("écriture digitale" pour les anglophobes),
signifie qu'on va changer l'état d'une broche numérique (donc pas analogique).
Ses paramètres ont eux aussi des noms explicites, pin pour la broche à
changer et value pour l'état à lui donner.
Lorsque vous aller créer des fonctions, c'est à vous de voir si elles ont besoin
de paramètres ou non. Par exemple, vous voulez faire une fonction qui met en
pause votre programme, vous pouvez faire une fonction Pause() qui prendra
en paramètre une variable de type char ou int, etc. (cela dépendra de la taille
de la variable). Cette variable sera donc le paramètre de notre fonction Pause()
et déterminera la durée pendant laquelle le programme sera en pause. On
obtiendra donc, par exemple, la syntaxe suivante : void Pause(char duree).
[Date] 35
initiAtion à l’Arduino
2.6.2.Type
Une fonction qui n'accepte pas de paramètres est une fonction vide. La
syntaxe utilisée pour définir une fonction vide est la suivante :
En effet, si on veut créer une fonction qui calcule le résultat d'une addition de
deux nombres (ou un calcul plus complexe), il serait bien de pouvoir renvoyer
directement le résultat plutôt que de le stocker dans une
variable qui a une portée globale et d’accéder à cette variable dans une autre
fonction.
En clair, l'appel de la fonction nous donne directement le résultat. On peut
alors faire "ce que l'on veut" avec ce résultat (le stocker dans une variable,
l'utiliser dans une fonction, lui faire subir une opération, ...)
Pour créer une fonction typée il faut simplement remplacer void par le type
choisi (int, long, ...)
[Date] 36
initiAtion à l’Arduino
La fonction récupère dans des variables les paramètres que l'on lui a envoyés
et faire les traitements puis retourner un résultat. Cela va nous servir à
simplifier notre code. Mais pas seulement ! Par exemple, vous voulez faire
plusieurs opérations différentes (addition, soustraction, etc.) et bien au lieu
de créer plusieurs fonctions, on ne va en créer qu'une qui les fait toutes !
Mais, afin de lui dire quelle opération faire, vous lui donnerez un paramètre
lui disant : "Multiplie ces deux nombres" ou bien "additionne ces deux
nombres".
[Date] 37
initiAtion à l’Arduino
Tout d'abord, une entrée / sortie est une connexion physique, une
"broche", sur laquelle vous pouvez venir câbler quelque chose, comme un
voyant, un bouton, un capteur, etc. Une entrée / sortie numérique est une
entrée / sortie qui peut prendre un des trois états physiques suivant : "haut"
(HIGH), "bas" (LOW) ou "haute impédance" (INPUT). L'état "haut" (HIGH)
signifie que la broche génère un signal. Cet état se traduit généralement par
une tension de 5 volts en sortie de la broche avec une carte Arduino classique.
L'état "bas" (LOW) signifie que la broche ne génère pas de signal. Cet état se
traduit généralement par une tension de 0 volt en sortie de la broche. L'état
"haute impédance" (INPUT) est un état un peu particulier. Dans cet état, la
broche ne génère aucun signal. L'état "haute impédance" signifie que la
broche est "en lecture" (en entrée). C'est cet état qui permet de "lire" un bouton
par exemple.
Les sorties numériques sont utilisées pour allumer des leds, piloter des
afficheurs 7 segments ou à cristaux liquides, commander des transistors, des
relais, etc...
Pour configurer une broche numérique en sortie, il faut, dans la partie Setup
du programme, écrire la ligne pinMode(broche, OUTPUT), où broche
représente le numéro de la broche numérique (0 à 20 pour l’arduino UNO).
Pour mettre un niveau logique sur une broche, il faut écrire la ligne
digitalWrite(broche, valeur), où broche représente le numéro de la broche
numérique et valeur le niveau logique LOW ou HIGH.
[Date] 38
initiAtion à l’Arduino
Exemple : allumer la led incluse sur la carte arduino (cette led est connectée
au port 13)
Les entrées numériques sont utilisées pour lire l'état d'un interrupteur ou
bouton poussoir, recevoir une information en provenance d'un capteur tout
ou rien.
Pour configurer une broche numérique en entrée, il faut dans la partie Setup
du programme écrire la ligne pinMode(broche, INPUT), où broche représente
le numéro de la broche numérique (0 à 20 pour l’arduino UNO).
Très souvent, les niveaux logiques sont fournis par des interrupteurs ou des
boutons poussoirs selon les schémas ci-dessous :
[Date] 39
initiAtion à l’Arduino
Exemple :
[Date] 40
initiAtion à l’Arduino
4. Les bibliothèques
4.1. Description.
Il vous sera parfois nécessaire d'installer une librairie qui ne fait pas partie de
la liste. Tout d'abord, il vous faudra la télécharger sous format ZIP sur
Internet.
[Date] 41
initiAtion à l’Arduino
Il ne vous reste plus qu'a l'installer dans vos programmes. A l'opposé des
originales, celle-ci se trouve dans une seconde liste appelé "Contributed
bibliothèque". Il y a aussi une autre liste "Recommended bibliothèque".
[Date] 42
initiAtion à l’Arduino
Note: Vous retrouverez aussi les fichiers source (.h) des bibliothèques dans le
fichier d'installation "Arduino" dans programme files dans le fichier
"libraries". Prenez garde à ne pas les modifier si vous ne maîtrisez pas la
programmation car il serait endommagé et plus du tout utilisable.
[Date] 43
initiAtion à l’Arduino
Pour faire appel à une bibliothèque, il faut aller la chercher dans le menu du
compilateur "croquis" =>>"inclure une bibliothèque" comme illustré ci-
dessous.
Exemple:
[Date] 44
initiAtion à l’Arduino
Le .h spécifie le type de fichier. H vient du terme anglais Header qui veut dire
entête. C'est donc pour spécifier un fichier dit d'entête.
C'est bien beau d'allumer une LED, mais si elle ne fait rien d'autre, ce n'est
pas très utile. Autant la brancher directement sur une pile. Alors voyons
comment rendre intéressante cette LED en la faisant clignoter !
Pour cela il va nous falloir introduire la notion de temps.
[Date] 45
initiAtion à l’Arduino
Vous le voyez, la LED s'allume. Puis, on fait intervenir la fonction delay(), qui
va mettre le programme en pause pendant un certain temps. Ensuite, on
éteint la LED. On met en pause le programme. Puis on revient au début du
programme. On recommence et ainsi de suite. C'est cette somme de
commande, qui forme le processus qui fait clignoter la LED.
Le but du programme
Le but du programme que nous allons créer va consister à réaliser un
chenillard. Pour ceux qui ne savent pas ce qu'est un chenillard, c’est un
mouvement lumineux qui se produit en allumant et en éteignant
[Date] 46
initiAtion à l’Arduino
Organigramme...
Bon, aller, le voilà cet organigramme ! Attention, il n'est pas complet, mais si
vous avez compris le principe, le compléter ne vous posera pas de problèmes
:
5.1.2.Fonction millis()
[Date] 47
initiAtion à l’Arduino
Attention ce code n'est pas du tout rigoureux voire faux dans son écriture, il
sert juste à comprendre le principe !
Maintenant imaginez. Vous roulez, tester que le bouton n'est pas appuyé,
donc faites clignoter les LED (cas du else). Le temps que vous fassiez
l'affichage en entier s'écoule 2 longues secondes ! Le robot a pu pendant cette
éternité se prendre le mur en pleine poire et les moteurs continuent à avancer
tête baissée jusqu'à fumer ! Ce n'est pas bon du tout ! Solution : la fonction
millis().
[Date] 48
initiAtion à l’Arduino
Utilisation
Maintenant, au lieu de dire "allume-toi pendant une seconde et ne fais
surtout rien pendant ce temps", on va faire un truc du genre "Allume-toi, fais
tes petites affaires, vérifie l'heure de temps en temps et si une seconde est
écoulée, alors réagis !".
Voici le code précédent transformé selon la nouvelle philosophie :
[Date] 49
initiAtion à l’Arduino
5.2.1.Interruption matériel
[Date] 50
initiAtion à l’Arduino
Contexte : Nous voulons que notre chronomètre se stoppe lorsque l’on appui
sur un bouton.
Nous allons appeler une fonction « Pause() » lorsque l’utilisateur appuie sur
un bouton branché sur le pin 2.
Exemple
[Date] 51
initiAtion à l’Arduino
5.2.2.Timer
5.2.2.1. Description
Dans cet exemple, nous utiliserons Timer Interrupt pour faire clignoter une
LED et noter combien de fois elle a clignoté. La première étape consiste à
installer des bibliothèques. Ouvrons l' IDE Arduino -> Sketch -> Inclure la
[Date] 52
initiAtion à l’Arduino
[Date] 53
initiAtion à l’Arduino
6. Communication série
6.1. Communication série UART
6.1.1.Protocole
Bien que l'IDE Arduino ait créé une configuration par défaut, qui sera la même
sur tous les périphériques Arduino, plusieurs paramètres de protocole
peuvent être modifiés en série UART. Il est important que tous les paramètres
[Date] 54
initiAtion à l’Arduino
Débit en bauds
Le débit auquel chaque bit de données est envoyé est appelé débit en bauds
. L'un des débits en bauds les plus courants pour UART (l'élément le plus
proche de la valeur par défaut) est de 9 600 bits par seconde (bits / s). Les
autres débits en bauds courants sont 300, 600, 1200, 2400, 4800, 19200,
38400, 57600, 74880 et 115200 bps. Bien que ceux-ci soient courants, vous
pouvez choisir n'importe quel débit que vous puissiez utiliser tant que le
matériel peut le gérer et que les deux appareils sont programmés pour utiliser
le même débit en bauds .
Trame de données
Dans le protocole UART, un octet de données est envoyé dans une trame de
données ou un paquet. Une trame comprend les données ainsi que d'autres
informations permettant de s'assurer que les données sont communiquées
avec précision.
Bit de départ
Bloc de données
[Date] 55
initiAtion à l’Arduino
Bit de parité
Bits d'arrêt)
Le bit d'arrêt est la fin du paquet. La plupart du temps, un seul bit d’arrêt est
envoyé et il s’agit de la ligne renvoyant l’état haut inactif.
6.1.2.Matériel
Pour que deux appareils puissent communiquer avec le port série UART,
trois fils doivent les connecter. Les deux premiers sont des fils de
communication. La transmission (TX) du premier doit se connecter à la
réception (RX) du second et le TX des secondes au RX du premier. Le troisième
fil est la terre. Les appareils doivent avoir une référence de masse commune,
sinon les impulsions peuvent ne pas aller de 0V à 5V. Cela pourrait
ressembler à -5V à 0V, ce qui ne serait pas enregistré comme impulsions à
l'autre appareil.
Les broches TX et RX d’une carte Arduino sont les broches 0 et 1. Ils sont
étiquetés TX et RX, et ils sont connectés au pont UART-USB de la carte
Arduino. Cela signifie que, lorsque la carte est connectée à l'ordinateur via
USB, l'UART de la carte Arduino est déjà câblée à un port série virtuel de
l'ordinateur (COM3). Cela permet à la carte d’envoyer et de recevoir des
données série avec un terminal série sur l’ordinateur.
[Date] 56
initiAtion à l’Arduino
6.1.3.Programmation
6.1.3.1. Initialisation
Pour utiliser le port série UART dans l'IDE Arduino, vous devez initialiser le
module série. La configuration par défaut nécessite uniquement l’appel de la
fonction Serial.begin (). Serial.begin () nécessite que le débit en bauds souhaité
soit placé dans la fonction en tant qu'argument.
6.1.3.2. Transmission
Serial.write ()
Serial.print ()
Cette commande est construite sur la commande Serial.write (). Il est capable
d'envoyer plusieurs octets, l'un après l'autre, pour former des chaînes. Ceci
est très utile pour transmettre des messages (chaînes de caractères). Cette
entrée de cette fonction peut être un tableau d'octets, un tableau de caractères
ou une chaîne.
Serial.println ()
C'est exactement la même chose que la commande Serial.print (), sauf qu'elle
ajoute un nouveau caractère de retour ligne / chariot à la fin de la chaîne
d'octets.
[Date] 57
initiAtion à l’Arduino
6.1.3.3. Recevoir
Lorsque nous recevons des données série dans l'IDE Arduino, nous ne lisons
que des données à partir d'un tampon. L’environnement Arduino s’occupe de
saisir chaque octet à la réception et de le placer dans ce tampon logiciel, ce
qui le rend encore plus facile à utiliser. Voici les fonctions que vous pourriez
utiliser lors de la réception de données.
Serial.read ()
Serial.available ()
Serial.peak ()
Serial.flush ()
Serial.parseInt ()
Serial.readString()
[Date] 58
initiAtion à l’Arduino
Serial.readStringUntil()
Une autre Classe nous sera nécessaire pour l'exploitation du moniteur série
et pour l'envoi de phrases appelées des chaînes de caractères alphabétiques.
C'est la classe String qui veut dire "chaîne" en français. De même que Serial
la classe String englobe des fonctions particulières, utiles aux traitements
des chaînes de caractères.
Par contre pour exploiter la classe string, il nous faut lui affecter un dit
"objet". Plusieurs "objets" peuvent être affectés à une classe. On appelle ça
une instanciation.
Par contre les guillemets sont laissés vides pour accueillir une chaîne de
caractères (phrases) transmise par le moniteur série.
"maPhrase" est notre objet. Vous remarquerez aussi qu'il n'est pas utile de
placer un point entre l'objet et la classe; contrairement à Serial.
Un objet, c'est un peu comme une variable mais pas vraiment. Cet objet
contiendra la donnée à exploiter mais ne sera exploitable que par le biais de
la Classe et de ses fonctions incluses.
trim() Supprime les espaces dit des « blancs » au début et à la fin d'une
chaîne de caractères.
concat() Rassemble (concatène) deux objets String en un seul dans un
nouvel objet String.
compareTo() Compare deux Objets String.
[Date] 59
initiAtion à l’Arduino
6.2.1.Introduction.
[Date] 60
initiAtion à l’Arduino
6.2.2.Présentation
Il est représenté par une loupe et se trouve dans la barre d'outils en haut à
droite du compilateur.
[Date] 61
initiAtion à l’Arduino
Ensuite Une fois lancé, le moniteur doit être configuré. On doit lui attribuer
un débit de traitement, en bauds, pour qu'il soit synchronisé à la même
vitesse que l'Arduino.
6.2.3.Synchronisation
Avant toute chose le moniteur série et la carte Arduino ont besoin d’être
renseigné et de connaître la vitesse à laquelle ils vont travailler si les deux
périphériques n'ont pas le même débit (vitesse) ils ne se comprendront
pas. Il faut donc choisir la même vitesse que celle configuré dans le
programme arduino. Tout ceci est dû à une horloge qui synchronise et fixe
une cadence de traitement et d'envoi des données. C'est la raison pour
laquelle Les valeurs doivent être identiques.
[Date] 62
initiAtion à l’Arduino
Finalement notre moniteur est prêt à être utilisé ! Il ne reste donc plus
qu'à créer le programme qui lui envoie des données à afficher.
[Date] 63
initiAtion à l’Arduino
7. Grandeurs analogiques
Faisons un petit rappel sur ce que sont les signaux analogiques. D’abord,
jusqu’à présent nous n’avons fait qu’utiliser des grandeurs numériques
binaires. Autrement dit, nous n’avons utilisé que des états logiques HAUT et
BAS. Ces deux niveaux correspondent respectivement aux tensions de 5V et
0V. Cependant, une valeur analogique ne se contentera pas d’être exprimée
par 0 ou 1. Elle peut prendre une infinité de valeurs dans un intervalle donné.
Dans notre cas, par exemple, la grandeur analogique pourra varier aisément
de 0 à 5V en passant par 1.45V, 2V, 4.99V, etc. Voici un exemple de signal
analogique, le très connu signal sinusoïdal :
Si on essaye de mettre ce signal (ce que je vous déconseille de faire) sur une
entrée numérique de l’Arduino et qu’on lit les valeurs avec digitalRead(), on
ne lira que 0 ou 1. Les broches numériques de l’Arduino étant incapables de
lire les valeurs d’un signal analogique.
[Date] 64
initiAtion à l’Arduino
Un truc très sympa avec Arduino, c’est que c’est facile à prendre en main. Et
ça se voit une fois de plus avec l’utilisation des convertisseurs numérique ->
analogique ! En effet, vous n’avez qu’une seule nouvelle fonction à retenir :
analogRead() !
analogRead(pin)
Cette fonction va nous permettre de lire la valeur lue sur une entrée
analogique de l’Arduino. Elle prend un argument et retourne la valeur lue :
Sur une carte Arduino Uno, on retrouve 6 CAN. Ils se trouvent tous du même
côté de la carte, là où est écrit "Analog IN" :
[Date] 65
initiAtion à l’Arduino
Nous avons une valeur entre 0 et 1023. Cette valeur est l’image de la tension
mesurée, elle-même comprise entre 0V et +5V. nous pouvons donc déterminer
la tension correspondante avec un simple produit en croix
1023<------>5V
458<------> ?
Exemple : Le potentiomètre
Symbole du potentiomètre
[Date] 66
initiAtion à l’Arduino
Une fois le raccordement fait, nous allons faire un petit programme pour
tester cela. Ce programme va simplement effectuer une mesure de la tension
obtenue sur le potentiomètre, puis envoyer la valeur lue sur la liaison série ().
Dans l’ordre, voici les choses à faire :
[Date] 67
initiAtion à l’Arduino
[Date] 68
initiAtion à l’Arduino
Avec :
Le rapport cyclique, un mot bien particulier pour désigner le fait que le niveau
logique 1 peut ne pas durer le même temps que le niveau logique 0. C’est avec
ça que tout repose le principe de la PWM. C’est-à-dire que la PWM est un
signal de fréquence fixe qui a un rapport cyclique qui varie avec le temps
suivant "les ordres qu’elle reçoit" (on reviendra dans un petit moment sur ces
mots).
[Date] 69
initiAtion à l’Arduino
Sur votre carte Arduino UNO, vous devriez disposer de 6 broches qui sont
compatibles avec la génération d’une PWM. Elles sont repérées par le symbole
tilde ~ . Voici les broches générant une PWM : 3, 5, 6, 9, 10 et 11. Sa fréquence,
est fixe, elle ne varie pas au cours du temps. Pour votre carte Arduino UNO
elle est d’environ 490Hz.
L’Arduino intègre une fonction toute prête pour utiliser la PWM
analogWrite(). Elle prend deux arguments :
[Date] 70
initiAtion à l’Arduino
[Date] 71
initiAtion à l’Arduino
[Date] 72
initiAtion à l’Arduino
[Date] 73
initiAtion à l’Arduino
[Date] 74