TPMICROCONTROLEURARDUINO
TPMICROCONTROLEURARDUINO
TPMICROCONTROLEURARDUINO
NOM DE L’ETUDIANT:
Page 1 sur 53
Plan :
Semaine TP
Pré-requis :
Microprocesseurs, Microcontroleurs, Systèmes logiques, Architecture des Ordinateurs
Objectifs Spécifiques:
Page 2 sur 53
TP N1: Prise en main de l’environnement de la carte d’Arduino.
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.
Page 3 sur 53
II. L’Arduino UNO
Résumé des caractéristiques de la carte 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
Bouton Reset
Entrées/Sorties digitales 0-13
Connecteur USB
Microcontrôleur ATmega328
Broches d’alimentations
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:
VIN. 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
L'ATmega 328 dispose de 32 kilo-octets de mémoire de programme. Cette mémoire est de type Flash,
analogue à celle que l'on trouve par exemple dans les clés USB.
L'ATmega 328 contient aussi de la mémoire vive ou RAM, analogue dans son principe à la mémoire
vive de vos PC, mais en beaucoup plus petite quantité puisque l'on ne dispose ici que de 2 kilo-
octets (contre plusieurs Giga octets dans un PC par exemple). Cette mémoire est généralement
utilisée pour les variables employées dans les programmes, pour stocker des résultats temporaires
lors de calculs, etc. Elle présente la particularité de pouvoir être lue et écrite à tout instant par le
microcontrôleur mais elle « oublie » son contenu dès qu'il n'est plus alimenté.
L’ATmega 328 dispose également de mémoire EEPROM, acronyme qui signifie mémoire
programmable et effaçable électriquement. La taille de cette EEPROM est seulement de 1kilo-
octets. Cette mémoire EEPROM est une mémoire dans laquelle le microcontrôleur peut lire à
tout instant. Il peut aussi y écrire et effacer son contenu, avec plus de facilité comme dans la
mémoire Flash de programme, mais avec moins de facilité que dans la mémoire vive. En
contrepartie, et comme c'est le cas pour la mémoire flash de programme, le contenu de
l'EEPROM est conservé même lorsqu'elle n'est plus alimentée. C'est donc une mémoire qui
sera utilisée pour conserver des données ou des paramètres que l'on doit pouvoir retrouver
d'une utilisation à l'autre de l'Arduino.
VI. Horloge
L’horloge est pilotée par quartz et fonctionne à la fréquence de 16 MHz.
Ainsi par exemple, la fonction delay(xxx), qui génère un délai de xxx ms, sait que l'horloge
fonctionne à 16 MHz et fait donc automatiquement appel aux instructions nécessaires pour générer le
délai que vous avez réellement demandé dans votre programme.
VIII. Communication
La carte Arduino Uno a de nombreuses possibilités de communications avec l’extérieure.
L’Atmega328 possède une communication série UART TTL (5V), grâce aux broches numériques 0
(RX) et 1 (TX).
Un contrôleur Atmega16U2 sur la carte, gère cette communication série vers l’USB et apparaît
comme un port de communication virtuel pour le logiciel sur l’ordinateur.
Le firmware de l’16U2 utilise le protocole USB, et aucun driver externe n’est nécessaire. Windows a
cependant besoin d’un fichier .inf, à l’installation. Le logiciel Arduino possède un logiciel série
(Telnet) intégré permettant l’envoi et la réception de texte. Les DELs RX et TX sur la carte
clignoteront pour indiquer la transmission de données vers l’ordinateur.
Une librairie ‘SoftwareSerial’ permet la transmission de données série à partie de chacune des
broches numériques du Uno.
L’Atmega328 supporte le bus I2C (TWI) et le protocole de communication synchrone maître-esclave
SPI. Le logiciel Arduino inclut un ensemble de fonctions pour mettre en œuvre l’un ou l’autre.
IX. Programmation
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.
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
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 afficheun message indiquant que le transfert est en cours.
• Afficheur graphique
• Ethernet et carte SD
• GPS
• XBee
• GSM
• etc...
Dr GOUNE CHENGUI
TP N2 : Faire clignoter une LED et Feux de signalisation
Classes : M1- EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
Travail demandé:
I.1. Installer l’espace de développement intégré (EDI) Arduino.
I.2. Lancer le compilateur d’Arduino et écrire le programme suivant :
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 dansla carte Arduino. ?
I.3. Réaliser ce montage où la LED est liée avec le pin 12.
I.4. Ecrire un programme pour clignoter la LED de ce montage avec un temps de 1s.
II. On désire automatiser la gestion de feux tricolores, réglant la circulation d’uncarrefour à deux voies à
l’aide d’un Arduino Uno.
Dr GOUNE CHENGUI
Le schéma du montage Arduino est donné comme montre la figure suivante :
Instructions de montage
Connecter sur la broche 2 (configurée en sortie) une LED rouge connectée avec sa résistance au 0V
Connecter sur la broche 3 une LED jaune connectée en série avec sa résistance au 0V
Connecter sur la broche 4 une LED verte connectée en série avec sa résistance au 0V
Connecter sur la broche 5 une LED rouge connectée en série avec sa résistance au 0V
Connecter sur la broche 6 une LED jaune connectée en série avec sa résistance au 0V
Connecter sur la broche 7 une LED verte connectée en série avec sa résistance au 0V
Le cahier des charges stipule la possibilité de moduler les temporisations par l’opérateur en
fonction de la densité de la circulation. L’étude est simple simule les feux de circulation sur 2
groupes de 3 leds rouge-jaune-vert et le fonctionnement normal est décrit par le chronogramme
donné par la figure suivante.
Dr GOUNE CHENGUI
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 :
Dr GOUNE CHENGUI
TP N4 : Conception d’interface pour manipuler un afficheur alphanumérique
Dr GOUNE CHENGUI
Pour faire la distinction entre instruction et donnée, le module LCD dispose de deux
registres, un pour les données s’appelle le « Data Register » (DR), et l’autre pour les
instructions s’appelle le « Instruction Register » (IR)
Pour informer le module LCD de la nature de ce qu’on lui écrit sur les broches de
données, on utilise la ligne de commande RS (Register Select).
Si RS = 0, le module sait que c’est une instruction et va donc l’écrire dans le
registre d’instruction.
Si RS = 1, le module sait que c’est un code caractère et va donc l’écrire dans le
registre donné.
2- Les Broches numériques de Commande
La broche E (Enable) : sert à valider les données ou les instructions écrites sur les
broches des données du module, la validation se fait sur le front descendant.
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
Dr GOUNE CHENGUI
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);
}
Dr GOUNE CHENGUI
II.3. Ecrire le programme qui permet d’afficher la grandeur analogique sur le LCD :
Dr GOUNE CHENGUI
TP N5: Programmation d’ interface pour une luminosité variée d'une LED .
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.
Dr GOUNE CHENGUI
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 appellee « duty cycle ».
Avec l'instruction analogWrite(broche, largeur), on va pouvoir générer une impulsion PWM avec une
largeur de « duty cycle » voulue :
si valeur = 0, le duty cycle sera de 0% de la période
Vmoy A. 5.
T T
Travail demandé :
Connecter sur la broche 3 (configurée en sortie) une LED et sa résistance (330 Ohms) ensérie
connectée au 0V
Dr GOUNE CHENGUI
Figure : Le schéma théorique du montage
IMPORTANT : L'instruction analogWrite () n'est disponible que sur les broches 3,5,6,9,10,11
(notée PWM sur le brochage ci-dessous).
Dr GOUNE CHENGUI
// --- 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
Dr GOUNE CHENGUI
La luminosité de la LED va ainsi varier de façon continue, augmentant puis diminuant de
façon répétée.
des engrenages
Dr GOUNE CHENGUI
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);
}
Dr GOUNE CHENGUI
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()
{
Dr GOUNE CHENGUI
TP N6 : Programmation de l’interface série
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.
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.
1.1.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…
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
Dr GOUNE CHENGUI
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 :
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
Dr GOUNE CHENGUI
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);
}
}
Dr GOUNE CHENGUI
TP N7 : Mise en œuvre d’une application d’interfaçage.
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 :
Dr GOUNE CHENGUI
Dans ce mode de fonctionnement, les bobines sont alimentées l’une après l’autre dans unsens
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.
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.
Dr GOUNE CHENGUI
III. Travail demandé :
III.1. Dessiner le schéma sous Proteus-ISIS.
III.6. Réaliser le montage ci-dessous et faire un programme pour la rotation complete du moteur
dans les deux sens.
Dr GOUNE CHENGUI
Dr GOUNE CHENGUI
TP N8 : Capteur à ultrason avec Arduino
Classes : M1-EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
3) Code Arduino
1. Utilisation du capteur Ultrason HC-SR04 */
2. // définition des broches utilisées
3. int trig = 12;
4. int echo = 11;
5. long lecture_echo;
6. long cm;
7.
8. void setup()
9. {
10. pinMode(trig, OUTPUT);
11. digitalWrite(trig, LOW);
12. pinMode(echo, INPUT);
13. Serial.begin(9600);
14.}
15.
16.void loop()
17.{
18. digitalWrite(trig, HIGH);
19. delayMicroseconds(10); // envoi d'une impulsion sur trig de 10 microsecondes
20. digitalWrite(trig, LOW);
21. lecture_echo = pulseIn(echo, HIGH);
22. cm = lecture_echo/58
23. Serial.print("Distance en cm : ");
24. Serial.println(cm);
25. delay(1000); }
Le programme effectue une mesure à peu près toutes les secondes et envoie le résultat sur la voie série (le terminal
de l’IDE Arduino dans « outils »)
- Effectuer le montage
- Recopier le code dans l’environnement Arduino
- Brancher la carte sur le PC
- Téléverser le programme dans la carte
- Ouvrir le moniteur série dans « outil »
4) Modification du code
a) Modifier le code pour que l’on ait l’affichage « Attention ! Distance inférieure à 8 cm !! » si la distance
est inférieure à 8cm. Utiliser le « if » de la manière suivante :
if (condition)
instruction à effectuer
b) Modifier le code pour que la diode de la carte s’allume ou clignote si la distance est inférieure à 8cm. (voir
le code « Faire clignoter une diode » en annexe)
5) Analyse du code
a) Dans quelles lignes du code sont définies les branchements des broches echo et trig ?
b) Indiquer les lignes du code où est envoyée une impulsion de 10 µs. A quoi sert cette impulsion ?
c) La vitesse du son à 25 °C est v = 346,375 m/s.
Déterminer la distance d en cm pour ΔT = 150 µs, (tenir compte de l’aller-retour)
6) Etalonnage du capteur
Pour différentes positions du capteur par rapport à un écran, remplir un tableau où figurent les distances et
l’affichage du capteur.
TP N9 : Mesure de température et d’humidité à l’aide des capteurs
DHT11, DHT22
Classes : M1-EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
I. Objectif du TP :
La mise en pratique des connaissances acquises dans le cours ̋Acquisition de l’information ̎ pour mesurer le
taux d’humidité et/ou le degré de la température et de les afficher sur un écran LCD ou les imprimer sur le
moniteur série.
Matériels nécessaires :
Une carte Arduino (UNO, MEGA , DUE……)
Un capteur d’humidité et de température DHT11 (ou DHT22)
Un écran LCD 2×16
Une plaque d’essai
Résistances 220Ω, 1kΩ , 4.7kΩ, 10kΩ)
Potentiomètre 1kΩ
Fils de connexion.
Taper le code qui permet d’afficher le degré de la température et le taux d'humidité sur le moniteur série et sur
l’écran LCD en utilisant la fonction dht.temperature et dht.humidity après avoir charger la bibliothèque
<DHT.h>.
Remarque : La lecture des données se fait avec la fonction dht.read (DHT11_PIN) où DHT11_Pin est la broche
qui relie le capteur à la carte Arduino, se reférer au programme ci-dessous
Matériel nécessaire:
- une carte Arduino Uno
- un module Bluetooth HC-05
- un jeu de câbles de connexion M/F
- un cordon USB B
- un PC
- un smartphone sous Android
Rappel:
Ce module communique via une liaison série avec une carte Arduino. Cette liaison s’établit sur deux broches RX
et TX définies dans notre programme en tant que broches 11 et 10. La broche RX de la carte Arduino doit être
raccordée à la broche TX du module Bluetooth HC-05. La broche TX de la carte Arduino doit être raccordée à la
broche RX du module HC-05.
Exemple de programme:
Ce programme (à copier dans l’IDE Arduino) permet la réception et l’émission de données via le moniteur série de
l’IDE avec un autre périphérique Bluetooth (second Arduino, un PC ou comme dans notre exemple avec un
smartphone).
Une photorésistance est un composant électronique dont la résistance (en Ohm Ω) varie en fonction de
l'intensité lumineuse. Plus la luminosité est élevée, plus la résistance est basse. On peut donc l'utiliser comme
capteur lumineux pour:
• Mesure de la lumière ambiante pour une station météo.
• Détecteur de lumière dans une pièce.
• Suiveur de lumière dans un robot.
• Détecteur de passage.
L'avantage des photorésistances est qu'elles sont très bon marché. Par contre, leur réaction à la lumière est
différente pour chaque photorésistance, même quand elles ont été produites dans le même lot. On peut ainsi noter
une différence de résistance de plus de 50% entre deux photorésistances du même modèle pour la même
luminosité. On ne peut donc pas l'utiliser pour une mesure précise de la lumière. Par contre, elles sont
idéales pour mesurer des changements simples de la luminosité.
Travail à faire:
Classes : M1-EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
I. Principe de fonctionnement
La module matrice de LED contient une platine de pilotage avec un registre MAX7219 qui permet de s’interfacer
simplement avec un microcontrôleur tout en gérant l’état de 64 LEDs. Il existe plusieurs dimensions de matrice en
fonction du nombre de registres à décalage utilisés.
Schéma
Le module matrice utilise 3 broches du microcontrôleur. Il peut être alimenté grâce à la sortie 5V du
microcontrôleur.
Code
Pour gérer la matrice de LED, il n’y a pas de bibliothèque particulière; Il faut venir sélectionner l’état de la LED
pour chaque pixel. Pour cela il est possible d’envoyer une valeur hexadécimale pour chaque ligne. Pour obtenir les
valeur hexadécimales en fonction de ce que vous souhaitez dessiner, vous pouvez utiliser cet outil.
int DIN_pin = 11;
int CS_pin = 10;
int CLK_pin = 12;
int D[8] = {0xC0, 0xA0, 0x90, 0x88, 0x84, 0x98, 0x90, 0xE0}; //afficher la lettre D
int A[8] = {0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42}; //afficher la lettre A
int M[8] = {0xC3, 0xA5, 0x99, 0x99, 0x81, 0x81, 0x81, 0x81}; //afficher la lettre M
int I[8] = {0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C}; //afficher la lettre I
int E[8] = {0x00, 0x7E, 0x40, 0x40, 0x7E, 0x40, 0x40, 0x7E}; //afficher la lettre E
int N[8] = {0xC1, 0xA1, 0x91, 0x89, 0x85, 0x82, 0x80, 0x80}; //afficher la lettre N
void clear_matrix(void)
{
const int clean[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
write_matrix(clean);
}
int intToHex(int x)
{
switch (x)
{
case 0: return 0x01; break; //LED sur la première case
case 1: return 0x02; break; //LED sur 2 case
case 2: return 0x04; break; //LED sur 3 case
case 3: return 0x08; break; //LED sur 4 case
case 4: return 0x10; break; //LED sur 5 case
case 5: return 0x20; break; //LED sur 6 case
case 6: return 0x40; break; //LED sur 7 case
case 7: return 0x80; break; //LED sur 8 case
}
}
void setup()
{
pinMode(CS_pin, OUTPUT);
pinMode(DIN_pin, OUTPUT);
pinMode(CLK_pin, OUTPUT);
delay(50);
init_MAX7219();
clear_matrix();
void loop()
{
write_matrix(D);
delay(500);
write_matrix(A);
delay(500);
write_matrix(M);
delay(500);
write_matrix(I);
delay(500);
write_matrix(E);
delay(500);
write_matrix(N);
delay(500);
}
Dans cet exemple, nous avons décrit le prénom « Damien » avec les valeurs hexadécimales pour chaque LED. A
vous de définir les valeurs pour pouvoir afficher les caractères alphabétiques, numériques ou tout autre dessin que
vous souhaitez.
Travail a faire: après avoir fait l’example, écrire un programme qui fait defiler votre nom.
TP N13 : Clavier matriciel /Ecran
Classes : M1-EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
Question:
1. Décrire le fonctionnement d'un clavier matriciel
2. Connecter le clavier à la carte Arduino
3. Aidez-vous de Datasheet pour réaliser un programme qui affiche dans la console la touche du clavier
appuyée
4. Une bibliothèque gérant le clavier existe Keypad.h Installer là
5. En vous aidant du code ci-dessous, utiliser la bibliothèque pour récupérer les touches du clavier entrées
Code
Mise en oeuvre d'un écran LCD
Les écrans dont vous disposez sont de "récupération". Il faudra adapter ce qui suit en fonction de l'écran LCD
fourni.
Question:
1. Connecter l'écran à la carte Arduino (souvent en liaison série)
2. Aidez-vous de Datasheet pour réaliser un programme qui affiche "bonjour le monde" sur l'écran.
Remarque : deux bibliothèques sont nécessaire : Wire.h et LiquidCrystal_I2C.h
Uilisation simultanée Ecran/Clavier et simulation sa saisie de code
Question:
1. Mixer les deux programmes pour pouvoir afficher directement à l'écran la touche appuyée
2. Récupérer dans une String quatre chiffres entrés
3. Comparer cette String avec une String "mot de pass". Ecrire OK si elles sont identiques, sinon écrire KO
4. Mettre votre programme sur la maquette. Si le code est bon, ouvrir le verrou de la porte, sinon aafficher
une invite pour recommencer
TP N14 : Conception et réalisation des applications embarquées.
Classes : M1-EEA
UE: Microprocesseurs et microcontroleurs Enseignant : Dr GOUNE
Travail demandé :
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 lacarte 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.
View publication stats