Vous êtes sur la page 1sur 51

Département Génie Electrique

Algorithme et
programmation C
1

Année Universitaire : 2022 - 2023 Pr. Fatima Ezzahra NADIR


2

ARDUINO

Pr. F. NADIR
3
ARDUINO
Présentation

Arduino est un projet créé par une équipe de développeurs, composée de six
individus. Cette équipe a créé le "système Arduino", comme outil qui va permettre
aux débutants, amateurs ou professionnels de créer des systèmes électroniques plus
ou moins complexes. 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 et la charge de travail à la conception d'une carte électronique.

Pr. F. NADIR
4
ARDUINO
Présentation

Le système Arduino nous permet de réaliser un grand nombre de choses, qui ont
une application dans tous les domaines. L'étendue de l'utilisation de l'Arduino est
gigantesque. A l’aide d’Arduino, on peut :

 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
 etc.
Pr. F. NADIR
5
ARDUINO
Partie Matériel
Présentation

Il s'agit d'une carte électronique basée autour d'un microcontrôleur Atmega du fabricant
Atmel. Elle permet, à partir des événements détectés par des capteurs, de traiter puis
commander des actionneurs, elle représente une interface programmable.

Actionneur
ou
Capteur Carte Arduino Pré-actionneur
Ou
Afficheur

Pr. F. NADIR
6
ARDUINO
Partie Matériel
Types de Carte Arduino

Il existe différents carte Arduino:

Arduino Nano

Arduino Uno

Arduino Mega
Arduino Leonardo Pr. F. NADIR
7
ARDUINO
Partie Matériel
Types de Carte Arduino

Il existe différents carte Arduino:

Arduino Micro

Arduino Genuino

Arduino Seeduino

Pr. F. NADIR
8
ARDUINO
Partie Matériel
Types de Carte Arduino

Les paramètres à prendre en compte pour le choix de la carte sont :


 Le prix,
 La dimension,
 Le nombre d’entrée sorties,
 Le poids,
 La taille mémoire,
 Les connecteurs disponibles,
 La fréquence de l’horloge.
 …. Pr. F. NADIR
9
ARDUINO
Partie Matériel Choix de la carte

Pr. F. NADIR
10
ARDUINO
Partie Matériel

Exemple : Arduino UNO


 Alimentation: via port USB ou 7 à 12 V
sur connecteur d’alimentation
 Microprocesseur: ATMega328
 Mémoire flash: 32 KB
 Mémoire SRAM: 2 KB
 Mémoire EEPROM: 1 KB
 Interfaces:
- 14 broches d'E/S dont 6 PWM
- 6 entrées analogiques 10 bits
- Bus série, I2C et SPI
 Intensité par E/S: 40 mA
 Tension de fonctionnement 5V.
 Fréquence : 16 MHz Pr. F. NADIR
11
ARDUINO
Partie Matériel Les cartes d'extension (Shields)

Les cartes d’extensions s'enfichent sur la carte Arduino telles que : les Relais,
les carte de commande des moteurs, lecteur carte SD, les shilds Ethernet, WIFI,
GSM, GPS, Afficheurs LCD, ...

Module Ethernet Module GSM Commande Moteurs


Pr. F. NADIR
12
ARDUINO
Le Logiciel

Arduino IDE (Environnement de Développement Intégré) est un environnement


fonctionnant sur divers systèmes d’exploitation (Windows, Mac OS, Gnu/Linux).
Il permet de programmer la carte Arduino à l’aide d’un logiciel gratuit et open
source, développé en Java. Son rôle est l’édition, la compilation et le transfert du
programme dans la carte via le port USB.

Traduction en
Langage bas niveau ou
Le code source en langage
langage machine ou
langage haut niveau en machine
langage binaire
C/C++ « Compilation »
(fichier.hex)
IDE Arduino
Pr. F. NADIR
13
ARDUINO
Partie Logiciel

Après l’installation de l’IDE d’arduino, on


se trouve devant une interface permettant de
programmer le microcontrôleur :

Pr. F. NADIR
14
ARDUINO
1
Le Logiciel

1 : permet de vérifier votre programme. 2

2 : Ce bouton permet de téléverser le programme.


Le logiciel va transférer votre programme compilé
(transformé en langage machine) dans la mémoire du
microcontrôleur de l'Arduino. Une fois cette
opération effectuée, l'Arduino gardera ce programme
en mémoire et l'exécutera tant qu'il sera alimenté en
électricité. Il sera donc autonome et ne dépendra plus
de l'ordinateur !

Pr. F. NADIR
15
ARDUINO
5 6
4
Le Logiciel
3

3 : Créer un nouveau programme.


4: Ouvrir un programme existant.
5 : Enregistrer son programme.
6 : Moniteur série.

Pr. F. NADIR
16
ARDUINO
Le Logiciel 7

8
7 : Choix du type de la carte 9
8 : Choir du processeur
9 : Choix du port de communication
Série

Pr. F. NADIR
17
ARDUINO
La syntaxe du langage

Avec Arduino, on utilise un code minimal pour crée un programme. Il permet de


diviser le programme en deux grosses parties :

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 de votre programme
}

Pr. F. NADIR
18
ARDUINO
La syntaxe du langage

Avec Arduino, on utilise un code minimal pour crée un programme. Il permet de


diviser le programme en deux grosses parties :
On y retrouvera la mise en
place des différentes
sorties et quelques autres
void setup() //fonction d'initialisation de la carte réglages. C'est un peu le
{ check-up de démarrage
Il s ’agit d’une //contenu de l'initialisation
boucle infinie où on }
écrit le contenu du void loop() //fonction principale, elle se répète (s’exécute) à l'infini
programme.
{
//contenu de votre programme
}

Pr. F. NADIR
19
ARDUINO
Communication par la liaison série

Pour faire des communications entre différents supports, il existe différents


moyens, tels que : les bus CAN, le bus I²C, la communication série. Cette dernière
aussi appelée RS232, est intégrée par défaut dans la carte Arduino. Dans sa forme
la plus simple, elle ne nécessite que 3 fils : 2 pour l'émission/réception et 1 pour la
masse afin d'avoir un référentiel électrique commun. La communication série est
soumis à un protocole de communication, qui représente des règles prédéfinis pour
établir un bonne communication entre les terminaux.

Pr. F. NADIR
20
ARDUINO
Communication par la liaison série

Les types de liaison série

 La liaison simplex : Il n'y a qu’un seul émetteur et un seul récepteur. Par


exemple, seul l'ordinateur peut envoyer des données à la carte Arduino.
 La liaison half-duplex : elle permet tour à tour d'émettre et de recevoir des
données. Les transferts de données sont autorisés dans les deux sens mais jamais
en même temps.
 La liaison full-duplex : désigne un fonctionnement bidirectionnel simultané. À
tout moment, les deux modems peuvent recevoir et émettre des données.

Pr. F. NADIR
21
ARDUINO
Communication par la liaison série

Transmission et Réception des données

Les données sont envoyées bit par bit sur la voie de transmission. Toutefois,
étant donné que la plupart des processeurs traitent les informations de façon
parallèle, il s'agit de transformer des données arrivant de façon parallèle en
données en série au niveau de l'émetteur, et inversement au niveau du récepteur.

Pr. F. NADIR
22
ARDUINO
Communication par la liaison série

Protocole de communication RS232

Pour envoyer un octet de donnée on suit les étapes suivantes:


1. Envoi du bit de début ou bit de start, Il possède un niveau logique NL0.
2. Envoi des 8 bits (un mot ou un byte) de données bit par bit.
3. Envoi du bit de parité (cette information n’est pas obligatoire), il représente le
nombre de 1 dans la donnée transmise, s’il est pair, le bit de parité est égale au
NL0, s’il est impaire, il est égale au NL1.
4. Envoi du bit de fin ou bit de stop, Il possède un niveau logique NL1.

Pr. F. NADIR
23
ARDUINO
Communication par la liaison série
Protocole de communication RS232

LSB MSB

MSB (Most Significant Bit) : poids fort LSB (Less Significant Bit) : poids faible Pr. F. NADIR
24
ARDUINO
Communication par la liaison série
Protocole de communication RS232

La norme RS232 définit les niveaux de tension qui


doivent être utilisés pour l'échange de données.
Cependant, le micro-contrôleur sur la carte Arduino
n'utilise que des tensions de 0 et 5V (sauf pour ses
entrées analogiques). Or, la norme RS232 nous impose
ceci :
 Le NL0 doit être une tension comprise entre -3V et -
25V
 Le NL1 doit être une tension comprise entre +3V et
+25V:
Pr. F. NADIR
25
ARDUINO
Communication par la liaison série

Utiliser la liaison série avec Arduino

La transmission par voie série se fait, grâce à l'électricité. Cependant, les niveaux
électriques (les tensions) ne sont pas toujours les mêmes :
 Pour l’ordinateur : utilise des niveaux de -12V à +12V, en utilisant le câble l’usb, les
niveaux seront donc toujours du5V maximum. Ensuite, un composant intégré à Arduino se
chargera de simuler une voie série et tout devient transparent pour votre ordinateur. Il vous
suffit donc juste d'utiliser le câble USB et de le relier.
 Pour Arduino : utilise les niveaux de 0 ou 5V, cependant pour communiquer avec des
composants électrique, on utilise l’adaptation de niveau. Afin de faire cette conversion, un
composant est placé entre les deux supports. Le but de ce composant sera de faire
l'adaptation afin que tout le monde se comprenne. Pr. F. NADIR
26
ARDUINO
Communication par la liaison série

La vitesse de communication

Quand on utilise la voie série, il faut définir la vitesse à laquelle sont transférées
les données. En effet, comme les bits sont transmis un par un, la liaison série envois
les données en un temps prédéfini. Par exemple, on pourra envoyer une totalité de
9600 bits par secondes (9600 bps). Avec cette liaison, on peut envoyer entre 75 et
115200 bits par secondes.

Pr. F. NADIR
27
ARDUINO
Communication par la liaison série

Configuration de la liaison série

Pour utiliser la liaison série et communiquer, on utilise un objet qui est intégré dans
l'ensemble Arduino : l'objet Serial. Pour initialiser l'objet Serial, ainsi que définir la vitesse
à laquelle ces deux dispositifs vont communiquer, on utilise l’instruction suivante au niveau
de la fonction de configuration setup() :

void setup()
{
Serial.begin(9600); //on démarre la liaison en la réglant à une vitesse de 9600 bits par seconde.
}

Pr. F. NADIR
28
ARDUINO
Communication par la liaison série

Envoyer des données

Pour que la carte arduino envoie des donnée à un récepteur, on utilise les fonction print()
et println() :
 print() : cette fonction permet d'envoyer des données sur la liaison série. On peut par
exemple envoyer un caractère, une chaine de caractère ou d'autres données.
 println() : c'est la même fonction que la précédente, elle permet simplement un retour à
la ligne à la fin du message envoyé.

Pr. F. NADIR
29
ARDUINO
Communication par la liaison série

Envoyer des données

void setup()
{
Serial.begin(9600); //on démarre la liaison en la réglant à une vitesse de 9600 bits par seconde.
Serial.print("DUT GE");
Serial.println("EST AGADIR");
Serial.println("Département Génie Electrique");
}

Pr. F. NADIR
30
ARDUINO
Communication par la liaison série

Envoyer des données

 Envoyer une valeur :

Serial.print("3.1415926535");

 Envoyer une valeur réel et spécifier le nombre de chiffre après la virgules :

Serial.print("3.1415926535", 4);

Pr. F. NADIR
31
ARDUINO
Communication par la liaison série

Envoyer des données

 Envoyer la valeur d’une variable :

Serial.print(Variable);

Pr. F. NADIR
32
ARDUINO
Communication par la liaison série

Réception des données

Pour vérifier si on a reçu des données, il faut


régulièrement interroger la carte pour lui demander si des
void loop()
données sont disponibles dans son buffer de réception. {
Un buffer est une zone mémoire permettant de stocker int Data_Dispo = Serial.available();
des données sur un cours instant. Dans notre situation, if(Data_Dispo > 0)
cette mémoire est dédiée à la réception sur la voie série. {
Il en existe un, aussi pour l'envoi de donnée, qui met à la //Lire puis faire un traitement
}
queue les données à envoyer et les envoie dès que }
possible. Pour cela, on utilise la fonction available() de
l'objet Serial. Cette fonction renvoie le nombre de
caractères dans le buffer de réception de la liaison série. Pr. F. NADIR
33
ARDUINO
Communication par la liaison série

Réception des données

void loop()
{
Une fois que l'on sait qu'il y a des int Data=0;
données, il faut aller les lire pour les int Data_Dispo = Serial.available();
utiliser au niveau du traitement. La while(Data_Dispo > 0)
lecture se fait avec la fonction read() : {
Data=Serial.read();
Serial.prinln(Data);
}
}
Pr. F. NADIR
34
ARDUINO
Gestion des entrées sorties digitales

Sortie TOR : Allumer une LED

1. Définir les broches du microcontrôleur en créant une variable définissant la broche


utilisée.
const int led_rouge = 2;

2. Au niveau de la fonction setup(), à l’aide de la fonction pinMode(), définir la broche


utilisée en sortie du microcontrôleur. Cette fonction prend en paramètre :
• Le nom de la variable que l'on a défini à la broche. void setup()
{
• Le type de broche que cela va être (entrée ou sortie).
pinMode(led_rouge, OUTPUT);
}
Pr. F. NADIR
35
ARDUINO
Gestion des entrées sorties digitales

Sortie TOR : Allumer une LED

3. Au niveau de la fonction loop(), Définir le programme de la gestion de la sortie, en


l’activant à l’état haut (HIGH) ou l’état bas (LOW),

void loop()
{
digitalWrite(led_rouge, HIGH);
}

Pr. F. NADIR
36
ARDUINO
Gestion des entrées sorties digitales

Sortie TOR : Allumer une LED

Pr. F. NADIR
37
ARDUINO
Gestion des entrées sorties digitales

Gérer le temps

Pour introduire le notion de temps au niveau d’Arduino, on utilise la fonction delay().


La fonction admet un paramètre, qui est le temps pendant lequel, on veut mettre en pause
le programme. Ce temps doit être donné en millisecondes.

Pr. F. NADIR
38
ARDUINO
Gestion des entrées sorties digitales

Exemple : Clignotement d’une LED

void loop()
{
digitalWrite(led_rouge, HIGH);
Delay(1000);
digitalWrite(led_rouge, LOW);
Delay(1000);
}

Pr. F. NADIR
39
ARDUINO
Gestion des entrées sorties digitales

Entrée TOR : Récupérer l’état d’une entrée

1. Définir les broches du microcontrôleur en créant une variable définissant la broche


utilisée.
const int Bouton = 2;

2. Au niveau de la fonction setup(), à l’aide de la fonction pinMode(), définir la broche


utilisée en entrée du microcontrôleur.
pinMode(Bouton, INPUT);
On utilise ses deux instructions, pour éviter de laisser
l’entrée en l’air. L’état haute impédance (en air), peut pinMode(Bouton, INPUT_PULLUP);
avoir n’importe quelle valeur comprise entre 0 et 5 V et
peut être interprétée comme un LOW ou un HIGH par la pinMode(Bouton, INPUT_PULLDOWN);
fonction digitalRead() .
Pr. F. NADIR
40
ARDUINO
Gestion des entrées sorties digitales

Entrée TOR : Récupérer l’état d’une entrée

3. Au niveau de la fonction loop(), définir le programme en fonction de l’état de l’entrée,


en utilisant la fonction digitalRead()

void loop()
{
etat = digitalRead(Bouton);
if(etat == HIGH)
//action lorsque le bouton est appuyé
else
//action lorsque le bouton est relâché
}
Pr. F. NADIR
41
ARDUINO
Gestion des entrées sorties digitales

Entrée TOR : Récupérer l’état d’une entrée

1kΩ

Bouton poussoir

Pr. F. NADIR
42
ARDUINO
Exercice

Réaliser un jeux de lumière qui contient 6 LEDs et qui se manipule comme suit :

- L’ordre du jeux est donné par un bouton.


- Le jeux de LEDs se répète 5 fois.

Pr. F. NADIR
43
ARDUINO
Gestion des entrées sorties Analogiques

Définition

une valeur analogique ne s’exprimée pas par 0 ou 1 (0 ou 5V). Elle peut prendre
une infinité de valeurs dans un intervalle donné. Dans le cas d’arduino, la grandeur
analogique pourra varier de 0 à 5V. Puisque le traitement se fait au niveau du
microcontrôleur et qui reçoit une information numérique, d’où l’intérêt
d’implémenter un convertisseur analogique numérique. Ce dispositif, permet de
convertir des grandeurs analogiques en grandeurs numériques. La valeur
numérique obtenue sera proportionnelle à la valeur analogique fournie en entrée.

Pr. F. NADIR
44
ARDUINO
Gestion des entrées sorties Analogiques

Entrée Analogique : Lire une entrée Analogique

Pour lire une entrée analogique, on utilise la fonction analogRead(pin). Cette


fonction permet de lire la valeur lue sur une entrée analogique de l'Arduino. Elle
prend en argument, le numéro de l'entrée analogique à lire, et retourne la valeur lue
qui est un entier représentant le résultat de la conversion analogique->numérique,
dont la valeur est comprise entre 0 et 1023
const int MonCapteur = 3;
void loop()
{
valeurLue = analogRead(MonCapteur);
}
Pr. F. NADIR
45
ARDUINO
Gestion des entrées sorties Analogiques

Entrée Analogique : Lire une entrée Analogique

Potentiomètre

Pr. F. NADIR
46
ARDUINO
Gestion des entrées sorties Analogiques

Sortie : PWM ou MLI

La PWM (Pulse Width Modulation) ou Modulation à Largeur d'Impulsion


(MLI), est un signal de fréquence fixe qui a un rapport cyclique qui varie avec le
temps suivant les ordres qu'elle reçoit. Le rapport cyclique est mesuré en pour cent
(%). Plus le pourcentage est élevé, plus le niveau logique 1 est présent dans la
période et moins le niveau logique 0 il est. Et inversement. Le rapport cyclique du
signal est donc le pourcentage de temps de la période durant lequel le signal est au
niveau logique 1.

Pr. F. NADIR
47
ARDUINO
Gestion des entrées sorties Analogiques

Sortie : PWM ou MLI

𝑇𝑜𝑛
Veff=E
𝑇

Pr. F. NADIR
48
ARDUINO
Gestion des entrées sorties digitales

Sortie : PWM ou MLI

1. Définir sur la carte Arduino, la broche qui est compatible avec la génération d'une
PWM. Par exemple pour Arduino UNO, elles sont repérées par le symbole tilde ~ (3,
5, 6, 9, 10 et 11).

2. Définir la fréquence de la PWM. Par exemple, la fréquence par défaut de


l'Arduino UNO est de 490 Hz pour les pins 3, 9, 10, 11 et de 980 Hz pour les pins 5 et
6 afin de dimensionnement du circuit lissage en cas de besoin.

Pr. F. NADIR
49
ARDUINO
Gestion des entrées sorties digitales

Sortie : PWM ou MLI

Pour utiliser la PWM, Arduino intègre une fonction toute prête, qui est la fonction
analogWrite(). Cette fonction prend deux arguments en paramètres :
 Le premier est le numéro de la broche où l'on veut générer la PWM.
 Le second argument représente la valeur du rapport cyclique à appliquer. Cette
valeur ne s'exprime pas cette valeur en pourcentage, mais avec un nombre entier
compris entre 0 et 255. const int Pin_PWM = 3;
void loop()
{
analogWrite(Pin_PWM, 150);
} Pr. F. NADIR
50
ARDUINO
Gestion des entrées sorties digitales

Sortie TOR : Allumer une LED

Pr. F. NADIR
51
ARDUINO
Exercice

Un capteur de température mesure la température d’un four entre (0°C à 100°C) qui est
l’image de 0 à 5V :
 Si la température est supérieure à 80°C, allumer une LED rouge, afficher le message :
« Le four est chaud », au niveau du moniteur série et allumer Led Rouge.
 Si la température est inférieure à 20°C, allumer une LED bleu, afficher le message :
« Le four est froid », au niveau du moniteur série et allumer Led Bleu.
 Si la température est compris entre 20°C et 80°C, allumer une LED verte, afficher le
message : « La température du four est moyenne», au niveau du moniteur série et allumer
Led Verte.

Pr. F. NADIR

Vous aimerez peut-être aussi