Les systèmes Embarqués (SE)
2
Vous souhaitez créer votre premier robot à moindre coût ? De
nombreux kits à base d’une carte Arduino sont disponibles sur le Net!
Ce petit robot roulant à vocation pédagogique possède deux roues indépendantes motorisées et peut être équipé de multiples capteurs pour détecter des obstacles, suivre une ligne au sol, etc.
Introduction
ARDUINO: carte à microcontrôleur + outil de développement +
communauté active.
Introduction
Une équipe de développeurs composée de Massimo Banzi, David
Cuartielles, Tom Igoe, Gianluca Martino, David Mellis et Nicholas Zambetti a imaginé un projet répondant au doux nom de Arduino et
mettant en œuvre une petite carte électronique programmable et un logiciel multiplateforme, qui puisse être accessible à tout un chacun dans le but de créer facilement des systèmes électroniques. Étant donné qu’il y a des débutants parmi nous, commençons par voir un peu le vocabulaire commun propre au domaine de l’électronique et de l’informatique.
Une carte électronique est un support plan, flexible ou rigide, généralement composé d’epoxy ou de fibre de verre. Elle possède des pistes électriques disposées sur une, deux ou plusieurs couches (en surface et/ou en interne) qui permettent la mise en relation électrique des composants électroniques. Chaque piste relie tel composant à tel autre, de façon à créer un système électronique qui fonctionne et qui réalise les opérations demandées.
Introduction
LES SYSTÈMES EMBARQUÉS ARDUINO
Les fondateurs de Arduino Présentation de Arduino par Massimo Banzi dans la conférence TED (Technology
Arduino
Pas cher!
Environnement de programmation clair et simple.
multiplateforme: tournes sous Windows, Macintosh, 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 …).
Existence de « shield »: ce sont des cartes supplémentaires qui se connectent sur le module arduino pour augmenter les possibilités comme par exemple: afficheur graphique couleur, interface Ethernet, GPS, …
Par sa simplicité d’utilisation, arduino est utilisé dans beaucoup d’applications comme l’électronique industrielle et embarquée, le modélisme, la domotique mais aussi dans des domaines différents comme l’art contemporain ou le spectacle!
Arduino
Voici quelques exemples d’utilisation possible :
Simuler le fonctionnement des portes logiques,
Permettre l’utilisation de différents capteurs,
Mettre en œuvre et faciliter la compréhension d’un réseau
informatique,
Se servir d’Arduino pour créer des maquettes animées
montrant le fonctionnement des collisions entres les plaques de
la croute terrestre, par exemple,
Donner un exemple concret d’utilisation des matrices avec un
clavier alphanumérique,
Être la base pour des étudiants ayant un PEF à faire,
…
Types de carte Arduino
8 • Arduino UNO • Arduino UNO R3 • Arduino LEONARDO • Arduino DUE • Arduino pro • Arduino Miniet bien d’autres platines …
• Arduino Mega 2560
Caractéristiques de la carte Arduino UNO
(53 mm x 68 mm )
Microcontrôleur ATmega328
Tension de fonctionnement 5V
Tension d’alimentation (recommandée) 7-12V
Tension d’alimentation (limites) 6-20V
Broches E/S numériques 14 (dont 6 disposent d’une sortie PWM)
Broches d’entrées analogiques 6
Intensité maxi disponible par broche E/S (5V) 40 mA Intensité maxi disponible par broche E/S (3.3V) 50 mA
Mémoire Programme Flash 16 KB (ATmega168) or 32 KB (ATmega328) dont 2 KB sont utilisés par le bootloader
Mémoire SRAM (mémoire volatile) 1 KB (ATmega168) ou 2 KB (ATmega328) Mémoire EEPROM (mémoire non volatile) 512 bytes (ATmega168) ou 1 KB (ATmega328)
Caractéristiques de la carte Arduino MEGA
(53 mm x 101 mm )
10
Microcontrôleur ATmega2560
Tension de fonctionnement 5V
Tension d’alimentation (recommandée) 7-12V
Tension d’alimentation (limites) 6-20V
Broches E/S numériques 54 (dont 15 disposent d'une sortie PWM) Broches d’entrées analogiques 16
Intensité maxi disponible par broche E/S (5V) 40 mA
Intensité maxi disponible par broche E/S (3.3V) 50 mA
Mémoire Programme Flash 256 KB dont 8 KB sont utilisés par le bootloader Mémoire SRAM (mémoire volatile) 8 KB
Mémoire EEPROM (mémoire non volatile) 4 KB
Caractéristiques de la carte Arduino DUE
(53 mm x 101 mm )
Microcontrôleur AT91SAM3X8E
Tension de fonctionnement 3.3 V
Tension d'alimentation (recommandée) 7-12V
Tension d'alimentation (limites) 6-20V
Broches E/S numériques 54 (dont 12 disposent d'une sortie PWM) Broches d'entrées analogiques 12
Intensité maxi disponible toutes broche I/O 130 mA
Intensité maxi disponible par broche E/S (3.3V) 800 mA
Mémoire Programme Flash 512 KB (application) Mémoire SRAM (mémoire volatile) 96 KB
Description la carte Arduino UNO
12 Entrées / sorties digital D0 – D13
Entrées Analogiques A0 – A5 Alimentation
Entrée DC 7-12 v 2,1 mm Port USB de programmation et permet d’alimenter l’Arduino. Max 500ma
SPI :Interface Série pour périphérique D10 : /SS D11 : MOSI D12 : MISO et D13 : SCLK.
Carte Arduino UNO
ATMEGA 328
Description la carte Arduino MEGA
14 Entrées / sorties digital
D0 – D13
Entrées Analogiques A0 – A11 Alimentation
Entrée DC 7-12 v 2,1 mm
Port USB de programmation et permet d’alimenter l’Arduino. Max 500ma
SPI :Interface Série pour périphérique D10 : /SS D11 : MOSI D12 : MISO et D13 : SCLK.
I2C : A20 (SDA), A21 (SCL)
Entrées / sorties digital D22 – D53
Les Shields Arduino
Il existe de nombreux shields que l’on traduit parfois dans les
documentations par « boucliers » (extension).
Un « shield » Arduino est une petite carte qui se connecte sur
une carte Arduino pour augmenter ses fonctionnalités.
Quelques exemples de shields:
•
Afficheur graphique
•
Ethernet et carte SD
•
GPS
•
Carte de prototypage
Exemples de shield
16
Développement d’un projet
Le développent sur Arduino est très simple:
•
On code l’application: le langage Arduino est basé sur les
langages C/C++, avec des fonctions et des librairies
spécifiques à Arduino (gestion des E/S),
•
On relie la carte Arduino au PC et on transfert le programme
sur la carte,
•
On peut utiliser le circuit!
Le logiciel de programmation des modules Arduino est une
application java multiplateformes, servant d’éditeur de code et
compilateur, et qui peut transférer le firmware au travers de la
liaison.
18
Ardublock
Il existe différents outils qui puissent être utilisé avec Arduino.
Ardublock est un outil qui se greffe au logiciel Arduino et qui permet de programmer avec des blocs. Chaque
bloc est une instruction. On peut aisément faire des programmes avec cet outil et mêmes des plutôt complexes. Cela permet par exemple de se concentrer sur ce que l’on doit faire avec Arduino et non se concentrer sur Arduino pour ensuite ce que l’on doit comprendre avec.
Logiciel de la carte Arduino
Le logiciel va vous permettre de programmer la carte Arduino, par la prise USB,
De créer des sketchs.
Le logiciel gratuit est disponible à cette adresse:
En français :
www.mon-club-elec.fr/mes_telechargements/arduino -0018-fr.zip
Page officielle (En Anglais) : v 023 http://arduino.cc/en/Main/Software
20
22
Programmation Arduino
Deux fonctions sont importantes :
setup() est appelée une seule fois lorsque le programme commence.
Donc, dans cette fonction que l’on va écrire le code qui n’a besoin d’être exécuté une seule fois. qui permet d’initialiser le programme. On appelle cette fonction : "fonction d’initialisation".
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.
Dans la 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 encore et encore. On parle de boucle infinie.
Setup (){
….
}
loop () {
…
}
Programmation Arduino
Coloration syntaxique:
En
orange
,
apparaissent
les
mots-clés
reconnus
par
le langage Arduino comme des fonctions existantes.
En
bleu
,
apparaissent
les
mots-clés
reconnus
par
le langage Arduino comme des constantes.
En
gris
, apparaissent les commentaires qui ne seront pas
exécutés
dans
le
programme.
L’on
peut
déclarer
un
commentaire de deux manières différentes :
• Dans une ligne de code, tout ce qui se trouve après « // » sera
un commentaire.
24
Type Quel nombre il
stocke ?
Valeurs maximales
du nombre stocké Nombre sur X bits Nombre d'octets
int entier -32 768 à +32 767 16 bits 2 octets
long entier -2 147 483 648 à +2
147 483 647 32 bits 4 octets
char entier -128 à +127 8 bits 1 octets
float décimale -3.4 x 10^{38}à +3.4 x 10^{38} 32 bits 4 octets double décimale -3.4 x 10^{38}à +3.4 x 10^{38} 32 bits 4 octets
Programmation Arduino
Arduino - Reference.htmProgrammation Arduino
Exemple de programme:
1
26
Programmation Arduino
Le programme est envoyé dans la carte lorsque vous cliquez sur
le bouton . Le logiciel Arduino va alors vérifier si le programme
ne contient pas d’erreur et ensuite le compiler (le traduire) pour
l’envoyer dans la carte :
Programmation Arduino
Le programme rentre donc dans la carte en passant en premier par le connecteur USB de celle-ci. Il va alors subir une petite transformation qui permet d’adapter le signal électrique correspondant au programme vers un signal plus approprié pour le microcontrôleur. On passe ainsi d’un signal codé pour la norme USB à un signal codé pour une simple voie série. Puis ce “nouveau” signal est alors intercepté par le microcontrôleur.
28
Programmation Arduino
Voici un petit synoptique qui vous montre un peu l’intérieur du microcontrôleur:
Lorsque le microcontrôleur démarre, il va commencer par lancé un bout de code particulier : le bootloader. C’est ce dernier qui va surveiller si un nouveau programme arrive sur la voie USB et s’il faut donc changer l’ancien en mémoire par le nouveau. Si rien n’arrive, il donne la main à votre programme, celui que vous avez créé. Ce dernier va alors défiler, instruction par instruction. Chaque fois qu’une nouvelle variable sera nécessaire, elle sera mise en RAM pour qu’on ai une mémoire de cette dernière (et supprimer lorsqu’elle n’est plus nécessaire). Sinon, les instructions vont se suivre une par une, dans l’ordre que vous les avez écrites.
Programmation Arduino
Dans un programme, les lignes sont souvent très nombreuses. Il devient alors impératif de séparer le programme en petits bouts afin d’améliorer la lisibilité de celui-ci, en plus d’améliorer le fonctionnement et de faciliter le débogage.
On appelle fonction un sous-programme qui permet d’effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal.
Les fonctions permettent d’exécuter dans plusieurs parties du programme une série d’instructions, cela permet une simplicité du code et donc une taille de programme minimale. D’autre part, une fonction peut faire appel à elle-même, on parle alors de fonction récursive (il ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter le programme...).
30
Les libraires
Pour faciliter l’élaboration d’une application, il existe des
librairies
pour
chaque
interface.
Ce
sont
des
micros
programmes.
La librairie pour lire ou écrire sur une carte SD.
//Include all the libraries necessary for FAT32 #include <byteordering.h> #include <fat.h> #include <FAT16.h> #include <fat_config.h> #include <partition.h> #include <partition_config.h> #include <sd-reader_config.h> #include <sd_raw.h> #include <sd_raw_config.h>
Ces librairies se déclarent en début de programme, elles doivent
êtres téléchargées depuis le net et copiées au paravent dans le
dossier …/arduino/libraries/
Interruption
Une interruption est en fait un déclenchement qui arrête l’exécution du programme pour faire une tâche demandée.
Par exemple, imaginons que le programme compte jusqu’à l’infinie. Moi, programmeur, je veux que le programme arrête de compter lorsque j’appuie sur un bouton. Or, il s’avère que la fonction qui compte est une boucle for(), dont on ne peut sortir sans avoir atteint l’infinie (autrement dit jamais, en théorie).
Nous allons donc nous tourner vers les interruptions qui, dès que le bouton sera appuyé, interromprons le programme pour lui dire : Arrête de compter, c’est l’utilisateur qui le demande !
32
Interruption
Dans le cas d’une carte Arduino UNO, on trouve deux broches
pour gérer des interruptions externes, la 2 et la 3. Pour
déclencher une interruption, plusieurs cas de figure sont
possibles :
LOW : Passage à l’état bas de la broche,
FALLING : Détection d’un front descendant,
RISING : Détection d’un front montant,
CHANGE : Changement d’état de la broche.
Autrement dit, s’il y a un changement d’un type énuméré
au-dessus, alors le programme sera interrompu pour effectuer une
action.
Interruption
Créer une nouvelle interruption
• Comme d’habitude, nous allons commencer par faire des réglages dans la fonction setup ().
• La fonction importante à utiliser est attachInterrupt(interrupt, function,
mode).
• Elle accepte trois paramètres :
interrupt: qui est le numéro de la broche utilisée pour l’interruption (0 pour
la broche 2 et 1 pour la broche 3)
function : qui est le nom de la fonction à appeler lorsque l’interruption est
déclenchée
mode : qui est le type de déclenchement (cf. ci-dessus)
• Si l’on veut appeler une fonction nommée Reagir () lorsque l’utilisateur appuie sur un bouton branché sur la broche 2 on fera :
attachInterrupt(0, Reagir, FALLING);
34