Apprendre À Programmer Avec Arduino
Apprendre À Programmer Avec Arduino
Carless MAHOUATA
Club High Tech
12/03/2025 0
arduino.odt
Club HIGH TECH
Arduino
Table des matières
1. Introduction ..................................................................................................................................... 2
2. Le logiciel ........................................................................................................................................ 4
2.1. L'interface ................................................................................................................................ 4
2.2. Le langage Arduino .................................................................................................................. 7
3. Le matériel ..................................................................................................................................... 10
3.1. Constitution de la carte .......................................................................................................... 10
3.2. Test de la carte ........................................................................................................................ 11
4. Gestion des entrées / sorties........................................................................................................... 14
4.1. La diode électroluminescente................................................................................................. 14
4.2. Temporisation ......................................................................................................................... 17
4.2.1. Fonction delay() ....................................................................................................................... 17
4.2.2. Fonction millis() ...................................................................................................................... 18
4.3. Le bouton poussoir ................................................................................................................. 19
4.4. Les interruptions matérielles .................................................................................................. 22
4.5. Afficheurs 7 segments ............................................................................................................ 23
5. Communication par la liaison série ............................................................................................... 30
5.1. Envoi de données ................................................................................................................... 31
5.2. Reception des données ........................................................................................................... 32
6. Les grandeurs analogiques............................................................................................................. 34
6.1. Les entrées analogiques ......................................................................................................... 34
6.2. Les sorties "analogiques" ....................................................................................................... 37
7. Les écrans LCD ............................................................................................................................. 40
7.1. Afficher du texte..................................................................................................................... 42
7.2. Créer un caractère .................................................................................................................. 44
7.3. Défilement de texte ................................................................................................................ 44
Arduino est un circuit imprimé en matériel libre sur lequel se trouve un microcontrôleur qui peut
être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches
très diverses comme la domotique (le contrôle des appareils domestiques - éclairage, chauffage…),
le pilotage d'un robot, etc.
1
arduino.odt
Club HIGH TECH
1. Introduction
Le système Arduino donne la possibilité d'allier les performances de la programmation à celles de
l'électronique. Plus précisément, pour programmer des systèmes électroniques. Le gros avantage de
l'électronique programmée c'est qu'elle simplifie grandement les schémas électroniques et par
conséquent, le coût de la réalisation, mais aussi la charge de travail à la conception d'une carte
électronique.
Le système Arduino permet de :
• contrôler les appareils domestiques
• fabriquer votre propre robot
• faire un jeu de lumières
• communiquer avec l'ordinateur
• télécommander un appareil mobile (modélisme) • etc.
Le système Arduino est composé de deux choses principales : le matériel et le logiciel.
• Le matériel
Il s'agit d'une carte électronique basée autour d'un microcontrôleur Atmega du fabricant
Atmel, dont le prix est relativement bas pour l'étendue possible des applications.
• Le logiciel
Le logiciel permet de programmer la carte Arduino. Il offre une multitude de fonctionnalités.
2
arduino.odt
Club HIGH TECH
3
arduino.odt
Club HIGH TECH
2.1. L'interface
L'interface du logiciel Arduino se présente de la façon suivante :
4
arduino.odt
Club HIGH TECH
5
arduino.odt
Club HIGH TECH
1. permet de vérifier le programme, il actionne un module qui cherche les erreurs dans le
programme
6
arduino.odt
Club HIGH TECH
E/S analogique
• analogReference()
• analogRead()
• analogWrite() - PWM
E/S avancée
• tone()
• noTone()
• shiftOut()
• shiftIn()
• pulseIn()
Temps
• millis()
7
arduino.odt
Club HIGH TECH
• micros()
• delay()
• delayMicroseconds()
Bits et octets
• lowByte()
• highByte()
• bitRead()
• bitWrite()
• bitSet()
• bitClear()
• bit()
Interruptions externes
• attachInterrupt()
• detachInterrupt()
Interruptions
• interrupts()
• noInterrupts()
Communication
• Serial
8
arduino.odt
Club HIGH TECH
• Stream
9
arduino.odt
Club HIGH TECH
3. Le matériel
1. Le micro-contrôleur
Il va recevoir le programme et le stocker dans sa mémoire puis l’exécuter.
2, 3 : Alimentation
Pour fonctionner, la carte a besoin d'une alimentation. Le microcontrôleur fonctionnant sous 5V, la
carte peut être alimentée en 5V par le port USB (en 2) ou bien par une alimentation externe (en 3)
qui est comprise entre 7V et 12V. Cette tension doit être continue et peut par 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. 4. Visualisation
Les trois "points blancs" entourés en rouge sont des LED dont la taille est de l'ordre du millimètre.
Ces LED servent à deux choses :
• Celle tout en haut du cadre : elle est connectée à une broche du microcontrôleur et va
servir pour tester le matériel.
Nota : Quand on branche la carte au PC, elle clignote quelques secondes.
• Les deux LED du bas du cadre : servent à visualiser l'activité sur la voie série (une pour
l'émission et l'autre pour la réception). Le téléchargement du programme dans le
microcontrôleur se faisant par cette voie, on peut les voir clignoter lors du chargement.
5a, 5b : La connectique
10
arduino.odt
Club HIGH TECH
11
arduino.odt
Club HIGH TECH
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. Pour cela, allez dans le menu "Tools" ("outils" en français) puis
dans "Board" ("carte" en français). Vérifiez que c'est bien le nom "Arduin Uno" qui est coché. Si ce
n'est pas le cas, cochez-le.
12
arduino.odt
Club HIGH TECH
Allez ensuite dans le menu Tools, puis Serial port. Choisissez le port COMX, X étant le numéro du
port qui est affiché. Ne choisissez pas COM1 car il n'est quasiment jamais connecté à la carte. Dans
l'exemple, il s'agit de COM5 :
13
arduino.odt
Club HIGH TECH
Maintenant, il va falloir envoyer le programme dans la carte. Pour ce faire, il suffit de cliquer sur le
bouton Upload (ou "Télécharger" en Français), en jaune-orangé sur la photo :
En bas dans l'image, vous voyez le texte : "Uploading to I/O Board...", 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 afficher : "Done uploading" 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 :
14
arduino.odt
Club HIGH TECH
Avec le brochage de la carte Arduino, vous devrez connecter la plus grande patte au +5V (broche
5V). La plus petite patte étant reliée à la résistance, elle-même reliée à la broche numéro 2 de la
carte. On pourrait faire le contraire, brancher la LED vers la masse et l'allumer en fournissant le 5V
depuis la broche de signal. Cependant, les composants comme les microcontrôleurs n'aiment pas
trop délivrer du courant, ils préfèrent l'absorber. Pour cela, on préférera donc alimenter la LED en la
placant au +5V et en mettant la broche de Arduino à la masse pour faire passer le courant.
Schéma électrique
Réalisation
Pour programmer la carte, il faut créer un nouveau programme. Allez dans le menu File Et
choisissez l'option Save as... :
15
arduino.odt
Club HIGH TECH
Tapez le nom du programme, puis Enregistrez. Vous arrivez dans votre nouveau programme, qui est
vide pour l'instant, et dont le nom s'affiche en Haut de la fenêtre et dans un petit onglet :
Pour commencer le programme, il faut un code minimal. Ce code va permettre d'initialiser la carte :
void setup() //fonction d'initialisation de la carte
{
//contenu de l'initialisation
}
void loop() //fonction principale, elle se répète (s’exécute) à l'infini
{
//contenu du programme
}
Il faut avant tout définir les broches du micro-contrôleur. Cette étape constitue elle-même deux sous
étapes. La première étant de créer une variable définissant la broche utilisée, ensuite, définir si la
broche utilisée doit être une entrée du micro-contrôleur ou une sortie.
16
arduino.odt
Club HIGH TECH
4.2. Temporisation
17
arduino.odt
Club HIGH TECH
18
arduino.odt
Club HIGH TECH
19
arduino.odt
Club HIGH TECH
À la différence d'un bouton poussoir, l'interrupteur agit comme une bascule. Un appui ferme le
circuit et il faut un second appui pour l'ouvrir de nouveau. Il possède donc deux états stables (ouvert
ou fermé). On dit qu'un interrupteur est bistable.
En électronique, on a toujours des perturbations
(générées par des lampes à proximité, un téléphone
portable, ...). On appelle ça des contraintes de CEM.
Pour contrer ces effets nuisibles, ont 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 !
Les boutons ne sont pas des systèmes mécaniques parfaits. Du coup, lorsqu'un appui est fait dessus,
le signal ne passe pas immédiatement et proprement de 5V à 0V. En l'espace de quelques
millisecondes, le signal va "sauter" entre 5V et 0V plusieurs fois avant de se stabiliser. Il se passe le
même phénomène lorsque l'utilisateur relâche le bouton. Ce genre d'effet n'est pas désirable, car il
peut engendrer des parasites au sein du programme.
20
arduino.odt
Club HIGH TECH
Des résistances de pull-up existent aussi en interne du microcontrolleur de l'Arduino, ce qui évite
d'avoir à les rajouter. Ces dernières ont une valeur de 20 kΩ. Elles peuvent être utilisées sans
aucune contraintes techniques. Cependant, si vous les mettez en marche, il faut se souvenir que cela
équivaut à mettre la broche à l'état haut (et en entrée évidemment). Donc si vous repassez à un état
de sortie ensuite, rappelez vous bien que tant que vous ne l'avez pas changée elle sera à l'état haut.
Pour récupérer l'appui du bouton, on doit lire l'état d'une entrée numérique.
Réalisation
Schéma électrique
Lorsque le bouton est relâché, la tension à ses bornes sera de +5V, donc un état logique HIGH. S'il
est appuyé, elle sera de 0V, donc LOW.
21
arduino.odt
Club HIGH TECH
La fonction digitalRead() permet de lire l'état logique d'une entrée logique. Cette fonction prend un
paramètre qui est la broche à tester et elle retourne une variable de type int.
Le programme suivant allume une LED lorsque le bouton est appuyé. Lorsque l'on relâche le
bouton, la LED doit s'éteindre.
const int bouton = 2; //le bouton est connecté à la broche 2 de la carte Adruino
const int led = 13; //la LED à la broche 13 int etatBouton; //variable
qui enregistre l'état du bouton 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); //Rappel : bouton = 2
22
arduino.odt
Club HIGH TECH
Autrement dit, s'il y a un changement d'un type énuméré au-dessus, alors le programme sera
interrompu pour effectuer une action. Lorsque l'interruption aura été exécutée et traitée, il reprendra
comme si rien ne s'était produit.
La fonction attachInterrupt(interrupt, function, mode) accepte trois paramètres :
1. interrupt : numéro de la broche utilisée pour l'interruption (0 pour la broche 2 et 1 pour la
broche 3)
2. function : nom de la fonction à appeler lorsque l'interruption est déclenchée
3. mode : type de déclenchement (cf. ci-dessus)
Pour appeler une fonction nommée Reagir() lorsque l'utilisateur appuie sur un bouton branché sur la
broche 2 le code sera :
attachInterrupt(0, Reagir, FALLING);
NB : la fonction Reagir() ne peut pas prendre d'argument et ne retournera aucun résultat.
Attention :
• Les interruptions mettent le programme en pause, et une mauvaise programmation peut
entraîner une altération de l'état de vos variables.
• Les fonctions delay() et millis() n'auront pas un comportement correct. En effet, pendant ce
temps le programme principal est complètement stoppé, donc les fonctions gérant le temps
ne fonctionneront plus, elles seront aussi en pause et laisseront la priorité à la fonction
d'interruption. La fonction delay() est donc désactivée et la valeur retournée par millis() ne
changera pas.
23
arduino.odt
Club HIGH TECH
augmenter la luminosité, il suffit de diminuer cette valeur. Si au contraire vous voulez diminuer la
luminosité, augmenter la résistance.
Voici un tableau illustrant les caractères possibles et quels segments allumés :
Caractère seg. A seg. B seg. C seg. D seg. E seg. F seg. G
0 x x x x x x
1 x x
2 x x x x x
3 x x x x x
...
Pour allumer les LED, il suffit de positionner la sortie numérique de la carte Arduino sur la bonne
valeur.
Réalisation
Schéma électrique
Voici le code pour afficher '5' :
int cinq[] = {LOW, HIGH, LOW, LOW, HIGH, LOW, LOW};
void setup()
{
//notez que l'on ne gère pas l'affichage du point
int i;
for (i = 2 ; i <= 8 ; i++)
{
//définition des broches en sortie (2 à 8)
pinMode(i, OUTPUT);
//mise à l'état HAUT de ces sorties pour éteindre les LED de l'afficheur
digitalWrite(i, HIGH);
}
24
arduino.odt
Club HIGH TECH
} void
loop() {
//affichage du chiffre 5, d'après le tableau précédent
int i, j = 0;
for (i = 2 ; i <= 8 ; i++, j++)
{ digitalWrite(i, cinq[j]);
}
}
Cependant, pour représenter les chiffres de 0 à 9 il suffit de 4 bits et non des 7 sorties numériques
de la carte. Pour cela, on utilise un décodeur BCD (ex : le MC14543B).
Ce composant est monté sur un DIP 16 (DIP : Dual Inline Package) et possède les fonctionnaalités
suivantes :
• Si l'on met la broche Bl (Blank, n°7) à un, toutes les sorties passent à zéro. Pour ne pas
l'utiliser il faut la connecter à la masse pour la désactiver.
• Les entrées A, B, C et D (broches 5,3,2 et 4 respectivement) sont actives à l'état HAUT. Les
sorties elles sont actives à l'état BAS (pour piloter un afficheur à anode commune) OU
HAUT selon l'état de la broche PH (6).
• La broche BI/RBO (n°4) sers à inhiber les entrées. On ne s'en servira pas et donc on la
mettra à l'état HAUT (+5V)
• LD (n°1) sert à faire une mémoire de l'état des sorties.
• Les deux broches d'alimentation sont la 8 (GND/VSS, masse) et la 16 (VCC, +5V)
25
arduino.odt
Club HIGH TECH
26
arduino.odt
Club HIGH TECH
}
void loop()
{
char i; //variable "compteur"
for (i=0; i < 10; i++)
{ afficher(i); //on appel la fonction d'affichage
delay(1000); //on attend 1 seconde
}
}
void afficher(char chiffre)
{
//mise à zéro tout les segments
int i;
for (i = 2 ; i <= 5 ; i++)
{ digitalWrite(i, LOW);
}
27
arduino.odt
Club HIGH TECH
28
arduino.odt
Club HIGH TECH
//affichage dizaines
if ( afficheur )
{
//on affiche les dizaines
digitalWrite(alim_unite, LOW);
afficher(dizaine);
digitalWrite(alim_dizaine, HIGH);
}
else
{
29
arduino.odt
Club HIGH TECH
30
arduino.odt
Club HIGH TECH
le terminal série
Dans cette fenêtre, vous allez pouvoir envoyer et recevoir des messages sur la liaison série de votre
ordinateur (qui est émulée par l'Arduino).
Du côté du programme, pour utiliser la liaison série et communiquer avec l'ordinateur, on utilise un
objet qui est intégré nativement dans l'ensemble Arduino : l'objet Serial.
Cet objet rassemble des informations (vitesse, bits de données, etc.) et des fonctions (envoi, lecture
de réception,...) sur ce qu'est une voie série pour Arduino.
Pour commencer, il faut initialiser l'objet Serial afin de définir la vitesse de communication entre
l'ordinateur et la carte Arduino grâce à la fonction begin(). Cette vitesse doit être identique côté
ordinateur et côté programme.
Exemple : Serial.begin(9600); //établissement d'une communication série à 9600 bauds
31
arduino.odt
Club HIGH TECH
32
arduino.odt
Club HIGH TECH
else
//Est-ce que c'est un caractère MAJUSCULE ?
if (carlu >= 'A' && carlu <= 'Z' )
{ carlu = carlu – 'A'; //on garde juste le "numéro de lettre" carlu
= carlu + 'a'; //on passe en minuscule }
33
arduino.odt
Club HIGH TECH
Ces 6 entrées analogiques sont numérotées, tout comme les entrées/sorties logiques. Par exemple,
pour aller lire la valeur en sortie d'un capteur branché sur le convertisseur de la broche analogique
numéro 3, on fera : valeur = analogRead(3);.
Ne confondez pas les entrées analogiques et les entrées numériques ! Elles ont en effet le même
numéro pour certaines, mais selon comment on les utilise, la carte Arduino saura si la broche est
analogique ou non.
La valeur retournée par la fonction est comprise entre 0 et 210 – 1 = 1023 pour une tension de 0 à
1
convertisseurs analogiques -> numérique
34
arduino.odt
Club HIGH TECH
35
arduino.odt
Club HIGH TECH
Réalisation
Schéma électrique
Une fois le raccordement fait, un petit programme pour va effectuer une mesure de la tension
obtenue sur le potentiomètre, puis envoyer la valeur lue sur la liaison série :
const int potar = 0; // le potentiomètre, branché sur la broche analogique 0
int valeurLue; //variable pour stocker la valeur lue après conversion float
tension; //on convertit cette valeur en une tension void setup()
{
//on se contente de démarrer la liaison série
Serial.begin(9600);
}
void loop()
{
//on convertit en nombre binaire la tension lue en sortie du potentiomètre
valeurLue = analogRead(potar);
//on traduit la valeur brute en tension (produit en croix)
tension = valeurLue * 5.0 / 1024;
36
arduino.odt
Club HIGH TECH
Serial.println(valeurLue);
La carte Arduino dispose de 6 broches qui soint compatibles avec la génération d'une PWM. Elles
37
arduino.odt
Club HIGH TECH
On utilisera ces valeurs pour faire cette teinte sur la LED RGB :
const int ledRouge = 11; const int ledVerte = 1;
const int ledBleue = 10;
38
arduino.odt
Club HIGH TECH
void setup()
{
//on déclare les broches en sorties
pinMode(ledRouge, OUTPUT);
pinMode(ledVerte, OUTPUT);
pinMode(ledBleue, OUTPUT);
Schéma électrique
Réalisation
39
arduino.odt
Club HIGH TECH
2
Liquid Crystal Display (Écran à Cristaux Liquides)
40
arduino.odt
Club HIGH TECH
41
arduino.odt
Club HIGH TECH
Schéma électrique
Réalisation
L'afficheur LCD utilise 6 à 10 broches de données ((D0 à D7) ou (D4 à D7) + RS + E) et deux
d'alimentations (+5V et masse). La plupart des écrans possèdent aussi une entrée analogique pour
régler le contraste des caractères. On branchera dessus un potentiomètre de 10 kΩ.
Les 10 broches de données peuvent être placées sur n'importe quelles entrées/sorties numériques de
l'Arduino.
42
arduino.odt
Club HIGH TECH
Il faudra commencer par déclarer un objet lcd, de type LiquidCrystal et qui sera global à notre
projet. Voici un exemple complet de code correspondant aux deux branchements précédents :
#include <LiquidCrystal.h> //on inclut la librairie
// initialise l'écran avec les bonnes
broches LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int heures, minutes, secondes; char
message[16];
void setup()
{ lcd.begin(16, 2); // règle la taille du LCD : 16 colonnes et 2 lignes
43
arduino.odt
Club HIGH TECH
secondes++;
}
NB : si jamais rien ne s'affiche, essayez de tourner votre potentiomètre de contraste.
44
arduino.odt
Club HIGH TECH
45
arduino.odt
Club HIGH TECH
LiquidCrystal lcd(8,9,4,5,6,7);
void setup()
{ lcd.begin(16, 2); // règle la taille du LCD
lcd.setCursor(14, 0); // place le curseur aux coordonnées (14,0) lcd.leftToRight();
//indique que le texte doit être déplacer vers la gauche lcd.autoscroll(); //rend
automatique ce déplacement
int i=0;
for (i=0; i<10; i++)
{
lcd.print(i);
delay(1000);
}
}
void loop()
{
}
46
arduino.odt