189
Pascal MASSON Electronique avec Arduino (version projection V45) 1 École Polytechnique Universitaire de Nice Sophia - Antipolis Cycle Initial Polytechnique 1645 route des Lucioles, 06410 BIOT Cours sponsorisé par la société Pascal MASSON Version projection Edition 2019-2020-V45 ([email protected]) Electronique avec Arduino (ex ATMEL)

Electronique avec Arduino - Côte d'Azur University

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Pascal MASSON Electronique avec Arduino (version projection V45) 1

École Polytechnique Universitaire de Nice Sophia-Antipolis

Cycle Initial Polytechnique1645 route des Lucioles, 06410 BIOT

Cours sponsorisé

par la société

Pascal MASSON

Version projection

Edition 2019-2020-V45

([email protected])

Electronique

avec Arduino

(ex ATMEL)

Pascal MASSON Electronique avec Arduino (version projection V45) 2

Sommaire

1. Généralités

2. Commande d’une LED

3. LED + bouton poussoir

7. Pulse Width Modulation (PWM)

5. Entrées analogiques

6. Ecran LCD 162

8. Mesure de distance

9. Communications IR

Introduction

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Applications simples pour des étudiants BAC + 1 et 2

3

Introduction

Robot BAC + 1

Emetteur FM BAC + 2

▪ Objets que les étudiants manipulent au quotidien :

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ L’émergence et succès grandissant des cartes de développement

4

Introduction

▪ C’est l’occasion de réaliser des projets plus ou moins complexes qui

correspondent mieux à l’électronique actuelle tout en restant accessibles aux

étudiants de BAC+2.

▪ Tous les acteurs du marché s’y lancent

Pascal MASSON Electronique avec Arduino (version projection V45) 5

Introduction

▪ Nous avons choisi la carte Arduino Uno (ou équivalent)

▪ Pas de système d’exploitation

▪ Mini-ordinateur qui traite des données analogiques et

numériques provenant de composants et capteurs

divers (capteur de température, luminosité, mouvement

ou boutons-poussoirs, etc.).

▪ Elle permet aussi de contrôler des objets comme des

lampes ou encore des moteurs.

▪ Une quantité « infinie » d’applications sur internet.

(ex ATMEL)

Pascal MASSON Electronique avec Arduino (version projection V45) 6

Introduction

▪ Carte qui permet de travailler sur un mélange

d'électronique et de programmation embarquée

(informatique embarquée)

▪ L’objectif premier du cours BAC+2 est de concevoir,

manipuler et contrôler de petits circuits analogiques

(…et numériques)

▪ Les programmes réalisés restent toujours assez

simples mais rien n’empêche les étudiants d’en réaliser

de plus complexes.

(ex ATMEL)

Pascal MASSON Electronique avec Arduino (version projection V45) 7

▪ Les étudiants ont la possibilité

de réaliser leur projet (non noté

et en plus des cours) à base

d’arduino. Une aide technique

et matérielle est fournie dans la

mesure du possible

Alarme maison

Fusée avec

électronique

embarquée

Lanceur de balle de ping-pong

Barduino

Introduction

Projets personnels

Pascal MASSON Electronique avec Arduino (version projection V45) 8

▪ Les étudiants choisissent le projet qu’ils souhaitent

réaliser durant les séances encadrées

Robot Nerf

Wall-E

Voiture tout terrain

Drône

▪ 39 projets

Introduction

Projets école

Pascal MASSON Electronique avec Arduino (version projection V45) 9

▪ Il n’est pas possible de renouveler le matériel tous les ans.

▪ Une partie du matériel prêté doit être rendue en parfait état en fin d’année

après la dernière séance de projet.

Introduction

Matériel prêté

Pascal MASSON Electronique avec Arduino (version projection V45) 10

▪ Les étudiants doivent avoir à chaque séance :

Introduction

Matériel à apporter

Pascal MASSON Electronique avec Arduino (version projection V45) 11

▪ Premier semestre :

▪ Les cours sont obligatoires donc : 1 absence enlève 0.5 point au dernier DS

✓ Prise en main avec des exemples simples – P. MASSON

▪ Deuxième semestre :

✓ AOP (fréquencemètre) – G. JACQUEMOD

✓ Prise en main du bluetooth, connexion avec téléphone portable

(androïde), voiture robot – P. MASSON

✓ Projets (la suite) – P. MASSON

▪ Les cours se déroulent dans la salle de TP électronique BAC + 1 et 2

Introduction

✓ Numérique – F. MULLER

Déroulement des cours ARDUINO

✓ Projets – ???, P. MASSON

✓ Intelligence artificielle (peut être) – P. MASSON

Pascal MASSON Electronique avec Arduino (version projection V45) 12

Introduction

Dans cette salle

▪ Il est interdit de boire et/ou de manger.

Pascal MASSON Electronique avec Arduino (version projection V45) 13

1.1. Présentation de la carte ARDUINO UNO

1. Généralités

Port USB

Bouton reset

Entrées/sorties

logiques

Sortie série

Entrée série

Régulateur

5VAlimentation

Extérieure 9V,

+ au centre

Sortie alimentation

3.3 V, 50 mA max

Sortie 5 V

MasseAlimentation

jusqu’à 12 V

Entrées analogiques

Entrées/sorties

logiques+

Pascal MASSON Electronique avec Arduino (version projection V45) 14

1.1. Présentation de la carte Xplained MINI

1. Généralités

Port USB

Bouton reset

Entrées/sorties

logiques (PD2-PD7

& PB0-PB5)

Sortie série (PD1)

Entrée série (PD0)

Sortie alimentation

3.3 V, 50 mA max

Sortie 5 V

Masse

Entrées analogiques

Entrées/sorties

logiques+

Pascal MASSON Electronique avec Arduino (version projection V45) 15

1.1. Présentation de la carte Xplained MINI

1. Généralités

▪ Pour accéder à cette carte il faut :

▪ Dans le logiciel IDE il faut sélectionner :

1. Une carte de type « Arduino Nano »

2. Un processeur de type : ATmega328

▪ Très important, un numéro de port doit

apparaître dans l’arborescence Outil/Port

1. Un câble USB micro

2. Installer le logiciel « driver-atmel-bundle-7.0.712.exe »

que vous trouverez sur mon site :

http://users.polytech.unice.fr/~pmasson/Enseignement-arduino.htm

sous l’intitulé :

ATMEL USB driver pour pouvoir utiliser la carte Xplained mini

Pascal MASSON Electronique avec Arduino (version projection V45) 16

1.1. Présentation de la carte Xplained MINI

1. Généralités

▪ Pour accéder à cette carte il faut :

▪ Dans le logiciel IDE il faut sélectionner :

1. Une carte de type « Arduino Nano »

2. Un processeur de type : ATmega328

▪ Très important, un numéro de port doit

apparaître dans l’arborescence Outil/Port

1. Un câble USB micro

2. Installer le logiciel « driver-atmel-bundle-7.0.712.exe »

que vous trouverez sur mon site :

http://users.polytech.unice.fr/~pmasson/Enseignement-arduino.htm

sous l’intitulé :

ATMEL USB driver pour pouvoir utiliser la carte Xplained mini

Pascal MASSON Electronique avec Arduino (version projection V45) 17

1.3. Présentation du logiciel

1. Généralités

http://arduino.cc/en/Main/Software

Pascal MASSON Electronique avec Arduino (version projection V45) 18

2.1. Objectifs

2. Commande d’une LED

1) Faire clignoter une LED

2) Apprendre à réaliser un montage

3) Apprendre à écrire un programme simple en langage arduino

4) Apprendre à dépanner le montage et le programme

Pascal MASSON Electronique avec Arduino (version projection V45) 19

2.2. Montage

2. Commande d’une LED

▪ Une diode ne laisse passer le courant que dans un sens. Elle peut aussi

recevoir ou émettre de la lumière

❑ Rappel sur la diode

Patte plus longue

Pascal MASSON Electronique avec Arduino (version projection V45) 20

2.2. Montage

2. Commande d’une LED

▪ Modélisation simple de la diode :

❑ Rappel sur la diode

Diode boquée : VD < VS et ID = 0

Diode passante : VD > VS et VD = VS + RS.ID

avec : VS = 1.77 V

RS = VD/ID = 4.4

cathode

anode

VD

ID

P

N▪ Vue schématique :

▪ Exemple de courbe :

Pascal MASSON Electronique avec Arduino (version projection V45) 21

2.2. Montage

2. Commande d’une LED

▪ On constate que pour la LED rouge, que si on fait passer un courant de

20 mA la tension à ses bornes vaut typiquement 2 V

❑ Polarisation de la LED

Pascal MASSON Electronique avec Arduino (version projection V45) 22

2.2. Montage

2. Commande d’une LED

▪ Le schéma électrique se résume à celui

étudié au début du cours sur la diode en

PeiP1 où EG représente une des sorties de

l’arduino

❑ Choix de la résistance

EGVD

RID

▪ Il faut déterminer la valeur de la résistance R et pour cela on peut se placer

dans les conditions typiques indiquées par le constructeur soit ID = 20 mA et

VD = 2 V

=−

= 150I

VER

D

DG

▪ Pour les valeurs extrêmes on trouve que R est compris entre 140 et 160 .

5 V 2 V

20 mA

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ La marge d’erreur est de 0.4 V ce qui est bien au dela de la tension aux bornes

de la résistance série de la diode :

23

2.2. Montage

2. Commande d’une LED

▪ Si on branche directement la diode directement sur le 5 V elle laissera

passer un courant de :

mA7304.4

77.15ID

−=DSSG I.RVE +=

▪ Ce courant grille la diode : donc on place toujours une résistance de

protection en série de la diode

❑ Choix de la résistance

mV8002.04I.R DS ==

Pascal MASSON Electronique avec Arduino (version projection V45) 24

2.2. Montage

2. Commande d’une LED

▪ Donc pour 150 il faut le code :

marron / vert / marron

❑ Choix de la résistance

▪ Il n’existe pas toutes les valeurs

possibles de résistances et il faut en

choisir une qui s’approche : 120, 150,

180, 220

▪ Il faut aussi vérifier la puissance à

dissiper

▪ Donc une résistance 1/4 de Watt suffit

W06.0I.RP 2D ==

Pascal MASSON Electronique avec Arduino (version projection V45) 25

2.2. Montage

2. Commande d’une LED

▪ Les sorties numériques de l’arduino peuvent aussi être configurées comme

des entrées (I/O) et cela devra être précisé lors de l’écriture du programme.

❑ Sortie/entrée numérique de l’arduino

Arduino

I/O

Générateur

de tension

Voltmètre

OUTPUT

INPUT

▪ Si l’I/O est configurée comme une sortie, un « interrupteur » bascule dans

l’arduino et sélectionne un générateur de tension (0 et 5 V) sinon

l’interrupteur sélectionne un voltmètre qui ne lit que les tensions 0 et 5 V.

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Les sorties peuvent délivrer ou absorber du courant mais il est préférable de

ne pas demander de courant au micro-controleur. Une I/O peut délivre 40 mA

26

2.2. Montage

2. Commande d’une LED

❑ Sortie/entrée numérique de l’arduino

▪ On choisit (arbitrairement) l’I/O n°2

Pascal MASSON Electronique avec Arduino (version projection V45) 27

2.2. Montage

2. Commande d’une LED

▪ Si la sortie n°2 est à 0, alors un courant circule et la diode s’allume

❑ Sortie/entrée numérique de l’arduino

0

ID

Pascal MASSON Electronique avec Arduino (version projection V45) 28

2.2. Montage

2. Commande d’une LED

❑ Sortie/entrée numérique de l’arduino

1

▪ Si la sortie n°2 est à 1 (donc 5 V), alors aucun courant circule et la diode est

éteinte

▪ Si la sortie n°2 est à 0, alors un courant circule et la diode s’allume

Pascal MASSON Electronique avec Arduino (version projection V45)

2.2. Montage

2. Commande d’une LED

❑ Circuit sur la plaque de test

▪ La plaque utilisée dans ce cours comporte 830

points de connexion dans lesquels on enfiche les

pattes des composants.

▪ Une partie des points de connexions sont reliés

entre eux

Pascal MASSON Electronique avec Arduino (version projection V45)

2.2. Montage

2. Commande d’une LED

▪ La plaque utilisée dans ce cours comporte 830

points de connexion dans lesquels on enfiche les

pattes des composants.

❑ Circuit sur la plaque de test

▪ Une partie des points de connexions sont reliés

entre eux

▪ Les montages que vous

allez réaliser devront être

soignés et sans risque de

courts-circuits.

BIEN

Pascal MASSON Electronique avec Arduino (version projection V45)

2.2. Montage

2. Commande d’une LED

▪ La plaque utilisée dans ce cours comporte 830

points de connexion dans lesquels on enfiche les

pattes des composants.

❑ Circuit sur la plaque de test

▪ Une partie des points de connexions sont reliés

entre eux

▪ Les montages que vous

allez réaliser devront être

soignés et sans risque de

courts-circuits.

PAS BIEN

Pascal MASSON Electronique avec Arduino (version projection V45)

2.2. Montage

2. Commande d’une LED

▪ La plaque utilisée dans ce cours comporte 830

points de connexion dans lesquels on enfiche les

pattes des composants.

❑ Circuit sur la plaque de test

▪ Une partie des points de connexions sont reliés

entre eux

▪ Les montages que vous

allez réaliser devront être

soignés et sans risque de

courts-circuits.

PAS BIEN DU TOUT

Pascal MASSON Electronique avec Arduino (version projection V45) 33

2.2. Montage

2. Commande d’une LED

❑ Montage final

Pascal MASSON Electronique avec Arduino (version projection V45) 34

2.3. Ecriture du programme

2. Commande d’une LED

// indique une ligne de commentaire

; indique la fin d’une instruction

❑ A ne pas oublier

❑ Structure d’un programme

// Nom du programme et description de ce qu’il fait

// Déclaration des constantes et variables

void setup(){ //début du programme

} // fin de définition du début de programme avec les variables

void loop() { // écriture de ce que fait le programme

} // indique la fin du programme qui recommencera au début

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Les nouvelles fonctions

35

2.3. Ecriture du programme

2. Commande d’une LED

▪ const : on définit une « variable » qui est en fait « constante »

▪ int : correspond à une variable de type « entier » dont la valeur est comprise

entre −32768 et 32767

▪ delay(X) : permet d’arrêter le déroulement du programme durant X

millisecondes

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Les nouvelles fonctions

36

2.3. Ecriture du programme

2. Commande d’une LED

▪ pinMode (X,Y) : permet de configurer une entrée/sortie (I/O) en sortie ou en

entrée. X correspond au numéro de l’I/O (2, 3, 4 ….) et Y au mode : INPUT ou

OUTPUT

▪ digitalWrite (X,Y) : permet d’affecter la valeur 0 ou 1 à la sortie numérique

X, Y prend la valeur LOW ou HIGH

Arduino

I/O

n°2

Générateur

de tension

Voltmètre

OUTPUT

INPUT

pinMode(2,OUTPUT)

digitalWrite(2,LOW)

0 V

0 V

0 V

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Les nouvelles fonctions

37

2.3. Ecriture du programme

2. Commande d’une LED

▪ pinMode (X,Y) : permet de configurer une entrée/sortie (I/O) en sortie ou en

entrée. X correspond au numéro de l’I/O (2, 3, 4 ….) et Y au mode : INPUT ou

OUTPUT

▪ digitalWrite (X,Y) : permet d’affecter la valeur 0 ou 1 à la sortie numérique

X, Y prend la valeur LOW ou HIGH

Arduino

I/O

n°2

Générateur

de tension

Voltmètre

OUTPUT

INPUT

pinMode(2,OUTPUT)

digitalWrite(2,HIGH)

0 V

5 V

5 V

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Les nouvelles fonctions

38

2.3. Ecriture du programme

2. Commande d’une LED

▪ pinMode (X,Y) : permet de configurer une entrée/sortie (I/O) en sortie ou en

entrée. X correspond au numéro de l’I/O (2, 3, 4 ….) et Y au mode : INPUT ou

OUTPUT

▪ digitalWrite (X,Y) : permet d’affecter la valeur 0 ou 1 à la sortie numérique

X, Y prend la valeur LOW ou HIGH

Arduino

I/O

n°2

Générateur

de tension

Voltmètre

OUTPUT

INPUT

pinMode(2,INPUT)

0 ou 5 V

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Algorithme

39

2.3. Ecriture du programme

2. Commande d’une LED

LED allumée

LED éteinte

Attente

Attente

I/O n°2 : OUTPUT

Delay : 1s

I/O n°2 : LOW

Delay : 0.2 s

I/O n°2 : HIGH

Pascal MASSON Electronique avec Arduino (version projection V45) 40

2.3. Ecriture du programme

2. Commande d’une LED

//LED qui clignote

const int led_rouge=2;

void setup(){

}

void loop() {

}

❑ Le code

LED allumée

LED éteinte

Attente

Attente

I/O n°2 : OUTPUT

Delay : 1s

I/O n°2 : LOW

Delay : 0.2 s

I/O n°2 : HIGH

Pascal MASSON Electronique avec Arduino (version projection V45) 41

2.3. Ecriture du programme

2. Commande d’une LED

//LED qui clignote

const int led_rouge=2;

void setup(){

pinMode(led_rouge, OUTPUT);

}

void loop() {

}

❑ Le code

LED allumée

LED éteinte

Attente

Attente

I/O n°2 : OUTPUT

Delay : 1s

I/O n°2 : LOW

Delay : 0.2 s

I/O n°2 : HIGH

Pascal MASSON Electronique avec Arduino (version projection V45) 42

2.3. Ecriture du programme

2. Commande d’une LED

LED allumée

LED éteinte

Attente

Attente

//LED qui clignote

const int led_rouge=2;

void setup(){

pinMode(led_rouge, OUTPUT);

}

void loop() {

digitalWrite(led_rouge, LOW);

delay(1000);

}

❑ Le code

I/O n°2 : OUTPUT

Delay : 1s

I/O n°2 : LOW

Delay : 0.2 s

I/O n°2 : HIGH

Pascal MASSON Electronique avec Arduino (version projection V45) 43

2.3. Ecriture du programme

2. Commande d’une LED

//LED qui clignote

const int led_rouge=2;

void setup(){

pinMode(led_rouge, OUTPUT);

}

void loop() {

digitalWrite(led_rouge, LOW);

delay(1000);

digitalWrite(led_rouge, HIGH);

delay(200);

}

❑ Le code

LED allumée

LED éteinte

Attente

Attente

I/O n°2 : OUTPUT

Delay : 1s

I/O n°2 : LOW

Delay : 0.2 s

I/O n°2 : HIGH

Pascal MASSON Electronique avec Arduino (version projection V45) 44

2.3. Ecriture du programme

2. Commande d’une LED

//LED qui clignote

void setup(){

pinMode(2, OUTPUT);

}

void loop() {

digitalWrite(2, LOW);

delay(1000);

digitalWrite(2, HIGH);

delay(200);

}

▪ Il n’est pas obligatoire de définir

une variable led_rouge et on peut

directement écrire digitalWrite(2,

LOW);

▪ Par contre si vous écrivez un

programme avec plusieurs

centaines de lignes et que vous

décidez de changer de sortie, il

faudra changer le numéro dans le

programme à chaque apparition

❑ Le code

Pascal MASSON Electronique avec Arduino (version projection V45) 45

2. Commande d’une LED

▪ L’ordinateur convertit le programme en une succession d’instructions que

l’arduino peut comprendre.

0000000 313a 3030 3030 3030 3030 3943 3634 3031

0000010 3030 3943 3734 3033 3030 3943 3734 3033

0000020 3030 3943 3734 3033 4230 0d36 3a0a 3031

0000030 3030 3031 3030 4330 3439 3337 3030 4330

0000040 3439 3337 3030 4330 3439 3337 3030 4330

0000050 3439 3337 3030 3439 0a0d 313a 3030 3230

0000060 3030 3030 3943 3734 3033 3030 3943 3734

0000070 3033 3030 3943 3734 3033 3030 3943 3734

0000080 3033 3830 0d34 3a0a 3031 3030 3033 3030

0000090 4330 3439 3337 3030 4330 3439 3337 3030

00000b0 3437 0a0d 313a 3030 3430 3030 3030 3943

00000c0 3134 3037 3031 3943 3734 3033 3030 3943

00000d0 3734 3033 3030 3943 3734 3033 4230 0d46

2.4. Compilation et programmation de l’arduino

❑ Compilation

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Envoi du programme à l’arduino

46

2.4. Compilation et programmation de l’arduino

2. Commande d’une LED

Compilation

Compilation

+ envoi à l’arduino

Rapport de fin de

compilation et

d’envoi à l’arduino

Pascal MASSON Electronique avec Arduino (version projection V45) 47

2.5. Déroulement du programme

2. Commande d’une LED

▪ On voit la LED clignoter avec une période de 1.2 s.

▪ Vous pouvez modifier la durée des temps haut et bas

▪ Vous pouvez aussi changer d’I/O

▪ Le programme étant dans la mémoire ROM de l’arduino, si on débranche la

carte et qu’on la rebranche, le programme recommence du début

Pascal MASSON Electronique avec Arduino (version projection V45) 48

2.6. Dépannage

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

▪ La diode est court-circuitée

▪ La diode est branchée à l’envers

▪ La diode a été branchée directement sur

le 5 V …. Il faut la remplacer

▪ Les pattes des composants sont coupées

trop court et ne touchent pas les pistes

métalliques de la plaque de test

Pascal MASSON Electronique avec Arduino (version projection V45) 49

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 50

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 51

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

▪ La diode est court-circuitée

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 52

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

▪ La diode est court-circuitée

▪ La diode est branchée à l’envers

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 53

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

▪ La diode est court-circuitée

▪ La diode est branchée à l’envers

▪ La diode a été branchée directement sur

le 5 V …. Il faut la remplacer

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 54

2. Commande d’une LED

❑ Les pannes fréquentes

▪ Le montage présente des coupures du

circuit au niveau de la plaquette (erreur

de branchement)

▪ Ce n’est pas la bonne I/O (on compte à

partir de 0)

▪ La diode est court-circuitée

▪ La diode est branchée à l’envers

▪ La diode a été branchée directement sur

le 5 V …. Il faut la remplacer

▪ Les pattes des composants sont coupées

trop court et ne touchent pas les pistes

métalliques de la plaque de test

BIEN

PAS BIEN DU TOUT

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 55

2. Commande d’une LED

▪ Pour vérifier si le montage fonctionne, il faut mettre 0 V sur l’entrée 2 et le

moyen le plus simple (sans passer par le programme) est de prendre le fil relié

à l’entrée 2 et de le mettre à la masse (GND)

❑ Validation du montage « sans arduino »

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 56

2. Commande d’une LED

▪ Le programme n’a pas été téléversé

▪ Le programme présente des erreurs et nous allons demander à l’arduino

d’envoyer des informations à l’ordinateur sur les étapes qu’il effectue

❑ Si ça ne fonctionne toujours pas

2.6. Dépannage

Pascal MASSON Electronique avec Arduino (version projection V45) 57

2.7. Communication par liaison série

▪ Il existe plusieurs moyens pour faire communiquer des systèmes

électroniques entre eux et la carte arduino est équipée d’une liaison série

(appelée aussi RS 232) de type full-duplex. Cela signifie que les 2 systèmes

connectés peuvent parler et écouter en même temps.

masse (qui sert de référence)

émission

réception

▪ La liaison série nécessite 3 fils :

▪ L’échange d’informations est géré par un

protocol qui définit le langage utilisé

2. Commande d’une LED

Pascal MASSON Electronique avec Arduino (version projection V45) 58

▪ Lorsque on demande l’envoi d’une information, elle est stockée en mémoire

jusqu’à ce qu’elle puisse être envoyée

▪ Lorsque la carte arduino reçoit une information, elle est stockée en mémoire

(buffer de réception) jusqu’à ce qu’on l’utilise. Les informations sont stockées

dans l’ordre d’arrivée et on ne peut les lire que caractère par caractère.

2.7. Communication par liaison série

2. Commande d’une LED

Pascal MASSON Electronique avec Arduino (version projection V45) 59

❑ Nouvelles fonctions

▪ Serial.begin(X) : définit la vitesse X (en bits par seconde) de transfert des

données. Cette fonction doit apparaitre dans le setup du programme. Il existe

plusieurs vitesse de transmission des données : 300, 1200, 2400, 4800, 9600,

19200, 38400, 57600, 115200, 230400, 250000

▪ Serial.print(X) : permet d’envoyer l’information X qui doit être entre si

c’est du texte

▪ Serial.println(X) : même action que print mais avec un retour à la ligne à

la fin du message

2.7. Communication par liaison série

2. Commande d’une LED

Pascal MASSON Electronique avec Arduino (version projection V45) 60

2. Commande d’une LED

❑ Programme final

60

//LED qui clignote

const int led_rouge=2; //constante de type entier

void setup(){ //début du programme

pinMode(led_rouge, OUTPUT); // l'I/O 2 est utilisée comme une sortie

Serial.begin(9600); // initialisation de la transmission série

} // fin de définition du début de programme avec les variables

void loop() { // écriture de ce que fait le programme

digitalWrite(led_rouge, LOW); // mettre la sortie 2 à l'état bas

Serial.println(" LOW "); //envoi de l’état de la diode à l'ordinateur

delay(1000); // ne rien faire pendant 1000 ms = 1s

digitalWrite(led_rouge, HIGH); // mettre la sortie 2 à l'état haut

Serial.println(" HIGH "); //envoi de l’état de la diode à l'ordinateur

delay(200); //attendre à nouveau

} // indique la fin du programme qui recommencera au début

2.7. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45) 61

2.8. Déroulement du programme

2. Commande d’une LED

▪ Ouvrir le moniteur série

▪ Vous devriez voir défiler l’état de la sortie 2

▪ La LED orange nommée TX (absente sur la carte Xplained) doit clignoter à

chaque envoi d’information

Pascal MASSON Electronique avec Arduino (version projection V45) 62

3.1. Objectif

3. LED + bouton poussoir

Allumer une LED lorsque l’on appuie sur un bouton et l’éteindre lorsqu’on

relache le bouton

Pascal MASSON Electronique avec Arduino (version projection V45) 63

3.2. Montage

❑ Fonctionnement du bouton poussoir

3. LED + bouton poussoir

▪ Il présente 4 pattes qui sont connectées 2 à 2. Les pattes sont électriquement

reliées entre elles lorsque l’on appuie sur le bouton

Schéma équivalent

Schéma simplifié

Présence d’une

encoche

Pascal MASSON Electronique avec Arduino (version projection V45) 64

3.2. Montage

❑ Détection de l’état du bouton poussoir

5 V

3. LED + bouton poussoir

▪ L’entrée I/O de l’arduino présente une impédance de 100 M et se comporte

donc comme l’entrée d’un oscilloscope mais avec une résistance plus grand

(oscilloscope = 1 M)

V7

R

5 V

0 V

Pascal MASSON Electronique avec Arduino (version projection V45) 65

3.2. Montage

5 V

3. LED + bouton poussoir

▪ L’entrée I/O de l’arduino présente une impédance de 100 M et se comporte

donc comme l’entrée d’un oscilloscope mais avec une résistance plus grand

(oscilloscope = 1 M)

Rint =

100 M

Arduino

V7

▪ On considère ici l’I/O n°7

▪ Quelle est la valeur de la résistance ?

▪ Quand on appuie pas sur le bouton la

valeur de la tension V7 s’obtient avec

un simple diviseur de tension

V55.RR

RV

int

int7

+=

R

5 V

0 V

❑ Détection de l’état du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 66

3.2. Montage

5 V

0 V

3. LED + bouton poussoir

▪ Quand on appuie sur le bouton poussoir, on force V7 à 0 V

Rint =

100 M

Arduino

V7

▪ Le courant qui circule dans la résistance R est donc de 0.5 mA ce qui est

faible par rapport au courant que peux délivrer le régulateur de tension qui

donne le 5 V

R

0 V

❑ Détection de l’état du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 67

3.2. Montage

❑ Montage complet avec l’arduino

3. LED + bouton poussoir

5 V0 V

5 V

Pascal MASSON Electronique avec Arduino (version projection V45) 68

3.2. Montage

❑ Montage complet avec l’arduino

3. LED + bouton poussoir

5 V0 V

0 V

Pascal MASSON Electronique avec Arduino (version projection V45) 69

3.2. Montage

3. LED + bouton poussoir

❑ Montage complet avec l’arduino

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ X==Y : donne la valeur HIGH si la stricte égalité est vérifiée sinon cela

donne la valeur LOW

▪ if(X) {YYYYYY} : permet d’effectuer les opérations YYYYYY si la condition

X est vérifiée

▪ else {ZZZZZZ} : sinon on effectue les opérations ZZZZZZ

70

3.3. Ecriture du programme

3. LED + bouton poussoir

❑ Les nouvelles fonctions

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ digitalRead(X) : Lit l’état LOW ou HIGH de l’I/O X déclarée comme une

entrée

71

3. LED + bouton poussoir

digitalRead(7) = 1

5 V0 V

5 V

❑ Les nouvelles fonctions

3.3. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ digitalRead(X) : Lit l’état LOW ou HIGH de l’I/O X déclarée comme une

entrée

72

3. LED + bouton poussoir

digitalRead(7) = 0

5 V0 V

0 V

❑ Les nouvelles fonctions

3.3. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45) 73

3. LED + bouton poussoir

// déclaration d’une variable globale qui

mémorise l’état du bouton

❑ Diagramme fonctionnel

3.3. Ecriture du programme

val=0

// lecture de l’état de l’entrée 7

LED allumée LED éteinte

val=?01

val=?

// condition sur la valeur de val

Pascal MASSON Electronique avec Arduino (version projection V45) 74

3. LED + bouton poussoir

val=1

val=0

// lecture de l’état de l’entrée 7

LED allumée LED éteinte

val=?01

val=?

// condition sur la valeur de val

❑ Diagramme fonctionnel

3.3. Ecriture du programme

// déclaration d’une variable globale qui

mémorise l’état du bouton

Pascal MASSON Electronique avec Arduino (version projection V45) 75

3. LED + bouton poussoir

val=0

val=0

// lecture de l’état de l’entrée 7

LED allumée LED éteinte

val=?01

val=?

// condition sur la valeur de val

❑ Diagramme fonctionnel

3.3. Ecriture du programme

// déclaration d’une variable globale qui

mémorise l’état du bouton

Pascal MASSON Electronique avec Arduino (version projection V45) 76

3. LED + bouton poussoir

//LED qui s’allume quand on appuie sur un bouton

const int led_rouge=2; //on définit une constante de type entier

const int bouton=7; //on définit une autre constante de type entier

int val=0; // variable globale qui mémorise l’état du bouton

void setup(){ //début du setup

pinMode(led_rouge, OUTPUT); // l'I/O 2 est utilisée comme une sortie

pinMode(bouton, INPUT); // l'I/O 7 est utilisée comme une entrée

digitalWrite(led_rouge, LOW); // allume la LED

delay(2000); // et attendre 2 s

} // fin du setup

void loop() { // début de la boucle infinie

val=digitalRead(bouton); // lecture de l’état de l’entrée 7

if (val==HIGH) {digitalWrite(led_rouge, HIGH);} // éteint la LED

else {digitalWrite(led_rouge, LOW);} // allume la LED

} // fin de la boucle infinie

❑ Le code de base

3.3. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45) 77

3. LED + bouton poussoir

❑ Le code + indication de démarrage

▪ Dans le setup, on ajoute deux lignes pour allumer la LED pendant 2 s

void setup(){

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000);

}

▪ Cela permettra de visualiser le démarrage du programme lorsque la carte

sera branchée

▪ La LED s’éteint dès la première la boucle infinie (sauf si on appuie sur le

bouton)

3.3. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45)

Envoi la valeur de val

78

3. LED + bouton poussoir

❑ Le code + moniteur série

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

Indique si on entre

dans le « if »

Indique si on entre

dans le « else »

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 79

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 80

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 81

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 82

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1 HIGH

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 83

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1 HIGH

1

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 84

3. LED + bouton poussoir

❑ Le code

▪ Il faut aussi penser au moniteur

série et donc ajouter la communication

série dans les parties setup et loop.

3.3. Ecriture du programme

1 HIGH

1 HIGH

1 HIGH

1 HIGH

0 LOW

0 LOW

0 LOW

0 LOW

1 HIGH

1 HIGH

const int led_rouge=2;

const int bouton=7;

int val=0;

void setup(){

Serial.begin(9600);

pinMode(led_rouge, OUTPUT);

pinMode(bouton, INPUT);

digitalWrite(led_rouge, LOW);

delay(2000); }

void loop() {

val=digitalRead(bouton);

Serial.print(val);

Serial.print(" ");

if (val==HIGH) {

digitalWrite(led_rouge, HIGH);

Serial.println(" HIGH");}

else {

digitalWrite(led_rouge, LOW);

Serial.println(" LOW ");}

}

Pascal MASSON Electronique avec Arduino (version projection V45) 85

4.1. Objectif

4. LED + bouton poussoir + mémoire

Ajouter une mémorisation au chapitre précédent : on appuie sur le bouton et

la LED s’allume et elle reste allumée quand on relâche le bouton. Même

raisonnement pour éteindre la LED.

Pascal MASSON Electronique avec Arduino (version projection V45) 86

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

val=1

ancien_val=1

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 87

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

val=1

ancien_val=1

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 88

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

Changement d’état

val=0

ancien_val=1

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 89

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

Pas de changement d’état

val=0

ancien_val=0

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 90

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

On relâche le bouton mais la

transition 0 vers 1 ne

changement pas l’état de la LED

val=1

ancien_val=0

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 91

t

I/O

n°7

0

5

▪ Pour cela on conserve en mémoire l’état dans lequel était le bouton poussoir

dans la boucle d’avant

val=1

ancien_val=1

Pas de changement d’état

▪ Nous allons créer une fonction qui permet de détecter quand l’utilisateur

vient d’appuyer sur le bouton : détection du passage 5 V à 0 V.

4.2. Détection d’un front descendant

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ (X==Y) && (Z==W) : donne la valeur HIGH si les strictes égalités sont

vérifiées sinon cela donne la valeur LOW. C’est la fonction ET.

92

4.3. Les nouvelles fonctions

4. LED + bouton poussoir + mémoire

Pascal MASSON Electronique avec Arduino (version projection V45) 93

// lecture de l’état de l’entrée 7

// changement de la valeur en mémoire

// ancienne valeur

de l’état

// entrée n°7

// sortie n°2

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

Pascal MASSON Electronique avec Arduino (version projection V45) 94

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=1

etat=1

ancien_val=1

Pascal MASSON Electronique avec Arduino (version projection V45) 95

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=0

etat=1

ancien_val=1

Pascal MASSON Electronique avec Arduino (version projection V45) 96

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=0

etat=0

ancien_val=1

Pascal MASSON Electronique avec Arduino (version projection V45) 97

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=0

etat=0

ancien_val=0

Pascal MASSON Electronique avec Arduino (version projection V45) 98

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=0

etat=0

ancien_val=0

Pascal MASSON Electronique avec Arduino (version projection V45) 99

val=1

etat=1

val=?

ancien_val=?

0

1

autre etat=1−etat

ancien_val=1

ancien_val =val

LED allumée LED éteinte

etat=?01

4. LED + bouton poussoir + mémoire

❑ Algorithme

4.4. Ecriture du programme

val=0

etat=0

ancien_val=0

Pascal MASSON Electronique avec Arduino (version projection V45)

//LED qui s’allume quand on appuie sur un bouton

const int led_rouge=2; //on définit une constante de type entier

const int bouton=7; //on définit une autre constante de type entier

int val=1; // déclaration d’une variable globale qui mémorise l’état du bouton

int etat=1;

int ancien_val=1;

void setup(){

pinMode(led_rouge, OUTPUT); // l'I/O 2 est utilisée comme une sortie

pinMode(bouton, INPUT); // l'I/O 7 est utilisée comme une sortie

digitalWrite(led_rouge, LOW); // allume la LED durant 1 s

delay(1000);

digitalWrite(led_rouge, HIGH); // éteint la LED durant 1 s

}

void loop() {

val=digitalRead(bouton); // lecture de l’état de l’entrée 7

if ((val==LOW)&&(ancien_val==HIGH)) {etat=1-etat;}

ancien_val=val;

if (etat==HIGH) {digitalWrite(led_rouge, HIGH);} // éteint la LED

else {digitalWrite(led_rouge, LOW);} }

100

4. LED + bouton poussoir + mémoire

❑ Code

4.4. Ecriture du programme

Pascal MASSON Electronique avec Arduino (version projection V45) 101

❑ Qu’est qu’un rebond ?

▪ Un bouton poussoir ne passe pas « proprement » de l’état ouvert à l’état

fermé.

▪ En effet, lorsque l’on appuie sur le bouton, les fils en métal que l’on met en

contact vont rebondir l’un sur l’autre avant de se stabiliser. On obtient ainsi

plusieurs fois la transition ouvert/fermé.

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

t

I/O

n°7

0

5

Pascal MASSON Electronique avec Arduino (version projection V45) 102

❑ Impact sur l’état de la LED

▪ Il existe 2 méthodes pour éliminer l’influence de ces rebonds : une méthode

logicielle et une méthode matérielle.

▪ L’arduino fonctionne à 16 MHz ce qui signifie que le programme peut

effectuer plusieurs fois la partie void loop() durant les rebonds et donc faire

comme si on avait appuyé plusieurs fois sur le bouton

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

▪ En conséquence, l’état allumé ou éteint de la LED est complètement

aléatoire par rapport à l’appui sur le bouton

Pascal MASSON Electronique avec Arduino (version projection V45) 103

❑ Solution logicielle

▪ Après avoir détecté la « première » transition du bouton poussoir, on peut

demander au programme de faire une pause pour permettre au bouton de se

stabiliser

t

I/O

n°7

0

5

Mise en pause

du programme

▪ Un delay de quelques milli-secondes est suffisant

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

if ((val==LOW)&&(ancien_val==HIGH)) {

etat=1−etat;

delay(20);}

Pascal MASSON Electronique avec Arduino (version projection V45) 104

❑ Solution matérielle

▪ On place un condensateur en parallèle avec le bouton

5 V

Ard

uin

o

V7

R

5 V

C

t

I/O

n°7

0

5

▪ Initialement le condensateur est chargé à la tension 5 V

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 105

▪ On place un condensateur en parallèle avec le bouton

5 V

Ard

uin

o

V7

R

0 V

C

t

I/O

n°7

0

5

▪ Initialement le condensateur est chargé à la tension 5 V

▪ Lorsque l’on appuie sur le bouton, il se décharge instantanément et la

tension à ses bornes devient nulle

❑ Solution matérielle

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 106

▪ Lors du premier rebond, le condensateur n’est plus court-circuité et il va se

charger via la résistance de 10 k donc avec une constante de temps RC

5 V

Ard

uin

o

V7

R

C

t

I/O

n°7

0

5

▪ Cette constante de temps doit être très longue par rapport au temps des

rebond

▪ Ainsi la tension V7 reste très proche de 0 V et elle est

assimilée par l’entrée à un état LOW

HIGH

LOWRC

❑ Solution matérielle

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 107

▪ Si on choisit un condensateur de 10 nF, la constante de temps a pour valeur

RC = 0.1 ms

5 V

Ard

uin

o

V7

R

C

t

I/O

n°7

0

5

HIGH

LOWRC

❑ Solution matérielle

4. LED + bouton poussoir + mémoire

4.5. Problème de rebond du bouton poussoir

Pascal MASSON Electronique avec Arduino (version projection V45) 108

5.1. Présentation des entrées analogiques

▪ L’arduino possède 6 entrées analogiques numérotées A0 à A5. Elles sont

numérotées PC0 à PC5 sur la carte Xplained Mini.

5. Entrées analogiques

▪ Le fonctionnement de l’arduino étant numérique, les entrées vont convertir

le signal analogique en signal numérique

▪ Il est possible de modifier la tension de référence de la conversion en

appliquant sa nouvelle valeur sur l’entrée AREF

AREF

▪ L’impédance d’entrée des entrées analogiques est de 100 M

Pascal MASSON Electronique avec Arduino (version projection V45) 109

5.2. Conversion analogique/digitale

▪ Il existe plusieurs techniques plus ou moins rapides pour convertir un signal

analogique en signal numérique

5. Entrées analogiques

▪ Il y a par exemple les convertisseurs à simple rampe, Sigma Delta et Flash

❑ Echantillonnage

❑ Méthode de conversion

t0

5

▪ Périodiquement (notion de fréquence d’échantillonnage, FP) la tension est

mesurée et convertie en mots binaires

0011 01110110

0001

1/Fp

Pascal MASSON Electronique avec Arduino (version projection V45) 110

5.3. Cas de l’arduino

5. Entrées analogiques

▪ La fréquence d’échantillonnage est de 10 kHz donc la tension que l’on doit

convertir ne doit pas varier plus vite que cela.

▪ La conversion se fait sur 10 bits ce qui signifie qu’il y a 1024 combinaisons

pour coder la tension qui doit être comprise entre 0 et 5 V (sauf si on change la

référence).

❑ Données clés

Pascal MASSON Electronique avec Arduino (version projection V45)

Plage de variation qui

ne change pas la

valeur numérisée

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

0

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est : 5V q 4.89mV

1023 = =

q = 4.89 mV

t (s)

00

q

V (

V)

Pascal MASSON Electronique avec Arduino (version projection V45)

Plage de variation qui

ne change pas la

valeur numérisée

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

0

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

q = 4.89 mV

t (s)

00

q

V (

V)

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

Plage de variation qui

ne change pas la

valeur numérisée

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

0

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

t (s)

00

q

V (

V)

q = 4.89 mV

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

Plage de variation qui

ne change pas la

valeur numérisée

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

t (s)

00

0 q

V (

V)

q = 4.89 mV

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

t (s)

00

0 q 2q

2 2qV

(V

)

2q = 9.77 mV

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

t (s)

00

V (

V)

0 2q

2 2q

3

3q

3q

q

3q = 14.6 mV

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

q1

0

▪ Le minimum de variation (appelé quantum et noté « q ») de tension que l’on

peut détecter est :

t (s)

00

V (

V)

0 2q

2 2q

3

3q

3q

q

1023

1022

55−q

5

5−q

5V q 4.89mV

1023 = =

Pascal MASSON Electronique avec Arduino (version projection V45)

5.3. Cas de l’arduino

5. Entrées analogiques

❑ Visualisation de la quantification

Nu

m

V (V)

q1

0

t (s)

00

V (

V)

0 2q

2 2q

3

3q

3q

q

1023

1022

55−q

5

5−q

▪ Pour une tension de 3 V, on obtient le nombre suivant :

3 V Num = 3 = 204.6 3 6131023

5

Pascal MASSON Electronique avec Arduino (version projection V45) 119

▪ Remarque : il n’est pas nécessaire de déclarer l’utilisation d’une entrée

analogique dans la partie setup. En effet et contrairement aux I/O, une entrée

analogique ne peut pas fonctionner comme une sortie et il n’y a pas

« d’interrupteur » à faire basculer.

5.4. Les nouvelles fonctions

▪ analogRead(X) : lit la tension sur l’entrée X (X allant de 0 à 5) et la

convertit en un nombre compris entre 0 et 1023

▪ Le nombre obtenu est un entier (INT) mais on peut le sauver en tant que

nombre à virgule en ayant au préalable défini une variable flottante :

float tension_num=0; tension_num=analogRead(0);

▪ Il est possible de faire des calculs avec la fonction analogRead mais au moins

un des nombres utilisés doit comporter une virgule

float tension=0; tension=analogRead(0)/204.6;

int tension_num=0; tension_num=analogRead(0);

5. Entrées analogiques

Pascal MASSON Electronique avec Arduino (version projection V45) 120

5.5. Utilisation d’un potentiomètre

▪ Un potentiomètre sert à modifier la valeur d’une résistance ou à prélever

une partie d’une tension (pont diviseur de tension)

▪ Utilisation d’un potentiomètre de 10 k alimenté par une tension de 5 V :

V

RA0

0V

5V

A0

5. Entrées analogiques

5 V

Pascal MASSON Electronique avec Arduino (version projection V45) 121

5.5. Utilisation d’un potentiomètre

▪ Un potentiomètre sert à modifier la valeur d’une résistance ou à prélever

une partie d’une tension (pont diviseur de tension)

▪ Utilisation d’un potentiomètre de 10 k alimenté par une tension de 5 V :

5 k A0 = 2.5 V

5. Entrées analogiques

5 V

5 k

Pascal MASSON Electronique avec Arduino (version projection V45) 122

5.5. Utilisation d’un potentiomètre

▪ Un potentiomètre sert à modifier la valeur d’une résistance ou à prélever

une partie d’une tension (pont diviseur de tension)

▪ Utilisation d’un potentiomètre de 10 k alimenté par une tension de 5 V :

2 k A0 = 1 V

5. Entrées analogiques

5 V

8 k

Pascal MASSON Electronique avec Arduino (version projection V45) 123

5.5. Utilisation d’un potentiomètre

▪ Un potentiomètre sert à modifier la valeur d’une résistance ou à prélever

une partie d’une tension (pont diviseur de tension)

▪ Utilisation d’un potentiomètre de 10 k alimenté par une tension de 5 V :

5. Entrées analogiques

0 k A0 = 0 V

5 V

10 k

Pascal MASSON Electronique avec Arduino (version projection V45) 124

5.5. Utilisation d’un potentiomètre

▪ Exemple de câblage :

5. Entrées analogiques

▪ Principale erreur commise :

5 k A0 = 0 V

5 V

5 k

Pascal MASSON Electronique avec Arduino (version projection V45) 125

5.5. Utilisation d’un potentiomètre

5. Entrées analogiques

▪ Principale erreur commise :

10 k A0 = 0 V

5 V

0 k court-circuit + fumée

Pascal MASSON Electronique avec Arduino (version projection V45) 126

6.1. Présentation de l’écran LCD

▪ L’écran LCD que nous utilisons est un 162 ce qui signifie qu’il est constitué

de 2 lignes de 16 caractères

▪ Chaque caractère est constitué d’un bloc de

8 5 pixels

▪ Un décodeur de caractères est déjà intégré

à l’écran et permettra d’afficher ce qui sera

envoyé par l’arduino et de le garder en

mémoire

▪ Les instructions sont données en mode

parallèle et donc cet écran nécessite

l’utilisation de plusieurs sorties de l’arduino

6. Ecran LCD 162

Pascal MASSON Electronique avec Arduino (version projection V45) 127

6.2. Les entrées de l’écran

▪ Voici la description des entrées de l’écran

Masse (0 V)

5 VCette tension permet de régler le

contraste. Comme sa valeur dépend de la

personne qui regarde cet écran, on utilise

un potentiomètre de 5 k connecté entre

0 V et 5 V

6. Ecran LCD 162

Pascal MASSON Electronique avec Arduino (version projection V45) 128

6.2. Les entrées de l’écran

▪ Voici la description des entrées de l’écran

On sélectionne le type de message qu’on

envoie. High : envoi de données. Low :

envoi d’instructions

High : on lit la mémoire de l’écran. Low :

on écrit dans la mémoire de l’écran. Dans

ce cours on ne fait qu’écrire dans la

mémoire donc on connecte cette entrée à

la masse (0 V)

L’écran prend en compte les données

lorsque cette entrée passe de l’état haut à

l’état bas.

6. Ecran LCD 162

Pascal MASSON Electronique avec Arduino (version projection V45) 129

6.2. Les entrées de l’écran

▪ Voici la description des entrées de l’écran

Pour écrire les caractères il est

nécessaire de donner 8 bits (Data0 à

Data7) mais pour les caractères usuels,

4 bits sont suffisants (Data4 à Data7)

Alimentation du rétro-éclairage : 5 V

Alimentation du rétro-éclairage : 0 V

6. Ecran LCD 162

Pascal MASSON Electronique avec Arduino (version projection V45) 130

6.3. Librairie et fonctions de l’écran

▪ Des fonctions ont déjà été développées pour gérer cet écran et elles sont

présentes dans ce que l’on appelle une « bibliothèque ». Celle qui nous

concerne s’appelle « LiquidCrystal » et il sera nécessaire de l’appeler en début

de programme avec la fonction :

▪ On peut aussi aller chercher cette librairie dans : croquis => importer

bibliothèque => LiquidCrystal

▪ Il faut initialiser les commandes en indiquant les sorties utilisées

#include <LiquidCrystal.h>

LiquidCrystal NOM(rs, enable, D4, D5, D6, D7)

▪ Il faut initialiser le nombre de colonnes et de lignes de notre écran

NOM.begin(X, Y)

Pour l’écran du cours nous avons X = 16 et Y = 2

6. Ecran LCD 162

lcd.begin(16, 2)

Pascal MASSON Electronique avec Arduino (version projection V45) 131

▪ Pour imprimer le texte ABC, on écrit :

NOM.print(ABC)

6. Ecran LCD 162

6.3. Librairie et fonctions de l’écran

▪ Pour commencer à écrire un texte à une colonne (X) et une ligne (Y) données,

il faut d’abord écrire :

NOM.setCursor(X, Y)

lcd.setCursor(3, 1)

Colonne 3

Ligne 1

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Pour faire disparaître le texte sans l’effacer de la mémoire :

▪ Pour faire ré-apparaître le texte :

NOM.clear()

NOM.display()

▪ Pour effacer un texte de la mémoire de l’écran on écrit :

NOM.noDisplay()

132

6. Ecran LCD 162

6.3. Librairie et fonctions de l’écran

▪ Et pour arrêter son clignotement :

NOM.blink()

▪ On peut faire clignoter le curseur en écrivant avant :

NOM.noBlink()

Pascal MASSON Electronique avec Arduino (version projection V45) 133

6.4. Exemple de montage

6. Ecran LCD 162

▪ Dans cet exemple nous déclarons :

LiquidCrystal NOM(2, 3, 4, 5, 6, 7)

Pascal MASSON Electronique avec Arduino (version projection V45) 134

6.5. Exemple de programme

// affichage d'un texte sur un LCD

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // initialise les commandes avec les n° de broches

void setup() {

lcd.begin(16, 2); // initialiser le nombre de colonnes et de lignes

lcd.print("Bonjour");

lcd.setCursor(0, 1); //le curseur se positionne à la 1ère colonne, 2ième ligne

lcd.print("je suis en PeiP2");

}

void loop() {

}

6. Ecran LCD 162

Pascal MASSON Electronique avec Arduino (version projection V45) 135

▪ La modulation de largeur d'impulsions est une technique qui permet

d’obtenir des signaux continus à partir d’un signal à 2 états.

7.1. Notion de PWM

7. Pulse Width Modulation (PWM)

t

I/O

0

5V

TP t

Vou

t

0

5V

arduino filtreVoutI/O

Pascal MASSON Electronique avec Arduino (version projection V45) 136

▪ La modulation de largeur d'impulsions est une technique qui permet

d’obtenir des signaux continus à partir d’un signal à 2 états.

7.1. Notion de PWM

7. Pulse Width Modulation (PWM)

t

I/O

0

5V

TP t

Vou

t

0

5V

arduino filtre

Pascal MASSON Electronique avec Arduino (version projection V45) 137

▪ La modulation de largeur d'impulsions est une technique qui permet

d’obtenir des signaux continus à partir d’un signal à 2 états.

7.1. Notion de PWM

7. Pulse Width Modulation (PWM)

t

Vou

t

0

5V

arduino filtre

t

I/O

0

5V

TP

Pascal MASSON Electronique avec Arduino (version projection V45) 138

▪ Les usages les plus fréquents sont :

7.1. Notion de PWM

7. Pulse Width Modulation (PWM)

✓ conversion numérique-analogique

✓ amplificateurs de classe D, en audio

✓ alimentations à découpage

✓ variateurs de vitesse

✓ transmission de données

✓ modifier la luminosité d’une LED

Pascal MASSON Electronique avec Arduino (version projection V45) 139

▪ Les I/O qui permettent d’utiliser les PWM sont précédées du signe « »

7.2. Sorties compatibles PWM de l’arduino

▪ Il s’agit des I/O 3, 5, 6, 9, 10 et 11

▪ La fréquence d’horloge du PWM est

de 488 Hz sauf pour les I/O n°5 et 6

qui ont une fréquence de 976 Hz.

7. Pulse Width Modulation (PWM)

Pascal MASSON Electronique avec Arduino (version projection V45) 140

7. Pulse Width Modulation (PWM)

▪ analogWrite(X, Y) : c’est la fonction dédiée au PWM de l’arduino. Il faut

spécifier l’I/O X ainsi que la valeur du rapport cyclique Y. Y doit avoir une

valeur comprise entre 0 et 255. Y = 0 : la sortie est toujours à 0. Y = 255 : la

sortie est toujours à 5 V.

7.3. La nouvelle fonction

analogWrite(6, 0)

t

I/O

0

5

TP

Pascal MASSON Electronique avec Arduino (version projection V45) 141

7. Pulse Width Modulation (PWM)

▪ analogWrite(X, Y) : c’est la fonction dédiée au PWM de l’arduino. Il faut

spécifier l’I/O X ainsi que la valeur du rapport cyclique Y. Y doit avoir une

valeur comprise entre 0 et 255. Y = 0 : la sortie est toujours à 0. Y = 255 : la

sortie est toujours à 5 V.

7.3. La nouvelle fonction

analogWrite(6, 85)

t

I/O

0

5V

TPTP/3

Pascal MASSON Electronique avec Arduino (version projection V45) 142

7. Pulse Width Modulation (PWM)

▪ analogWrite(X, Y) : c’est la fonction dédiée au PWM de l’arduino. Il faut

spécifier l’I/O X ainsi que la valeur du rapport cyclique Y. Y doit avoir une

valeur comprise entre 0 et 255. Y = 0 : la sortie est toujours à 0. Y = 255 : la

sortie est toujours à 5 V.

7.3. La nouvelle fonction

analogWrite(6, 128)

t

I/O

0

5

TPTP/2

Pascal MASSON Electronique avec Arduino (version projection V45) 143

7. Pulse Width Modulation (PWM)

▪ analogWrite(X, Y) : c’est la fonction dédiée au PWM de l’arduino. Il faut

spécifier l’I/O X ainsi que la valeur du rapport cyclique Y. Y doit avoir une

valeur comprise entre 0 et 255. Y = 0 : la sortie est toujours à 0. Y = 255 : la

sortie est toujours à 5 V.

7.3. La nouvelle fonction

analogWrite(6, 170)

t

I/O

0

5

TP2TP/3

Pascal MASSON Electronique avec Arduino (version projection V45) 144

7. Pulse Width Modulation (PWM)

▪ analogWrite(X, Y) : c’est la fonction dédiée au PWM de l’arduino. Il faut

spécifier l’I/O X ainsi que la valeur du rapport cyclique Y. Y doit avoir une

valeur comprise entre 0 et 255. Y = 0 : la sortie est toujours à 0. Y = 255 : la

sortie est toujours à 5 V.

7.3. La nouvelle fonction

analogWrite(6, 255)

t

I/O

0

5

TP

Pascal MASSON Electronique avec Arduino (version projection V45) 145

7. Pulse Width Modulation (PWM)

7.3. La nouvelle fonction

▪ for (X=a; X<b; X++) {YYYYYY} : cela s’appelle une boucle FOR et permet

d’exécuter plusieurs fois les opérations YYYYYY. Pour compter les boucles, on

utilise la variable X que l’on initialise à la valeur « a » et que l’on incrémente

de 1 à chaque début de boucle (X++). On effectue la boucle tant que X est

inférieure à « b »

for (i=0; i<=255; i++) {

analogWrite(led_rouge, i);

delay(10); }

▪ long : en raison de la longueur du chiffre renvoyé par la fonction millis(), il

faut stocker cette valeur dans une variable de type long. Cette variable est de

type entier et va de −2 147 483 648 à 2 147 483 647.

▪ unsigned : pour arriver aux 50 jours, on enlève le signe de la variable long.

Dans ce cas unsigned long va de 0 à 4 294 967 295.

Pascal MASSON Electronique avec Arduino (version projection V45) 146

7. Pulse Width Modulation (PWM)

7.3. La nouvelle fonction

▪ millis() : la carte arduino est dotée d’un chronomètre qui

enregistre le temps écoulé depuis l’allumage de la carte. Le

temps est obtenu en milliseconde et le temps maximum

enregistrable est 50 jours soit 4.32 109 ms. Si le temps

maximum n’est pas suffisant, il est possible de connecter à

l’arduino une horloge extérieure alimentée par une pile.

chrono=millis(); //on mémorise la valeur du chronomètre

……………………………

if ((millis()-chrono)>500) { // durant plus de 500

etat--; // on enlève 1 à la variable « état »

delay(20);} // on règle la sortie de la boucle if

Pascal MASSON Electronique avec Arduino (version projection V45) 147

▪ Dans cette exemple, on utilise une propriété de l’œil appelé « persistance

rétinienne »

7.4. Exemple1 : luminosité d’une LED

▪ Si on allume et on éteint une LED très rapidement, on la verra toujours

éclairée. Si on augmente le temps durant lequel la LED est allumée, on verra

la LED plus brillante.

7. Pulse Width Modulation (PWM)

LED très lumineuse LED peu lumineuse

t

I/O

0

5

TP tI/

O0

5

TP

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Principe de fonctionnement

148

▪ Un signal analogique modifie le rapport cyclique d’un signal PWM

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

Modulation

t

Sig

nal

t

Voix

antenne

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Principe de fonctionnement

149

▪ Un signal analogique modifie le rapport cyclique d’un signal PWM

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

Modulation

t

Sig

nal

t

Voix

antenne

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Principe de fonctionnement

150

▪ Un signal analogique modifie le rapport cyclique d’un signal PWM

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

Modulation

t

Sig

nal

t

Voix

antenne

Pascal MASSON Electronique avec Arduino (version projection V45)

❑ Principe de fonctionnement

151

▪ Un signal analogique modifie le rapport cyclique d’un signal PWM

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

Modulationantenne

t

Voix

Faible

variationSig

nal

Pascal MASSON Electronique avec Arduino (version projection V45)

tV

oix

152

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

Modulation filtreantennes

❑ Principe de fonctionnement

▪ Un signal analogique modifie le rapport cyclique d’un signal PWM

t

Voix

Faible

variationSig

nal

Pascal MASSON Electronique avec Arduino (version projection V45) 153

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Décomposition en série de Fourrier

-4

-2

0

2

4

0 0.001 0.002 0.003

F

A

F0

▪ Un signal carré se décompose en

somme de sinusoïdes d’amplitudes et

de fréquences différentes

0

Pascal MASSON Electronique avec Arduino (version projection V45) 154

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Décomposition en série de Fourrier

-4

-2

0

2

4

0 0.001 0.002 0.003

F

A

F0 3F0

▪ Un signal carré se décompose en

somme de sinusoïdes d’amplitudes et

de fréquences différentes

0

Pascal MASSON Electronique avec Arduino (version projection V45) 155

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Décomposition en série de Fourrier

▪ Un signal carré se décompose en

somme de sinusoïdes d’amplitudes et

de fréquences différentes

-4

-2

0

2

4

0 0.001 0.002 0.003

F

A

F0 3F0 5F00

Pascal MASSON Electronique avec Arduino (version projection V45) 156

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Décomposition en série de Fourrier

▪ Un signal carré se décompose en

somme de sinusoïdes d’amplitudes et

de fréquences différentes

-4

-2

0

2

4

0 0.001 0.002 0.003

F

A

F0 3F0 5F0

▪ Il faut ajouter une valeur moyenne

-4

-2

0

2

4

0 0.001 0.002 0.003

0

6

8

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Le filtre ne doit laisser passer que la composante continue du signal. Seul le

filtre passe bas peut réaliser une telle fonction

157

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Fréquence de coupure du filtre

filtre

RC

en

tré

e

so

rti

e

t

Sig

nal

t

Sig

nal

F

Am

pli

tud

e

F0 3F0 5F00FC

F

Am

pli

tud

e

F0 3F0 5F00FC

Filtre PB

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Le filtre ne doit laisser passer que la composante continue du signal. Seul le

filtre passe bas peut réaliser une telle fonction

158

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Fréquence de coupure du filtre

filtre

RC

en

tré

e

so

rti

e

t

Sig

nal

t

Sig

nal

F

Am

pli

tud

e

F0 3F0 5F00FC

F

Am

pli

tud

e

F0 3F0 5F00FC

Filtre PB

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Le filtre ne doit laisser passer que la composante continue du signal. Seul le

filtre passe bas peut réaliser une telle fonction

159

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Fréquence de coupure du filtre

filtre

RC

en

tré

e

so

rti

e

t

Sig

nal

t

Sig

nal

F

Am

pli

tud

e

F0 5F00 F

Am

pli

tud

e

3F0 5F00FC

Filtre PB

3F0 F0FC

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Le filtre ne doit laisser passer que la composante continue du signal. Seul le

filtre passe bas peut réaliser une telle fonction

160

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Fréquence de coupure du filtre

filtre

RC

en

tré

e

so

rti

e

t

Sig

nal

t

Sig

nal

F

Am

pli

tud

e

F0 5F00 F

Am

pli

tud

e

3F0 5F00

Filtre PB

3F0 F0FC FC

FC << F0

Pascal MASSON Electronique avec Arduino (version projection V45) 161

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Bilan fréquence / temps

F (log)

Am

pli

tud

e (

db)

F0

PWM

FC

Filtre

PB

▪ Il faut ajuster la fréquence de coupure, FC, (ou la constante de temps RC) du

filtre pour que la composante alternative du signal PWM (de fréquence F0) ne

passe pas

▪ La fréquence du filtre doit être beaucoup plus faible que celle du PWM pour

que l’ondulation résiduelle soit négligeable

▪ Le filtre ne doit laisser passer que la composante continue du signal. Seul le

filtre passe bas peut réaliser une telle fonction

FC << F0

Pascal MASSON Electronique avec Arduino (version projection V45) 162

7.5. Exemple2 : modulation/démodulation

7. Pulse Width Modulation (PWM)

❑ Bilan fréquence / temps

F (log)

Am

pli

tud

e (

db)

F0

PWM

FSmax

Signal

analogique

FC

Filtre

PB

▪ Cette fois, le filtre doit conserver intégralement les variations du signal

analogique, donc la fréquence de coupure du filtre doit être très supérieure à

la fréquence maximale du signal analogique, FSmax :

FSmax << FC

▪ En d’autres termes, il faut laisser le temps au condensateur de se charger et

de se décharger pour suivre les variations de la valeur moyenne du signal

PWM donc de suivre les variations du signal analogique

Pascal MASSON Electronique avec Arduino (version projection V45) 163

7.6. Modification de la fréquence du PWM

7. Pulse Width Modulation (PWM)

❑ Fréquences par défaut

▪ La fréquence du PWM est de 488 Hz sur les IO n+ 3, 9, 10 et 11 et de 976 Hz

sur les IO n°5 et 6

❑ Notion de Timer

▪ C’est un registre qui s’incrémente à chaque impulsion du signal d’horloge

▪ Ce mécanisme est indépendant du programme et de son éventuel arrêt avec

par exemple la fonction delay(X)

▪ Il est donc capable de compter le temps qui s’écoule

▪ L’arduino possède 3 Timers et leur modification peut entrainer un mauvais

fonctionnement de certaines fonctions et bibliothèques comme : delay, millis,

servo

Pascal MASSON Electronique avec Arduino (version projection V45) 164

7.6. Modification de la fréquence du PWM

7. Pulse Width Modulation (PWM)

❑ Les Timers de l’arduino UNO

▪ Le timer0 est codé sur 8 bits et compte de 0 à 255. Il est utilisé par les

fonctions delay, millis et micro. Il permet de contrôler le PWM des IO n° 5

et 6

▪ Le timer1 est codé sur 16 bits et compte de 0 à 65535. Il est utilisé par la

bibliothèque servo. Il permet de contrôler le PWM des IO n° 9 et 10

▪ Le timer2 est codé sur 8 bits et compte de 0 à 255. Il est utilisé par la

fonction Tone. Il permet de contrôler le PWM des IO n° 3 et 11

Pascal MASSON Electronique avec Arduino (version projection V45) 165

7.6. Modification de la fréquence du PWM

7. Pulse Width Modulation (PWM)

❑ Fréquences de bases et division de fréquence

▪ La fréquence de base est de :

➢ 31250 Hz pour les IO n° 3, 9, 10 et 11

➢ 62500 Hz pour les IO n° 5 et 6

▪ La fréquence du PWM est égale à la fréquence de base divisée par un certain

nombre. Ces diviseurs sont

➢ 1, 8, 64, 256 et 1024 pour les IO n° 5, 6, 9 et 10

➢ 1, 8, 32, 64, 128, 256 et 1024 pour les IO n° 3 et 11

▪ Par exemple sur l’IO n° 3, il est possible d’obtenir les fréquences :

➢ 31250 / 8 3906 Hz

➢ 31250 / 64 488 Hz

➢ 31250 / 1024 30.5 Hz

Pascal MASSON Electronique avec Arduino (version projection V45) 166

7.6. Modification de la fréquence du PWM

7. Pulse Width Modulation (PWM)

❑ Fonction pour modifier les fréquences

▪ La division de la fréquence passe par le modification de la valeur de certains

registres

▪ Pour simplifier cela, il est préférable d’intégrer la fonction setPwmFrequency

du site officiel arduino : playground.arduino.cc/Code/PwmFrequency

▪ On peut diviser la fréquence du signal PWM de l’IO n°3 par 1024 en écrivant

setPwmFrequency(3, 1024);

▪ Evidement cela changera aussi le signal PWM de l’IO n°11 qui utilise le

même Timer

Pascal MASSON Electronique avec Arduino (version projection V45) 167

7.6. Modification de la fréquence du PWM

7. Pulse Width Modulation (PWM)

❑ Résumé

A = 1, 8, 64, 256 et 1024 B = 1, 8, 32, 64, 128, 256 et 1024

3

5

6

9

10

11

Timers Fréquences Div Perturbe

IO 0 1 2 31250 62500 A B delay millis servotonemicro

PWM

Pascal MASSON Electronique avec Arduino (version projection V45) 168

8.1. Mesure d’une distance par le ultra-son

8. Mesure de distances

▪ Elle est réfléchie sur l’obstacle revient sur un autre (ou le même) haut-

parleur piézo-électrique.

▪ En prenant en compte la vitesse de propagation dans l’air (environ 340 m/s),

le temps que met l’onde pour faire l’aller-retour donne la distance de l’objet.

▪ Une onde acoustique est envoyée avec un haut-parleur piézo-électrique.

Pascal MASSON Electronique avec Arduino (version projection V45) 169

8.2. Présentation du module HC-SR04

❑ Matériel

▪ Il existe plusieurs modules qui permettent de mesurer une distance et nous

utiliserons le HC-SR04.

▪ Il comprend 2 haut-parleurs et l’onde

utilisée a une fréquence de 40 kHz.

▪ L’électronique de gestion des haut-

parleurs et de mesure de la distance est déjà

intégrée au module

8. Mesure de distances

Pascal MASSON Electronique avec Arduino (version projection V45) 170

8.2. Présentation du module HC-SR04

❑ Matériel

▪ Il y a 3 entrées dans le module : VCC, GND et Trig

8. Mesure de distances

▪ Il y a 1 sortie : Echo

Pascal MASSON Electronique avec Arduino (version projection V45) 171

8.2. Présentation du module HC-SR04

❑ Fonctionnement

8. Mesure de distances

▪ Pour déclencher une mesure il faut appliquer une impulsion d’au moins 10

µs sur l’entrée Trig

▪ Le module envoie alors 8 impulsions sonores

▪ On obtient en sortie (Echo) une impulsion dont la longueur correspond au

temps que mettent les 8 impulsions pour faire l’aller/retour

▪ Il est préférable d’attendre 60 ms avant de demander une nouvelle mesure

Trig

Haut parleur T

Haut parleur R

Echo

T

T

Pascal MASSON Electronique avec Arduino (version projection V45) 172

8.2. Présentation du module HC-SR04

❑ Exemple de montage

8. Mesure de distances

INPUT

OUTPUT

Pascal MASSON Electronique avec Arduino (version projection V45) 173

8.2. Présentation du module HC-SR04

❑ Fonctionnement

8. Mesure de distances

▪ Pour déclencher une mesure il faut appliquer une impulsion d’au moins 10

µs sur l’entrée Trig

▪ Le module envoie alors 8 impulsions sonores

▪ On obtient en sortie (Echo) une impulsion dont la longueur correspond au

temps que mettent les 8 impulsions pour faire l’aller/retour

▪ Il est préférable d’attendre 60 ms avant de demander une nouvelle mesure

Trig

Haut parleur T

Haut parleur R

Echo

T

T

Pascal MASSON Electronique avec Arduino (version projection V45) 174

8.2. Présentation du module HC-SR04

❑ Détermination de la distance

▪ En une 1 s, le son parcours 340 m donc en 1 µs il parcourt 0.034 cm

8. Mesure de distances

Echo

temps

▪ On en déduit la distance en cm :

temps.017.0034.02

tempscetandis ==

Pascal MASSON Electronique avec Arduino (version projection V45) 175

8.3. Les nouvelles fonctions

8. Mesure de distances

▪ delayMicroseconds(X) : permet de bloquer le déroulement du programme

durant X µs

▪ pulseIn(X,Y) : retourne la durée d’une impulsion Y sur l’I/O X. Le temps

retourné est en µs et va de 10 µs à 3 mn. Si Y = HIGH alors on attend une

impulsion LOW-HIGH-LOW. Si Y = LOW, on attend une impulsion HIGH-

LOW-HIGH. Le temps d’attente pour l’apparition de l’impulsion est de 1s. Au-

delà de ce temps, la fonction retourne la valeur 0.

digitalWrite(trig, HIGH); // génération de l'impulsion Trig de 10 µs

delayMicroseconds(10);

digitalWrite(trig, LOW);

lecture_echo = pulseIn(echo, HIGH); // lecture de la longueur temporelle de l'impulsion Echo

Pascal MASSON Electronique avec Arduino (version projection V45) 176

8.3. Les nouvelles fonctions

8. Mesure de distances

▪ pulseIn(X,Y,Z) : Z permet de modifier le temps (en µs) d’attente de

l’apparition de l’impulsion. Si le temps d’attente est dépassé, la valeur

retournée est 0

Pascal MASSON Electronique avec Arduino (version projection V45) 177

8.4. Librairie du HC-SR04

❑ Nouvelles fonctions

8. Mesure de distances

▪ NewPing sonar(X,Y,Z) : initialise l’utilisation du sonar. X = trigger, Y =

echo, Z est la distance maximale à mesurer (en cm). Il n’est pas obligatoire de

donner une valeur pour Z qui par défaut est de 500 cm

▪ Des personnes trouvent que les librairies de certains modules ne sont pas

assez performantes et décident de faire mieux. C’est le cas pour le module HC-

SR04 (dont nous avons pas utilisé la librairie arduino)

▪ Cette librairie s’appelle « NewPing » et il faut installer son répertoire dans le

répertoire « librairie » du logiciel arduino

▪ sonar.ping_cm() : donne la distance en cm ou 0 si il n’y a pas d’écho

cm=sonar.ping_cm();

NewPing sonar(trig, echo, 200);

▪ Cette librairie s’accompagne de nouvelles fonctions

Pascal MASSON Electronique avec Arduino (version projection V45) 178

8.5. Réception de données sur le port série

8. Mesure de distances

▪ Serial.read() : lit le premier caractère du buffer et renvoi le caractère −1 si

il est vide

▪ Serial.available() : permet d’obtenir le nombre de caractères dans le buffer

Serial.println("Souhaitez-vous la valeur en cm de la distance Y/N ?");

……………………….

test = Serial.read(); //on lit le 1er caractère du buffer

if (test == 'Y') {

Serial.print(cm); //envoi de la distance à l'ordinateur

Serial.println(" cm");}

▪ Il est possible d’envoyer un ordre ou plus globalement des données à la carte

arduino via le port série.

▪ Ces données sont stockées dans le buffer série de la carte arduino avant

d’être lues. Elles peuvent être envoyées par le moniteur série du logiciel

❑ Nouvelles fonctions

Pascal MASSON Electronique avec Arduino (version projection V45) 179

9.1. Communications optiques

9. Communications IR

▪ Envoi d’un code MORSE entre bateaux

▪ Envoi d’un code entre télécommande et télé

▪ Envoi d’un code via fibre optique

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Les diodes utilisées dans ce cours émettent une onde

à 940 nm

180

9.2. Les diodes IR

9. Communications IR

0,2 0,8 1,20,4 0,6 1,0

Longueur d’onde (µm)

▪ Les LED IR émettent dans l’Infra Rouge (infrarouge) qui est une longueur

d’onde qui s’étale de 0.78 µ m à 5 mm

IR proche [0.78; 3 µm]

Pascal MASSON Electronique avec Arduino (version projection V45)

▪ Les phototransistors sont des transistors bipolaires dont la base est sensible

à la lumière.

▪ Dans le cas des phototransistors IR, la base

n’est sensible qu’à (ou presque) une longueur

d’onde

181

9.3. Les phototransistor IR

9. Communications IR

▪ Les phototransistors utilisés dans ce cours sont

sensibles à la longueur d’onde 940 nm

Pascal MASSON Electronique avec Arduino (version projection V45) 182

9.4. Prise en main des composants : code MORSE

9. Communications IR

IR

LED

Ph_TR

5 V

0 V

Poussoir

Vin

Vout

▪ Pour prendre en main la diode et le phototransistor IR, on peut commencer

par un montage simple qui ne fait pas intervenir l’arduino (sauf pour

l’alimentation)

▪ Si Vin = 1 alors Vout = 1 et si Vin = 0 alors Vout = 0

❑ Montage de base

150 150

10 k

Pascal MASSON Electronique avec Arduino (version projection V45) 183

9.4. Prise en main des composants : code MORSE

9. Communications IR

IR

5 V

0 V

Poussoir

Vin

▪ Plus la diode IR s’éloigne, moins le phototransistor reçoit de photons. A

partir d’une certaine distance la valeur de Vout n’est plus suffisamment

grande pour être comprise comme un 1 logique

❑ Amélioration du montage

▪ On peut augmenter le nombre de photons en utilisant plusieurs LED IR

Pascal MASSON Electronique avec Arduino (version projection V45) 184

9.4. Prise en main des composants : code MORSE

9. Communications IR

▪ On peut aussi augmenter le courant qui sort du

phototransistor avec un montage Darlington

❑ Amélioration du montage

Ph_TR

5 V

0 V

▪ Sur ce principe, il existe des composants qui

intègrent déjà des amplificateurs.

Pascal MASSON Electronique avec Arduino (version projection V45) 185

9.5. Envoi d’un code entre 2 Arduino

9. Communications IR

▪ Pour atteindre plus facilement les 5 V à la réception, on retire la LED rouge

▪ Bien que le montage ne fait apparaître la liaison que dans un sans, on peut

ajouter le coupe diode/phototransistor pour émettre dans l’autre sens.

▪ On peut alors définir l’I/O n°9 pour la transmission et l’I/O n°8 pour la

réception.

❑ Montage

Pascal MASSON Electronique avec Arduino (version projection V45) 186

9.5. Envoi d’un code entre 2 Arduino

9. Communications IR

▪ On peut par exemple choisir d’envoyer un mot de 8 bits dont le premier sera

un 1 pour que le récepteur détecte qu’on lui envoie quelque chose

❑ Communication

▪ Il est nécessaire de définir un protocole de discussion entre les 2 arduino

t

I/O

n°9

0

5

▪ Il faut aussi définir si le premier bit est un bit de poids faible (LSB : Least

Significant Bit) ou un bit de poids fort (MSB : Most Significant Bit)

LSB MSB

▪ La vitesse de discussion (bits par seconde) doit aussi être définie

Pascal MASSON Electronique avec Arduino (version projection V45) 187

9.6. Les nouvelles fonctions

9. Communications IR

▪ byte : définition d’un nombre binaire

byte b = B10010;

▪ bitRead(X, N) : permet de lire un bit en particulier du mot binaire X. N est

le n° du bit avec 0 pour le LSB

LSBMSB

▪ bitWrite(X, N, Y) : permet d’écrire un bit en particulier du mot binaire X. N

est le n° du bit où 0 correspond au LSB. Y correspond à la valeur qu’il faut

écrire

▪ bitSet(X, N) : permet d’écrire un 1 sur le bit n°N du mot binaire X.

▪ bitClear(X, N) : permet d’écrire un 0 sur le bit n°N du mot binaire X.

Pascal MASSON Electronique avec Arduino (version projection V45) 188

9.7. La librairie SoftwareSerial

9. Communications IR

▪ Cette librairie permet de gérer le protocole de communication entre les deux

arduino de façon aussi simple qu’avec l’ordinateur

▪ SoftwareSerial NOM(rxPin, txPin) : permet de définir un jeu de fonctions de

communication qui porte le nom « NOM ». rxPin correspond à l’I/O de

réception et txPin à l’I/O de transmission

▪ NOM.begin(X) : définition de la vitesse de communication

▪ Cette librairie s’accompagne de nouvelles fonctions et il faut d’abord préciser

au programme qu’il faut l’utiliser :

#include <SoftwareSerial.h>

SoftwareSerial mySerial(8,9); //RX TX

mySerial.begin(4800)

Pascal MASSON Electronique avec Arduino (version projection V45) 189

9. Communications IR

▪ NOM.available() : renvoi le nombre de bit disponibles dans le buffer

▪ char : définit une variable de type caractère

▪ NOM.read() : retourne un caractère lu sur l’entrée rxPin

▪ NOM.print(X) : permet d’envoyer la variable X sur la sortie txPin

▪ NOM.println(X) : permet d’envoyer la variable X sur la sortie txPin avec un

« enter »

▪ Comme il peut être amené à manipuler des caractères, il faut pouvoir les

définir

char c;

9.7. La librairie SoftwareSerial