REPUBLIQUE DE CAMEROUN REPUBLIC OF CAMEROON
Paix – Travail - Patrie Peace-Work-Fatherland
MINISTERE DE L’ENSEIGNEMENT SUPERIEUR MINISTRY OF HIGHER EDUCATION
UNIVERSITE DE DOUALA THE UNIVERSITY OF DOUALA
INSTITUT UNIVERSITAIRE DE TECHNOLOGIE UNIVERSITY INSTITUTE
OFTECHNOLOGY
BP. 8698 DOUALA ; Email : [Link]@[Link] [Link]. 8698 DOUALA ; Email : [Link]@[Link]
DEPARTEMENT DE GENIE ELECTRIQUE ET INFORMATIQUE INDUSTRIELLE
DUT GEII1/GBM1
EC :TP ELECTRONIQUE
Laboratoire d’électronique
Préparé par Mr ONANA JOSEPH
THEME 1 : PROGRAMMATION DES SYSTEMES A
MICROCONTROLEUR
Principe :
Un microcontrôleur est un petit processeur informatique relié à des entrées et des sorties numériques
(0 ou 1) ou analogiques (tension variable). Il est capable de mémoriser et d'exécuter un programme
visant à interpréter les entrées pour agir sur les sorties. Il se programme en général à l'aide d'un
ordinateur mais peut fonctionner de manière autonome. En milieu industriel, les automates
programmables qui servent à gérer et piloter des machines en sont une illustration. Ce type de machine
intervient sur la commande d'un système mais ne peut délivrer beaucoup de puissance. Pour cela, on
relaye ses commandes avec des transistors ou des relais.
Il existe de nombreux types et tailles de microcontrôleurs avec plus ou moins d'entrées /sorties et
d'interfaces. À petite échelle, les PIC (produits par la société Microchip) sont des circuits intégrés bien
connus des électroniciens depuis de nombreuses années. De nombreuses autres marques comme
ATMEL, STMicroelectronics, Parallax ou Motorola produisent également des machines de ce type. Ils
sont en général programmés en C/C++ et nécessitent des connaissances approfondies en électronique.
La plate-forme Arduino a apporté une avancée majeure dans l'accessibilité de cette technologie au plus
grand nombre, par sa simplicité d'utilisation et son coût abordable.
Dans ce TP nous traiterons des microcontrôleurs de la famille ATMEL plus précisément de la carte
arduino UNO.
La puce la plus courante qui équipe la carte Arduino est la ATMEGA328. Certains anciens modèles
ont une puce ATMEGA168 qui est dotée d'un peu moins de mémoire. Les cartes Arduino Mega sont
dotées d'une puce ATMEGA644 qui a plus de mémoire et plus d'entrées/sorties. Tous les processeurs
de la famille ATMEGA se programment sensiblement de la même manière mais des différences
peuvent apparaître pour des fonctions plus complexes.
Programmer Arduino
Le langage de programmation
Un langage de programmation est un langage permettant à un être humain d'écrire un ensemble
d'instructions (code source) qui seront directement converties en langage machine grâce à un
compilateur (c'est la compilation). L'exécution d'un programme Arduino s'effectue de manière
séquentielle, c'est-à-dire que les instructions sont exécutées les unes à la suite des autres. Voyons plus
en détail la structure d'un programme écrit en Arduino.
La structure d'un programme
Un programme Arduino comporte trois parties :
Préparé par Mr ONANA JOSEPH
1. La partie déclaration des variables (optionnelle) ;
2. La partie initialisation et configuration des entrées/sorties : la fonction setup () ;
3. La partie principale qui s'exécute en boucle : la fonction loop ().
Dans chaque partie d'un programme sont utilisées différentes instructions issues de la syntaxe du
langage Arduino.
La syntaxe du langage
Ponctuation
Le code est structuré par une ponctuation stricte :
● toute ligne de code se termine par un point-virgule « ; » ;
● le contenu d'une fonction est délimité par des accolades « { » et « } » ;
● les paramètres d'une fonction sont contenus pas des parenthèses « ( » et « ) ».
Une erreur fréquente consiste à oublier un de ces éléments.
Les variables
Préparé par Mr ONANA JOSEPH
Une variable est un espace réservé dans la mémoire de l'ordinateur. C'est comme un compartiment
dont la taille n'est adéquate que pour un seul type d'information. Elle est caractérisée par un nom qui
permet d'y accéder facilement.
Il existe différents types de variables identifiés par un mot-clé dont les principaux sont :
● nombres entiers (int) ;
● nombres à virgule flottante (float) ;
● texte (String) ;
valeurs vrai/faux (boolean).
Un nombre à décimales, par exemple 3.14159, peut se stocker dans une variable de type float. Notez
que l'on utilise un point et non une virgule pour les nombres à décimales. Dans Arduino, il est
nécessaire de déclarer les variables pour leur réserver un espace mémoire adéquat. On déclare une
variable en spécifiant son type, son nom, puis en lui assignant une valeur initiale (optionnelle).
Exemple : int ma_variable = 45; // int est le type, ma_variable le nom et
= 45 assigne une valeur.
Les fonctions
Une fonction (également désignée sous le nom de procédure ou de sous-routine) est un bloc
d'instructions que l'on peut appeler à tout endroit du programme. Le langage Arduino est constitué
d'un certain nombre de fonctions, par exemple analogRead(), digitalWrite() ou delay().
Il est possible de déclarer ses propres fonctions, par exemple :
void clignote(){
digitalWrite (brocheLED, HIGH);
delay (1000);
digitalWrite (brocheLED, LOW);
delay (1000);
}
Pour exécuter cette fonction, il suffit de l’appeler dans le void loop :
void loop(){
clignote();
On peut faire intervenir un ou des paramètres dans une fonction :
void clignote(int broche,int vitesse){
digitalWrite (broche, HIGH);
delay (1000/vitesse);
digitalWrite (broche, LOW);
delay (1000/vitesse);
}
Dans ce cas, l'on peut moduler leurs valeurs depuis la commande qui l'appelle :
clignote(5,1000); //la sortie 5 clignotera vite
clignote(3,250); //la sortie 3 clignotera lentement
Préparé par Mr ONANA JOSEPH
Les structures de contrôle
Les structures de contrôle sont des blocs d'instructions qui s'exécutent en fonction du respect d'un
certain nombre de conditions.
Il existe quatre types de structure.
if...else: exécute un code si certaines conditions sont remplies et éventuellement exécutera un autre
code avec sinon.
Exemple :
//si la valeur du capteur dépasse le seuil
if(valeurCapteur>seuil){
//appel de la fonction clignote
clignote();
}
while : exécute un code tant que certaines conditions sont remplies.
Exemple :
//tant que la valeur du capteur est supérieure à 250
while(valeurCapteur>250){
//allume la sortie 5
digitalWrite(5,HIGH);
//envoi le message "0" au port série
[Link](1);
//en boucle tant que valeurCapteur est supérieure à 250
}
[Link](0);
digitalWrite(5,LOW);
for : exécute un code pour un certain nombre de fois.
Exemple :
//pour i de 0 à 255, par pas de 1
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
switch/case : fait un choix entre plusieurs codes parmi une liste de possibilités
Exemple :
// fait un choix parmi plusieurs messages reçus
switch (message) {
case 0: //si le message est "0"
//allume que la sortie 3
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
Préparé par Mr ONANA JOSEPH
case 1: //si le message est "1"
//allume que la sortie 4
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
case 2: //si le message est "2"
//allume que la sortie 5
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
break;
}
EXERCICE 1 :
Principe de fonctionnement texte brillant
Ce projet permet de monter plusieurs LED sur une carte Arduino. Les LED sont ensuite pilotées à
partir de certaines touches du clavier de votre ordinateur pour en faire un magnifique jeu de lumière.
Dans ce projet, nous utiliserons le moniteur sériel pour activer les lumières
Préparation :
Des caractères sont saisis à partir du moniteur sériel de l'interface de programmation Arduino pour
allumer et éteindre les LED.
● Saisir 'R ou r' pour allumer la LED rouge.
● Saisir 'J ou j' pour allumer la LED jaune.
● Saisir' V ou v' pour allumer la LED verte.
● Saisir 'B ou b' pour allumer la LED bleue.
● Saisir 'E ou e' pour éteindre les LED
Préparé par Mr ONANA JOSEPH
1) A l’aide de la figure, dressez la liste du matériel.
2) Identifier les composants de ce circuit et donner leurs critères de dimensionnement.
Manipulation :
1) Réalisez le montage sous Proteus.
2) Réalisez le montage sur plaque a essais.
3) Recopiez le code et téléversez le dans la carte puis testez
//Déclaration des pins sur lesquelles sont connectées les LED
int pinLed3 = 8; // LED Bleue
int pinLed2 = 6; // LED Verte
int pinLed1 = 4; // LED Jaune
int pinLed0 = 2; // LED Rouge
//Déclaration de la variable contenant la valeur de la touche saisie au clavier
int octetRecu;
void setup() {
// Initialisation de la communication série
[Link](9600);
// Configuration des pins en sortie
// il est important pour le bon fonctionnement du montage de spécifier quelles
pins seront utilisées comme sortie.
pinMode(pinLed0, OUTPUT);
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
}
void loop() {
// Vérifie si il y a une donnée sérielle disponible
if ([Link]() > 0) {
// Lecture de l'octet présent dans la mémoire tampon (buffer)
octetRecu = [Link]();
if (octetRecu == 'R' || octetRecu == 'r') { //Si l'octet reçu est égal à R
ou r
digitalWrite(pinLed0, HIGH); //Allumer la LED connectée à pinLed0
[Link]("LED Rouge allumee"); //Afficher "LED Rouge allumée"
dans le moniteur série
}
if (octetRecu == 'J' || octetRecu == 'j') { //Si l'octet reçu est égal à J
ou j
digitalWrite(pinLed1, HIGH); //Allumer la LED connectée à pinLed1
[Link]("LED Jaune allumee"); //Afficher "LED Jaune allumée"
dans le moniteur série
}
Préparé par Mr ONANA JOSEPH
if (octetRecu == 'V' || octetRecu == 'v') { //Si l'octet reçu est égal à V
ou v
digitalWrite(pinLed2, HIGH); //Allumer la LED connectée à pinLed2
[Link]("LED Verte allumee"); //Afficher "LED Verte allumée"
dans le moniteur série
}
if (octetRecu == 'B' || octetRecu == 'b') { //Si l'octet reçu est égal à B
ou b
digitalWrite(pinLed3, HIGH); //Allumer la LED connectée à pinLed3
[Link]("LED Bleue allumee"); //Afficher "LED Bleue allumée"
dans le moniteur série
}
if (octetRecu == 'E' || octetRecu == 'e') { //Si l'octet reçu est égal à E
ou e
//Éteindre les LED connectées aux pinLed0, pinLed1, pinLed2 et pinLed3
digitalWrite(pinLed0, LOW);
digitalWrite(pinLed1, LOW);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
//Afficher "LED éteinte" dans le moniteur série
[Link]("LED eteinte");
}
}
}
4) Ressortez son typon sous Proteus.
5) Ressortez le typon sur plaque présensibilisée.
FEUILLE DE REPONSE A saisir et envoyer sous format ZIP
QUESTION DE COURS, PREPARATION, COMPTE RENDU
EXERCICE 2 :
Principe de fonctionnement: poubelle intelligente
Ce projet consiste à concevoir et réaliser une poubelle qui s’ouvrira automatique à l’approche d’un
utilisateur pour lui permettre de jeter son ordure et se refermera aussi tôt après la tache effectuée.
Préparation :
REALISEZ LE SYNOPTIQUE DE CE SYSTEME
Manipulation :
Préparé par Mr ONANA JOSEPH
1) Réalisez le montage sous Proteus
2) Réalisez ce projet en grandeur nature
QUESTION DE COURS, PREPARATION, COMPTE RENDU
Préparé par Mr ONANA JOSEPH