Académique Documents
Professionnel Documents
Culture Documents
objet connecté
avec Arduino
Pole de l’Etudiant Entrepreneur de Sfax
Sfax 11-13 Fév. 2021
4
Compétence 01
6
Plan de la compétence
• Activité 01 : Explorer l’environnement «
Fritzing » et connaitre ses caractéristiques
essentielles
• Activité 02 : Connaitre les entrées et les
sorties
7
Activité 01
9
Intro aux CAO des circuits imprimés
• De nos jours l’électronique est présente dans
la moindre de nos activités quotidiennes :
– Voitures, cafetières, téléphones portables,
appareils photo et bien sur particulièrement dans
les ordinateurs.
• Toutes ces applications nécessitent la
réalisation d’une carte électronique.
10
Intro aux CAO des circuits imprimés
• Une carte électronique est un ensemble de
composants tel :
– Résistances, condensateurs ou circuits intégrés
réunis sur une plaque de manière à former un
circuit destiné à un usage précis.
• Cela nous amène donc à nous demander :
– Quels sont les différentes étapes, de la
conception à la fabrication, dans la réalisation
d’une carte électronique?
11
Intro aux CAO des circuits imprimés
• Nous étudierons tout d’abord :
– la conception par ordinateur du circuit
électronique,
– puis la préparation du circuit imprimé
12
Eagle
13
Altium
• Environnement de conception avec
schémas, placement-routage,
documentation et simulation
• Design for Manufacturing (DFM)
pour vous assurer que vos design
de PCB soient fonctionnels, fiables
et puissent facilement être
fabriqués
• Facilité de migration des
informations grâce à des outils de
conversion puissants
• Conception de circuit imprimé
• Conception schématique
• Sorties des fichiers de fabrication
14
Proteus
• La solution de CAO électronique
Proteus a été développée par
Labcenter Electronics Ltd.
• Cette solution se compose de deux
logiciels principaux :
– Proteus ISIS : création de schéma
et simulation électrique
– Proteus ARES : solution de
routage de circuit imprimé avec
placement automatique des
composants
15
Autres CAO
• KiCad
• Cadence OrCAD PCB Designer
• DesignSpark
• Cadstar
• Sprint-Layout
• PADS PCB
16
Fritzing
• Fritzing est une initiative open
source qui a comme objectif de
rendre l'électronique accessible
pour tout le monde.
• Un outil logiciel favorable pour
bien travailler sur des projets de
l'Arduino, favorisant un
écosystème créatif qui permet
aux utilisateurs de :
– se monter leurs prototypes,
de les partager avec d'autres,
– d'enseigner l'électronique
– de concevoir et de fabriquer
des circuits imprimés
professionnels.
17
Fritzing : Interfaces
18
Fritzing
• Télécharger Fritzing :
– https://fritzing.org/download/
• Télécharger « For Free »
– https://www.01net.com/telecharger/windows/M
ultimedia/creation_graphique/fiches/149413.html
19
Lancement de l’environnement
20
Les onglets de navigation : Interface de
câblage
21
Les onglets de navigation : Interface du
schéma structurel
22
Les onglets de navigation : Interface de
circuit imprimé
23
Interface de programmation
24
Exemple
26
1. Plan de câblage du circuit
27
Sélectionner une carte Arduino Uno
28
Sélectionner une résistance
29
Sélectionner une résistance
30
Ajouter la LED
31
Ajouter la LED
32
Ajouter la LED
33
Raccorder les composants
v
v
34
Raccorder les composants
35
Raccorder les composants
36
Raccorder les composants
37
Ajuster le circuit
38
2. Schéma structurel
39
Organiser les composants
40
Aligner les raccordements
41
Autoroutage
42
Autoroutage
43
3. Circuit imprimé
44
Réorganiser les composants
45
4. Câblage et test
46
Test réel
47
Chargement du programme
48
Test de circuit
49
5. Simulation
https://www.tinkercad.com
50
Simulation
51
6. Prototypage
• Conception sur ordinateur
– Réalisation du schéma
– Router le schéma électrique
• Fabrication du circuit imprimé
– Graver le circuit imprimé
52
Etapes de prototypage
• Mise en place et soudure des composants
– Les composants traditionnels
• Percer le circuit
• Souder les composants
– Les composants SMD
• Dépôt de pâte
• Placement des composants
• Soudure
53
Pause café
54
Activité 2
56
Entrés et sorties Arduino
57
Les entrées / les sorties digitales
• Ce sont les deux rangées de connecteurs de
part et d'autre de la carte qui permettent sa
connexion au monde extérieur.
– (D0 à D13)
58
Les entrées / les sorties digitales
• Chacun des connecteurs D0 à D13 peut être
configuré dynamiquement par programmation
en entrée ou en sortie.
• Les signaux véhiculés par ces connecteurs sont
des signaux logiques compatibles TTL, c'est-à
dire qu'ils ne peuvent prendre que deux états
HAUT (5 Volts) ou BAS (0 Volt).
59
Les entrées / les sorties digitales
• En pratique, les connecteurs D0 et D1 réservés
pour la liaison série asynchrone (port COM
virtuel via le câble USB) ne sont pas exploités
pour d'autres utilisations.
• Certains connecteurs peuvent être spécialisés
comme sorties PWM (repérées par un ~) .
– Attention : chacun des connecteurs ne peut
fournir ou absorber un courant supérieur à 40 mA
60
Les entrées analogiques
• Les entrées analogiques peuvent admettre
toute tension analogique comprise entre 0 et
5 Volts.
61
Numérisation d’un signal
• En électronique numérique, on travaille avec des
bits et des octets.
• En analogique, on travaille avec des grandeurs
physiques : tension, courant, résistance,
fréquence, etc.
• Pour pouvoir exploiter des mesures analogiques
avec un microcontrôleur, il faut convertir la
mesure analogique (tension ou courant) en une
grandeur numérique.
– C'est justement le but des convertisseurs
analogique/numérique.
62
Numérisation d’un signal
• Un convertisseur analogique/numérique permet de
mesurer une tension (ou courant) (valeur
analogique) et de représenter cette tension (ou
courant) au moyen d'une valeur numérique.
63
Numérisation d’un signal
• L'idée est simple : associer une valeur
numérique (un nombre entier) pour chaque
valeur analogique d'une plage de tension (ou
courant) bien précise.
64
Numérisation d’un signal
• Analogique et Arduino :
– Dans le cas d'une carte Arduino UNO, il y a 6
entrées analogiques, pouvant mesurer des
tensions comprises entre 0 et 5 V, avec une
précision de 10 bits (soit 1024 points = 210).
• Si on fait rapidement le calcul, 1024 points sur
une plage de 5V donne une précision absolue
de 0,0048828125 V, soit environ 4,89mV.
65
Numérisation d’un signal
• Précautions à prendre !
– Injecter une tension supérieure à 5 volts ou inférieure à 0
volt sur une broche analogique endommagera
immédiatement et définitivement votre carte Arduino.
– La précision de la mesure (10 bits) n'est pas modifiable,
– La mesure prend environ 100µs, cela fait un maximum de
10 000 mesures par seconde,
– Laisser une broche non connectée revient à avoir une
antenne, mesurer une tension sur une broche non
connectée retourne des valeurs de l'ordre de 300 à 500,
même s’il n'y a pas de signal,
– Le résultat est sur 10 bits, soit entre 0 et 1023 (inclus).
66
Comprendre la PWM
• En numérique, les signaux ont toujours une
valeur LOW ou HIGH, le principe de PWM est
de construire un signal qui est alternativement
LOW et HIGH et de répéter très vite cette
alternance.
– La LED est donc alternativement allumée et
éteinte mais le cycle est tellement rapide que la
persistance rétinienne nous donne l’illusion d’une
DEL allumée en permanence.
67
Comprendre la PWM
• Prenons par exemple une période de 10ms,
soit une fréquence de 100Hz.
• Si la LED est allumée pendant 5ms et éteinte
pendant 5ms, l’impression sera une
luminosité de 50% de la luminosité maximum.
68
Comprendre la PWM
• Si la LED est allumée pendant 1ms et éteinte
pendant 9ms, l’impression sera une
luminosité de 10% comme sur la figure ci-
dessous.
69
Comprendre la PWM
• Le pourcentage de temps passé à l’état HIGH
sur la période du signal est appelé le rapport
cyclique.
• Il varie donc de 0%, le signal est tout le temps
LOW, à 100%, le signal est tout le temps HIGH.
– Dutty cycle = 10%
70
Comprendre la PWM
Modèle d’Arduino Broches PWM
Uno, Pro Mini, Nano 3, 5, 6, 9, 10 et 11
Mega 2 à 13, 44 à 46
Leonardo 3, 5, 6, 9, 10, 11 et 13
Due 2 à 13
Zero 2 à 13
71
Comprendre la PWM
72
Exercice pratique
74
Contrôler l’intensité d’une LED avec PWM
75
Programme
76
Pause déjeuner
77
Compétence 02
79
Plan de la compétence
• Activité 01 : Présentation des capteurs et leurs
utilisations dans un circuit à base de l’Arduino
• Activité 02 : Présentation des actionneurs et
leurs utilisations dans un circuit à base de
l’Arduino
80
Activité 01
82
Capteur
Capteur : dispositif utilisé pour détecter un événement ou une
grandeur physique, tels que luminosité, température, humidité du
sol, pression, etc. et qui fournit un signal électrique correspondant.
84
Encore des capteurs
Capteur Description Capteur Description
Température : Mesurer la Humidité : mesure de l’humidité
température ambiante
Application : mesure de la Application : détecter si il pleut,
température ambiante, d’un Récupérer : Difficile d’en récupérer..
liquide mais pas cher neuf.
(ex : aquarium), d’un plat
(thermomètre de cuisine),
d’une carte
électronique, d’un moteur,
etc..
Récupérer : parfois sur de
vieux PC
Présence d’eau : détecte la présence Détecteur magnétique tout ou rien
d’un liquide Application : détecter qu’une porte
Application : arrosage automatique de est ouverte ou fermée
plantes en fonction de l’humidité (alarme)
détectée dans le pot, niveau Récupérer : Sur des alarmes de
automatique d’un liquide (ex :piscine, maison
chasse d’eau..)
Récupérer : Difficile d’en récupérer..
mais pas cher neuf.
85
Encore des capteurs
Capteur Description Capteur Description
Détecteur magnétique Distance
proportionnel (effet hall) Application : mesurer la distance par
Application : détection d’angle sur un rapport à un objet
moteur, de proximité (robot), la taille d’une pièce, etc..
(distance), Récupérer : Difficile d’en récupérer
Récupérer : sur de vieilles
imprimantes laser, sur des lecteurs
cd ou dvd
Détecteur de vibration Son (micro)
Application : Capter un choc, le Application : enregistrer du son,
mouvement d’un objet (ex mesurer du bruit,
:antivol moto ou vélo) Récupérer : Difficile, car même si le
Récupérer : difficile d’en récupérer, micro est présent partout, il faut une
mais pas cher neuf. électronique pour pouvoir l’adapter
sur arduino.
86
Encore des capteurs
Capteur Description Capteur Description
Capteur infra rouge Capteur de mesure de force (FSR)
Application : Recevoir et comprendre Applications: Détecter une pression
la lumière émise par une d’appui, un poids
télécommande télévision, de lecteur Récupérer : C’est pratiquement
dvd impossible à trouver. Par
Récupérer : Sur de veilles télé, de contre, se trouve assez facilement
vieux appareils qui étaient neuf sur les boutiques
commandables par une télécommande arduino.
(lecteurs dvd, etc…)
Accéléromètre Capteur linéaire de mesure de
Application : détecter la position ou force
l’orientation du capteur (ex : tablette, Applications : Détecter une pression
iphone), l’accélération d’un objet en sur une grande longueur
mouvement (robot) (ex: un synthétiseur), une position,
Récupérer : Difficile d’en récupérer.. etc..
mais pas cher neuf. Récupérer : C’est pratiquement
impossible à trouver. Par
contre, se trouve assez facilement
neuf sur les boutiques
arduino.
87
Capteur de mouvement
• Le capteur renvoie un signal qui possède deux états :
un état bas (0 V) lorsque le capteur est au repos, et un
état haut (3,3 V) si un mouvement est détecté.
• Quand un mouvement a été pris en compte, le signal
passe à l'état haut et un délai est déclenché. Une fois
que le délai est terminé, le signal retourne à l'état bas.
• Ce capteur infrarouge a la possibilité d'être paramétré
par son utilisateur. Pour cela, il dispose de deux
potentiomètres pour régler la distance de détection et
la durée de l'état haut. Il y a aussi la possibilité de le
configurer dans deux modes de fonctionnement grâce
à un cavalier à placer entre deux broches.
88
Capteur de mouvement
89
Capteur de mouvement
#define IR_output 2
#define IR_output 2
void setup() {
void setup() {
pinMode(IR_output,INPUT);
pinMode(IR_output,INPUT);
attachInterrupt(digitalPinToInterrupt(IR_outpu
Serial.begin(9600);}
t),detection_IR,CHANGE);
void loop() {
//détecte un changement d'état
if(digitalRead(IR_output)==HIGH){
//sur le signal du capteurSerial.begin(9600);}
Serial.println("mouvement detecte"); }
void loop() {
if(digitalRead(IR_output)==LOW){
}
Serial.println("pas de mouvement
void detection_IR(){
detecte"); }
if(digitalRead(IR_output)==HIGH){
delay(200);
//si le signal est à l'état haut
}
Serial.println("mouvement detecte"); }
if(digitalRead(IR_output)==LOW){
//si le signal est à l'état bas Serial.println("pas
de mouvement detecte"); }}
90
Notion d’interruption pour Arduino
• Problèmes d'entrées/sorties non bloquantes : Il
faut être conscient qu'on peut « rater » des états.
• L'inconvénient est que l'on ne fait rien d'autre
que lire, dans l'attente d'un changement, alors
que dans le code qui suit cette attente, il y a peut
être des tâches indépendantes de la valeur val
qui pourraient être exécutées (mais en les
exécutant, on risque de « rater » le changement
d'état) On consomme beaucoup de cycles CPU
pour rien
91
Notion d’interruption pour Arduino
• On peut faire du Polling (attente active ou «
scrutation »)
– Par exemple dans le loop si on veut attendre que
la broche inPin passe à un état LOW, on peut
utiliser le code suivant :
int val;
do
{
val = digitalRead(inPin);
} while (val!= LOW);
// ici du code à exécuter
92
Capteur d’obstacle Ultrason
Fonctionnement:
Ce module émet un ultrason à 40 KHz qui se déplace dans l'air et s'il
y a un objet ou un obstacle sur son chemin Il se renverra au
module. Compte tenu du temps de déplacement et de la vitesse du
son, vous pouvez calculer la distance.
Les caractéristiques du composant:
Alimentation : 5 Volts
Consommation : 15 milliAmpères
Portée : 3 cm à 250 cm (soit 2.5m)
Typé d'émission : Impulsion TTL de 10µs
Fréquence d'émission : 40k Hertz
Cône d'émission : 30° (soit +/- 15°)
93
Capteur d’obstacle Ultrason
94
• Pour générer l‘ultrason, vous devez régler
le Trig sur un état élevé pour 10 μs. Cela
enverra un éclat sonore à 8 cycles qui se
déplacera au son de la vitesse et il sera
reçu dans la broche Echo.
• Par exemple, si l'objet est à 10 cm du
capteur et que la vitesse du son est de 340
m / s ou de 0,034 cm / μs, l'onde sonore
devra parcourir environ 294 secondes.
Mais ce que vous obtiendrez de la broche
Echo sera le double de ce nombre car la
sonne doit se déplacer vers l'avant et
rebondir. Donc, afin d'obtenir la distance
en cm, il faut multiplier par 0.034 la valeur
de temps de trajet reçue de la broche
d'écho et diviser par 2.
95
Capteur d’obstacle Ultrason
void setup() {
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
96
Capteur d’obstacle Ultrason
void loop() { pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
// Convert the time into a distance
delayMicroseconds(10);
digitalWrite(trigPin, LOW); cm = (duration/2) / 29.1
inches = (duration/2) / 74;
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
97
Capteur de température DHT11
98
Capteur de température DHT11
#include <dht11.h> void loop()
#define DHT11PIN A0 {
dht11 DHT11; DHT11.read(DHT11PIN);
void setup()
{ Serial.print("Humidité (%): ");
Serial.begin(9600); Serial.print((float)DHT11.humidity, 2);
Serial.println("DHT11 programme d'essai "); Serial.print("\t");
Serial.println(); Serial.print("Température (°C): ");
} Serial.println((float)DHT11.temperature, 2);
delay(2000);
}
99
Ateliers pratiques
101
Afficheur 7 segments
• L’affichage sur un afficheur 7 segments est une
solution pour l’affichage de la valeur de température.
102
Station metéo
103
Calcul de la valeur de température
#include "SevSeg.h"
SevSeg sevseg;
void setup(){
byte numDigits = 4;
byte digitPins[] = {10, 11, 12, 13};
byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
void loop(){
sevseg.setNumber(4999, 3);
sevseg.refreshDisplay();
}
104
Pause café
105
Activité 2
107
Actionneur
109
Encore des actionneurs
Capteur Description Capteur Description
Ecran Graphique Moteurs pas à pas
Application : Signaler des choses ou Application : Déplacer précisément
dialoguer avec l’utilisateur d’une certaine rotation, ou Controller
Récupérer : Il y en a sur tous les la vitesse de rotation, par exemple sur
téléphones, mais la connexion avec une machine
une arduino nécessite d’être fort en outil, un robot, une imprimante, etc..
électronique. Préférer l’achat neuf Nécessite une carte électronique.
d’un kit pour arduino. Récupérer : Sur de veilles
imprimantes ou de vieux
photocopieurs (gros).
Moteur continu Servos moteurs de modélisme
Application : faire des mouvements Application : déplacer précisément
rotatifs tout ou rien (facile) ou (rotation ou translation).
contrôlés en vitesse (plus dur) pour Facile à piloter, mais peu puissant. Ne
bouger un robot ou un permet pas la rotation continue, mais
volet roulant par exemple que d’une fraction de tour (3/4 a peu
Récupérer : sur de vieux jouets près).
Récupérer : Difficile, à moins d’en
récupérer sur un modèle réduit, pas
cher à l’achat.
110
Moteur pas à pas
• Les moteurs pas-à-pas possèdent différentes
phases qui permettent d’orienter la position du
rotor.
• On peut donc transformer une séquence
d’impulsions sur les différentes phases en
déplacement angulaire.
• Comme la séquence à envoyer pour obtenir un
certain déplacement est connue, on peut
connaitre la position sans capteur
supplémentaire et donc de piloter le moteur
précisément en boucle ouverte.
111
Moteur pas à pas
112
Moteur pas à pas
113
Bibliothèque « Stepper.h »
#include <Stepper.h>
double stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); // Pin inversion to make the library work
void setup() {
myStepper.setSpeed(10);
Serial.begin(9600);
}
void loop() {
// 1 rotation counterclockwise:
Serial.println("counterclockwise");
myStepper.step(stepsPerRevolution);
delay(1000);
// 1 rotation clockwise:
Serial.println("clockwise");
myStepper.step(-stepsPerRevolution);
delay(1000);
}
114
Servomoteur
• On appelle « servomoteur », un moteur asservi
(rien à voir avec le cerveau !).
• Asservir un système, c’est le commander de
manière à ce que la consigne (ce que l’on attend
de lui = ce qu’on lui demande de faire) soit en
permanence comparée à sa sortie mesurée (ce
qu’il fait réellement).
• Il existe des servomoteurs asservis :
– en position : la consigne est un angle
– en vitesse : la consigne est une vitesse angulaire
115
Servomoteur
• En robotique, on utilise souvent des petits
servomoteurs d’aéromodélisme comprenant :
– un moteur à courant continu de très petite taille ;
– un réducteur diminuant la vitesse mais augmentant le
couple ;
– un potentiomètre qui génère une tension variable,
proportionnelle à l’angle de l’axe de sortie ;
– un dispositif électronique d’asservissement ;
– un axe dépassant hors du boîtier avec différents bras
ou roues de fixation.
116
Servomoteur
117
Servomoteur
• Ces servomoteurs sont commandés par
l’intermédiaire d’un câble électrique à trois fils
:
– Masse : Noir ou Marron
– 5V : Rouge
– Signal : Jaune ou Blanc ou Bleu
118
Servomoteur
119
Faire bouger le bras d'un servomoteur
dans les deux sens
Servo monServo;
void setup()
{
monServo.attach(9); //on définit le Pin utilisé par le servomoteur
}
void loop()
{
for (int position = 0; position <=180; position ++){
//on crée une variable position qui prend des valeurs entre 0 à 180 degrés
monServo.write(position);
delay(15);
}
for (int position = 180; position >=0; position --){
monServo.write(position);
delay(15);
}
}
120
Moteur à courant continu
• Un moteur à courant continu est une machine
électrique de type convertisseur
électromécanique.
• En fonctionnement « moteur », il réalise la
conversion d’énergie électrique en énergie
mécanique.
121
Contrôler un moteur Brushless
• Les moteurs Brushless sont de plus en plus fréquemment
utilisés en raison de leurs performances nettement
supérieures à celles des moteurs à courant continu
« classiques ».
• Mais contrairement à ces derniers, leur commande est plus
complexe, étant donné qu’il s’agit de moteurs synchrones : il
faut générer 3 signaux de fréquence multiple de la fréquence
de rotation, et déphasés de 120°.
122
Contrôler un moteur Brushless
123
Pont en H L298N
• Ce circuit, très populaire et bon marché
(moins de 3€), offre un bon moyen de piloter
jusqu’à deux moteurs à courant continu, ou
bien un moteur pas à pas, voire même un
moteur brushless.
• Il peut délivrer jusqu’à 2A en pointe et 20W en
continu.
• Il possède son propre circuit d’alimentation
logique (permettant d’alimenter l’Arduino)
124
Pont en H L298N
125
Pont en H L298N
• Les ports ENA et ENB permettent de gérer
l’amplitude de la tension délivrée au moteur,
grâce à un signal PWM.
• Les ports In1, In2 pour le moteur A et In3, In4
pour le moteur B, permettent de contrôler le
pont en H et par conséquent le sens de
rotation des moteurs.
126
Câblage
127
Programmation
// Pont en H L298N
// Vitesse du moteur
int state = 0;
void setup() {
// Configuration des ports en mode "sortie"
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
128
Programmation
void loop() {
if (Serial.available() > 0)
{
// Lecture de l'entier passé au port série
state = Serial.parseInt();
//
// Sens du mouvement
//
if (state > 0) // avant
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
Serial.print("Avant ");
Serial.println(state);
}
129
Programmation
else if (state < 0) // arrière
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
Serial.print("Arriere ");
Serial.println(state);
}
else // Stop (freinage)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
Serial.println("Stop");
}
//
// Vitesse du mouvement
//
analogWrite(enablePin, abs(state));
}
delay(100);
}
130
Atelier pratique
132
Liste de composants
• Carte Arduino
• Potentiomètre
• Servomoteur
• Carte d’essai
133
Contrôller un servomoteur
134
Programme
135
Bonne fin de la journée