Arduino
Arduino
Arduino
Objectifs de ce cours
L’utilisateur sera capable de réaliser le câblage et la programmation d’un Arduino Uno ainsi
que la résolution de panne simple rapportée à ce dernier. L’élève sera également apte à
enseigner les bases de programmation en langage C/C++ à des élèves de 1ère et 2ème
année en énonçant les bases simplifiées de celle-ci.
Matériels et composants
La breadboard (platine de montage)
Par convention :
Noir = masse
Rouge = alimentation (+5V, +12V, 5V… ce que vous voulez y amener).
Le bouton poussoir
Un bouton poussoir laisser passer le courant lorsqu’il est poussé et l’interrompt quand il est
relâché On peut aussi trouver des boutons poussoirs NO ou NF, ces boutons poussoirs vont
nous servir à faire passez des courants électriques dans nos composants électroniques grâce
à une action manuelle sur l’extrémité de ceux-ci.
La résistance (R)
La résistance s’oppose au passage du courant, proportionnellement à sa “ résistance”
exprimée en Ohm. Un code de couleurs, ci-dessous, permet de reconnaître cette valeur. La
résistance est un composant non polarisée
La LDR (photorésistance)
C’est une résistance variable, en fonction de la luminosité qu’elle reçoit. Sa résistance
diminue quand elle reçoit de la lumière. On s’en sert donc de capteur de luminosité. Non
polarisée. Pour lire sa valeur avec une Arduino, il faut également l’associer avec une
résistance équivalente à sa résistance maximum ( dans le noir)
Le potentiomètre
Le potentiomètre, rotatif ou à glissière, est une résistance variable. Entre les extrémités, il y
a la résistance maximale. La patte centrale est le curseur. C’est la résistance entre cette
patte centrale et une extrémité que l’on peut faire varier en tournant le bouton. Le
potentiomètre est donc un capteur. Il se branche sur les entrées analogiques de l’Arduino. De
très nombreux capteurs sont basés sur le principe de résistance variable et se câblent
presque de la même façon: la cellule photoélectrique, le capteur de pression, le fil résistif,
etc.
La diode
La diode ne laisse passer le courant que dans un seul sens. C’est un composant polarisé: on
reconnait toujours son anneau coloré d’un coté du composant, correspondant à la cathode.
Les diodes de A à Z
La diode LED
La diode électroluminescente (LED) émet de la lumière. Elle est polarisée: La patte “+” est la
plus longue, l’autre patte est la patte “-” . Les broches numériques de l’Arduino, lorsqu’elles
sont configurées en sorties et qu’elles sont à l’état 1 ou haut ( HIGH) , fournissent une
tension de 5 volts, supérieure à ce que peut accepter une LED. Les LED doivent donc être
couplées en série avec une résistance.
Le condensateur (C)
Les condensateurs peuvent stocker un peu de courant si on les charge, mais comme un
tonneau percé, ils renvoient ce courant instantanément s’ils sont branchés à un organe
consommateur de courant. Les condensateurs sont aussi utilisés pour stabiliser ou filtrer des
tensions non désirées. L’unité de sa capacité est le farad, mais les valeurs usuelles sont le
μF, nF, pF. Le condensateur peut être polarisé ou non en fonction de sa conception.
Le transistor
Le transistor sert à amplifier un signal. Un faible courant de commande peut ainsi être
transformé en un courant plus important. On distingue 2 types de transistors, selon leur
polarité. Le NPN et le PNP. Un transistor possède 3 pattes : la base (B), l’émetteur (E) et le
collecteur (C).
Le relais
Le relais est un composant à 4 broches minimum. C’est un électroaimant que l’on peut
commander en envoyant un petit courant. Au repos, il est normalement fermé, ou
normalement ouvert, selon le modèle. On peut s’en servir avec l’Arduino pour commander
des machines en haute tension (230V par exemple), ou pour déclencher toute machine ou
lumière.
Le servomoteur
Le servomoteur est un moteur (rotatif) qui peut effectuer des rotations très précises (dans
une portion de tour seulement) et en un certain nombre de pas (de micro-déplacements). Il y
a toutes sortes de servo moteurs. Un des avantages des servo moteurs est sa possibilité de
maintenir avec force une position donnée. On peut piloter des rotations avec l’Arduino,
quelques fois directement avec la carte si le moteur n’est pas trop puissant, sinon en passant
par un montage associé. (shields).
Le vibreur
Un vibreur produit un signal sonore pour alerter d’une situation dangereuse, pour confirmer
une minuterie, quand un bouton est pressé, … La tonalité du vibreur ne peut être modifiée,
car la fréquence de l’oscillateur est fixée.
Le piezo
Le transducteur piézo-électrique est un composant réversible: il peut aussi bien être utilisé
en capteur de chocs ou de vibrations qu’en actionneur pouvant émettre des sons stridents
parfois modulables.
ARDUINO
4.1. Ca sert à quoi ?
Interagir avec le monde réel
Lire les données d’un capteur
Commander un actionneur
Acquisition et transfert de données
Traitement numérique du signal
Etc.
... ...
La programmation se fait à l’aide d’un langage proche du C/C++, dont les bases sont faciles
d’accès. Le logiciel nécessaire fonctionne à la fois sur Mac OSX, Windows et GNU/Linux et
demande très peu de ressources. Comme le prix d’un module Arduino est faible, nous
disposons donc d’un excellent outil qui nous permettra d’apprendre les bases de la
programmation, de l’électricité, de l’électronique et de l’automation.
Le microcontrôleur
Voilà le cerveau de notre carte (en 1). C’est lui qui va recevoir le programme que vous aurez
créé et qui va le stocker dans sa mémoire puis l’exécuter.
L’alimentation
exemple être fournie par une pile 9V. Un régulateur se charge ensuite de réduire la tension à
5V pour le bon fonctionnement de la carte
La visualisation
Les trois “points blancs” entourés en rouge (4) sont en fait des LED dont la taille est de
l’ordre du millimètre. Ces LED servent à deux choses : elle clignote quelques secondes quand
on branche la carte au PC. Les deux LED du bas du cadre : servent à le téléchargement du
programme dans le microcontrôleur.
La connectique
La carte Arduino ne possédant pas de composants qui peuvent être utilisés pour un
programme, mis a par la LED connectée à la broche 13 du microcontrôleur, il est nécessaire
de les rajouter. Mais pour ce faire, il faut les connecter à la carte. C’est là qu’intervient la
connectique de la carte (en 5a et 5b). Par exemple, on veut connecter une LED sur une sortie
du microcontrôleur. Il suffit juste de la connecter, avec une résistance en série, à la carte, sur
les fiches de connections de la carte. Cette connectique est importante et a un brochage qu’il
faudra respecter.
Ce sont les deux rangées de connecteurs de part et d’autre de la carte qui permettent sa
connexion au monde extérieur. (D0 à D13)
Voilà le cerveau de notre carte (en 1). C’est lui qui va recevoir le programme que vous aurez
créé et qui va le stocker dans sa mémoire puis l’exécuter.
L’alimentation
La visualisation
Les trois “points blancs” entourés en rouge (4) sont en fait des LED dont la taille est de
l’ordre du millimètre. Ces LED servent à deux choses : elle clignote quelques secondes quand
on branche la carte au PC. Les deux LED du bas du cadre : servent à le téléchargement du
programme dans le microcontrôleur.
La connectique
La carte Arduino ne possédant pas de composants qui peuvent être utilisés pour un
programme, mis a par la LED connectée à la broche 13 du microcontrôleur, il est nécessaire
de les rajouter. Mais pour ce faire, il faut les connecter à la carte. C’est là qu’intervient la
connectique de la carte (en 5a et 5b). Par exemple, on veut connecter une LED sur une sortie
du microcontrôleur. Il suffit juste de la connecter, avec une résistance en série, à la carte, sur
les fiches de connections de la carte. Cette connectique est importante et a un brochage qu’il
faudra respecter.
Ce sont les deux rangées de connecteurs de part et d’autre de la carte qui permettent sa
connexion au monde extérieur. (D0 à D13).
Chacun des connecteurs D0 à D13 peut être configuré dynamiquement par programmation
en entrée ou en sortie. Les signaux véhiculés par ces connecteurs sont des signaux logiques
compatibles TTL, c’est-à dire qu’ils ne peuvent prendre que deux états HAUT (5 Volts) ou BAS
(0 Volt). En pratique, les connecteurs D0 et D1 réservés pour la liaison série asynchrone (port
COM virtuel via le câble USB) ne sont pas exploités pour d’autres utilisations. Certains
connecteurs peuvent être spécialisés comme sorties PWM (repérées par un ~) .
Par défaut et contrairement aux entrées/sorties digitales qui ne peuvent prendre que deux
états HAUT et BAS, ces six entrées peuvent admettre toute tension analogique comprise
entre 0 et 5 Volts.
pour fonctionner.
Un programme :
Un programme est une liste d’instructions qui est exécutée par un système. Par exemple
votre navigateur internet, est un programme. On peut analogiquement faire référence à une
liste de course ou une recette de cuisine.
Chaque élément de cette liste est une instruction qui vous dit : “Va chercher le lait” ou “Va
chercher le pain”, etc. Dans un programme le fonctionnement est similaire :
Tel pourrait être le fonctionnement de votre navigateur internet. Il va attendre que vous lui
demandiez quelque chose pour aller le chercher et ensuite vous le montrer. Eh bien, tout
aussi simplement que ces deux cas, une carte électronique programmable suit une liste
d’instructions pour effectuer les opérations demandées par le programme. Des programmes,
on peut en trouver de partout. Mais restons concentré sur Arduino. Le programme que nous
allons mettre dans la carte Arduino, c’est nous qui allons le réaliser. Voici un exemple de
programme C qui peut être envoyé directement dans la mémoire de l’Arduino.
Ce langage est appelé langage C. Ce langage a besoin d’un logiciel pour être écris et envoyé
la carte Arduino. Ce logiciel est totalement gratuit et disponible sur le NET à l’adresse
suivante ICI. Le programme, une fois installé, à pour icone : Cliquez deux fois dessus pour
accéder aux lignes de code.
4.6. Le langage C
Le C est un langage incontournable qui en a inspiré beaucoup d’autres. Inventé dans les
années 70, il est toujours d’actualité dans la programmation système et la robotique. Il est
plutôt complexe, mais si vous le maîtrisez-vous aurez des bases de programmation très
solides ! Dans ce cours, vous commencerez par découvrir le fonctionnement de la mémoire,
des variables, des conditions et des boucles.
En orange, apparaissent les mots-clés reconnus par le langage Arduino comme les fonctions .
En bleu, apparaissent les mots-clés reconnus par le langage Arduino comme des constantes.
Instructions de base
5.1. Liste d’instructions
La syntaxe d’un langage de programmation est l’ensemble des règles d’écritures liées à ce
langage. On va donc voir dans ce sous chapitre les règles qui régissent l’écriture du langage
Arduino. La structure de base du langage de programmation Arduino est assez simple et
comprend au moins deux parties. Ces deux parties, ou fonctions, contiennent des blocs
d’instructions.
Setup() est l’initialisation du programme et loop() est l’exécution du programme. Ces deux
fonctions sont impérativement requises pour que le programme fonctionne. La fonction
setup() doit suivre la déclaration des variable au tout début du programme. Il s’agit de la
première fonction à exécuter dans le programme. Elle est exécutée une seule fois et sert à
établir le mode d’une broche (pinMode) ou à initialiser la communication série.
void setup()
{
Blocs instructions ;
}
void loop()
{
Blocs instructions ;
}
Setup: La fonction setup() n’est appelée qu’une fois au démarrage du programme. Utilisez-
là pour initialiser le mode des broches ou fixer le débit de communication série. Il doit être
dans tout les programmes même si il n’y a aucune instruction à jouer.
void setup()
{
pinMode(broche, OUTPUT); // Configuer la "broche" comme sortie
}
Loop: Après avoir appelé la fonction void setup(), la fonction void loop() fait une boucle (loop
en anglais) infinie permettant de contrôler la carte arduino, tant que le programme ne
change pas. Les fonctions void setup() et void loop() sont les 2 fonctions obligatoires en
arduino, mais d’autres peuvent être créées
void loop()
{
digitalWrite(broche, HIGH); //met la broche en "ON"
delay(1000); //pause pendant une seconde
digitalWrite(broche, LOW); //met la broche en "OFF"
delay(1000); //pause pendant une seconde
}
}. Une accolade non fermée donne des erreurs ou des programmes lors de la compilation
mais peut être dure à corriger en cas de programmes très longs. L’environnement Arduino
inclue un système de vérification des accolades. Il suffit de cliquer sur une accolade pour voir
sa « paire » se surligner.
type fonction()
{
instructions;
}
Le point-virgule : Le point-virgule est utilisé pour finir une instruction et séparer les
éléments d’un programme. On l’utilise, par exemple, pour séparer les éléments de la boucle
for.
Les paragraphes commentaires /*…..*/ : Un commentaire (sur une ligne ou sur plusieurs)
est une zone de texte qui est ignoré par le programme lors de la compilation et qui est utilisé
afin de décrire le code ou pour le commenter pour faciliter sa compréhension auprès de
personnes tiers. Un commentaire commence par /* et fini avec */ et peut faire plusieurs ligne.
De par le fait que les commentaires soient ignorés et qu’ils ne prennent pas d’espace
mémoire, ils peuvent être utilisés généreusement, par exemple pour débuger une partie du
code.
Les lignes de commentaires // : Une seule ligne de commentaire commence par // et fini à
la fin de la ligne de code. Tout comme le paragraphe de commentaires, la ligne est ignorée
lors de la compilation et ne prend pas de mémoire. La ligne de commentaire est souvent
utilisée pour donner des informations ou pour rappeler quelque chose à propos d’une ligne.
Les variables : Une variable est une façon de nommer et de stocker une information/valeur
afin de l’utiliser plus tard dans le programme. Comme son nom l’indique, une variable est
une valeur qui peut être continuellement modifiée à l’opposé d’une constante qui ne change
jamais de valeur. Une variable a besoin d’être déclarée et on peut lui assigner une valeur que
l’on veut stocker, mais cela est optionnel. Le code suivant déclare une variable nommé
inputVariable et lui assigne une valeur lue via analogRead sur la broche 2. Une variable peut
être déclarée à de nombreux endroits dans le programme, l’emplacement de sa déclaration
détermine quelles parties du programme auront accès à cette variable.
int: Int (pour integers, entier) est le type de base pour les chiffres (sans virgule) des
variables. Le stockage se fait sur 16 bits, permettant d’aller de 32 767 à – 32 768.
Long : Il s’agit d’un type de variable de grande taille : la donnée (chiffre sans virgule)
est stockée sur 32 bits. Cela permet d’aller de 2 147 483 647 à – 2 147 483 648.
Float : Ce type permet de stocker les chiffres « flottant » ou chiffre à virgule. Le float
bénéfice d’une meilleure résolution que les entiers (int) : ils sont stockés sur 32 bits,
soit de 3,4028235^38 à – 3,4028235^38. Note : Les chiffres flottants ne sont pas
exacts et il arrive que des résultats étranges ressortent de leur
Bool : Le type bool prend 2 valeurs : Vrai (true) ou Faux (false). Il est stocké sur 8 bits et
se comporte ainsi :
0 = FAUX = FALSE
1 = VRAI = TRUE
Char : Le type char est utilisé pour stocker une lettre. Le stockage se fait sur 8 bits et
permet de stocker une seule Note : Pour assigner une valeur à la variable char, on
l’écrira entre ‘.
string: Il ne s’agit pas exactement d’un type de variable, il s’agit d’une classe. La
classe String est comparable a une variable possédant ses propres fonctions. String
permet de stocker une chaîne de caractères, comme pourrait le faire un tableau de
caractère. String permet de réaliser des opérations sur les chaînes de caractères plus
complexes que ce qui se ferait sur un tableau de caractères.
Les constantes
Le langage Arduino possède des valeurs prédéfinies; elles sont appelée constantes. Elles sont
utilisées pour rendre un programme plus simple à lire. Il en existe différents groupes.
Vrai / Faux (True / False): Il s’agit de variable du type booléen. FALSE signifie que la
constante est à 0 alors que TRUE désigne l’état différent de 0 : cela peut être 1 (par
convention) mais cela peut aussi être -1, 2, -200, …
if(b==TRUE)
{
instructions;
}
Haut / Bas (High / Low): Il s’agit des constantes utilisées pour lire ou pour écrire sur
les broches, soit le niveau HIGH (ON, 1, 5 volts) soit le niveau LOW (OFF, 0, 0 volts).
digitalWrite(13,HIGH);
Entrée / Sortie (Input / Output): Ces constantes sont utilisées avec la fonction
pinMode(), elles définissent le type de broche digitale :
INPUT pour entrée
OUTPUT pour sortie
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
if: La structure de test « if » (si) vérifie si une certaine condition est atteinte, par
exemple si une valeur est égale à un certain nombre, et exécute des instructions
contenu dans la structure. Si la condition est fausse, le programme quitte la structure
et reprend à la ligne suivante. Le format du if est :
if(x==10)
{
intructions;
}
if …. else: if… else (si…sinon) est utilisé pour dire « sinon fait… ». Par exemple, si on
veut tester une entrée digitale et faire ne action si elle vaut HIGH et d’autres actions si
elle vaut LOW, on écrira :
if(x==HIGH)
{
intruction 1;
intruction 2;
...
}
else
{
intruction a;
intruction b;
...
}
des cas du test est vrai. La principale différence entre le switch… case et le if… else est
que le switch… case permet de continuer les tests même si un des cas est vrai,
contrairement au if…else qui quittera dans le même cas.
switch(Variable)
{
case A: inst 1;
case B: inst 2;
case C: inst 3;
case D: inst 4;
}
Variable sera comparée à A, si le test est vrai, inst 1 sera exécuté. Une fois le code exécuté
(ou si le test est faux), » Variable » sera comparé à B et ainsi de suite. Dans le cas où on
voudrait s’arrêter à un des cas, on ajoutera l’instruction break. De plus, si aucun des cas
n’est vérifié, on peut ajouter le cas default qui sera exécuté si aucun test n’est vrai.
For : La structure for (pour) est utilisée afin de répéter une série d’instructions
(comprise entre les accolades) le nombre de fois voulu. Un compteur à incrémenter est
souvent utilisé afin de sortir de la boucle une fois le nombre de tour fait. Cette structure
est composée de trois parties séparées par un point-virgule (;) dans l’entête de la
boucle :
While : La boucle « while » (tant que) continuera infiniment tant que l’expression entre
parenthèse est Quelque chose doit changer afin de modifier la condition sinon le
programme ne sortira jamais de la boucle while. Cela peut être dans le code, comme
l’incrémentation d’une variable, ou une condition extérieure, comme le test d’un
capteur. L’exemple suivant test si « someVariable » est inférieur à 200 et si c’est vrai,
le code entre les accolades est exécuté et la boucle continue tant que « someVariable »
est inférieure à 200.
do … while : La boucle do… while (faire… tant que) fonctionne de la même façon que
la boucle while, à la seule exception que la condition est testée à la fin de la boucle, de
ce fait le code dans la boucle s’exécute toujours au moins une L’exemple suivant
assigne à la variable « x » la valeur lireCapteur(), puis fait une pause de 50ms et
continue infiniment tant que x est plus petit que 100.
Note : Les broches analogiques ne sont pas des broches digitales, elle ne
nécessite pas d’être déclarée comme des sorties ou des entrées.
11. Sur les plus anciennes (ATmega8), seules les broches 9, 10 et 11 étaient
équipées. Ce signal est envoyé sous forme de valeur, comprise entre 0 et 255.
delay(ms) : delay permet de marquer une pause dans le programme, le temps est en
millisecondes
millis() :Cette fonction renvoie le nombre de millisecondes écoulé depuis que l’Arduino
a commencé à exécuté le programme actuel sous l’état d’un unsigned long.
La communication Série
serial.begin(débit) : Permet le port série et donne la vitesse de transmission (ou
débit, en bits par seconde ou bauds). La vitesse usuelle est de 9600 bauds avec les
ordinateurs mais d’autres vitesses sont supportées.
Note : Lorsque la liaison série est utilisée, les broches digitales 0 (RX) et 1
(TX) ne peuvent être utilisées en même temps.
5.3. La bibliothèque
Une bibliothèque est un ensemble de fonctions qui s’ajoutent aux fonctions de base du
logiciel de l’Arduino et qui adressent plus particulièrement un domaine spécifique de la
programmation comme, par exemple :
A noter que ces bibliothèques sont installées en même temps que l’IDE. Vous n’aurez pas
à les ajouter. Mais surtout, il existe des multitudes de bibliothèques dans pratiquement tous
les domaines, ce qui donne à l’Arduino cette puissance incontestable et son succès.
Ce paragraphe concerne donc l’installation de librairies supplémentaires qui n’y sont pas au
départ.
Bibliothèque ou Librairie ?
Avant de commencer, revenons sur un point de traduction. Arduino est un projet où l’anglais
prédomine. Library est normalement traduit littéralement en français par bibliothèque.
Cependant l’anglicisme a pris le dessus et vous trouverez beaucoup de pages en français où
on parle de librairie Arduino. Nous allons voir dans cet article comment installer une
bibliothèque qui n’est pas de base dans l’IDE Arduino.
Où les trouver ?
Comme Arduino est un projet communautaire, vous trouverez des bibliothèques sur le web
en général. Quelques bibliothèques sont recensées sur le site officiel . Si vous ne trouvez
pas votre bonheur, une recherche avec le type de shield ou de composant accompagné de
Arduino et library vous donnera les pointeurs souhaités.
Où les installer ?
C:\Users\nom du PC\Documents\Arduino\libraries
Vous voyez que les bibliothèques officielles ne sont pas dans ce répertoire. Afin que chaque
utilisateur de l’ordinateur y ait accès, elles sont installées dans un répertoire qui diffère du
précédent et même selon les ordinateurs :
Vous pourrez faire une installation ici si vous en avez les droits pour faire profiter tous les
utilisateurs de l’ordinateur de cette bibliothèque. Toutefois, ce n’est pas une procédure
prévue dans l’IDE Arduino et c’est inutile si vous êtes le seul à programmer sur Arduino avec
votre ordinateur.
Méthode d’installation
Dans l’IDE Arduino, vous avez le menu Croquis/Inclure une bibliothèque/Ajouter la
bibliothèque .ZIP… Vous sélectionnez l’archive de la bibliothèque et vous cliquez sur OK. Elle
est installée. Redémarrez l’IDE pour profiter de la bibliothèque.
Désinstallation
Supprimez simplement le répertoire de la bibliothèque et redémarrez l’IDE pour que ça soit
pris en compte
carte
Avant de commencer à programmer la tête baissée, il faut, avant toutes choses, tester le
bon fonctionnement de la carte. Car ce serait idiot de programmer la carte et chercher les
erreurs dans le programme alors que le problème vient de la carte ! Nous allons tester notre
matériel en chargeant un programme qui fonctionne dans la carte.
Nous allons choisir un exemple tout simple qui consiste à faire clignoter une LED. Son nom
est Blink et vous le trouverez dans la catégorie Basics :
Une fois que vous avez cliqué sur Blink, une nouvelle fenêtre va apparaître. Elle va contenir
le programme Blink. Vous pouvez fermer l’ancienne fenêtre qui va ne nous servir plus à rien.
Voici un aperçu de la fenêtre de programmation. C’est CE programme tout fait que nous
allons essayer d’envoyer à la carte électronique.
Mais avant d’envoyer le programme Blink vers la carte, il faut dire au logiciel quel est le nom
de la carte et sur quel port elle est branchée. Choisir la carte que l’on va programmer.
Ce n’est pas très compliqué, le nom de votre carte est indiqué sur elle. Pour nous, il s’agit de
la carte “Uno”. Allez dans le menu “Tools” (“outils” en français) puis dans “Board” (“carte” en
français). Vérifiez que c’est bien le nom “Arduino Uno” qui est coché. Si ce n’est pas le cas,
cochez-le.
Ensuite, choisissez le port de connexion de la carte. Allez dans le menu Tools, puis Serial
port. Là, vous choisissez le port COM X, X étant le numéro du port qui est affiché. Ne
choisissez pas COM1 car il n’est quasiment jamais connecté à la carte. Dans mon cas, il s’agit
de COM5 :
Pour la dernière étape, il va falloir envoyer le programme dans la carte. Pour ce faire, il
suffit de cliquer sur le bouton Téléverser, en blanc sur la photo :
En bas dans l’image, vous voyez le texte : “Téléversement…“, cela signifie que le logiciel est
en train d’envoyer le programme dans la carte. Une fois qu’il a fini, il affiche un autre
message :
Le message affiché : “Téléversement terminé” signale que le programme à bien été chargé
dans la carte. Si votre matériel fonctionne, vous devriez avoir une LED sur la carte qui
clignote : Si vous n’obtenez pas ce message mais plutôt un truc en rouge, pas d’inquiétude,
le matériel n’est pas forcément défectueux ! En effet, plusieurs erreurs sont possibles :
But:
Allumer une diode LED avec plusieurs variantes :
Schéma électrique:
Solutions :
variante « b »
void setup()
{
pinMode(2, OUTPUT);
// met la pin numérique en sortie
}
void loop()
{
digitalWrite(2, LOW); // allume la LED delay(1000); // attend une seconde digitalWri
te(2, HIGH); // éteint la LED delay(1000); // attend une seconde
}
variante « c »
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}
void loop()
{
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(2, HIGH);
digitalWrite(3,LOW);
delay(500);
}
variante « d »
int L1 = 2;
int L2 = 3;
int L3 = 4;
void setup() {
pinMode(L1, OUTPUT);
pinMode(L2, OUTPUT);
pinMode(L3, OUTPUT);
}
void loop()
{
digitalWrite(L1, LOW);
delay(500);
digitalWrite(L2, LOW);
delay(500);
digitalWrite(L3, LOW);
delay(500);
digitalWrite(L1, HIGH);
digitalWrite(L2, HIGH);
digitalWrite(L3, HIGH);
delay(500);
}
variante « e »
void setup()
{
pinMode(2, OUTPUT); // LED D1
pinMode(3, OUTPUT); // LED D2
pinMode(4, OUTPUT); // LED D3
pinMode(5, OUTPUT); // LED D4
pinMode(6, OUTPUT); // LED D5
void loop()
{
delay(200); digitalWrite(7, HIGH); digitalWrite(2, LOW);
delay(200); digitalWrite(2,HIGH); digitalWrite(3,LOW);
delay(200); digitalWrite(3,HIGH); digitalWrite(4,LOW);
delay(200); digitalWrite(4,HIGH); digitalWrite(5,LOW);
delay(200); digitalWrite(5,HIGH); digitalWrite(6,LOW);
delay(200); digitalWrite(6,HIGH); digitalWrite(7,LOW);
}
TP 3 : Feux routiers
But :
Réaliser un feu de signalisation routier. Pour info, le feu rouge dure 3 secondes et le feu
orange dure 1 seconde (conseil : le TP 2 vous aidera pour la réalisation de cet atelier)
Schéma électrique :
Solution :
//définition des broches
const int led_rouge_feux_1 = 2;
const int led_jaune_feux_1 = 3;
const int led_verte_feux_1 = 4;
const int led_rouge_feux_2 = 5;
const int led_jaune_feux_2 = 6;
const int led_verte_feux_2 = 7;
void setup()
{
//initialisation en sortie de toutes les broches
pinMode(led_rouge_feux_1, OUTPUT);
pinMode(led_jaune_feux_1, OUTPUT);
pinMode(led_verte_feux_1, OUTPUT);
pinMode(led_rouge_feux_2, OUTPUT);
pinMode(led_jaune_feux_2, OUTPUT);
pinMode(led_verte_feux_2, OUTPUT);
//on initialise toutes les LED éteintes au début du programme (sauf les deux feux
rouges)
digitalWrite(led_rouge_feux_1, LOW);
digitalWrite(led_jaune_feux_1, HIGH);
digitalWrite(led_verte_feux_1, HIGH);
digitalWrite(led_rouge_feux_2, LOW);
digitalWrite(led_jaune_feux_2, HIGH);
digitalWrite(led_verte_feux_2, HIGH);
}
void loop()
{
// première séquence
digitalWrite(led_rouge_feux_1, HIGH);
digitalWrite(led_verte_feux_1, LOW);
delay(3000);
// deuxième séquence
digitalWrite(led_verte_feux_1, HIGH);
digitalWrite(led_jaune_feux_1, LOW);
delay(1000);
// troisième séquence
digitalWrite(led_jaune_feux_1, HIGH);
digitalWrite(led_rouge_feux_1, LOW);
delay(1000);
Lorsque l’on fait de l’électronique, on a toujours peur des perturbations (générées par plein
de choses : des lampes à proximité, un téléphone portable, un doigt sur le circuit,
l’électricité statique, …). On appelle ça des contraintes de CEM. Ces perturbations sont
souvent inoffensives, mais perturbent beaucoup les montages électroniques. Il est alors
nécessaire d’en prendre compte lorsque l’on fait de l’électronique de signal. Par exemple,
dans certains cas on peut se retrouver avec un bit de signal qui vaut 1 à la place de 0, les
données reçues sont donc fausses.
Pour contrer ces effets nuisibles, on place en série avec le bouton une résistance de pull-up.
Cette résistance sert à “tirer” (“to pull” in english) le potentiel vers le haut (up) afin d’avoir
un signal clair sur la broche étudiée. Sur le schéma suivant, on voit ainsi qu’en temps normal
le “signal” à un potentiel de 5V. Ensuite, lorsque l’utilisateur appuiera sur le bouton une
connexion sera faite avec la masse. On lira alors une valeur de 0V pour le signal. Voici donc
un deuxième intérêt de la résistance de pull-up, éviter le court-circuit qui serait généré à
l’appui.
d’effet n’est pas désirable, car il peut engendrer des parasites au sein de votre programme
(si vous voulez détecter un appui, les rebonds vont vous en générer une dizaine en quelques
millisecondes, ce qui peut être très gênant dans le cas d’un compteur par exemple). Voilà, ci-
contre, un exemple de chronogramme relevé lors du relâchement d’un bouton poussoir. Pour
atténuer ce phénomène, nous allons utiliser un condensateur en parallèle avec le bouton. Ce
composant servira ici “d’amortisseur” qui absorbera les rebonds (comme sur une voiture
avec les cahots de la route). Le condensateur, initialement chargé, va se décharger lors de
l’appui sur le bouton. S’il y a des rebonds, ils seront encaissés par le condensateur durant
cette décharge. Il se passera le phénomène inverse (charge du condensateur) lors du
relâchement du bouton. Ce principe est illustré à la figure ci-contre :
Remarque importante :
Attention, pour le pin 13, il est déconseillé d’utiliser le mode INPUT_PULLUP. Si vous devez
vous servir du pin 13 comme pin de lecture, préférez un montage avec une résistance
externe en pull-up ou pull-down. L’explication se trouve dans le fait que le pin 13 est aussi
lié à une LED et une résistance. Il ne fournira donc pas du +5V, mais du +1.7V à cause de
la LED et de la résistance en série qui baissent la tension. De ce fait la lecture sera toujours
à LOW.
But :
Allumer la LED en fonction de l’état du bouton. Cet exercice comporte plusieurs variantes :
Schéma électrique :
Solution :
variante « a »
void setup()
{
pinMode(led, OUTPUT); //la led est une sortie
pinMode(bouton, INPUT); //le bouton est une entrée
etatBouton = HIGH; //on initialise l'état du bouton comme "relaché"
}
void loop()
{
etatBouton = digitalRead(bouton); // bouton = 2
if(etatBouton == HIGH) //test si le bouton a un niveau logique HAUT
{
digitalWrite(led,HIGH); //la LED reste éteinte
}
else //test si le bouton a un niveau logique BAS
{
digitalWrite(led,LOW); //la LED est allumée
}
}
variante « b »
void setup()
{
pinMode(2, INPUT_PULLUP); //mode lecture pour le bouton avec résistance interne pull
up
pinMode(3, INPUT_PULLUP); //mode lecture pour le bouton avec résistance interne pull
up
pinMode(12, OUTPUT);
}
void loop()
{
boolean etatS1 = digitalRead(2);
//lecture bouton S1 et stockage dans etatS1
Ressources
Cours 5 | Arduino
Cours 6 | La plateforme Arduino
Cours 7 | Microcontrôleur Arduino
Cours 8 | Initiation à Arduino
Cours 9 | Développement d’une
voiture télécommandée à base
d’Arduino
Tous les cours