Analysis and implementation of algorithms for embedded self-mixing ...
Chapitre 1 Internet Of Things (IoT) L'internet des...
Transcript of Chapitre 1 Internet Of Things (IoT) L'internet des...
Chapitre 1
Internet Of Things (IoT)
L'internet des objets
© JMF (Tous droits réservés) 1
Plan du chapitre 1
Historique : du M2M à l'IoT
IoT = ?
IoT et embedded systems
Architecture d'un embedded systems
Les composants d'un microcontrôleur
Exemples de microcontrôleur
© JMF (Tous droits réservés) 2
Le M2M
M2M = machine to machine = communication entre machines = technologie donnant des moyens à des objets "intelligents" (= doués de possibilités de calcul) d'obtenir des informations et d'(inter)agir sans intervention humaine
Domaines proches : les réseaux sans fil (Wi-Fi 802.11abg, Bluetooth, Zigbee)
les technologies sans contact (RFID, NFC)
QR Code
Exemple : système de freinage anti-bloquant, régulateur de vitesse des automobiles, temps d'attente des transports en commun, télésurveillance de lieu
© JMF (Tous droits réservés) 3
Du M2M à l'IoT
IoT = Internet Of Things = Internet des objets
= lorsque M2M utilise le réseau internet (TCP/IP)
L'objet devient un acteur de l'internet
Domaines proches : la programmation
l'intelligence artificielle
le big data
le cloud
Le terme IoT supplante le terme M2M
© JMF (Tous droits réservés) 4
Technologies proches pour
IoT
Pour l'identification : RFID, URI, coordonnées GPS
Capteurs : luxmètre, thermomètre, hydromètre, accéléromètre, gyroscope
Connexion réseau : Bluetooth, RFID, NFC (= Near Field Communication = Communication en champ proche, Wi-Fi, ZigBee), SMS, réseau téléphonique, ethernet, TCP/IP
Intégration de données : domaine des middlewares, des systèmes décisionnels, entrepôt de données
© JMF (Tous droits réservés) 5
Un chouette exemple : les
étiquettes virtuelles
= Pas d'étiquette physique
Une URL (URI) est associé à un ensemble de coordonnées GPS et une zone centrée en ces coordonnées
Lorsqu'un smartphone équipé de GPS entre dans une zone, il affiche ces URLs (URIs)
=> messages entre touristes
© JMF (Tous droits réservés) 6
Lier un objet à l'internet
Car un objet n'est pas déjà numérisé
Processus plus complexe que lier une page web à l'internet (par son URL)
Nécessite : une étiquette physique
une technique pour lire ces étiquettes
un appareil de transmission de cette information (par exemple smartphone)
un réseau (UMTS, 2G, 3G, 4G, etc.)
un lieu de dépot d'informations sur le produit
un affichage de ces infos
© JMF (Tous droits réservés) 7
Les contraintes
technologiques
On rencontre souvent des contraintes technologiques comme :
Consommer peu d'énergie => peu de puissance électrique surtout si l'objet est mobile
De petite taille (miniaturisation)
D'IHM très réduit (souvent sans clavier ni écran)
Fait un travail très simple et communique ses résultats par le réseau => nécessite une bonne couche réseau, du cache, un protocole de service de sauvegarde, parfois crypté
© JMF (Tous droits réservés) 8
IoT : une présentation
Internet des objets =
des objets (un réfrigérateur, un vêtement, une montre, …)
+ de "l'intelligence". Euh un organe de calcul = un "minuscule" ordinateur pouvant exécuter un "logiciel"= un microcontrôleur
+ un connexion réseau vers l'internet
Exemple :
+ +
© JMF (Tous droits réservés) 9
IoT, et donc
L'objet fait son travail (refroidir, protéger un corps humain, donner l'heure) avec des fonctionnalités (de calcul) supplémentaires pouvant être transmise vers l'internet et pouvant recevoir des informations du réseau
D'aspect, un organe d'internet des choses ressemble à une "chose" pas à un ordinateur (portable, tour, serveur ou autre)
Un IoT device a une fonction principale qui n'est pas une fonctionnalité d'ordinateur
© JMF (Tous droits réservés) 10
Un chose (device)
"intelligente"
On ajoute donc des fonctionnalités à l'objet. Par exemple :
Un réfrigérateur conserve les aliments au froid
Un réfrigérateur intelligent : indique si la porte est entre-ouverte (bip)
indique si le filtre d'eau doit être changé (autre bip)
détecte les aliments qu'il possède,
s'il manque certains aliments importants
les recettes pouvant être faites avec ces aliments
qu'il y a trop d'aliment favorisant le cholestérol (euh :-) )
cf. projet IHM UE NSY110 du CNAM Paris 1998, le réfrigérateur intelligent
Il n'y a pas de réseau et d'internet ici
© JMF (Tous droits réservés) 11
L'IoT réfrigérateur
Avertit le smartphone d'acheter des aliments
Commande un filtre à eau, recherche les meilleurs prix
Compare sa consommation avec d'autres réfrigérateurs
Commande les denrées fondamentales lui-même
Suggère certains travaux à faire au smartphone de l'utilisateur
Nécessite donc une connexion (à l'internet)
© JMF (Tous droits réservés) 12
IoT devices vs. ordinateur
Un appareil destiné à une fonctionnalité la fait très bien : une caméra filme très bien, une chaîne Hi-Fi restitue très bien la musique, etc.
Mais n'est destiné qu'à une certaine fonctionnalité
Un ordinateur peut réaliser beaucoup de fonctionnalités, généralement moins bien qu'un appareil dédié
© JMF (Tous droits réservés) 13
IoT partout ?
"Un environnement pervasif (ou environnement ubiquitaire) correspond à un fonctionnement global de la communication où une informatique diffuse permet à des objets communicants de se reconnaitre entre eux et de se localiser automatiquement."
source : https://fr.wikipedia.org/wiki/Environnement_pervasive
IoT peut être pervasif
IoT peut être mis dans une télévision, des jeux, contrôler l'électroménager, déceler une présence par des capteurs (=> allumer une pièce suivant la luminosité, etc.), détecter des entrées par tag RFID (cf. produit dans le réfrigérateur intelligent)
IoT peut être utile pour la santé des gens : pacemakers, pompe à insuline, etc.
IoT pour la surveillance du trafic routier
© JMF (Tous droits réservés) 14
IoT pervasif : un exemple
Les "smart home"
Arroser la pelouse, allumer/éteindre les lumières, régler les thermostats, fermer fenêtres et rideaux tout cela automatiquement et judicieusement
Contrôler l'accès à la maison partout où on est
Réguler la température, la ventilation, la climatisation (air conditionné) = HVAC = heating, ventilation, and air conditioning
© JMF (Tous droits réservés) 15
Une smart home
https://www.homecontrols.com/automate-your-home
© JMF (Tous droits réservés) 16
IoT devices vs. embedded
systemssystème embarqué = traduction maladroite de embedded systems
embedded system = système incorporé, intégré, enfoui
En français embarqué suggère la mobilité
Exemple d'embedded systems : panneau d’affichage urbain, pompe à essence, une télévision en plus d'une caméra digitale, d'une voiture, bref ces objets récents
Finalement embedded system = objet remplissant une ou plusieurs fonctionnalités dont certaines sont aidées par un petit système informatique
Euh, semble être un IoT device (= équipement connecté à l'internet = objet connecté = smart objet)
Les IoT devices sont des embedded systems
La grande différence est que les IoT devices doivent avoir une connexion au réseau (à l'internet ?)
© JMF (Tous droits réservés) 17
Remarque sur les
embedded systems
Le logiciel et le matériel sont souvent conçus en même temps
=> on doit avoir des compétences dans les deux domaines (logiciel et matériel)
Comme on sera amené à le faire ;-)
© JMF (Tous droits réservés) 18
Architecture d'un
embedded system (1/4)capteur (sensor) = organe d'entrée. Par exemple, capteur de
température , de luminosité (= photo résistance)
microphone, capteur d'onde radio, etc.
source : Coursera Ian Harris Introduction to the Internet of Things and Embedded Systems, Embedded Systems Week2, Lecture 1_3 Generic Embedded Systems Structure
© JMF (Tous droits réservés) 19
capteurs ADC
reçoit des infos du monde extérieur
DAC actuateurs
informe le monde extérieur
microcontrôleur
IP FPGA
Architecture d'un
embedded system (2/4)
actuateur (actuator) = organe de sortie. Par exemple haut parleur, buzzer , led , petit écran LCD , etc.
LED = light-emitting diode = diode électroluminescente = DEL
LCD = Liquid Crystal Display = écran à cristaux liquides = ACL pour Affichage à Cristaux Liquides
© JMF (Tous droits réservés) 20
Conversion analogique
numérique= convertir du continu (ensemble R des nombres réels) en discret
(ensemble N des nombres entiers naturels) (et réciproquement)
Certaines données sont continues (luminosité, chaleur, son, etc.)
Il va falloir faire des conversions analogique vers numérique (Analog to Digital Conversion = ADC) et des conversions numérique vers analogique (Digital to Analog Conversion = DAC)
Souvent les conversions analogique vers numérique doivent être faites pour les entrées (luminosité, chaleur, son en valeur entière), pas toujours (bouton)
Souvent les conversions numérique vers analogique doivent être faites pour les sorties (haut parleur, etc.)
biblio : https://www.newbiehack.com/MicrocontrollersIntroductiontoADCAnalogtoDigitalConversion.aspx
© JMF (Tous droits réservés) 21
Architecture d'un
embedded system (3/4)
IP = Intellectual Property Core = circuit intégré dédié à une fonctionnalité
Par exemple : controleur réseau : ethernet, bus CAN (= Controller Area Network) dans les
automobiles
audio : CODEC (codage-décodage, code-decode en anglais) codant et décodant un flux audio. Idem pour vidéo
video : VGA controleur
© JMF (Tous droits réservés) 22
Architecture d'un
embedded system (4/4)
FPGA = Field Programmable Gate Array
= circuit logique programmable = un circuit intégré logique qui peut être reprogrammé après sa fabrication
~ PROM pouvant chargé de nombreuses applications connues
en fait reconfigurable plutôt que reprogrammable
biblio : https://fr.wikipedia.org/wiki/Circuit_logique_programmable
source : Coursera Ian Harris Introduction to the Internet of Things and Embedded Systems, Embedded Systems Week2, Lecture 1_3 Generic Embedded Systems Structure
© JMF (Tous droits réservés) 23
La mémoire
Il y plusieurs types de mémoire. Elles sont de taille nettement plus
importantes que les registres
mémoire cache (en taille limitée, plus chère que la RAM, mais plus
rapide)
mémoire vive = RAM (Random Access Memory) = "mémoire à
accès aléatoire" = mémoire principale
= mémoire informatique dans laquelle un ordinateur place les
données et le programme lors de son exécution
La RAM est volatile (le contenu est perdu dès que l'ordinateur cesse
d'être alimenté en électricité) alors que la mémoire flash ne l'est pas
=> la mémoire flash va contenir le programme téléversé
© JMF (Tous droits réservés) 24
Un microcontrôleur =
Un circuit intégré avec processeur et essentiellement, de la mémoire morte (= ROM = Read Only Memory = mémoire non volatile), mémoire vive (= RAM = Random Access Memory = mémoire volatile)
Très faible consommation électrique, petite taille (7,4 cm x 5,3 cm pour Arduino), très bon marché (~ quelques dizaines d'euro),
Très peu cher
© JMF (Tous droits réservés) 25
microcontrôleur vs.
microprocesseur source :
http://www.engineersgarage.com/tutorials/difference-between-microprocessor-and-microcontroller
"Microprocessor is an IC which has only the CPU inside them i.e. only the processing powers such as Intel’s Pentium, core 2 duo, i3, i5 etc. These microprocessors don’t have RAM, ROM, and other peripheral on the chip. A system designer has to add them externally to make them functional. Application of microprocessor includes Desktop PC’s, Laptops, etc.
Microcontroller has a CPU in addition with a fixed amount of RAM, ROM and other peripherals all embedded on a single chip. At times it is also termed as a mini computer or a computer on a single chip. Today different manufacturers produce microcontrollers with a wide range of features available in different versions. Some manufacturers are ATMEL, Microchip, TI, Freescale, Philips, Motorola etc"
IC = Integrated Circuit
Bref microprocesseur = micro processeur, micro controleur = mini ordinateur © JMF (Tous droits réservés) 26
Composants d'un
microcontrôleur
Un microcontrôleur intègre sur un seul circuit intégré = sur un seule carte :
un processeur (CPU)
un bus (chemin) de transfert d'informations données
Une ROM sous forme de EPROM (Erasable Programmable Read Only Memory), EEPROM (Electrically-erasable programmable read-only memory), mémoire flash (la plus récente)
une horloge pour cadencer l'exécution d'instructions
des convertisseurs analogiques-numériques (CAN), et numériques-analogiques (CNA)
des contrôleurs de bus de communication (UART, CAN, USB, Ethernet, etc.)
© JMF (Tous droits réservés) 27
Utilisation d'un
microcontrôleur
possède un microprocesseur (16 à 500 Mhz) (cf. un PC portable 2,60 Ghz), connecté à d'autres composants (cf. entrées-sorties), reçoit des données, envoie des commandes
Peut être programmé (en langage C, C++, Python, etc.). Le programme est chargé en mémoire
Le code est construit sur une machine de développement et téléchargé dans le microcontrôleur (sa mémoire flash non volatile) par cable USB
Le code pourra être exécuté en amenant de l'électricité (pile ou par la machine de développement par le cable USB)
© JMF (Tous droits réservés) 28
Des microcontrôleurs
Il y a énormément de microcontrôleurs
Pas seulement Arduino (Uno, Due, etc.) ou Raspberry Pi
Voir par exemple à Texas Intruments (http://www.ti.com/lsds/ti/microcontrollers_16-bit_32-bit/overview.page ), Atmel (http://www.atmel.com/ ), etc. Voir aussi à https://fr.wikipedia.org/wiki/Microcontr%C3%B4leur
Un microcontrôleur possède des registres rapides d'accès, en nombre réduit (au plus 32 ?)
Les registres indiquent la taille du processor (registres de 32 bits => architecture 32 bits)
© JMF (Tous droits réservés) 29
Les pins
= fiche, trou, épingle, broche
Certaines pins sont "digital" (= discrètes), 0 ou 5 volts
D'autres pins sont "analog" (analogiques, continues)
© JMF (Tous droits réservés) 30
Autres parties d'un
microcontrôleur
L'horloge cadence les instructions à exécuter. En Mhz (8 Mhz, 512 Mhz, …)
Il n'y a pas toujours de convertisseurs analogique numérique
Des protocoles de communication avec d'autres composants électroniques
© JMF (Tous droits réservés) 31
MANET : un réseau pour
loT
MANET = Mobile Ad Hoc Network
réseau autoconfigurable : les élements y accèdent où se retirent librement
peut permettre d'accéder à internet
Exemple : Bluetooth Low Energy (BLE)
© JMF (Tous droits réservés) 32
Bibliographie pour ce
chapitre
Coursera : Introduction to the Internet of Things and Embedded
Systems ; Ian Harris, Université de Californie Irvine à
https://www.coursera.org/learn/iot/
Sur les microcontrôleurs :
http://whatis.techtarget.com/glossary/Microprocessors ,
https://fr.wikipedia.org/wiki/Microcontr%C3%B4leur
© JMF (Tous droits réservés) 33
Chapitre 2
Découvrir Arduino
34© JMF (Tous droits réservés)
Plan du chapitre 1
Le microcontrôleur Arduino
L'environnement de développement pour Arduino
Un site émulateur
35© JMF (Tous droits réservés)
Arduino UNO : le
microcontrôleur
microcontrôleur 8 bits
interface USB
pins d'entrées sorties
Voir à https://www.arduino.cc/en/Main/ArduinoBoardUno
Possibilité d'ajouter des cartes supplémentaires pour des fonctionnalités supplémentaires (communication Wi-Fi, etc.)
Hamburger shield
Il existe beaucoup de cartes supplémentaires : voir à https://store.arduino.cc/category/68
36© JMF (Tous droits réservés)
Les connecteurs
bouton reset(relance le programme)
connecteur USB
connecteur pour alimentation électrique(si non USB)
pins d'alimentation électrique
37© JMF (Tous droits réservés)
Les processeurs
ATmega16U2 (pour la connexion USB)
ATmega328 : le processeur qui reçoitnotre programme
38© JMF (Tous droits réservés)
La partie amorce
(bootloader)
Les constructeurs d'Arduino ont conçu une couche amorce (bootloader)
permettant au programmeur :
- de programmer la mémoire flash et EEPROM
- de gérer la communication USB et le téléversement de programmes par
USB
On peut reprogrammer l'amorce non pas par la communication USB, mais
par communication série (ICSP) In-Circuit Serial Programming et utiliser une
PIN dédiée
Sur la carte Arduino il y a deux ports
ICSP : une pour chaque processeur
39© JMF (Tous droits réservés)
Les schémas électriques
Montre les branchements entre composants
ATTENTION : ne montre pas un plan géométrique : la disposition,
l'échelle est souvent non respectée. La lisibilité électrique est
privilégiée
Exemple : schéma de la
carte Arduino :
cf. taille, emplacement
des microprocesseurs,
des ICSP
40© JMF (Tous droits réservés)
Les pins
= fiche, trou, épingle, broche
Certaines pins sont "digital" (= discrètes), 0 ou 5 volts. Elles peuvent être des pins d'entrées (= en lecture) ou de sorties (en écriture)
D'autres pins sont "analog" (analogiques, continues). Elles ne peuvent être qu'en lecture : c'est marqué dessus (!) ANALOG IN. Aucune pin analogique est en écriture
41© JMF (Tous droits réservés)
Arduino : le matériel
Ce n'est pas gratuit :-(
Mais très bon marché :-)
Une carte Arduino Uno seule coûte ~20€
Euh, il faut quelques composants (capteurs, actuateurs, cables, etc.)
Un bon compromis : le Arduino Starter Kit, contenant une carte Arduino Uno, des composants et cables, un tutorial (avec 15 projets). Est disponible en français pour ~ 90€
42© JMF (Tous droits réservés)
Caractéristiques du
microcontrôleur ATmega328
processeur : 8 bits
alimentation : 6-20 V max
microcontrôleur : ATmega328
broches d'entrée/sortie numériques : 14 (dont 6 peuvent servir d'entrées analogiques PWM)
40 mA CC par broche E/S, 50 mA CC par broche 3.3 V
entrées analogiques : 6
mémoire flash : 32 ko (ATmega328) dont 0,5 ko utilisé par l'amorce
SRAM : 2 ko (ATmega328)
EEPROM : 1 ko (ATmega328)
vitesse d'horloge : 16 MHz
43© JMF (Tous droits réservés)
Chapitre 3
Arduino
44© JMF (Tous droits réservés)
Plan du chapitre 2
Electronique, électricité, automatique
L'environnement de développement pour Arduino
Un site émulateur
Le langage C
Codage de circuits
45© JMF (Tous droits réservés)
Electronique et électricité
: définitions"L'électronique est une branche de la physique appliquée, traitant de
la mise en forme et de la gestion de signaux électriques, permettant de transmettre ou recevoir des informations." Elle traite plutôt les courants faibles
source : https://fr.wikipedia.org/wiki/%C3%89lectronique
"L’électricité est l'effet du déplacement de particules chargées, à l’intérieur d'un "conducteur", sous l'effet d'une différence de potentiel aux extrémités de ce conducteur"
source : https://fr.wikipedia.org/wiki/%C3%89lectricit%C3%A9
Bref électricité = le phénomène physique dynamique, électronique = les conséquences de ce phénomène
46© JMF (Tous droits réservés)
Un circuit électrique
L'électricité est le déplacement d'électrons
~ un courant d'eau est un déplacement d'eau
=> courant électrique
Un générateur d'électricité récupère les électrons qu'il a envoyés => les électrons tournent dans un circuit !
Le point du générateur dit source électrique est noté + (et est, en fait, le point où les électrons reviennent dans le générateur !)
Le point du générateur noté - est appelé la terre
Ceci pour le courant continu (qui est celui utilisé par Arduino)
47© JMF (Tous droits réservés)
Intensité d'un courant
L'intensité du courant est la "quantité d'électricité" traversant une section de circuit pendant une seconde. C'est le débit de quantité d'électricité
Elle se mesure en ampères notés A
~ débit de l'eau d'un torrent, d'un fleuve
48© JMF (Tous droits réservés)
Courant continu et
alternatif (DC, AC)
Le courant continu ou CC (DC pour direct current en anglais) est un courant électrique dont l'intensité est indépendante du temps (constante)
Le courant alternatif ou CA (AC pour alternating current en anglais) est un courant électrique périodique qui change de sens deux fois par période et qui transporte des quantités d'électricité alternativement égales dans un sens et dans l'autre. Un courant alternatif a donc une composante continue (valeur moyenne) nulle
49© JMF (Tous droits réservés)
Voltage, différence de
potentiel
~ différence d'altitude pour un courant d'eau
Figure : cascade du morel, aigueblanche savoie
La différence de potentiel est mesurée en volts et est appelée aussi tension
le sol = la terre
80 mètres~ 5 volts
50© JMF (Tous droits réservés)
Résistance
~ ce qui peut ralentir le débit de l'électricité, ~ un obstacle dans le courrant
~ ce qui résiste au courant
Exemples et symbole :
N'a pas de sens d'utilisation
Est mesuré en Ohm (Ω)
51© JMF (Tous droits réservés)
Valeur d'une résistance
sous la forme (mantisse, exposant)
Plus précisément mantisse x 10exposant
Les valeurs des chiffres de 0 à 9 sont indiqués par les valeurs sous forme des couleurs :
Moyen mnémotechnique : "Big brown rabbits often yield great big vocal groans when gingerly snapped." (de gros lapins bruns gémissent fortement quand ils sont ???)
52© JMF (Tous droits réservés)
Valeur d'une résistance
Et en français (merci Frédéric)
Ne Mangez Rien Ou Jeunez, Voilà Bien Votre Grande Bétise
= Noir, Marron, Rouge, Orange, Jaune, Vert, Bleu, Violet, Gris, Blanc
= 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
53© JMF (Tous droits réservés)
Pour lire une valeur de
résistance
Orienter la résistance en mettant la précision (or ou argent) à droite
Le site http://www.digikey.fr/fr/resources/conversion-calculators/conversion-calculator-resistor-color-code-4-band peut être fort utile
54© JMF (Tous droits réservés)
Loi d'Ohm et
conséquences
U = RI
U en volts, R en Ohm, I en ampère
Arduino ne doit pas dépasser 40 mA => on utilise les résistances
Souvent pour une LED, une résistance de 10 kΩ soit au plus 0,5 mA
55© JMF (Tous droits réservés)
Câblage en série
On dit que des composants électriques (résistances, LED, etc.) sont en série, si ils sont les uns à la suite des autres. Le câblage est dit en série
Lorsque plusieurs composants sont reliés et câblés en série, si l'un d'entre eux est détruit, cela ouvre le branchement et le courant électrique ne passe plus dans ce branchement
Dans un câblage en série, tous les composants de ce câblage sont traversés par la même intensité (en ampère)
Dans un câblage en série, la somme des différences de potentiels (en volts) traversant chaque composant est égale à la différence de potentiel entre l'entrée du premier et la sortie du dernier composant
Pour une connexion de résistances en série, la résistance totale est égale à la somme des résistances
56© JMF (Tous droits réservés)
Câblage en parallèle
On dit que des composants électriques (ou des groupes de composants) sont en parallèle, si leurs extrémités sont réunis (dans un même nœud). Le câblage est dit en parallèle
Exemple : deux résistances en parallèle
=> il existe plusieurs chemins par lesquels le courant peut passer
Dans un branchement en parallèle, les branches sont soumises à la même tension (en volt)
Dans un branchement en parallèle, l'intensité n'est pas obligatoirement la même dans chaque branche
Avec n branches, on a la relation :Inoeud = I1 + …+ In où Ij est le courant qui traverse la branche j
57© JMF (Tous droits réservés)
Diode et LED
~ valve unidirectionnelle
Le courant ne passe que dans un sens pour le faible voltage d'Arduino. Il faut un voltage énorme pour faire passer le courant dans l'autre sens => une diode a un sens d'utilisation
Symbole :
LED = light-emitting diode = diode électroluminescente : émet de la lumière au passage du courant
Symbole :
58© JMF (Tous droits réservés)
Remarque sur les LEDs
Les led sont des diodes (le D de LED)
Elles sont donc orientés
La partie liée au potentiel le plus fort (le +) correspond à la branche la plus grande : c'est l'anode
La partie liée au potentiel le plus faible (le -), en général la terre, correspond à la branche la plus petite : c'est la cathode
59© JMF (Tous droits réservés)
Interrupteur
= Switch = Button, PushButton
Lors d'un appui sur le bouton, les broches d'un même coté sont connectées. Pas les broches en face à face !
60© JMF (Tous droits réservés)
La "planche à pain"
(breadboard)
Permet de connecter des composants entre eux …
… sans soudure !
61© JMF (Tous droits réservés)
Les lignes de contact du
breadboard
62© JMF (Tous droits réservés)
Electronique et électricité
: pour commencer
Comment lire un schéma électrique : How to Read a Schematic: https://learn.sparkfun.com/tutorials/how-to-read-a-schematic
La "planche à pain" = Breadboard = https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard
Les résistances = Résistance = https://learn.sparkfun.com/tutorials/resistors
Diode = https://learn.sparkfun.com/tutorials/diodes
Light-emitting Diodes (LEDs) = https://learn.sparkfun.com/tutorials/light-emitting-diodes-leds
63© JMF (Tous droits réservés)
Retour sur la carte Arduino
Deux pins terre (en vert), deux pins de potentiel (3,3 volts et 5 volts). On utilise généralement le 5 volts
Conseil : à relier au lignes "horizontales" de pins du breadboard
64© JMF (Tous droits réservés)
Arduino : l'environnement
de développement
Voir à https://www.arduino.cc/en/Main/Software
Le télécharger, c'est gratuit ! et l'installer
65© JMF (Tous droits réservés)
Lancement de l'IDE
ArduinoIDE = Integrated Development Environment = Environnement de
développement intégré
Au lancement on a :
Editeur de texte pourrédiger le programme
66© JMF (Tous droits réservés)
Emulateur de carte
Arduino
"If you do not have an Arduino, you can use the web-based Arduino simulator at https://circuits.io/lab . You will need to create
a free account. There are instructional videos on that website that will teach you how to use the simulator."
Bref on peut avoir un émulateur de cartes et de composants pour Arduino à partir du site https://circuits.io/lab . Il suffit de
se créer un compte gratuit. On peut ainsi garder (dans le cloud) ses (ces) développements
67© JMF (Tous droits réservés)
La chaine de traitement
par l'IDE
première ligne obtenu en cliquant sur Vérifier, seconde ligne en cliquant sur Téléverser
Combine & Transform = le préprocesseur + mise en un seul fichier
68© JMF (Tous droits réservés)
Arduino : la
programmation
On programme en langage C (euh plutôt en C++)
Voir un bon tutorial pour le langage C à partir de : http://www.cprogramming.com/tutorial/c/lesson1.html
69© JMF (Tous droits réservés)
Le langage C
Le grand langage des années 70-80
Mais aussi encore aujourd'hui !
Car proche de la machine
Un macro assembleur (accès indirect post incrémenté) structuré (boucles, tests, fonctions, …)
Très utilisé dorénavant pour l'informatique embarquée (microcontrôleurs), les jeux, pour les calculs et algorithmes performants, les systèmes d'exploitation, bref modules où la rapidité de traitement est importante
La syntaxe du langage C a inspiré énormément de langages de programmation : C++, Java, JavaScript, PHP, C#, ...
Le langage C est un des langages les plus utilisés
source : http://fr.wikipedia.org/wiki/Langage_C
© JMF (Tous droits réservés) 70
Un premier programme (1/2)
#include <stdio.h> inclut l'en-tête standard <stdio.h> ,
contenant les déclarations des fonctions d'entrée-sortie de la bibliothèque standard de C (entre autre la fonction printfutilisée)
main est le nom de la fonction principale, aussi appelée point
d'entrée du programme
int est le type renvoyé par la fonction main
Le mot clé void entre les parenthèses signifie que la fonctionmain ne prend aucun paramètre
#include <stdio.h>
int main(void)
printf("Bon courage\n");return 0;
© JMF (Tous droits réservés) 71
Un premier programme (2/2)
Les accolades et entourent les instructions constituant le corps de la fonction main
printf est une fonction d'écriture dans la sortie standard (la console par défaut)
Le caractère " délimite une chaîne de caractères. Dans ce cas, c'est la
chaîne à afficher
Un point-virgule ; termine toute instruction (symbole de fin d'instruction)
L'instruction return 0; indique que la fonction main retourne la valeur 0(non utilisé ici)
#include <stdio.h>
int main(void)
printf("Bon courage\n");return 0;
© JMF (Tous droits réservés) 72
Compilation et exécution
Le langage C est un langage compilé
Après avoir édité le programme précédent, il faut le compiler = le traduire en langage exécutable
Il existe de nombreux compilateurs ... gratuits comme gcc
Si le fichier source est sauvegardé dans courage.c , la compilation est : gcc courage.c
Il est alors créé un fichier exécutable. Avec Arduino, l'environnementde développement lance la compilation par le bouton Vérifier :
Pour exécuter, il faut téléverser sur la carte Arduino : bouton Téléverser
© JMF (Tous droits réservés) 73
La compilation pour
Arduino
Le compilateur est avr-gcc . Le résultat sera exécuté sur une
plateforme AVR pas Intel
Le code généré est un .hex
Les programmes Arduino sont appelés des croquis (sketchs). Pourquoi ? Je ne sais pas !
Ils ont écrits en C++ même si on utilise essentiellement du C
74© JMF (Tous droits réservés)
Un premier exemple : Blink
Charger, dans l'IDE Arduino, l'exemple Blink à partir Fichier | Exemples | 01.Basics | Blink
Compiler cet exemple
Faire le branchement de la carte Arduino avec l'ordinateur avec le cable USB
Téléverser ce croquis
La "led 13" devient un clignotant !
Remarque : Blink est le "Hello, world" des systèmes embarqués
75© JMF (Tous droits réservés)
Arduino : si pb lors du
téléversement sous Win (1/2)
Si pb car l'item port est grisé, il faut installer
le pilote Arduino
Pour cela, clic droit sur icône Ordinateur,
puis Gérer | Gestionnaire de périphériques
Clic droit sur le périphérique fautif item "Mettre à jour le pilote..."
76© JMF (Tous droits réservés)
Arduino : si pb lors du
téléversement sous Win (2/2)
Rechercher le pilote sous le répertoire d'installation Arduino. Cliquer
Installer
L'item port n'est plus
grisé. Il propose un menu où
apparaît la carte Arduino :
COM3 (Arduino/Genuino Uno)
sous windows
biblio : https://www.youtube.com/watch?v=CdE72XUYC7k
77© JMF (Tous droits réservés)
Arduino : si pb lors du
téléversement sous Unix
Sous Unix, il faut sélectionner la bonne carte. Par exemple : Outils | Type de carte: "Arduino/Genuino Uno" | Arduino/Genuino Uno
Mais aussi le bon port. Par exemple Outils | Port ... | /dev/ttyACM0 (Arduino/Genuino Uno)
78© JMF (Tous droits réservés)
Structure d'un croquis
(sketch)
Un croquis n'a pas de … main() !
Le main() est déjà codé dans le microcontrôleur. Il lance certaines
fonctions que le programmeur a codées
En fait, le microcontrôleur possède déjà le programme :
et ajoute notre code
Dans certains microcontrôleurs (mais pas pour Arduino), il faut écrire ce code
int main() setup();while (1)
loop();
79© JMF (Tous droits réservés)
Structure d'un croquis
(sketch)
En général, le programmeur écrit la fonction
setup() est lancée une et une seule fois au début du programme,
euh du croquis ;-)
En général, le programmeur écrit la fonction
loop() est exécutée après setup() . Ce qui est écrit dans loop()est exécuté en … boucle (eh oui) infinie. Cela peut paraître currieux mais est naturel (obligatoire ?) dans les systèmes embarqués
Ces deux fonctions ne retournent rien (void ) et n'ont pas
d'arguments
void setup()...
void loop()...
80© JMF (Tous droits réservés)
La fiche 13 et sa LED
associée
La fiche 13 peut être utilisée comme tout autre fiche digitale
Mais elle a de plus, une LED associée sur la carte Arduino
=> Si la fiche 13 a une tension électrique, la LED s'allume
81© JMF (Tous droits réservés)
Le code de Blink
Le code du programme Blink est :
Dans setup() est indiqué que la pin 13 va fournir des tensions électriques.
Derrière cette pin 13, il y a la "diode 13" de la carte
Le microcontrôleur envoie (écrit) la tension maximale (HIGH) sur cette diode (digitalWrite(13, HIGH); )
On attend 1 seconde (delay(1000); )
Le microcontrôleur envoie (écrit) la tension minimale (LOW) sur cette diode (digitalWrite(13, LOW); ) = éteint la diode
On attend 1 seconde (delay(1000); )
Ces quatre instructions seront exécutées en boucle (fonction loop() )
void setup() pinMode(13, OUTPUT);
void loop()
digitalWrite(13, HIGH);delay(1000);digitalWrite(13, LOW);delay(1000);
82© JMF (Tous droits réservés)
Chapitre 4 (suite)
Arduino
83© JMF (Tous droits réservés)
Liaison fiches
microcontrôleur
Les fiches sont reliées au microcontrôleur
qui va leur envoyer des potentiels électriques
en suivant le croquis qu'on lui a écrit
=> fiches = interface du microcontrôleur
84© JMF (Tous droits réservés)
Fiches d'entrée et de
sortie
Pins de sortie :
Pin d'entrée :
Le microcontrôleur
(le croquis) envoie
des potentiels
électriques
Le microcontrôleur
(le croquis) reçoit
des potentiels
électriques
85© JMF (Tous droits réservés)
Entrées sorties d'une fiche
Si on veut utiliser une pin en entrée ou sortie, il faut l'indiquer
Souvent (mais pas obligatoirement) dans la fonction setup()
La fonction pour cela est void pinMode(pin, mode) avec : pin : le numéro de la fiche
mode : de valeur INPUT, OUTPUT
configure la fiche spécifiée pour fonctionner comme une entrée ou une sortie
biblio : https://www.arduino.cc/en/Reference/PinMode
pin peut valoir :
0 à 13 pour les pins digitales
A0 à A5 (de type int ) pour les pins analogiques (en entrée seulement)
Remarque : on écrit directement A0 comment argument (#define…)
86© JMF (Tous droits réservés)
Lecture et écriture digitale
La fonction int digitalRead(pin) avec : pin : le numéro de la fiche
retourne l'état d'un fiche. Ce peut être LOW(0 volt) ou HIGH (5
volts sur une Arduino UNO)
biblio : https://www.arduino.cc/en/Reference/DigitalRead
La fonction void digitalWrite(pin, value) avec : pin : le numéro de la fiche
value : de valeur LOWou HIGH
affectue la valeur LOW(0 volt) ou HIGH à la fiche pin
Remarque : les pins analogiques peuvent servir de pins de sorties … digitales c'est à dire on peut écrire digitalWrite(A0, HIGH);
biblio : https://www.arduino.cc/en/Reference/DigitalWrite
87© JMF (Tous droits réservés)
Lecture d'une fiche
analogique
La fonction int analogRead(pin) avec : pin : le numéro de la fiche. Celle-ci doit être une pin analogique (A0 à A5)
retourne l'état d'un fiche analogique. C'est un entier de valeur 0(pour 0 volt) à 1023 (pour 5 volts)
Par exemple :
biblio : https://www.arduino.cc/en/Reference/AnalogRead
int pinVal;pinVal = analogRead(A3);
88© JMF (Tous droits réservés)
La fonction de pause
La fonction void delay(msec) avec : msec : nombre de millisecondes
fait une pause à l'exécution du croquis de msec millisecondes
Par exemple, le code :
permet d'envoyer 5 volts sur la pin 3 pendant 1 seconde
biblio : https://www.arduino.cc/en/Reference/Delay
digitalWrite(3, HIGH);delay(1000);digitalWrite(3, LOW);
89© JMF (Tous droits réservés)
Arduino : pour commencer
La doc de référence d'Arduino : https://www.arduino.cc/en/Reference/HomePage
https://www.arduino.cc/en/Hacking/BuildProcess
https://www.arduino.cc/en/Reference/Setup
https://www.arduino.cc/en/Reference/Loop
https://www.arduino.cc/en/Reference/PinMode
https://www.arduino.cc/en/Reference/DigitalWrite
https://www.arduino.cc/en/Reference/DigitalRead
https://www.arduino.cc/en/Reference/AnalogRead
90© JMF (Tous droits réservés)
Le "moniteur série"
Lorsque la carte Arduino est connectée au PC, ils peuvent communiquer entre eux (par le protocole série UART)
Dans l'IDE cliquer sur le bouton Moniteur série
Une fenêtre pour la communication est alors ouverte :
91© JMF (Tous droits réservés)
Communication grâce au
moniteur série
Avec la fenêtre :
des données envoyées par la carte Arduino peuvent être affichées
on peut envoyer des données à la carte Arduino par l'intermédiaire du clavier du PC
Cela peut servir à déboguer
92© JMF (Tous droits réservés)
Communication carte
Arduino vers PCL'émetteur et le récepteur doit connaître la vitesse de transfert =
durée pour transmettre un bit qui restera à 0 (potentiel 0) ou 1 (potentiel n volts) pendant cette durée
Serial.begin(9600) dans setup()
9600 baud => 104 microsecondes pour transmettre un bit
Serial.print(texte) ou Serial.println(texte) écrit dans
la console Moniteur série du texte (et revient à la ligne pour println() ). Par exemple :
Pour faire imprimer un int , utiliser Serial.write(unEntier) . Par exemple : , idem pour un float ou un double
Serial.println("entrée du while");
int n = 43;Serial.write(n);
93© JMF (Tous droits réservés)
Communication PC vers
carte Arduino (1/2)
Des données peuvent être envoyées du PC vers la carte à l'aide de la zone de texte en haut du moniteur série et cliquer le bouton Envoyer
En fait les envois du PC vers la carte sont bufferisés
La carte Arduino lit les valeurs envoyées par la fonction int Serial.read()
Cette fonction retourne un octet (codé en int ) si un octet est disponible, -1 sinon
On a donc : int unOctetLu = Serial.read();
94© JMF (Tous droits réservés)
Communication PC vers
carte Arduino (2/2)
On peut lire plusieurs octets en les déposant dans un tableau de caractères par :
Dans le croquis, avant de faire des lectures, il bon d'écrire Serial.available() pour savoir si le buffer a des données
char buffer[16];Serial.readBytes(buffer, 16);
95© JMF (Tous droits réservés)
Fonctions statiques de
classes
En fait, les appels Serial.XXX(…) sont des appels de fonctions(méthodes) statiques de la classe Serial
Les notions de classes, fonctions statiques (= de classes) sont des notions du langage C++
Elles sont utilisées de la même manière qu'une fonction quelconque
Mais appartiennent à la classe (~= au module) Serial
96© JMF (Tous droits réservés)
Obtenir des infos par la
carte
Les microcontrôleurs sont sensibles aux tensions électriques
Les capteurs convertissent leurs informations (chaleur, flexion, humidité, luminosité, etc.) en potentiels électriques (parfois indirectement cf. potentiomètre)
Ces tensions sont amenées dans les fiches par des câbles
Lire une tension de la fiche digitale pin est obtenu par int digitalRead(pin)
La valeur retournée est HIGH ou LOW
Lire une tension de la fiche analogique pin est obtenu par int analogRead(pin)
La valeur retournée est un int entre 0 et 1023
97© JMF (Tous droits réservés)
Capteur (sensor)
= détecteur
pour les entrées
Ce sont souvent des capteurs résistifs : ils changent leur résistance suivant certaines informations : ~ potentiomètre
Photorésistance, thermomètre, flex resistor ~ potentiomètre
98© JMF (Tous droits réservés)
La photorésistance
Quand la luminosité augmente, sa résistance diminue
Une photorésistance :
Si on fait le circuit :
Quand la luminosité augmente la fiche Pin aura un potentiel plus grand, n'est ce pas ?(U = RI dans chaque portion du circuit et U + U' = constant = 5 volts)
99© JMF (Tous droits réservés)
Pulse Width Modulation
(PWM)
Les potentiels qui sortent d'un microcontrôleur sont soit hauts (5 ou 3,3 volts) soit 0
Comment faire des valeurs continues sur un seul signal ?
La solution : faire varier le temps pendant lequel le signal est haut
Définition : le duty cycle est le pourcentage du temps pendant lequel le signal est haut sur une période
Accroitre le duty cycle augmente la tension finale
Cette technique est la Pulse Width Modulation (PWM)
100© JMF (Tous droits réservés)
Fonction d'écriture
analogiquevoid analogWrite(pin, value) génère un signal PWM
Peut être utilisé pour faire varier la luminosité d'une LED, la vitesse d'un moteur, etc.
La fiche pin va générer un signal rectangulaire avec un duty cycle adapté à value (jusqu'au prochain appel à analogWrite() , digitalRead() ou digitalWrite() sur la même fiche)
value doit avoir une valeur entre 0 et 255 (0 pour 0% de duty cycle, 255= 100% de duty cycle)
Cette fonction fonctionne sur les fiches 3, 5, 6, 9 et 11 de la carte Arduino. Voir le symbole ~, coté DIGITAL (PWM~)
On n'a pas besoin d'appeler pinMode() sur une fiche en sortie qui utilise analogWrite()
La fonction analogWrite() n'a rien a voir avec les fiches analogiques ou avec la fonction analogRead()
biblio : https://www.arduino.cc/en/Reference/AnalogWrite101© JMF (Tous droits réservés)
Fonction d'écriture
analogique : un exemple
led est un numéro de pin relié à une led
Que fait cet exemple ?
int brillance = 0;int increment = 5;
void loop()analogWrite(led, brillance);brillance += increment;if (brillance == 0 || brillance == 255)
increment = - increment;delay(30);
Boucle sur allume et éteint progressivement une led
102© JMF (Tous droits réservés)
Fin
103© JMF (Tous droits réservés)