Académique Documents
Professionnel Documents
Culture Documents
-------------------
Ministère de L’Enseignement Supérieur de la Recherche Scientifique et
de l’Innovation
-------------------
Secrétariat Général
-------------------
UNIVERSITE NAZI BONI DE BOBO DIOULASSO
-------------------
-------------------
Deuxième année d’ingéniorat
TRAVAUX PRATIQUE 2
But
Le but de ce TP est de pouvoir échanger des données entre 2 cartes Arduino UNO par
l'intermédiaire du bus I2C. L’Arduino A sera configuré comme périphérique maître qui doit
arriver à envoyer des requêtes de lire ou d’écriture à l’Arduino B qui à son tour sera configuré
comme périphérique esclave capable de répondre à la requête du maître.
a. Partie théorique
− Donnons la différence fondamentale entre la communication sur liaison RS232 et sur liaison
I2C
La différence fondamentale entre la communication sur liaison RS232 et sur liaison I2C réside
dans le mode de communication. En effet, la liaison RS232 est un protocole de communication
série asynchrone qui utilise deux fils data (Rx et Tx) pour transmettre ou recevoir des données.
C’est un protocole mono-maître. Quant à la liaison I2C elle est un mode de communication
série synchrone qui utilise un fil data (SDA) pour les données et un fil horloge (SCL) qui impose
sa vitesse au système. C’est un protocole multi-maître qui fonctionne par adressage
(Halfduplex).
− Les différentes étapes de la communication ainsi que les valeurs transmises à chaque étape.
Exemple 1 :
Repos : SDA et SCL sont à 1. Aucun périphérique n’émet.
Start : pour transmettre des données, un périphérique maître envoie un signal de départ
sur le bus I2C. ce signal indique le début de la transmission.
Bit de start = 0.
1
Exemple 2 :
Start : bit de start = 0
Adresse : 1111001
R/W : R/W = 0 cela indique que le maître souhaite envoyer une requête d’écriture.
ACK : il indique la fin de la requête souhaiter par le maître. ACK = 1.
Stop : il indique la fin de la communication. Bit de stop = 1
SDA et SCL
La carte Arduino n’a qu’un seul module I2C, mais elle fournit ces lignes SDA et SCL à deux
endroits différents.
− Donnons le rôle de chaque Arduino A et B (maitre ou esclave)
L’Arduino A est le périphérique maître et l’Arduino B est le périphérique escale.
b. Mesure
Présentation du matériel
La carte Arduino UNO
La carte Arduino repose sur un microcontrôleur de type ATMEL de référence ATMega328 et
des composants électroniques complémentaires associée à des entrées et sorties qui
permettent à l'utilisateur de brancher différents types d'éléments externes. Le microcontrôleur
programmé peut analyser et produire des signaux électriques de manière à effectuer des
tâches très diverses. Arduino est utilisé dans beaucoup d'applications comme l'électronique
industrielle et embarquée, pilotage d'un robot, commande des moteurs et faire des jeux de
lumières, communiquer avec l'ordinateur, commander des appareils mobiles. Chaque module
d’Arduino possède un régulateur de tension +5 V et un oscillateur à quartez 16 MHz. Pour
programmer cette carte, on utilise le logiciel IDE Arduino.
Déroulement du programme
Tinkercad
Il s’agit d’une solution de CAO (conception assistée par ordinateur) conçu pour le secteur de
l’éducation qui permet de créer des conceptions en 3D et des simulations électroniques à l’aide
d’outils de codage ou de conception intégrés.
Ecran LCD
Les écrans LCD existent depuis 1971. Ils n'ont pas cessé de se développer depuis, et équipent
maintenant bien des appareils à affichage embarqué (appareils photo, digicodes, montres,
téléphones...). LCD est l'abréviation anglaise de "liquid crystal display" qui veut dire : afficheur
à cristaux liquides. L'écran LCD que nous allons utiliser est un écran permettant l'affichage de
16x2 caractères, c'est-à-dire deux lignes de 16 caractères.
Capteur de température TMP36
Ce capteur de température permet d’acquérir une température ambiante. Une fois alimenté, il
va délivrer une tension analogique proportionnelle à la température. Sa précision est de ± 2℃,
son échelle est de 10𝑚𝑉/℃ et sa calibration est de 750𝑚𝑉 à 25℃.
Wire.available() : cette fonction est utilisée pour vérifier s’il y a des données disponibles à lire
sur le bus I2C après avoir effectué une demande pour recevoir des données d’un périphérique
esclave. Elle retourne le nombre de bytes disponibles à la lecture.
Wire.read() : cette fonction est utilisée pour lire un octet qui a été transmis d’un périphérique
esclave à un maître ou a été transmis d’un maître à un esclave.
Wire.onRequest(requestEvent) :
onRequest() permet de définir une fonction de rappel pour traiter les demandes de données
provenant du maître. requestEvent : cette fonction sera automatiquement appelée lorsque le
maître envoie une requête de données à l’esclave.
Wire.onRequest(requestEvent) : elle permet d’enregistrer un événement à appeler lorsqu’un
maître demande des données à ce périphérique esclave.
void requestEvent() : fonction qui s’exécute chaque fois que des données sont demandées
par le maître à l’esclave.