TP Interface Via Arduino Uno
TP Interface Via Arduino Uno
TP Interface Via Arduino Uno
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/286013065
CITATIONS READS
0 329
1 author:
Saadaoui Abdelkader
ISET de Radès, Tunisia
10 PUBLICATIONS 0 CITATIONS
SEE PROFILE
All content following this page was uploaded by Saadaoui Abdelkader on 07 December 2015.
SAADAOUI Abdelkader
INTRODUCTION GENERALE
Ce support de travaux pratiques est consacré à l’atelier conception d’interface et destiné aux
étudiants de deuxième année du Parcours : Systèmes Embarqués et Mobiles (SEM) au
Département Technologies de l’Informatique.
On propose, Dans ces présentes notes, les principales caractéristiques de la carte d’Arduino
Uno et des outils de conception, de simulation et de réalisation utilisant un environnement à
base du Compilateur Arduino.
A fin de familiariser les étudiants à leurs exploitation, certaines données sont directement
tirées du document constructeur.
Ces manipulations pratiques occupent un semestre.
L’auteur remercie par avance tous les lecteurs qui lui fait part de leurs critiques
et de leurs remarques constructives.
SAADAOUI Abdelkader
ELEME!T CO!STITUTIF (ECUE)
ATELIER CO!CEPTIO! D’I!TERFACE
Volume horaire Coefficient Crédit
Cours TD TP
0 0 45 2 2
Plan :
Semaine TP
Pré-requis :
• Microprocesseurs, Systèmes logiques, Architecture des Ordinateurs
Objectifs Spécifiques:
Evaluations :
• Le mode de contrôle continue : chaque TP est noté.
• La note personnalisée (NP) : sur la présence, les recherches théoriques des applications.
• Note sur les compte rendu du TP.
SAADAOUI Abdelkader
Département Technologies de l’Informatique
I. Introduction :
Le système Arduino est une solution simple et abordable pour développer des montages
électroniques numériques programmables à base de microcontrôleurs.
C’est une plateforme open-source qui est basée sur une simple carte à microcontrôleur, et un
logiciel, véritable environnement de développement intégré, pour écrire, compiler et
transférer le programme vers la carte à microcontrôleur.
Arduino peut être utilisé pour développer des applications matérielles industrielles légères ou
des objets interactifs (création artistiques par exemple). Les cartes Arduino peuvent recevoir
sur les broches d’entrées une très grande variété de capteurs et contrôler sur les broches de
sortie une grande variété d’actionneurs (lumières, moteurs ou toutes autres sorties matériels).
Les projets Arduino peuvent être autonomes, ou communiquer avec des logiciels sur un
ordinateur .
Les cartes électroniques peuvent être fabriquées manuellement ou bien être achetées
préassemblées ; le logiciel de développement open-source est téléchargeable gratuitement.
SAADAOUI Abdelkader
II. L’Arduino UNO
Microcontrôleur ATmega328
Tension d'alimentation interne 5V
Tension d'alimentation externe 7 à 12V
Entrées/sorties numériques 14 dont 6 sorties PWM
Entrées analogiques 6
Courant max par broches E/S 40 mA
Courant max sur sortie 3,3V 50mA
Mémoire Flash 32 Ko
Mémoire SRAM 2 Ko
mémoire EEPROM 1 Ko
Fréquence horloge 16 MHz
Connecteur USB
Microcontrôleur ATmega328
IV. Alimentation
La carte Arduino UNO peut être alimentée par l’USB ou par une alimentation externe. La
source est sélectionnée automatiquement.
La tension d’alimentation extérieure (hors USB) peut venir soit d’un adaptateur AC-DC ou
de piles. L’adaptateur peut être connecté grâce à un ‘jack’ de 2.1mm positif au centre. Le
raccordement vers un bloc de piles peut utiliser les bornes GND et VIN du connecteur
d’alimentation (POWER). La carte peut fonctionner à l’aide d’une tension extérieure de 7 à
12 volts. Les broches (pins) d’alimentation sont les suivantes :
VI!. La tension d’entrée positive lorsque la carte Arduino est utilisée avec une source de
tension externe (à distinguer du 5V de la connexion USB ou autre source 5V régulée). Vous
pouvez alimenter la carte à l’aide de cette broche, ou, si l’alimentation est fournie par le jack
d’alimentation, accéder à la tension d’alimentation sur cette broche.
5V. La tension régulée utilisée pour faire fonctionner le microcontrôleur et les autres
composants de la carte (pour info : les circuits électroniques numériques nécessitent une
tension d’alimentation parfaitement stable dite « tension régulée » obtenue à l’aide d’un
composant appelé un régulateur et qui est intégré à la carte Arduino). Le 5V régulé fourni
par cette broche peut donc provenir soit de la tension d’alimentation VIN via le régulateur de
la carte, ou bien de la connexion USB (qui fournit du 5V régulé) ou de tout autre source
d’alimentation régulée.
3V3. Une alimentation de 3.3V fournie par un régulateur 3.3v LP2985 est disponible sur la
carte. Ceci est intéressant pour certains circuits externes nécessitant cette tension au lieu du
5V. L’intensité maximale disponible sur cette broche est de 50mA
V. Mémoire
Chacune des 14 broches numériques de la carte Uno peut être utilisée en entrée (input) ou en
sortie (output), en utilisant les fonctions pinMode(), digitalWrite(), et digitalRead().
Elles fonctionnent en logique TTL (0V-5V) ; chacune pouvant fournir (source) ou recevoir
un courant maximal de 40 mA et dispose si besoin est d’une résistance interne de ‘pull-up’.
En outre, certaines broches ont des fonctions spécialisées :
• Serial : broche 0 (RX) et broche1 (TX). Permet de recevoir (RX) et de transmettre (TX) des
données séries TTL. Ces broches sont raccordées à leurs homologues sur le chip
Atmega16U2 spécialisé dans la conversion USB-to-TTL série.
• Interruptions externes 2 et 3. Ces broches peuvent être configurées pour déclencher une
interruption sur une valeur LOW, sur un front montant ou descendant, ou encore sur le
changement de valeur. (voir la fonction attachInterrupt() pour des détails).
• PWM : 3, 5, 6, 9, 10, and 11. Output 8-bit de PWM avec la fonction analogWrite(). • SPI :
10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ces broches fournissent le support de
communication SPI en utilisant la ‘librairie’ spécialisée
• LED : Il y a une LED repérée L connectée à la broche digitale 13.
La carte Uno à 6 broches d’entrée analogiques, A0 à A5, chacune avec 10 bits de résolution
(1024 valeurs différentes).
Par défaut les mesures sont effectuées de la masse à 5V (valeur de référence), mais il est
possible de spécifier la valeur de référence en utilisant la broche VREF et la fonction
analogReference().
SAADAOUI Abdelkader
• Reset. Permet au niveau bas (LOW° de faire un reset du contrôleur. Elle est utilisée
typiquement pour monter un bouton ‘reset’ aux cartes additionnelles (‘shields’) bloquant
celui de la carte principale.
VIII. Communication
La carte Arduino Uno peut être programmée directement avec « l’Arduino software ».
L’Atmega328 sur la carte Uno est pré programmé avec un ‘bootloader’ qui permet de
charger le code d’une nouvelle application sans utiliser un programmateur hardware externe.
Il communique avec un ordinateur en utilisant le protocole STK500 d’ATMEL.
Mais vous pouvez programmer le contrôleur de la carte en utilisant le port ICSP (In-Circuit
Serial Programming).
Le code source du firmware du contrôleur auxiliaire Atmega16U2 est disponible.
X. Reset automatique
Toutes les cartes Arduino actuelles sont équipées d'un poussoir de reset manuel. Un appui
sur celui-ci permet donc de relancer l'exécution d'un programme si nécessaire, soit parce qu'il
s'est « planté » soit tout simplement parce que l'on souhaite le faire repartir de son début.
Mais il existe aussi sur les cartes Arduino une autre source de reset.
Un reset automatique à la mise sous tension qui permet ainsi au programme contenu en
mémoire du microcontrôleur de démarrer automatiquement dès que la carte Arduino est
alimentée.
XI. Protection de surintensité USB
La carte Arduino Uno possède une protection par fusible pour le port USB si un courant de
plus de 500mA est demandé. La déconnexion durera tant que la source de consommation
excessive n’aura pas cessé.
SAADAOUI Abdelkader
XII. Schéma structurel
SAADAOUI Abdelkader
Cet espace de développement intégré (EDI) dédié au langage Arduino et à la programmation
des cartes Arduino comporte :
Barre de menus
Barre de boutons
Fenêtre d’édition
des programmes
Zone de saisie des valeurs à envoyer vers la carte Arduino bouton pour envoyer les valeurs vers la carte Arduino
SAADAOUI Abdelkader
Réglage de la vitesse de transmission
La structure d’un programme Arduino doit toujours comporter les fonctions Setup( ) et loop ()
Note :
Sur la plupart des cartes, vous devez voir les LEDs des lignes RX et TX
clignoter rapidement, témoignant que le programme est bien transféré.
Durant le transfert, le bouton devient jaune et le logiciel Arduino affiche
un message indiquant que le transfert est en cours.
Il existe de nombreux shields. Un « shield » Arduino est une petite carte qui se connecte sur
une carte Arduino pour augmenter ses fonctionnalités. Quelques exemples de « shields » :
• Afficheur graphique
• Ethernet et carte SD
• GPS
SAADAOUI Abdelkader
• XBee
• GSM
• etc...
Après compilation et s'il n’y a pas d'erreurs le fichier .hex est créé. Ce fichier sera
implémenté dans la carte d’Arduino. Que remarquez-vous dans la led intégrée dans
la carte Arduino. ?
XXII.3. Réaliser ce montage où la LED est liée avec le pin 12.
XXII.4. Ecrire un programme pour clignoter la LED de ce montage avec un temps de 1s.
SAADAOUI Abdelkader
Département Technologies de l’Informatique
L’interface parallèle est un outil de traduction entre deux différents dialogues pour deux
différents environnements. Il permet une communication rapide où toute la donnée
(octet) est envoyée en même temps, libère le microcontrôleur pour faire d’autre
taches…etc. Pour la bonne compréhension de la manipulation de ce type d’interface, ce
TP permet de programmer des applications de manipulation d’afficheurs 7 segments via
l’interface parallèle de la carte Arduino.
SAADAOUI Abdelkader
II.2. On donne le montage de la figure suivante :
II.3. Donner le programme qui permet d’afficher les chiffres de 00 a 99 avec le montage
suivant :
SAADAOUI Abdelkader
Département Technologies de l’Informatique
La broche R / W (Read / Write) : sert à dire au module, si les broches des données
du module sont en entrée ou en sortie, c’est à dire si les données sont << écrites
>> vers le module, ou << lues >> depuis le module.
La broche RS (Register Select) : sert à dire au module dans quel registre il doit
écrire les données présentes sur les broches de données.
Le brochage de LCD est donné dans le tableau suivant :
Avant d’afficher sur un LCD il faut bien évidement effacer l’écran et choisir le sens de
l’écriture, ainsi que la taille de matrice (DOT). En effet pour effacer un LCD il faut envoyer
SAADAOUI Abdelkader
la commande 01H (voir tableau de commande) puis envoyer 0EH et 06H pour définir
respectivement la taille du caractère ainsi que le sens de l’écriture.
II. Travail demandé :
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("hello, world!");
}
void loop() {
lcd.setCursor(0, 1);
lcd.print(millis()/1000);
}
SAADAOUI Abdelkader
II.3. Ecrire le programme qui permet d’afficher la grandeur analogique sur le LCD :
SAADAOUI Abdelkader
Département Technologies de l’Informatique
I.1/ Principe :
Une impulsion PWM est une impulsion (ou onde) carrée, c'est à dire que le niveau de l'onde
est soit HAUT soit BAS. Cette impulsion se répète dans le temps de façon continue.
SAADAOUI Abdelkader
Une telle onde, comme toute onde est caractérisée par sa période, c'est à dire la durée entre 2
impulsions. La définition d'une onde PWM (Pulse Width Modulation en anglais ou
Modulation de Largeur d'Impulsion (MLI) en français) se fait en modifiant la largeur du
niveau HAUT par rapport à la durée de la période : la largeur du niveau HAUT est appelée
« duty cycle ».
τ τ
Vmoy = A. = 5.
T T
SAADAOUI Abdelkader
II. Travail demandé :
Connecter sur la broche 3 (configurée en sortie) une LED et sa résistance (330 Ohms) en
série connectée au 0V
SAADAOUI Abdelkader
// --- Déclaration des variables globales ---
int i=0; // variable de boucle
delay(10); // pause de 10 ms
delay(10); // pause de 10 ms
Remarque :
Avec l'instruction analogWrite(LED, largeur), on va pouvoir générer une impulsion PWM
avec une largeur de « duty cycle » voulue :
• si i = 0, le duty cycle sera de 0% de la période =>composante continue=0V
• si i = 254 le duty cycle sera de( 254/255).100% de la période => composante continue=5*(254/255)V
SAADAOUI Abdelkader
La luminosité de la LED va ainsi varier de façon continue, augmentant puis diminuant de
façon répétée.
• des engrenages
SAADAOUI Abdelkader
Le noir ou marron – La masse (GND)
Le rouge – La tension d’alimentation continue (+Vcc)
Le jaune, orange ou blanc – Le signal de commande (PIN_PWM), on connecte ce fil à
une des sorties numériques (type PWM) du microcontrôleur. Ce signal de commande
n’est rien d’autre qu’un signal logique périodique. C’est pour ça qu’il est facile à
générer à partir d’un microcontrôleur. La largeur des créneaux va commander l’angle
de l’arbre du servomoteur. La durée du créneau doit être comprise entre 1 et 2ms pour
la majorité des servomoteurs. Une durée de 1ms correspond à l’angle 0° et 2ms
correspond à l’angle 180°.
Le déroulement du programme
II.3. Ecrire les programmes suivants en expliquant leur fonctionnement utilisant II.2.:
Programme N1 :
#include <Servo.h>
Servo myservo;
int potpin = 0;
int val;
void setup()
{
myservo.attach(9); }
void loop()
{
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}
SAADAOUI Abdelkader
Programme N2:
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup()
{
myservo.attach(9); }
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1) {
myservo.write(pos);
delay(15);
}
}
Programme N3:
#include <Servo.h>
Servo servo;
void setup()
{
servo.attach(9);
Serial.begin(9600);
}
void loop()
{
SAADAOUI Abdelkader
Département Technologies de l’Informatique
Ce TP permet de présenter un nouveau moyen de communication grâce à la voie série (ou “liaison série”), qui va vous
permettre 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.
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…
On peux citer quelques normes de liaisons séries : RS-232, USB, SATA…
La norme RS-232 s’applique sur des champs d’une communication de type série. Elle définit le signal électrique, le
protocole. 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.
1.2. Croisement de données
Comme les microcontrôleurs utilisent quasiment tous cette norme, il n’y a aucun problème à connecter deux
microcontrôleurs entre-eux. Cette norme s’appelle alors UART (Universal Asynchronous Receiver
Transmitter) plutôt que RS232 (interface entre Arduino et PC). maintenant simplement on croise les fils. 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 c’est indiqué ci-dessous :
SAADAOUI Abdelkader
Fig.2. communication série entre deux cartes Arduinos
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.
1- realiser le cablage entre deux cartes arduino uno
2- écrire le programme suivant dans le cote émetteur :
char str[4];
void setup() {
Serial.begin(9600); // vitesse de transmission
}
void loop() {
int value=1234; //valeur
itoa(value, str, 10); // la valeur dans un tableau de caractères
Serial.write(str, 4);
}
3- Le récepteur reçoit alors le tableau d'octets de l'autre Arduino. il interprète les données reçues puis les
imprime sur le Serial Monitor. On vous demande alors d’écrire le programme suivant dans le cote récepteur:
char str[4];
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
int i=0;
if (Serial1.available()) {
delay(100);
while(Serial1.available() && i<4) {
str[i++] = Serial1.read();
}
str[i++]='\0';
}
if(i>0) {
Serial.println(str,4);
}
}
SAADAOUI Abdelkader
Département Technologies de l’Informatique
Objectif : se familiariser avec une application d’interfaçage : « la commande d’un moteur pas à
pas »
I. Introduction :
La robotique utilise souvent les moteurs pas à pas. Ainsi et dans ce but, ce TP permet de
Mettre en œuvre une application d’interfaçage.
Les moteurs pas à pas sont utilisés dans de nombreux appareils (imprimantes, fax,
photocopieurs, traceurs ....) le but étant de faire déplacer des ensembles mobiles avec une
grande précisions par rapport à des moteurs à courant continu classique.
Avec un moteur pas à pas, on peut déterminer l’angle exact de rotation, l’accélération ou le
sens de rotation en modifiant l’alimentation des bobines.
Un moteur pas à pas est un moteur qui tourne en fonction des impulsions électriques reçues
dans ses bobinages. L'angle de rotation minimal entre deux modifications des impulsions
électriques s'appelle un pas. On caractérise un moteur par le nombre de pas par tour (c'est à
dire pour 360°). Les impulsions électriques sont du type tout ou rien alors que les tensions
d'utilisation des moteurs sont de 3,3V à 48V continues.
Le moteur pas à pas bipolaire à aimant permanent bipolaire est le modèle le plus simple dans
son fonctionnement. Le rotor est constitué d’un aimant permanent, et le stator comporte 2
bobinages (ou 2 groupes de bobinages). La rotation est obtenue en contrôlant l'alimentation
des bobines ainsi que le sens du courant dans celles-ci, on peut faire varier le champ dans le
moteur.
II. Fonctionnement :
II.1. Fonctionnement en pas entier :
SAADAOUI Abdelkader
Dans ce mode de fonctionnement, les bobines sont alimentées l’une après l’autre dans un
sens puis dans l’autre, pour faire un tour complet, il faut 4 pas.
pas complet
Phase 1 2 3 4 5 6 7 8
Phase 1 1 0 0 0 1 0 0 0
(A+)
Phase 2 0 1 0 0 0 1 0 0
(B+)
Phase 3 0 0 1 0 0 0 1 0
(A-)
Phase 4 0 0 0 1 0 0 0 1
(B-)
Note :le fonctionnement avec couple maximal est obtenu si on alimente les bobines, deux
par deux à chaque fois.
II.2. Fonctionnement en demi-pas :
Pour augmenter l’intensité du flux magnétique créé par le stator, et donc le couple moteur,
on peut ajouter au mode de pas complet l’alimentation des deux bobines en même temps,
pour faire un tour complet, il faut 8 pas.
Demi-pas
Phase 1 2 3 4 5 6 7 8
Phase 1 1 1 0 0 0 0 0 1
(A+)
Phase 2 0 1 1 1 0 0 0 0
(B+)
Phase 3 0 0 0 1 1 1 0 0
(A-)
Phase 4 0 0 0 0 0 1 1 1
(B-)
Remarque : Dans les exemples précédents, on a vu que l'on alimente les enroulements dans les deux sens de
courant, il existe aussi les moteurs à aimant permanent unipolaire possédant des demi-bobines (avec un point milieu).
L'avantage est que l'on n'inverse jamais le sens du courant, donc la commande est plus simple. Tout le problème est
que l'on « double » le nombre d'enroulements, donc le moteur est plus coûteux et encombrant, néanmoins cela reste
très courant pour les petites puissances.
SAADAOUI Abdelkader
III. Travail demandé :
SAADAOUI Abdelkader
Département Technologies de l’Informatique
Pour le reste des séances pratiques, chaque groupe d’étudiants est appelé à concevoir et
réaliser une des applications embarquées suivantes utilisant le simulateur Proteus puis la
carte Arduino:
1- variation de la vitesse d’un moteur à courant continu à excitation indépendante via un
hacheur série
2- conception et réalisation d’un onduleur monophasé
3- conception et réalisation d’un gradateur monophasé
4- conception et réalisation de la commande d’un moteur pas à pas.
SAADAOUI Abdelkader