1
Algorithme et
programmation C
Département Génie Electrique
Pr. Fatima Ezzahra NADIR
Année Universitaire : 2022 - 2023
2
ARDUINO
Pr. F. NADIR
3
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.
ARDUINO
Pr. F. NADIR
4
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.
ARDUINO
Pr. F. NADIR
5
Partie Matériel
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.
ARDUINO
Pr. F. NADIR
Carte Arduino
Capteur
Actionneur
ou
Pré-actionneur
Ou
Afficheur
Présentation
6
Il existe différents carte Arduino:
ARDUINO
Pr. F. NADIR
Arduino Uno
Arduino Mega
Arduino Nano
Arduino Leonardo
Partie Matériel
Types de Carte Arduino
7
Il existe différents carte Arduino:
ARDUINO
Pr. F. NADIR
Arduino Genuino
Arduino Seeduino
Arduino Micro
Partie Matériel
Types de Carte Arduino
8
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.
 ….
ARDUINO
Pr. F. NADIR
Partie Matériel
Types de Carte Arduino
9
ARDUINO
Pr. F. NADIR
Partie Matériel Choix de la carte
10
ARDUINO
Pr. F. NADIR
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
Partie Matériel
11
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, ...
ARDUINO
Pr. F. NADIR
Module Ethernet Module GSM Commande Moteurs
Partie Matériel Les cartes d'extension (Shields)
12
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.
ARDUINO
Pr. F. NADIR
Le code source en
langage haut niveau en
C/C++
Langage bas niveau ou
langage machine ou
langage binaire
(fichier.hex)
Traduction en
langage
machine
« Compilation »
IDE Arduino
13
Partie Logiciel
Après l’installation de l’IDE d’arduino, on
se trouve devant une interface permettant de
programmer le microcontrôleur :
ARDUINO
Pr. F. NADIR
14
Le Logiciel
1 : permet de vérifier votre programme.
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 !
ARDUINO
Pr. F. NADIR
2
1
15
Le Logiciel
3 : Créer un nouveau programme.
4: Ouvrir un programme existant.
5 : Enregistrer son programme.
6 : Moniteur série.
ARDUINO
Pr. F. NADIR
4
3
5 6
16
Le Logiciel
7 : Choix du type de la carte
8 : Choir du processeur
9 : Choix du port de communication
Série
ARDUINO
Pr. F. NADIR
9
7
8
17
Avec Arduino, on utilise un code minimal pour crée un programme. Il permet de
diviser le programme en deux grosses parties :
ARDUINO
Pr. F. NADIR
La syntaxe du langage
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
}
18
Avec Arduino, on utilise un code minimal pour crée un programme. Il permet de
diviser le programme en deux grosses parties :
ARDUINO
Pr. F. NADIR
La syntaxe du langage
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
}
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
Il s ’agit d’une
boucle infinie où on
écrit le contenu du
programme.
19
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.
ARDUINO
Pr. F. NADIR
Communication par la liaison série
20
 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.
ARDUINO
Pr. F. NADIR
Communication par la liaison série
Les types de liaison série
21
ARDUINO
Pr. F. NADIR
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.
22
ARDUINO
Pr. F. NADIR
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.
23
ARDUINO
Pr. F. NADIR
Communication par la liaison série
Protocole de communication RS232
LSB MSB
MSB (Most Significant Bit) : poids fort LSB (Less Significant Bit) : poids faible
24
ARDUINO
Pr. F. NADIR
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:
25
ARDUINO
Pr. F. NADIR
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.
26
ARDUINO
Pr. F. NADIR
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.
27
ARDUINO
Pr. F. NADIR
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.
}
28
ARDUINO
Pr. F. NADIR
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é.
29
ARDUINO
Pr. F. NADIR
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");
}
30
ARDUINO
Pr. F. NADIR
Communication par la liaison série
Envoyer des données
 Envoyer une valeur :
 Envoyer une valeur réel et spécifier le nombre de chiffre après la virgules :
Serial.print("3.1415926535");
Serial.print("3.1415926535", 4);
31
ARDUINO
Pr. F. NADIR
Communication par la liaison série
Envoyer des données
 Envoyer la valeur d’une variable :
Serial.print(Variable);
32
ARDUINO
Pr. F. NADIR
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
données sont disponibles dans son buffer de réception.
Un buffer est une zone mémoire permettant de stocker
des données sur un cours instant. Dans notre situation,
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
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.
void loop()
{
int Data_Dispo = Serial.available();
if(Data_Dispo > 0)
{
//Lire puis faire un traitement
}
}
33
ARDUINO
Pr. F. NADIR
Communication par la liaison série
Une fois que l'on sait qu'il y a des
données, il faut aller les lire pour les
utiliser au niveau du traitement. La
lecture se fait avec la fonction read() :
Réception des données
void loop()
{
int Data=0;
int Data_Dispo = Serial.available();
while(Data_Dispo > 0)
{
Data=Serial.read();
Serial.prinln(Data);
}
}
34
ARDUINO
Pr. F. NADIR
1. Définir les broches du microcontrôleur en créant une variable définissant la broche
utilisée.
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.
• Le type de broche que cela va être (entrée ou sortie).
Sortie TOR : Allumer une LED
const int led_rouge = 2;
void setup()
{
pinMode(led_rouge, OUTPUT);
}
Gestion des entrées sorties digitales
35
ARDUINO
Pr. F. NADIR
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),
Sortie TOR : Allumer une LED
void loop()
{
digitalWrite(led_rouge, HIGH);
}
Gestion des entrées sorties digitales
36
ARDUINO
Pr. F. NADIR
Sortie TOR : Allumer une LED
Gestion des entrées sorties digitales
37
ARDUINO
Pr. F. NADIR
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.
Gérer le temps
Gestion des entrées sorties digitales
38
ARDUINO
Pr. F. NADIR
Exemple : Clignotement d’une LED
void loop()
{
digitalWrite(led_rouge, HIGH);
Delay(1000);
digitalWrite(led_rouge, LOW);
Delay(1000);
}
Gestion des entrées sorties digitales
39
ARDUINO
Pr. F. NADIR
1. Définir les broches du microcontrôleur en créant une variable définissant la broche
utilisée.
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.
Entrée TOR : Récupérer l’état d’une entrée
const int Bouton = 2;
pinMode(Bouton, INPUT);
Gestion des entrées sorties digitales
pinMode(Bouton, INPUT_PULLUP);
pinMode(Bouton, INPUT_PULLDOWN);
On utilise ses deux instructions, pour éviter de laisser
l’entrée en l’air. L’état haute impédance (en air), peut
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
fonction digitalRead() .
40
ARDUINO
Pr. F. NADIR
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é
}
Entrée TOR : Récupérer l’état d’une entrée
Gestion des entrées sorties digitales
41
ARDUINO
Pr. F. NADIR
Entrée TOR : Récupérer l’état d’une entrée
Gestion des entrées sorties digitales
1kΩ
Bouton poussoir
42
ARDUINO
Pr. F. NADIR
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.
43
ARDUINO
Pr. F. NADIR
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.
44
ARDUINO
Pr. F. NADIR
Gestion des entrées sorties Analogiques
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
Entrée Analogique : Lire une entrée Analogique
const int MonCapteur = 3;
void loop()
{
valeurLue = analogRead(MonCapteur);
}
45
ARDUINO
Pr. F. NADIR
Gestion des entrées sorties Analogiques
Entrée Analogique : Lire une entrée Analogique
Potentiomètre
46
ARDUINO
Pr. F. NADIR
Gestion des entrées sorties Analogiques
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.
Sortie : PWM ou MLI
47
ARDUINO
Pr. F. NADIR
Gestion des entrées sorties Analogiques
Sortie : PWM ou MLI
Veff=E
𝑇𝑜𝑛
𝑇
48
ARDUINO
Pr. F. NADIR
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.
Gestion des entrées sorties digitales
Sortie : PWM ou MLI
49
ARDUINO
Pr. F. NADIR
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.
Gestion des entrées sorties digitales
Sortie : PWM ou MLI
const int Pin_PWM = 3;
void loop()
{
analogWrite(Pin_PWM, 150);
}
50
ARDUINO
Pr. F. NADIR
Sortie TOR : Allumer une LED
Gestion des entrées sorties digitales
51
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
ARDUINO

Cours Arduino et Programtion Pr. F. NADIR.pdf

  • 1.
    1 Algorithme et programmation C DépartementGénie Electrique Pr. Fatima Ezzahra NADIR Année Universitaire : 2022 - 2023
  • 2.
  • 3.
    3 Présentation Arduino est unprojet 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. ARDUINO Pr. F. NADIR
  • 4.
    4 Présentation Le système Arduinonous 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. ARDUINO Pr. F. NADIR
  • 5.
    5 Partie Matériel Il s'agitd'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. ARDUINO Pr. F. NADIR Carte Arduino Capteur Actionneur ou Pré-actionneur Ou Afficheur Présentation
  • 6.
    6 Il existe différentscarte Arduino: ARDUINO Pr. F. NADIR Arduino Uno Arduino Mega Arduino Nano Arduino Leonardo Partie Matériel Types de Carte Arduino
  • 7.
    7 Il existe différentscarte Arduino: ARDUINO Pr. F. NADIR Arduino Genuino Arduino Seeduino Arduino Micro Partie Matériel Types de Carte Arduino
  • 8.
    8 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.  …. ARDUINO Pr. F. NADIR Partie Matériel Types de Carte Arduino
  • 9.
    9 ARDUINO Pr. F. NADIR PartieMatériel Choix de la carte
  • 10.
    10 ARDUINO Pr. F. NADIR 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 Partie Matériel
  • 11.
    11 Les cartes d’extensionss'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, ... ARDUINO Pr. F. NADIR Module Ethernet Module GSM Commande Moteurs Partie Matériel Les cartes d'extension (Shields)
  • 12.
    12 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. ARDUINO Pr. F. NADIR Le code source en langage haut niveau en C/C++ Langage bas niveau ou langage machine ou langage binaire (fichier.hex) Traduction en langage machine « Compilation » IDE Arduino
  • 13.
    13 Partie Logiciel Après l’installationde l’IDE d’arduino, on se trouve devant une interface permettant de programmer le microcontrôleur : ARDUINO Pr. F. NADIR
  • 14.
    14 Le Logiciel 1 :permet de vérifier votre programme. 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 ! ARDUINO Pr. F. NADIR 2 1
  • 15.
    15 Le Logiciel 3 :Créer un nouveau programme. 4: Ouvrir un programme existant. 5 : Enregistrer son programme. 6 : Moniteur série. ARDUINO Pr. F. NADIR 4 3 5 6
  • 16.
    16 Le Logiciel 7 :Choix du type de la carte 8 : Choir du processeur 9 : Choix du port de communication Série ARDUINO Pr. F. NADIR 9 7 8
  • 17.
    17 Avec Arduino, onutilise un code minimal pour crée un programme. Il permet de diviser le programme en deux grosses parties : ARDUINO Pr. F. NADIR La syntaxe du langage 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 }
  • 18.
    18 Avec Arduino, onutilise un code minimal pour crée un programme. Il permet de diviser le programme en deux grosses parties : ARDUINO Pr. F. NADIR La syntaxe du langage 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 } 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 Il s ’agit d’une boucle infinie où on écrit le contenu du programme.
  • 19.
    19 Pour faire descommunications 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. ARDUINO Pr. F. NADIR Communication par la liaison série
  • 20.
    20  La liaisonsimplex : 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. ARDUINO Pr. F. NADIR Communication par la liaison série Les types de liaison série
  • 21.
    21 ARDUINO Pr. F. NADIR Communicationpar 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.
  • 22.
    22 ARDUINO Pr. F. NADIR Communicationpar 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.
  • 23.
    23 ARDUINO Pr. F. NADIR Communicationpar la liaison série Protocole de communication RS232 LSB MSB MSB (Most Significant Bit) : poids fort LSB (Less Significant Bit) : poids faible
  • 24.
    24 ARDUINO Pr. F. NADIR Communicationpar 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:
  • 25.
    25 ARDUINO Pr. F. NADIR Communicationpar 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.
  • 26.
    26 ARDUINO Pr. F. NADIR Communicationpar 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.
  • 27.
    27 ARDUINO Pr. F. NADIR Communicationpar 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. }
  • 28.
    28 ARDUINO Pr. F. NADIR Communicationpar 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é.
  • 29.
    29 ARDUINO Pr. F. NADIR Communicationpar 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"); }
  • 30.
    30 ARDUINO Pr. F. NADIR Communicationpar la liaison série Envoyer des données  Envoyer une valeur :  Envoyer une valeur réel et spécifier le nombre de chiffre après la virgules : Serial.print("3.1415926535"); Serial.print("3.1415926535", 4);
  • 31.
    31 ARDUINO Pr. F. NADIR Communicationpar la liaison série Envoyer des données  Envoyer la valeur d’une variable : Serial.print(Variable);
  • 32.
    32 ARDUINO Pr. F. NADIR Communicationpar 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 données sont disponibles dans son buffer de réception. Un buffer est une zone mémoire permettant de stocker des données sur un cours instant. Dans notre situation, 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 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. void loop() { int Data_Dispo = Serial.available(); if(Data_Dispo > 0) { //Lire puis faire un traitement } }
  • 33.
    33 ARDUINO Pr. F. NADIR Communicationpar la liaison série Une fois que l'on sait qu'il y a des données, il faut aller les lire pour les utiliser au niveau du traitement. La lecture se fait avec la fonction read() : Réception des données void loop() { int Data=0; int Data_Dispo = Serial.available(); while(Data_Dispo > 0) { Data=Serial.read(); Serial.prinln(Data); } }
  • 34.
    34 ARDUINO Pr. F. NADIR 1.Définir les broches du microcontrôleur en créant une variable définissant la broche utilisée. 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. • Le type de broche que cela va être (entrée ou sortie). Sortie TOR : Allumer une LED const int led_rouge = 2; void setup() { pinMode(led_rouge, OUTPUT); } Gestion des entrées sorties digitales
  • 35.
    35 ARDUINO Pr. F. NADIR 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), Sortie TOR : Allumer une LED void loop() { digitalWrite(led_rouge, HIGH); } Gestion des entrées sorties digitales
  • 36.
    36 ARDUINO Pr. F. NADIR SortieTOR : Allumer une LED Gestion des entrées sorties digitales
  • 37.
    37 ARDUINO Pr. F. NADIR Pourintroduire 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. Gérer le temps Gestion des entrées sorties digitales
  • 38.
    38 ARDUINO Pr. F. NADIR Exemple: Clignotement d’une LED void loop() { digitalWrite(led_rouge, HIGH); Delay(1000); digitalWrite(led_rouge, LOW); Delay(1000); } Gestion des entrées sorties digitales
  • 39.
    39 ARDUINO Pr. F. NADIR 1.Définir les broches du microcontrôleur en créant une variable définissant la broche utilisée. 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. Entrée TOR : Récupérer l’état d’une entrée const int Bouton = 2; pinMode(Bouton, INPUT); Gestion des entrées sorties digitales pinMode(Bouton, INPUT_PULLUP); pinMode(Bouton, INPUT_PULLDOWN); On utilise ses deux instructions, pour éviter de laisser l’entrée en l’air. L’état haute impédance (en air), peut 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 fonction digitalRead() .
  • 40.
    40 ARDUINO Pr. F. NADIR 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é } Entrée TOR : Récupérer l’état d’une entrée Gestion des entrées sorties digitales
  • 41.
    41 ARDUINO Pr. F. NADIR EntréeTOR : Récupérer l’état d’une entrée Gestion des entrées sorties digitales 1kΩ Bouton poussoir
  • 42.
    42 ARDUINO Pr. F. NADIR Exercice Réaliserun 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.
  • 43.
    43 ARDUINO Pr. F. NADIR Gestiondes 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.
  • 44.
    44 ARDUINO Pr. F. NADIR Gestiondes entrées sorties Analogiques 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 Entrée Analogique : Lire une entrée Analogique const int MonCapteur = 3; void loop() { valeurLue = analogRead(MonCapteur); }
  • 45.
    45 ARDUINO Pr. F. NADIR Gestiondes entrées sorties Analogiques Entrée Analogique : Lire une entrée Analogique Potentiomètre
  • 46.
    46 ARDUINO Pr. F. NADIR Gestiondes entrées sorties Analogiques 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. Sortie : PWM ou MLI
  • 47.
    47 ARDUINO Pr. F. NADIR Gestiondes entrées sorties Analogiques Sortie : PWM ou MLI Veff=E 𝑇𝑜𝑛 𝑇
  • 48.
    48 ARDUINO Pr. F. NADIR 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. Gestion des entrées sorties digitales Sortie : PWM ou MLI
  • 49.
    49 ARDUINO Pr. F. NADIR Pourutiliser 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. Gestion des entrées sorties digitales Sortie : PWM ou MLI const int Pin_PWM = 3; void loop() { analogWrite(Pin_PWM, 150); }
  • 50.
    50 ARDUINO Pr. F. NADIR SortieTOR : Allumer une LED Gestion des entrées sorties digitales
  • 51.
    51 Exercice Un capteur detempé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 ARDUINO