Vous êtes sur la page 1sur 75

Microcontrôleurs

M. Mourad BOUAABID
Logique câblée vs Logique
programmée
Champs d’application des systèmes
programmés
• Suiveur de ligne
Champs d’application des systèmes
programmés
• Suiveur de ligne

Capteur Infrarouge
Champs d’application des systèmes
programmés
• Suiveur de soleil
Champs d’application des systèmes
programmés
• Suiveur de soleil

Capteur de lumière : LDR


Champs d’application des systèmes
programmés
• Commande d’un moteur à CC
Champs d’application des systèmes
programmés
• Commande d’un moteur synchrone (Brushless)
Champs d’application des systèmes
programmés
• Domotique
Champs d’application des systèmes
programmés
• Commande d’un servomoteur

Asservissement de position
Champs d’application des systèmes
programmés
• Distributeur du savon automatique
Architecture de Harvard

Processeur communique avec la mémoire de données et celle du


programme avec 2 bus distincts.
Cette approche minimise le temps d’exécution du programme.

12
Architecture de Neumann

Processeur communique avec la mémoire de données et celle du


programme avec 1 bus commun.
Cette approche augment relativement le temps d’exécution
13
du programme.
µProcesseur vs µContrôleur
µp µc
Avantages Traitement complexe Architecture réduite
Temps d’exécution réduit
Inconvénients Processeur nécessite Limité en traitement
des circuits annexes

• Microprocesseurs utilisent l’architecture de Neumann


• Microcontrôleurs utilisent l’architecture de Harvard

14
Structure de Arduino uno

15
Caractéristiques d’ Arduino uno

14 entrées/sorties numériques


6 entrées analogiques
une mémoire flash de 32 KB
SRAM 2 KB
EPPROM de 1 KB

16
Arduino nano

17
Caractéristiques de Arduino nano

Il existe une similitude entre la carte Arduino


Nano et la carte Arduino Uno, en ce sens que
les deux sont basées sur un ATMega328
couplé à un quartz de 16 MHz. On peut donc
affirmer que la Nano est tout simplement le
format réduit de l’Arduino UNO

18
Caractéristiques de Arduino nano -
suite

• Microprocesseur : ATMega328
• Mémoire flash : 32 ko
• Mémoire SRAM : 2 ko
• Mémoire EEPROM : 1 ko
• 20 broches d’entrées et sorties, dont 6 broches
PWM et 6 broches d’entrées analogiques 10 bits
• 2 broches uniquement d’entrée analogique 10
bits

19
Exemple d’application
Pilotage du servomoteur
Schéma sur simulateur (ISIS)
Signal Analogique vs Numérique

Signal continu Signal Discret


22
Systèmes de numérisation
Décimal

23
Systèmes de numérisation
Binaire

24
Systèmes de numérisation
Passage du décimal en binaire

25
Systèmes de numérisation
Passage du décimal en octal

26
Systèmes de numérisation
Passage du décimal en hexadécimal

27
Systèmes de numérisation
Exemples de cas de conversion

28
Systèmes de numérisation
Résumé des règles de passage entre
diverses bases

29
Microcontrôleurs
Un microcontrôleur noté µc, uc ou MCU est
un circuit intégré qui regroupe tous les
éléments essentiels d’une structure minimale
programmable :

Processeur
Mémoires (morte et vive)
Unités périphériques et interfaces d’ E/S.

30
Familles des microcontrôleurs
La famille Atmel AVR (utilisée par des
cartes Wiring et Arduino)
La familles PIC de Microchip (16F84, 16F628,
18F4550, …)
La famille Intel (8051, …)
La famille Motorola (68HC11, …)
La famille ARM Cortex-M et Cortex-R (STM32)
…..
31
Exemple de famille de mc
Atmel AVR : Arduino Uno
Arduino Uno est un microcontrôleur
programmable qui permet, de contrôler une
partie opérative comme:
Moteurs : CC , Pas à Pas, MS : Brushless, Servos.
Convertisseurs statiques : Hacheurs, onduleurs, ..
Il permet aussi de capter des informations via des
capteurs.
Ces informations seront exploitées pour prendre
une décision et déclencher une commande
adéquate.
32
IDE Arduino

33
Structure d’un programme

34
Paramétrage : choix de la carte

35
Paramétrage : choix du port de
communication

36
Initialisation de direction des ports

pinMode(numéro de pin, direction);


PinMode : une fonction qui a deux arguments
Direction : prend soit OUTPUT ou INPUT
37
Lire ou Ecrire sur une pin
Ecriture:
digitalWrite(numéro pin, état de sortie);
Etat de sortie prend : HIGH (1) ou LOW (0)

Lecture:
Variable = digitalRead(numéro pin);

38
Notion de variable
Le code exploité par IDE Arduino est C++:
Une variable est un emplacement mémoire
(RAM) dont le contenu peut être modifié.
Pour utiliser une variable on doit préciser : son
nom (identifiant) et son type, c’est la
déclaration qui est sous-forme :
Type identifiant;
Exemple : int A; ou float X,Y;
39
Types supportés par IDE Arduino
boolean
char
byte
int et unsigned int
long et unsigned long
float
double
string ou char [ ]

40
Temporisation
Par fois on veut effectuer une pause pendant une
durée bien précise:
 On utilise une temporisation
La fonction delay(temps en ms);
Le temps d’attente est un entier et il peut varier de:
1 ms et 50 jours
Pendant la pause d’autre fonctionnalités
continuent à fonctionner comme les horloges les
ports de communication.

41
Temporisation - suite
Pour les temporisations en microsecondes
 On utilise la fonction
delayMicroseconds(temps en µs);
Le temps d’attente est un entier et il peut varier de:
1 µs et 16 ms
Il existe deux fonctions qui retournent le nombre
de ms (unsigned int) respectivement en micro
passé depuis le démarrage du programme :
millis() et micros()

42
Première application
Clignotement de 2 LED

43
Direction des PINS et Clignotement
void setup() {
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop() {
digitalWrite(8,LOW); digitalWrite(9,LOW);
delay(1000);
digitalWrite(8,HIGH); digitalWrite(9,HIGH);
delay(1000);
}

44
PWM

Un ensemble de sorties numériques peuvent recevoir un signal


rectangulaire
La charge de chaque sortie PWM reçoit une valeur moyenne :
Valeur Moyenne = Rapport cyclique * Vmax

45
Broches supportant PWM

Sur Uno la fréquence sur 3, 9, 10 et 11 est : 490 Hz


Sur 5 et 6 est : 980 Hz

46
Applications de PWM

Commande pour la sortie PWM :


analogWrite(num sortie, valeur) Valeur est comprise
entre 0 et 255
47
Luministe d’une lampe
const int LED = 9;
byte luminosite = 0;
void setup()
{}
void loop()
{
analogWrite(pinDEL, luminosite);
luminosite++;
delay(4);
} Lors de PWM, on ne précise pas la direction
De la PIN concernée

48
Notification par LED pour indiquer la
présence d’un obstacle

49
Programme
const int IR = 8;
const int LED = 9; int val;
void setup()
{pinMode(LED,OUTPUT); pinMode(IR,INPUT);
digitalWrite(LED,LOW);}
void loop()
{ val=digitalRead(IR);
if(val==1) for(int i=0;i<4;i++){ digitalWrite(LED,0);
delay(40); digitalWrite(LED,1); delay(40);}
else
digitalWrite(LED,0);
delay(4); }
50
LCD 16X2
LCD 16X2
LCD 16X2
Schéma de test
Test de l’afficheur LCD 16X2
• Initialisation de l’afficheur:
Il faut importer la librairie du LCD:
#include<LiquidCrystal.h>
En suite, il faut déclarer un objet LCD:
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
lcd est une variable composée on parle d’objet
Démarrer l’afficheur:
lcd.begin(16,2);
begin est une fonction appelée par l’objet lcd, on
parle d’une méthode
Test de l’afficheur LCD 16X2
• Commandes de base:
Vider l’afficheur:
lcd.clear();
Positionner le focus:
lcd.setCursor(col, row);
Afficher un message:
lcd.print(……);
Test de LCD 16X2
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6, 8, 9, 10, 11);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.clear();
lcdsetCursor(0,0);
lcd.print("Informatique");
delay(50);
}
Test2 de LCD 16X2 :Compteur
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6, 8, 9, 10, 11);
int val=0;
void setup() {
lcd.begin(16, 2);}
void loop() {
lcd.clear();
lcd.setCursor(4,0);
lcd.print(« Compteur");
lcd.setCursor(7,1);
lcd.print(val);
val++;
If(val>40) val=0;
delay(50);}
Test de LCD 16X2
#include <LiquidCrystal.h>
LiquidCrystal lcd(9,8, 8, 9, 10, 11);
//LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

const byte TRIGGER = 2; // Broche TRIGGER


const byte ECHO = 3; // Broche ECHO
/* Constantes pour le timeout */
const unsigned long TIMEOUT = 25000;
// 25ms = 8m à 340m/s
/* Vitesse du son en mm/us */
const float SPEED = 340.0 / 1000;
Mesure de distance
Principe du capteur Ultrason
LDR

Aucun allumage sur LDR


la LED S’allume.

Un flux lumineux sur


LDR , la LED
s’éteint.

Proposer un programme
Assurant ce
fonctionnement.

62
Mesure de distance
Schéma de simulation
Programme sous Arduino : En-tête

tr : déclenchement de mesure
echo : entrée indiquant l’arrivée de l’onde reçue
delai : temps max après lequel, on annule la mesure
vitesse : vitesse de l’onde ultrason mm/µs
Programme sous Arduino : setup

• On démarre l’afficheur LCD


• On configure tr en sortie
• On configure echo en entrée
Programme sous Arduino : loop

(1) Envoi d’une impulsion positive de 10 microsecondes


(2) Attente d’un niveau haut
(3) Calcul de la distance
(4) Vider l’afficheur
(5) Positionner le curseur
(6) Affichage d’un message
(7) Repositionner le curseur
(8) Affichage de la distance calculée
(9) attente
SmartBox
SmartBox
• On veut créer à partir du schéma précédent,
un système que l’on désigne smartBox
• Une fois un obstacle est détecté, le
servomoteur ouvre une boîte.
• En absence d’obstacle, la boîte s’ouvre.
Servomoteur
Principe de fonctionnement du
Servomoteur
Principe de fonctionnement du
Servomoteur
Pour que le servomoteur reste à une position donnée, il
faut transmettre toutes les 20 millisecondes (soit à une
fréquence de 50Hz) une impulsion d'une longueur
comprise entre 1 et 2 millisecondes.
• Une impulsion de 1 milliseconde correspond à un angle
de 0°.
• Une impulsion de 2 millisecondes correspond à un
angle de 180°.
• En envoyant une impulsion d'une longueur
intermédiaire, on obtient des angles différents, 90° avec
une impulsion de 1.5 milliseconde par exemple.
Arduino & Servomoteur
Câblage
Commande du servomoteur
On doit importer la bibliothèque du servomoteur
#include <Servo.h>
• Déclarer un objet de type Servo
Servo serv;

• Dans la partie setup du programme, on doit attacher une PIN


à cet objet
serv.attach(9); // ici la PIN est 9
• On impose un angle de rotation par :
serv.write(45); // ici l’angle est 45°

Vous aimerez peut-être aussi