Vous êtes sur la page 1sur 12

Informatique Industrielle

Travaux pratique
TP N°3
Programmation et mise en œuvre d'interfaces

Objectifs :
 Se familiariser avec la programmation d'interface (Luminosité
variée d'une LED, commande d’un servomoteur à l'aide d'une
résistance variable).
 Mise en œuvre d'une application d'interface série.

A. Programmation d'interface pour une luminosité variée


d'une LED
Qu'est-ce que la PWM de l'arduino ? :
Tout d'abord PWM sont les Initiales de Pulse Width Modulation que
l'on traduit en français par MLI (Modulation de Largeur d'Impulsion).
Quand on souhaite faire varier la luminosité d'une diode (LED), la
couleur des LEDs RGB ou faire de la variation de vitesse d'un moteur
DC, il est nécessaire de générer un signal analogique. Or l'arduino est
équipée de broches analogiques en entrées mais ne peuvent pas être
utilisées en sorties.

Vue d'une tension analogique


Afin de varier artificiellement la tension en sortie de l'Arduino, il nous
faudra utiliser certaines broches digitales de la carte. Mais par
définition, une broche digitale ne délivre qu'un signal binaire (0 ou 1),
c'est-à-dire que le signal électrique en sortie ne peut avoir que deux
valeurs soit HIGH (niveau Haut = 5V) ou LOW (niveau Bas = 0V).

Les broches digitales compatibles PWM vont permettre


d'émettre un signal numérique disposant de 256 valeurs différentes
(résolution de 8 bits soit 28 = 256) et non plus seulement 2 valeurs
(Tout ou Rien TOR ou binaire).

Comment modifier la tension avec le signal PWM ? :


Pour générer une tension variable ou pseudo analogique en sortie
d'une broche digitale de l'Arduino, il va falloir changer très
rapidement l'état de la sortie. En effet, le fait de passer d'un état
LOW à HIGH très vite cela va engendrer la variation de la valeur
moyenne de la tension. Or, c'est ce changement de la valeur
moyenne du signal électrique va changer la luminosité d'une LED
ou varier la vitesse d'un moteur.
Le récepteur ne percevra plus simplement l'état BAS (0V) ou l'état
HAUT (5V), mais une multitude de tensions intermédiaires qui
vont varier de 0V à 5V avec une résolution de 256 valeurs possibles.
Ce pseudo signal analogique est possible car la fréquence de
commutation entre les niveaux HAUT et BAS est élevée : 500 Hz soit
500 fois par seconde. Le changement d'état étant très rapide, le
récepteur y est donc insensible, comme notre œil avec le
clignotement des tubes fluorescent avec le signal alternatif sinusoïdal
50Hz.

Afin de déterminer quelle tension moyenne on souhaite appliquer au


récepteur, il faudra modifier le rapport cyclique, c'est-à-dire la durée
du maintient au niveau HIGH ou HAUT du signal de sortie. Ainsi, le
rapport cyclique pourra varier de 0% (tension nulle 0V) jusqu'à 100%
(Tension égale à 5V). Par contre au niveau de l'arduino, ce n'est pas
une valeur comprise entre 0 et 100 qui sera réglée mais une valeur
numérique comprise entre 0 et 255 (8 bits).
En faisant une règle de trois ou un produit en croix, il est possible de
déterminer pour chaque entier (PWM) compris entre 0 et 255 la
valeur du rapport cyclique ou la tension moyenne en sortie de
l'arduino :
• PWM = 0 ↔️Rapport cyclique = 0% ↔️Tension = 0V.
• PWM = 33 ↔️Rapport cyclique = 10% ↔️Tension = 0,5V.
• PWM = 127 ↔️Rapport cyclique = 50% ↔️Tension = 2,5V.
• PWM = 255 ↔️Rapport cyclique = 100% ↔️Tension = 5V.
• PWM = n ↔️Rapport cyclique = (n/255)*100%.

Pour générer un signal PWM il faut utiliser une broche compatible


avec cette modulation du signal.
Voici en fonction de la carte de développement Arduino ou
compatible que vous utilisez les broches disponibles permettant
d'envoyer le signal PWM:
Type ou Modèle d'Arduino Broches disponibles PWM
Uno, Pro Mini, Nano 3, 5, 6, 9, 10 et 11
Leonardo 3, 5, 6, 9, 10, 11 et 13
Due 2 à 13
Zero 2 à 13
Mega 2 à 13 et 44 à 46
Donc dans l’arduino uno
l'instruction analogWrite() n'est
disponible que sur les broches
3, 5,6,9,10,11.

- le schéma du montage :
ce programme permettant de faire varier de façon continue la luminosité de la
LED, augmentant puis diminuant de façon répétée (délai de 10 ms).

B.

Commande d’un servomoteur à l'aide d'une résistance


variable :
Principe du contrôle
Les servomoteurs de modélisme sont commandés par l’intermédiaire
d’un câble électrique à trois fils :
 Masse : Noir ou Marron
 Alimentation : Rouge
 Signal : Blanc ou Jaune

Le servomoteur est un moteur où on peut contrôler l’angle de


rotation avec précision. Le servomoteur contient : • un moteur DC, •
un driver : contrôler le sens de rotation, • un potentiomètre :
régulation pour avoir une précision sur l’angle de rotation, • des
engrenages.
On vous propose le schéma théorique du montage :

Le signal est codé en largeur d’impulsion (PWM). Cela signifie que


c’est la durée des impulsions (en général entre 1 et 2 millisecondes)
qui détermine l’angle absolu de l’axe de sortie et donc la position du
bras de commande du servomoteur. Le signal est répété
périodiquement (en général toutes les 20 millisecondes), ce qui
permet à l’électronique de contrôler et de corriger continuellement
la position angulaire de l’axe de sortie, cette dernière étant mesurée
par le potentiomètre.
B.1 Le schéma du montage :

Ce programme permet de lire la valeur analogique du pin 0 et la


convertir en un angle de rotation compris entre 0° et 180° (délai de
15ms).
Remarque : on ne doit pas oublier de régler les paramètres du
servomoteur

B.2 Le schéma du montage :


Ce programme permet de faire varier l’angle de l’arbre du
servomoteur de façon continue, de 0° à 180° puis de 180° à 0° (délai
de 60ms).

C. Programmation d'interface série


Dans cette partie, on présente la communication grâce à la voie série
(ou “liaison série”), permettant de communiquer des informations à
un ordinateur ou une autre carte Arduino.
Lorsque l’on communique des informations, il faut nécessairement
un émetteur, qui va transmettre les informations à communiquer, et
un récepteur, qui va recevoir les informations pour les traiter.
Dans le cas présent, deux cartes Arduino communiquent. L’une
communique à l’autre tandis que l’autre réceptionne le message
envoyé par la première. Arduino est capable de faire des
communications de type full-duplex, puisqu’elle est capable de
comprendre son interlocuteur tout en lui parlant en même temps.
Protocole de communication : C’est un ensemble de règles qui
régissent la façon dont communiquent deux dispositifs entre eux.
Cela définit par exemple le rythme de la conversation (le débit de
parole des acteurs si vous préférez), l’ordre des informations
envoyées, le nombre d’informations, etc…
La norme RS-232 s’applique sur des champs d’une communication de
type série. Pour communiquer via la voie série, on utilise au minimum
trois fils, deux câbles permettent la transmission des données. L’un
sert à l’envoi des données, l’autre pour la réception. Le troisième
représente la référence électrique, communément appelée masse
électrique.
Croisement de données On connecte le Tx (broche de transmission)
d’un microcontrôleur au Rx (broche de réception) de l’autre
microcontrôleur. Et inversement, le Tx de l’autre au Rx du premier. Et
bien sûr, la masse à la masse pour faire une référence commune
comme indiqué ci-dessous :

On utilise la fonction Serial.write(val) pour envoyer une donnée et


sur l'autre carte Arduino Serial.read() pour la lire. Lors de l'envoi par
série, tout est envoyé en octets. Ces octets sont ensuite lus un octet à
la fois par l'autre Arduino.
- Réalisation sous ISIS le câblage entre deux cartes ARDUINO
UNO selon la Figure suivante en visualisation de résultat sur le
"Virtual Terminal" :

Avec le programme suivant :

Vous aimerez peut-être aussi