Académique Documents
Professionnel Documents
Culture Documents
Fouad MOUTAOUAKKIL
Généralités et définitions
Système embarqué
Électronique Informatique
Microcontrôleur Microprocesseur
comme un mini-ordinateur doté d’un Une puce intégrée au silicium avec
processeur, de RAM, de ROM, de ports
série, de timers et des périphériques E/S, uniquement une unité de traitement
le tout intégré sur une seule puce. centrale.
Les microcontrôleurs ont un grand Le microprocesseur a moins de
nombre de registres, ce qui facilite
l’écriture des programmes. registres, donc plus d’opérations sont
basées sur la mémoire.
est conçu pour effectuer des tâches
spécifiques aux applications nécessitant sont conçus pour des applications
un certain degré de contrôle, telles que
télécommande, écran à LED, montres générales telles que les opérations
intelligentes, véhicules, contrôle des feux logiques dans un système
de circulation, contrôle de température, informatique.
etc.
La mémoire
Raspberry Pi Arduino
C’est un mini ordinateur avec un C’est un microcontrôleur qui exécute
raspberry OS qui exécute plusieurs le même programme.
programme
C’est simple à communiquer avec
C’est compliqué à communiquer d’autre modules ou cartes
avec différents capteurs et ça
demande des librairies spécifiques C’est pas cher
C’est cher Ça exige un hardware externe pour
Ça connecte à internet facilement connecter à l’internet
avec sa port Ethernet et le port USB
Avantages d’Arduino
Pas cher
Environnement de programmation clair et simple
Multiplateforme : tourne sous Windows, Macintosh et Linux
Nombreuses librairies disponibles avec diverses fonctions implémentées
Logiciel et matériel open source et extensible
Nombreux conseils, tutoriaux et exemples en ligne (forums, site perso
etc...)
Les plus populaires boards
Uno
Atmega328 processeur
cadencé à 16MHz
Mémoire flash: 32Kb
Mémoire RAM: 2Kb
EEPROM: 1Kb
14 broches d’E/S
6 entrées analogiques 10 bits
Prototypage et support des
autres modules( des simples
robot, voiture
télécommandée, console des
jeux…)
Nano
Atmega328 processeur cadencé
à 16MHz
Mémoire flash: 32Kb
Mémoire RAM: 2Kb
EEPROM: 1Kb
14 broches d’E/S
6 entrées analogiques 10 bits
Le moins cher
Ne peut pas connecter à
d’autre module
Petit espace, pas cher ( drones,
electronique portable…)
Due
Processeur ATSAM3X8E Cortex-M3
cadencé à 84MHz
Mémoire flash: 512Kb
Mémoire RAM: 96Kb
EEPROM: 1Kb
54 broches d’E/S
12 entrées analogiques 10 bits
2 sorties analogiques
Une des plus cher
Prototypage haute performance(
processeur de données de sources
multiples, automatisation des
maisons, contrôleur de machine…)
Mega 2560
processeur ATmega2560
cadencé à 16MHz
Mémoire flash: 256Kb
Mémoire RAM: 8Kb
EEPROM: 4Kb
54 broches d’E/S
16 entrées analogiques 10
bits
Haute exigences E/S avec
un stockage mémoire
intéressant ( automatisation
des maisons et des chaines
de production…)
Les plus populaires shields
“
Sheild Arduino
”
Un shield est une carte d'interface spécialement dédiée à l'Arduino. Ces
cartes ont des dimensions sensiblement voisines de la carte Arduino et
peuvent s'enficher directement sur les connecteurs de celle-ci.
Pour prototypage
Cette plaque permet
de câbler de
nombreux composants
sans faire de soudure
et garder le montage
entièrement
démontable.
Une fois enfichée sur la
carte Arduino,
ce shield reprend tels
quels les connecteurs
de part et d'autre de la
carte.
Pour affichage
Ce shield, en plus de
son écran LCD (deux
lignes de 16
caractères)
comporte cinq
boutons-poussoirs
programmables.
Pour la commande
des moteurs
Ce shield permet de
piloter jusqu'à deux
moteurs électriques
simultanément (idéal pour
un petit robot roulant à
deux roues motorisées
indépendantes)
Avec deux connecteurs
numériques utilisés par
moteur seulement, on
peut contrôler le sens et la
vitesse de rotation du
moteur.
Pour le contrôle du
température
Ce shield permet de
rendre disponible l'état
d'un capteur de
température sur un réseau
local Ethernet ou sur
Internet et transformer
Arduino en véritable
serveur web connecté sur
l'extérieur.
Il evolue avec une
bibliothèque très
complète et de nombreux
exemples de programmes.
Le langage Arduino
Définition
Une carte Arduino est une petite (5,33 x 6,85 cm) carte électronique équipée d'un
microcontrôleur. Le microcontrôleur permet, à partir d'événements détectés par des
capteurs, de programmer et commander des actionneurs ; la carte Arduino est donc une
interface programmable.
Capteurs Actionneurs
Le syntaxe de langage
Le syntaxe du code
Le syntaxe d’un langage de programmation est l’ensemble des règles d’écriture liées à ce langage.
Avec Arduino, nous devons utiliser un code minimal lorsque l’on crée un programme. Ce code permet de
diviser le programme que nous allons créer en deux grosses parties.
La Fonction Setup
Cette fonction setup() est appelée une seule fois lorsque le programme commence. C’est
pourquoi c’est dans cette fonction que l’on va écrire le code qui n’a besoin d’être exécuté
qu’une seule fois. On appelle cette fonction : fonction d’initialisation. On y retrouvera la
mise en place des différentes sorties et quelques autres réglages.
La fonction loop
Une fois que l’on a initialisé le programme il faut ensuite créer son "cœur", autrement dit le
programme en lui même. C’est donc dans cette fonction loop() où l’on va écrire le contenu du
programme. Il faut savoir que cette fonction est appelée en permanence, c’est-à-dire qu’elle est
exécutée une fois, puis lorsque son exécution est terminée, on la ré-exécute et encore et encore.
On parle de boucle infinie.
Syntaxe
Les instructions sont des lignes de code qui disent au programme : "fait ceci, fait cela,
…’’
Les points virgules terminent les instructions. Les points virgules ( ; ) sont synonymes
d’erreurs car il arrive très souvent de les oublier à la fin des instructions. Par conséquent
le code ne marche pas et la recherche de l’erreur peut nous prendre un temps conséquent .
Les accolades sont les "conteneurs" du code du programme. Elles sont propres aux
fonctions, aux conditions et aux boucles. Les instructions du programme sont écrites à
l’intérieur de ces accolades.
Les variables
Une variable
Type Nombre qu’il Nombre maximale qu’il stocke Taille ( en bits) Taille ( en
stocke octets)
Si à présent notre variable "x" ne prend jamais une valeur négative (-20, -78, …), alors on utilisera
un type non-signé. C’est à dire, dans notre cas, un char dont la valeur n’est plus de -128 à +127,
mais de 0 à 255. Voici le tableau des types non signés, on repère ces types par le mot unsigned (de
l’anglais : non-signé) qui les précède :
Type Nombre stocké Plage des valeurs Taille (en Taille (en octets)
acceptés bits)
Unsigned char entier non négatif 0 à 255 8 bits 1 octet
Unsigned long Entier non négatif 0 à 4 294 967 295 32 bits 4 octets
Les types
Une des particularités du langage Arduino est qu’il accepte un nombre plus important de
types de variables.
Les variables booléennes sont des variables qui ne peuvent prendre que deux valeurs : ou
VRAI ou FAUX. Elles sont utilisées notamment dans les boucles et les conditions. Une
variable booléenne peut être définie de plusieurs manières :
Les types
Quand une variable vaut "0", on peut considérer cette variable comme une variable
booléenne, elle est donc fausse. En revanche, lorsqu’elle vaut "1" ou n’importe quelle
valeurs différente de zéro, on peut aussi la considérer comme une variable booléenne,
elle est donc vraie. Voilà un exemple :
Les types
Le langage Arduino accepte aussi une troisième forme d’écriture (qui lui sert pour utiliser
les broches de sorties du microcontrôleur) :
Les opérations
Les opérateurs
Exemple1 Exemple 2
float x = 0; float x = 0;
float y = 15; float y = 15;
float z = 0; int z = 0;
x = 12 / 2; x = 12 / 2;
Z= y / x; Z= y / x;
Opérateurs de comparaison
Int a=10;
Int b=20;
Int c=30;
a++; a=11
b--; b=19
c-=a; c=19
c!=b; false
b+=a; b=30
Les conditions
Les conditions
Ça prend une expression entre parenthèse et une instruction ou plusieurs instruction entre
accolade.
Si la condition entre parenthèse est « true » alors les instructions sont exécutés sinon ils
sont ignorés et sautés
Exemple
Int a=5;
Int b=9;
Void setup (){
}
Void loop(){
If (a>b)
a++;
If ((a<b)&& (b!=0))
a+=b;
b--;
}
If…else
La condition if peut être suivi par un bloc optionnelle « else » qui s’exécute quand la
condition est « false »
If …else if…else
Le condition if peut être aussi suivi d’un condition if…else, qui est très utile pour tester
plusieurs conditions avec une seule boucle else if…else
Lors de l’utilisation de l’instruction if...else if…else, il faut savoir:
L’instruction if peut avoir zéro ou une instruction else et il doit être après tout instruction else if
L’instruction if peut avoir zéro ou plusieurs instruction else if et doivent être avant l’instruction
else
Une fois une instruction else if réussi, aucune des autres instructions else if se testent
Switch…case
En programmation, une boucle est une instruction qui permet de répéter un bout de code.
Cela va nous permettre de faire se répéter un bout de programme ou un programme entier. Il
existe deux types principaux de boucles :
La boucle conditionnelle, qui teste une condition et qui exécute les instructions qu’elle
contient tant que la condition testée est vraie.
La boucle de répétition, qui exécute les instructions qu’elle contient, un nombre de fois
prédéterminé.
La boucle while
Cette boucle est similaire à la précédente. Mais il y a une différence qui a son
importance ! En effet, si on prête attention à la place la condition dans la boucle while,
on s’aperçoit qu’elle est testée avant de rentrer dans la boucle. Tandis que dans une
boucle do…while , la condition est testée seulement lorsque le programme est rentré dans
la boucle :
La boucle do while
La boucle infinie
La boucle infinie est très simple à réaliser, d’autant plus qu’elle est parfois très utile. Il
suffit simplement d’utiliser une while et de lui assigner comme condition une valeur qui
ne change jamais. En l’occurrence, on met souvent le chiffre 1.
La boucle for
Cette boucle est exécutée X fois. Contrairement aux deux boucles précédentes, on doit lui
donner trois paramètres.
Initialisation de variable
Condition à laquelle la boucle s’arête
Le pas d’éxecution
Les fonctions
Les fonctions
Dans un programme, les lignes sont souvent très nombreuses. Il devient alors impératif de
séparer le programme en petits bouts. Standardiser les fragments de code en des fonctions a
plusieurs avantages:
Les fonctions permettent aux programmeurs de rester organiser et de concevoir le
programme
Les fonctions codent une action en une seule place de sorte qu’on le débogue qu’une seule
fois
Ils diminuent la probabilité d’avoir des erreurs si on fait des modifications du code
Les fonctions rendent le code plus petit et compact et plus lisible
Les fonctions
Exemple 1
44
Exemple2
440
Les fonctions
256
Les tableaux
Les Tableaux
Son but est de stocker des éléments de mêmes types en les mettant dans des cases.
Un tableau, tout comme sous Excel, c’est un ensemble constitué de cases, lesquels vont
contenir des informations. En programmation, ces informations seront des nombres.
Chaque case d’un tableau contiendra une valeur.
Un tableau réserve un espace mémoire, pour déclarer le type des éléments et le nombre
demandé par le tableau, on déclare un tableau comme suit:
Les tableaux
Pour accéder à une case d’un tableau, il suffit de connaître l’indice de la case à laquelle
on veut accéder. L’indice c’est le numéro de la case qu’on veut lire/écrire. Par exemple,
pour lire la valeur de la case 10 (donc indice 9 car on commence à 0):
Les tableaux
Si on veut aller modifier cette même valeur, on fait comme avec une variable normale, il
suffit d’utiliser l’opérateur ' = ' :
L’initialisation d’un tableau peut se faire directement lors de sa création, comme ceci :
Les tableaux
On peut également initialiser le tableau dans une boucle. Dans ce cas, on va remplir les
cases par le même élément:
Les tableaux
Les tableaux
Tableaux multidimensionnels
En C, un tableau à deux dimensions A est à interpréter comme un tableau (unidimensionnel)
de dimension L dont chaque composante est un tableau (unidimensionnel) de dimension C.
On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau.
L et C sont alors les deux dimensions du tableau.
On dit qu'un tableau à deux dimensions est carré, si L est égal à C.
Les tableaux
Ligne2
Les tableaux
Pour initialiser un tableau multidimensionnel, c’est possible de remplir les cases une par
une. Par exemple, un tableau bidimensionnel avec les valeurs 1 et 2 dans la ligne 0 et les
valeurs 3 et 4 dans la line 1, est déclarée comme suit:
Les valeurs sont groupés entre accolades, donc 1 et 2 initialisent respectivement b[0][0] et
b[0][1] et 3 et 4 initialisent respectivement b[1][0] et b[1][1]. Si on n’a pas suffisamment
d’initialiseurs pour un ligne défini, les éléments restants de cette ligne sont initialisés à 0.
Les chaines de caractères
Les chaines de caractères
Les chaines de caractères « strings » sont dédiés à stocker un texte, ils peuvent être utilisés
par exemple à afficher un texte sur LCD.
Il y a deux méthodes à manipuler les chaines de caractères en Arduino:
Un tableau de caractère comme utilisé en langage C
Le String Arduino qui nous permet à utiliser un objet String dans un Sketch
Les chaines de caractère
On va étudier tout d’abord le premier type qui est la chaine de caractères qui est une série
de caractères. On a déjà vu qu’un tableau est un série consécutive de la même type de
variable stocké dans la mémoire. Donc , la chaine de caractères est un tableau des
variable de types caractères.
La chaine de caractère est un tableau spécial avec un élément extra à la fin de la chaine
qui a généralement la valeur ¨\0¨. Alors, Une chaîne de caractère doit impérativement
contenir un caractère spécial à la fin de la chaîne, appelé « caractère de fin de chaîne ».
Les chaines de caractère
Les chaines de caractères
Les chaines de caractères
L’autre méthode pour manipuler les chaines de caractères c’est de déclarer un objet string
Un objet string est un ¨construct¨ qui contient des fonctions et des informations.
L’objet string peut être créer comme un variable et on peut l’affecter une valeur
L’objet est déclaré au début de sketch comme suit:
Les chaines de caractères
toUpperCase(): c’est une méthode qui opère sur la chaine de caractère inclue dans la
variable, elle met tous les lettres de la chaine en majuscule.
Replace(): c’est une méthode dédié pour les chaines de caractère qui remplacent le
premier élément par le deuxième.
length() : c’est une méthode qui retourne la longueur de la chaine de caractère
Pour remplacer la chaine de caractère, on utilise l’opérateur d’affectation =
Les chaines de caractére
En arduino, on peut allumer une led ou afficher un message mais ou est la spécificité
d’arduino puisque on peut tout de même allumer un led avec une simple pile.
C’est la notion du temps qui fait la différence. En effet, on peut , avec arduino, faire
clignoter un led pendant un certain laps de temps.
Pour le faire, Arduino procure 4 différentes méthodes qui manipulent le temps.
Fonction delay()
La fonction admet un paramètre qui est le temps pendant lequel on veut mettre en pause
le programme. Elle accepte un seule paramètre donné en entier. Ce temps doit être donné
en millisecondes. C’est-à-dire que si vous voulez arrêter le programme pendant une
seconde, il va falloir donner à la fonction ce même temps, écrit en millisecondes, soit
1000ms. La fonction est simple à utiliser :
Fonction delay()