Et c'est parti pour la semaine 1 ! Cette semaine, nous allons dcouvrir les outils
notre disposition pour le prototypage lectronique avec Arduino. Ces outils vous
permettront de raliser les montages et exercices .
Vido 1 https://youtu.be/yUnQtbFOVbI?t=2
Deux choix s'offrent vous pour raliser des montages avec Arduino :
Utiliser le logiciel Arduino install sur votre ordinateur. Ce logiciel va nous permettre
d'envoyer des ordres un Arduino pour qu'il les excute. Si vous comptez utiliser un Arduino
(le vtre, celui d'un(e) amie ou celui de votre FabLab), nous vous invitons choisir l'option
"Logiciel" dans la section suivante.
Vido 2 https://youtu.be/O2YN-YdrnLY
Voici donc notre premier programme (celui qui est dcrit dans la vido). Cette
suite d'instructions va faire clignoter une LED branche sur la broche 13 de
l'Arduino toutes les secondes. Lorsque vous utilisez le logiciel Arduino, il peut
tre trouv en cliquant sur FichierExemples01.BasicsBlink. Vous pouvez
galement copier le code suivant dans votre diteur :
Programme
/*
Clignotement
Allume la LED pendant 1 seconde,
puis l'teint pendant 0,5 seconde.
*/
delay(1000);
digitalWrite(led, LOW);
delay(1000);
// attendre 1000ms = 1s
// teindre la LED (tension 0V sur la broche)
// attendre nouveau 1seconde
ARDUINO
Petits rappels sur les broches d'Arduino :
Pour viter de tout brancher directement sur l'Arduino, nous allons utiliser la
platine d'essai ou breadboard.
"Je vais maintenant vous prsenter un outil trs pratique lorsque l'on fait ses dbuts
en lectronique ou lorsque l'on veut tester rapidement/facilement un montage. Cet
accessoire s'appelle une breadboard (littralement : Planche pain, techniquement :
plaque d'essai sans soudure). Pour faire simple, c'est une plaque pleine de trous !"
Principe de la breadboard
Certes, la plaque est pleine de trous, mais pas de manire innocente ! En effet, la
plupart d'entre eux sont relis. Voici un petit schma rapide qui va aider la
comprhension.
Comme vous pouvez le voir sur l'image, j'ai dessin des zones. Les zones rouges
et noires correspondent l'alimentation. Souvent, on retrouve deux lignes
comme celles-ci permettant de relier vos composants aux alimentations
ncessaires. Par convention, le noir reprsente la masse et
lerouge, l'alimentation (+5V, +12V, -5V... ce que vous voulez y amener).
Habituellement, tous les trous d'une mme ligne sont relis sur cette zone. Ainsi,
vous avez une ligne d'alimentation parcourant le long de la carte.
Ensuite, on peut voir des zones en bleu. Ces zones sont relies entre elles
parcolonne. Ainsi, tous les trous sur une mme colonne sont relis entre eux. En
revanche, chaque colonne est distincte. En faisant chevaucher des composants
sur plusieurs colonnes, vous pouvez les connecter entre eux.
Dernier point, vous pouvez remarquer un espace coupant la carte en deux de
manire symtrique. Cette espace coupe aussi la liaison des colonnes. Ainsi, sur
le dessin ci-dessus, on peut voir que chaque colonne possde 5 trous relis entre
eux. Cet espace au milieu est normalis et doit faire la largeur des circuits
intgrs standards. En posant un circuit intgr cheval au milieu, chaque patte
de ce dernier, se retrouve donc sur une colonne, isole de la prcdente et de la
suivante.
Si vous voulez voir plus concrtement ce fonctionnement, je vous conseille
d'essayer le logiciel Fritzing, qui permet de faire des circuits de manire assez
simple et intuitive. Vous verrez ainsi comment les colonnes sont spares les
unes des autres.
Tension et intensit
partir du circuit lectrique le plus simple, jusqu'aux circuits les plus complexes,
nous avons affaire un courant lectrique qui circule. Pour parler de la
magnitude de ce courant lectrique, on parle de l'intensit. Ce courant ou
intensit est mesur et exprim en Ampres (A).
Pour faire circuler un courant lectrique, il faut une "force motrice". En lectricit,
cette force est appele tension. La tension est mesure et exprime en Volts (V).
Pour visualiser la diffrence entre Intensit et Tension, on peut faire un
parallle avec l'eau. L'intensit dans un circuit lectrique est comme le dbit de
l'eau dans un tuyau. Et la tension lectrique est comme la pression de l'eau.
Pour un tuyau donn, plus on augmente la pression, plus le dbit d'eau
augmente. En lectricit c'est pareil : dans un circuit donn, plus on augmente la
tension, plus l'intensit augmente.
Rsistance
Toujours avec notre tuyau d'arrosage, on peut visualiser une autre manifestation
lectrique : la rsistance. La friction lintrieur du tuyau rsiste au passage de
l'eau. Plus le diamtre du tuyau est petit, plus la rsistance est importante. Plus
le tuyau est long, plus la rsistance est forte. Et si, pour augmenter le dbit, on
augmente trop la pression le tuyau se rompt.
La rsistance lectrique est trs semblable. La rsistance est mesure et
exprime en Ohms (). Un simple fil lectrique en cuivre montre une rsistance
au courant. Plus le diamtre du fil est petit, plus il y a de rsistance. Plus le fil est
long, plus il y a de rsistance. Vous avez peut-tre dj expriment : si on essaie
de passer trop de courant dans un petit fil lectrique le fil fond (c'est le
principe d'un fusible).
Loi d'Ohm
Bon, nous avons dj trois phnomnes lectriques matriser :
la tension(volts), l'intensit (ampres) et la rsistance (ohms). Ces trois
phnomnes sont intimement lis par une loi d'lectricit dite loi d'Ohm. La loi
s'exprime dans une formule trs simple :
U=RI
avec :
U : Tension
I : Intensit
R : Rsistance
I = R et R = I
Pour terminer, sachez qu'il vous faudra protger vos LED avec une rsistance
d'une valeur comprise entre 200 et 1k. Nous verrons ds la semaine
prochaine pourquoi !
LE BLINK
Voici donc notre premier programme ! Cette suite d'instructions va faire clignoter
une LED branche sur la broche 13 de l'Arduino toutes les secondes. Lorsque
vous utilisez le logiciel Arduino, il peut tre trouv en cliquant
surFichierExemples01.BasicsBlink.
/*
Clignotement
Allume la LED pendant 1 seconde,
puis l'teint pendant 1 seconde.
*/
Montage
// attendre 1000ms = 1s
// teindre la LED (tension 0V sur la broche)
// attendre nouveau 1seconde
Instructions
la fin de chaque programme, nous dtaillerons les nouvelles briques logicielles
utilises. Comme c'est notre premier programme, nous avons beaucoup de
choses voir (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).
Dans ce programme, nous avons :
Des commentaires : qui sont des lignes de texte incluses dans le programme et
qui ont pour but de vous aider comprendre (ou vous rappeler) comment votre
programme fonctionne ou d'en informer les autres. Ces lignes ne sont pas envoys
Arduino. Il y a deux faons de crer des lignes de commentaires :
/*
Voici des
commentaires sur
plusieurs ligne
*/
// Ceci est galement un commentaire
Des instructions :
Dclaration d'une variable : on vient avec cette ligne stocker la valeur droite
du signe gal dans la variable gauche du signe gal.
int led = 13;
Dans notre cas, cela signifie que la variable appele led qui sera un nombre
(puisque elle est prcde du mot cl int) viendra prendre la valeur 13.
Les blocs d'instructions : setup regroupe toutes les instructions qui seront
excutes au dmarrage du programme. La fonctionsetup n'est excute qu'une seule
fois, aprs chaque mise sous tension ou reset (rinitialisation) de la carte
Arduino. loop (boucle en anglais) contient les instructions que l'on souhaite voir
excutes encore et encore tant que l'Arduino est branch.
void setup() { }
void loop() { }
Les fonctions : sont des instructions qui permettent d'excuter une ou plusieurs
actions. Les fonctions sont dfinies avec :
Une sortie : le rsultat de la fonction qui peut tre stock dans une
variable.
Prenons l'exemple de la fonction suivante :
digitalWrite(led, HIGH);
Dans ce cas, le nom de la fonction est digitalWrite. Nous passons deux paramtres la
fonction : led et HIGH. La fonction digitalWrite n'a pas de sortie. Avec cette fonction,
nous allumons la broche situe sur la broche passe avec le premier paramtre (qui
peut tre un nombre ou une variable). Lorsque le second arguement est plac HIGH,
on vient allumer la LED. Tandis qu'on teindra la LED si le second argument pass
est LOW.
delay fait une pause dans l'excution du programme pour la dure (en
millisecondes) passe en paramtre :
delay(1000);
Voil, c'est tout pour le code de cette semaine, la suite c'est les QCM et le
premier devoir
digitalWrite
delay
loop
2. Une LED est branche sur la broche 2 (avec l'autre patte sur GND). Parmi les
fonctions ci-dessous, laquelle permet d'allumer cette LED ?
digitalWrite(3, HIGH);
digitalwrite(2, LOW);
digitalWrite(2, HIGH);
digitalWrite(HIGH, 2);
pinMode(8, HIGH);
modePin(OUTPUT);
digitalWrite(6);
13 = int
brocheLed;
EXERCICE
On vous montre quoi a ressemble.
La consigne est la suivante : partir des fonctions vues dans l'exemple "Blink" et des bases
d'lectroniques dcrites cette semaine, vous devez raliser (chez vous ou dans votre FabLab)
un feu tricolore avec trois LED (une verte, une orange, une rouge) qui devront tre allumes
comme suit :
- Orange allume pendant 1 seconde
- Rouge allume pendant 3 secondes
- Verte allume pendant 3 secondes
Vous aurez besoin de la platine de prototypage pour raliser ce montage !
C'est vous, bon courage !
Passons maintenant aux cls. Bien sur je ne parle pas des clefs pour rentrer dans
votre atelier, mais bien des cls pour pouvoir serrer les boulons et autres crous.
Parmi la grande famille de ces dernires, voici quelques unes que lon retrouve
trs souvent.
La cl Allen (ou cl 6 pans)
Facile distinguer, cest une pice de mtal coude en L qui possde 6 faces
(do le nom de cl 6 pans). Elle est utilise pour serrer des vis possdant une
tte creuse de la mme forme. Le nom de cl Allen vient du nom de la marque
ponyme qui a mis en uvre cette dernire.
Comme pour la cl 6 pans, cest la caractristique mcanique qui lui donne son
nom. Elle possde une forme en toile et sadapte l encore aux vis possdant
une tte creuse de la mme forme. Cette cl fut invente par le constructeur
automobile Renault.
La cl plate
Les cls plates font partie des incontournables. On en trouve de toutes tailles et
elles servent serrer des crous ou des boulons. Prenez en quelques unes, elles
ne coutent pas une fortune et sont toujours pratiques !
La cl pipe/douille/cliquet
La cl a pipe est similaire la cl plate ceci prt quelle a la forme dune pipe. Sa
prise en main facilite le mouvement et donc donne plus de force pour agir sur le
boulon/crou.
La cl douille est similaire, elle utilise des douilles qui ne sont rien dautres
que des embouts interchangeables pour agir sur la visserie.
Enfin, la cl cliquet est une cl douille mais possdant un mcanisme
particulier lui permettant de faire des mouvements de vissage/dvissage rapide
puisque la douille na pas tre retire du boulon/crou entre chaque
mouvement.
Pinces
L encore, comme pour les autres outils, il en existe de toutes les formes et
toutes les couleurs Seules certaines dentre elles vont nous intresser
Son nom lindique, cette pince est plate. Elle est souvent utilise pour serrer
deux choses entre elles ou pour maintenir une pice le temps dune opration.
Par exemple pour refermer un bout de mtal ou pour maintenir un fil en train
dtre soud (et ainsi ne pas se brler).
La pince coupante
L encore le nom est vocateur. Elle va nous servir tout simplement couper des
fils. Cependant nallez pas couper des fils avec une section (un diamtre) trop
grosse sous peine dendommager loutil.
La pince dnuder
Toujours avec un nom trs clair, celle-ci sert dnuder vos fils. Autrement dit,
elle coupera proprementlisolant plastique sur le bout de votre fil qui pourra
ensuite tre simplement tam, soud ou viss sur un connecteur. Elle est plutt
facultative dans le sens o le dnudage peut tre fait avec une pince coupante,
des ciseaux ou un couteau, mais ce sera moins rapide et propre quavec cet outil
ddi.
La pince sertir
Allant souvent de paire avant la pince dnuder, cet outil vous permettra
de sertir vos fils dnuds sur vos connecteurs. Cela vous garantit que votre fil
sera bien fix et maintenu sur sa cosse et ainsi quil ne risque pas de sarracher
du connecteur final ds que vous allez tirer un peu dessus. L encore elle est
facultative, cette opration pouvant tre ralise (de manire moins triviale) avec
une pince plate et de la patience. Son cot peut aussi tre un frein lachat
La pince brucelles
Cette dernire est toute simple et a une application bien particulire. Elle
ressemble un peu une pince piler la diffrence quelle se termine en
pointe et ne coupe pas. On s'en sert pour manipuler des composants monts en
surface (CMS) qui sont difficiles prendre la main et positionner
correctement.
trs pratiques quand il sagit de faire des perages (un copeau dans lil est vite
arriv).
Dune manire gnrale : Protgez-vous ! Noubliez pas ce que nous dit la loi de
Il arrive souvent que lon ait des taches un peu fastidieuses faire la main. Par
exemple tamer un simple fil (action qui consiste recouvrir dtain le cuivre
dun fil). Pour cela il vous faut tenir le fil, tenir ltain et manipuler le fer souder
pour dposer ltain sur le fil. Nul doute quune troisime main serait fort
pratique ! Cest justement le nom de loutil suivant. La troisime main se
prsente sous la forme dun support avec une pince ou deux et ventuellement
une loupe. Le support est leste pour bien rester en place lorsque vous
manipulez. Grce aux pinces vous pouvez facilement placer des composants
dans lorientation qui vous arrange le plus pour faire vos bricoles !
Dans le mme ordre dide on retrouve ltau. Cet ustensile est plus ddi au
serrage ou au maintien bien en place pendant un usinage. Placez une pice entre
les mchoires, serrez, cest maintenu ! Vous pouvez alors laisser le tout en place
(pour coller deux pices par exemple) ou commencer percer/limer/etc de
manire stable, propre et scurise. Il existe diffrents moyens de fixer ltau
votre tabli. Certains sont par un systme de ventouse, dautres se fixent par une
vis de serrage.
Outils dusinage
Pour faire des ajustements mcaniques sur des pices, il est utile davoir de quoi
usiner. Parmi ces outils on retrouve la perceuse (portative ou colonne) qui vous
permettra de trouer volont, la fraiseuse pour faire des ajustements de surface
ou encore une bonne vieille lime pour bavurer des dcoupes ou arrondir des
angles un peu trop francs et dangereux.
Rappel scurit, lorsque vous utilisez des outils lectro-portatifs (comme une
perceuse), veillez toujours bien bloquer la pice qui va recevoir le traitement.
Vous ne souhaitez pas la voir commencer tourner et risquer de partir dans le
dcor. De mme, des lunettes pour viter les copeaux dans les yeux sont les
bienvenues !
La soudure
Puisquon parle de soudure voyons un peu tout ce qui y touche Bien entendu,
tout commence par le fer. Pour des travaux dlectronique, un fer dune
trentaine de watts sera suffisant. Il doit tre capable de chauffer entre 300 et
400C si vous voulez que ltain fonde. Bien entendu, il en existe pour tous les
prix, allant du simple fer 10 la station rglable qui en cotera plus dune
centaine. Choisissez en fonction de vos moyens et de vos prtentions mais
gardez en tte que les moins chers vont chauffer lentement ou atteindre
difficilement une temprature suffisante. De manire gnrale, essayez dviter
les fers de type pistolets.
Le fer souder ne sert pas grand chose sil est seul, il vous faudra aussi investir
dans une bobine dtain (fil souder) qui peut contenir ou non du plomb (plus
simple souder mais utiliser dans un endroit ar car les vapeurs ne sont pas
trs bonnes pour lorganisme).
De la tresse dessouder ou une pompe dessouder peuvent aussi savrer utile.
Vido 3 https://youtu.be/eZbDA65sVGo
LE BUTTON
Merci d'avoir regard cette vido ! Voici quelques informations pour mieux la
comprendre :
Montage
Un Arduino
Un cble USB
Deux rsitances de 1K
Un bouton poussoir
Code
Cette suite d'instructions va allumer une LED branche sur la broche 13 lorsque
le bouton branch sur la broche 2 est appuy. Lorsque vous utilisez le logiciel
void loop(){
// lit l'tat du bouton et stocke le rsultat
// dans buttonState :
buttonState = digitalRead(buttonPin);
Instructions
Comme la semaine dernire, voici une description des nouvelles fonctions
utilises (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).
Dclaration d'une constante : comme pour une variable, on vient avec cette
ligne stocker la valeur droite du signe gal dans led.
const int led = 13;
Le mot cl const indique que l'on ne souhaite pas que la valeur de led puisse tre
modifie dans le programme.
digitalRead lit l'tat d'une broche et renvoie la valeur HIGH si la broche est la
tension de l'alimentation ou LOW si la broche est 0V.
digitalRead(buttonPin);
La valeur de retour de digitalRead peut tre stocke dans une variable comme ceci :
buttonState = digitalRead(buttonPin);
else : le bloc situ aprs cet mot cl viendra tre execut si le test prcdent
choue. Dans Button, si le bouton n'est pas appuy alors on viendra teindre la LED.
Les rsistances
La semaine passe, nous indiquions ici qu'il fallait protger vos LED avec une
rsistance comprise entre 200 et 1k.
Cette semaine, on s'intresse au pourquoi avec un montage :
Montage
Valeurs de rsistances
Les rsistances sont fabriques et tries dans plusieurs gammes de valeurs
normalises. On ne trouve pas, par exemple, une rsistance de 40 dans le
commerce. La valeur la plus proche est, en fait, 39. En plus, la valeur d'une
rsistance n'est que trs rarement exactement le valeur indique : il y a toujours
une tolrance (normalement 5%). Une tolrance de 5% sur 39 donne de
37,05 40,95 ! Si vous cherchez sur internet vous trouverez les infos sur les
gammes de valeurs, et comment lire les valeurs (code de couleurs) des
rsistances.
(5 points)
Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. La fonction digitalRead permet de lire l'tat d'une broche numrique. Que
peut renvoyer cette fonction (plusieurs choix possibles) ?
HIGH
4.2
HAUT
LOW
pinMode(6, OUTPUT);
modePin(6, OUTPUT);
digitalWrite(6);
4. Je souhaite utiliser une LED branche sur la broche 12. Quelle sera la meilleure
syntaxe pour dclarer ma constante ?
int led = 12;
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
delay(5000);
}
Seules les notions abordes dans les cours de cette semaine et des semaines
passes sont ncessaires pour raliser ce TP :)
TP 2 : FEUX TRICOLORES AVEC PASSAGE
Le TP faire pour la semaine prochaine consiste raliser un feu tricolore accompagn d'un
feu "piton" bicolore (rouge et vert). Le montage devra galement avoir un bouton pour
pitons qui viendra passer le feu au orange puis au rouge tout en passant le feu piton au
vert (un peu comme dans la vraie vie finalement :)
Consignes du TP
Fonctionnement normal :
Feu tricolore : mme consigne que la semaine dernire
- Une LED orange (branche sur la broche 11) allume pendant 1 seconde
- Une LED rouge (branche sur la broche 12) allume pendant 3 secondes
- Une LED verte (branche sur la broche 10) allume pendant 3 secondes
void setup() {
// le bouton en entre
pinMode(monBouton, INPUT);
void loop() {
// si on appuie sur le bouton
etatBouton = digitalRead(monBouton);
if(etatBouton == HIGH) {
// alors on incrmente le compteur
compteur = compteur+1;
}
}
void setup() {
// le bouton en entre
pinMode(monBouton, INPUT);
}
void loop()
{
// lecture de l'tat du bouton
etatBouton = digitalRead(monBouton);
Video4 https://youtu.be/VSxi23Folbw
ANALOGINOUTSERIAL
Merci d'avoir regard cette vido ! Voici quelques lments pour mieux la
comprendre :
Montage
Schma
Un Arduino
Un cble USB
Deux rsitances de 1k
Une photorsistance
Code
Cette suite d'instructions va allumer une LED branche sur la broche 9.
L'intensit lumineuse de la LED sera proportielle la luminosit capte par la
photorsistance branche sur la broche A0 (notez bien le A0, le A qui prcde le 0
signifie que c'est une entre Analogique).
Lorsque vous utilisez le logiciel Arduino, le code peut tre trouv en cliquant
surFichierExemples03.AnalogAnalogInOutSerial.
/*
Entre et sortie analogiques + communications srie
*/
int sensorValue = 0;
int outputValue = 0;
void setup() {
// Initialise la communication avec l'ordinateur
Serial.begin(9600);
void loop() {
// lit la valeur de la photorsistance et
// stocke le rsultat dans sensorValue :
sensorValue = analogRead(analogInPin);
// change sensorValue vers une intervalle de 0 255
// et stocke le rsultat dans outputValue :
outputValue = map(sensorValue, 0, 1023, 0, 255);
// envoie de cette nouvelle valeur sur la LED
analogWrite(analogOutPin, outputValue);
Remarques :
Copiez-collez ce code dans le simulateur pour ne pas avoir tout retaper. Saviezvous que vous pouvez accder la documentation d'une fonction en cliquant avec le
bouton droit sur celle-ci puis en cliquant surTrouvez dans la rfrence.
Instructions
Comme les semaines passes, voici une description des nouvelles fonctions
utilises (n'hsitez pas cliquer sur les liens ci-dessous afin d'arriver sur la
rfrence Arduino).
La valeur de retour de analogRead peut tre stocke dans une variable entire (c'est
pour cela que nous devons dclarer une variable de type int pour stocker le rsultat) :
sensorValue = analogRead(analogInPin);
Serial est une librairie (un ensemble de fonctions) utilise pour les
Dans la fentre qui s'ouvre, vrifier bien que vous tes au mme dbit de
communication que celui utilis dans l'appel de la fonction Serial.begin. Par dfaut le
dbit est de 9600 :
Serial.print Cette fonction permet d'envoyer sur le port srie une suite de
caractres indiqu en paramtre. De la mme faon, Serial.println envoie une suite de
caractres suivi d'un retour la ligne :
Serial.print("Texte envoye vers l'ordinateur"); // sans retour la ligne
Serial.println("Texte avec retour a la ligne"); // avec retour la ligne
Serial.print nous sera particulirement utile pour une tche que vous
avez dj faite sans vous en rendre compte : le dbogage. Il n'est pas rare que vous
tlversiez votre code sur Arduino sans problme, mais une fois sur Arduino le
comportement de votre programme mais pas celui attendu. Des petites erreurs
viendront souvent se glisser dans vos programmes car nous ne sommes
malheureusement pas parfaits et qu'un oubli est vite arriv. Grce Serial, il nous sera
possible d'indiquer quand nous allumons une LED ou lorsque nous faisons un test... Il
nous sera ainsi possible de suivre le droulement de notre programme ! Mais ce n'est
pas tout,Serial.print et Serial.println peuvent galement afficher la valeur de variables
si nous indiquons un nom de variable en paramtre :
Serial.print("sensor = " );
Serial.print(sensorValue);
map permet de faire passer une valeur situe dans une intervalle vers un
autre. Les paramtres de ces fonctions sont les suivants :
Simulateur
Pur ceux qui souhaiteraient utiliser le simulateur, la photorsistance est
disponible en cliquant sur Add component puis sur LDR. Cependant, linteraction
avec la photorsistance est limite et se limite cliquer dessus pour changer la
valeur de sa rsistance. Nous vous conseillons de le remplacer par un
potentiomtre comme ci-dessous :
COMPOSANTS PASSIFS
Dans les semaines passes, nous avons pas mal discut des rsistances,
composants incontournables dans les montages lectroniques. Voici d'autres
composants dits "passifs" que nous allons souvent utiliser.
Les Diodes
"Ahhhhh..." jentends dj les puristes "une diode est un semi-conducteur, pas
un composant passif..." Et oui, mais je vais traiter le sujet ici et maintenant car
nous l'avons dj vu plusieurs fois dans nos prcdents montages.
La diode est le premier vrai composant lectronique qui a t invent. Au dbut
c'tait en forme dnorme tube lectronique qui chauffait un max ! Maintenant
elle existe sous plusieurs formes :
Leur fonction de base est toute simple : laisser passer le courant dans un seul
sens. On peut penser notre tuyau d'eau abord la semaine passe : une diode
est comme un clapet anti-retour. Voici le symbole lectronique :
Les deux petites flches indiquent que cette diode met de la lumire...
Rappelons notre montage de la semaine passe :
On voit bien que l'anode est au positif et la cathode au ngatif. (je sais ce n'est
pas la bonne valeur de rsistance avec une alimentation de 3v...).
Si on inverse la LED, elle ne s'allume plus et le courant ne passe plus.
(5 points)
Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. Je stocke le rsultat de la fonction analogRead dans une variable appele
maVariable. Je souhaite utiliser la fonction map pour la passer dans l'intervalle
suivant : 0100. Le rsultat sera stock dans la variable appele
maNouvelleVariable. Quelle sera la bonne syntaxe ?
maNouvelleVariable = map(maVariable, 0, 100);
= maNouvelleVariable;
1024
255
10
Serialbegin(9600);
analogWrite(11, 10);
Serial.begin(9600);
chaque tour de la boucle loop, quelle valeur sera envoye la LED branche
sur la broche 13 si j'appuie sur le bouton branch sur la broche 2 ?
LOW
HIGH
13
255
TP FAIRE
Cette semaine, nous allons tenter de raliser un Thrmine lumineux qui est un
bon exemple pour aborder les entres analogiques.
Ce montage va tre l'occasion dapprofondir les fonctions map et analogRead mais
galement de dcouvrir une nouvelle fonction lie l'utilisation d'un
buzzer pizo-lectrique, un composant qui peut produire du son. Le buzzer
pizo-lectrique transforme l'impulsion lectrique envoye par une broche en
une onde sonore de frquence identique et audible.
Quelques indices
Le capteur utilis
Pour mettre en uvre la mthode que je vous propose ici, nous allons utiliser un
capteur de temprature assez rpandu qui se nomme LM35. Il existe dans
LA MTHODE
La mthode pour caractriser un capteur est assez simple. laide dune
multitude de mesures et dun appareil tmoin, nous allons crer un tableau qui
nous servira calculer la courbe liant la tension la donne mesure ( laide
dun tableur). Pour cela, en plus de votre capteur vous aurez besoin dun appareil
de mesure tmoin qui vous servira de rfrence. Par exemple le bon vieux
thermomtre qui trane accroch votre fentre fera parfaitement laffaire !
Prise de mesures
Vous tes prts, alors allons-y, commenons travailler. Reliez le capteur
lArduino et lArduino lordinateur, de la manire la plus simple possible,
comme ceci par exemple :
Ensuite, nous devons rcuprer les donnes envoyes par le capteur de manire
rgulire (ou rajouter un bouton et faite des envois lors de lappui). Pour cela,
voici un petit programme sans difficult qui vous enverra les valeurs brutes ou
converties en volts toutes les demi-secondes :
const int capteur = 0; //capteur branch sur la pin analogique 0
float tension = 0.0;
int valeur = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
valeur = analogRead(capteur);
tension = (valeur*5.0)/1024;
Serial.print("Tension : ");
Serial.print(tension);
Serial.println(" V");
Serial.print("Valeur : ");
Serial.println(valeur);
Serial.println("---------------------");
delay(500);
}
Maintenant que tout est prt, il nous faut un banc de test. Pour cela, prparez
une casserole avec de leau contenant plein de glaons (leau doit tre la plus
froide possible). Faites une premire mesure avec votre capteur plong dedans
(attention, les broches doivent tre isoles lectriquement ou alors mettez
lensemble dans un petit sac plastique pour viter que leau naille faire un courtcircuit). Faites en mme temps une mesure de la temprature relle observe
laide du thermomtre. Une fois cela fait, relevez ces mesures dans un tableau
qui possdera les colonnes suivantes :
Temprature
(C)
Tension (V)
Valeur CAN
Quand la
premire
mesure est
faite,
commencez
rchauffer
0,015
plaant sur
de cuisson
Continuez
faire
leau (en la
une plaque
0,054
11
par exemple).
faire des
mesures
intervalle
rgulier (tous
les 5 degrs
voire moins
10
0,107
22
par exemple).
Plus vous
faites de
mesure, plus
llaboration
de la courbe
prcise. Voici
16
0,156
32
dexemple le
jai obtenu :
finale sera
titre
tableau que
21
0,210
43
24
0,234
48
29
0,293
60
35
0,352
72
38
0,386
79
43
0,430
88
46
0,459
94
50
0,503
103
Ralisation de la caractristique
Lorsque vous avez fini de prendre toutes vos valeurs, vous allez pouvoir passer
ltape suivante qui est : Calculer la caractristique de votre courbe !! Sortez vos
cahiers, votre calculatrice et en avant ! Non jblague (encore que a ferait un
super TP), on va continuer utiliser notre logiciel tableur pour faire le travail
pour nous ! On va donc commencer par regarder un peu lallure de la courbe. Je
vais en faire deux, une symbolisant les valeurs brutes de la conversion du CAN
(entre 0 et 1023) en rouge et lautre qui sera limage de la tension en fonction de
la temprature en bleu. Nous pourrons alors dterminer deux caractristiques,
selon ce qui vous arrange le plus.
Voici alors ce que lon obtient lorsque lon rajoute notre quation :
y=0.01x0.0003
y=2.056x0.0707
Le coefficient constant (-0.003 ou -0.0707) peut ici tre ignor. En effet, il est
faible (on dit ngligeable) compar aux valeurs tudies. Dans les quations, x
reprsente la temprature et y reprsente la tension ou les valeurs du CAN. On
lit donc lquation de la manire suivante : Tension en Volt gale 0,01 fois la
temprature en degrs Celsius. Ce qui signifie que dornavant, en ayant une
bonne cest que vous tes capable de dterminer la caractristique dun capteur.
La deuxime bonne nouvelle, cest que lquation que lon a trouve est
correcte parce quelle est marque dans la documentation technique qui est
super facile trouver
rien !! ) Mais comme cest pas toujours le cas, cest toujours bien de savoir
comment faire
void setup()
{
Serial.begin(9600);
}
void loop()
{
valeur = analogRead(monCapteur);
temperature = valeur/2.056;
Serial.println(temperature);
delay(500);}
Et si jamais notre coefficient constant nest pas ngligeable ?
Eh bien prenons un exemple ! Admettons quon obtienne la caractristique
suivante : y=10x+22 On pourrait lire a comme ma valeur lue par le CAN est
gale 10 fois la valeur physique plus 22. Si on manipule lquation pour avoir x
en fonction de y, on aurait :
y=10x+22
y22=10x
x=y2210
Dans le code, cela nous donnerait :
void loop()
{
valeur = analogRead(monCapteur);
temperature = (valeur-22)/10;
Serial.println(temperature);
delay(500);}
Vido 5 https://youtu.be/gQ7EF_Rh6Tw
LE SWEEP
Cette semaine, nous tentons une nouvelle approche dans le cours avec le code
directement expliqu dans le texte de la vido que vous venez de voir :
Salut toutes et tous et bienvenue, l'on va aborder les bibliothques de code.
Librairies, a vient de l'anglais "Libraries", qui signifie Bibliothques. Peu
importe ce que vous trouverez comme termes sur internet, l'ide c'est d'avoir
sous la main un rassemblement de morceaux de code, classs par thmatiques,
que vous invoquez la demande. Un peu comme des supers pouvoirs qui vous
vitent d'avoir rinventer la roue chaque projet !
Les librairies pour Arduino sont nombreuses et abordent la plupart des besoins
courants. On trouve ainsi les bibliothques standards, pour par exemple grer le
Wifi, les crans cristaux liquide, utiliser simplement une carte SD, ou encore
des moteurs. Pour l'occasion, nous allons nous intresser des moteurs un peu
particulier que l'on retrouve dans le monde du modlisme : les servo-moteurs.
Au boulot, je vous laisse ouvrir l'exemple sweep que l'on trouve dans les
exemples du dossier Servo: FichierExemplesServo>Sweep.
On dclare ensuite une variable pos, pour stocker une position au cours du
programme :
int pos = 0;
Il est temps de passer au bloc setup. C'est vite rgl, puisqu'il suffit d'attacher
notre servo frachement cr la broche 9 :
myservo.attach(9);
Comme indiqu sur la page de Mon Club Elec, les mthodes disponibles sur les
objets de type Servo sont assez
explicites : attach(), write(), writeMicroseconds(), read(), attached(), detach().
Fin du setup, il est temps de "looper" prsent ! :)
La boucle principale commence par... faire une boucle !
C'est reparti pour un tour, cette fois-ci dans l'autre sens. Au lieu d'incrmenter la
valeur de +1 chaque passage de bouclette, on la dcrmente ici de -1 :
for(pos = 180; pos >= 1; pos -= 1) {
myservo.write(pos);
delay(15);
}
Montage
Un Arduino
Un cble USB
Un servomoteur
Schma
Code
#include <Servo.h>
int pos = 0;
void setup()
{
myservo.attach(9); // attacher notre objet myservo au servomoteur branch sur la broche 9
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // aller de 0 180
// une tape la fois
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
Avec des servomoteurs basiques, les dplacements de chacun des axes seront
limits 180. Ceci tant, vous pouvez facilement trouver un servo tournant
360 dans n'importe quelle boutique de modle rduit, ou encore modifier un
servo pour une rotation continue.
CODE AGAIN
// BoissonMatic' 2014
// john@labfab.fr sous licence WTFPL v2.0
#include <Servo.h>
int pos = 0;
void setup()
{
servoBas.attach(9); // attache le servo du bas la broche 9
servoHaut.attach(10); // celui du haut la broche 10
void loop()
{
// on fait faire un quart de tour au servo panoramique
servoBas.write(MAXPAN);
delay(25);
}
servoHaut.attached();
// devrait retourner quelque chose
// comme "false" sur votre moniteur serie.
}
Vous l'aurez compris, la boucle for est fort fort utile. C'est mme la base du
fonctionnement d'Arduino, vous ne pouvez pas looper a. :)
Pour rappel et pour ceux qui roupillaient au fond de la salle, sa syntaxe est
toujours la mme.
for (condition) {
// ici du code pour bouclette
}
Ce qui se trouve entre les {} s'appelle un bloc d'instruction. Les variables y ont
COMPOSANTS PASSIFS
Nous avons pas mal discut des rsistances, composant incontournable dans les
montages lectroniques. Voici d'autres composants dits "passifs" que nous
avons souvent utiliser :
Leur construction et leur forme peut varier beaucoup mais leur principe reste le
mme : deux matriaux conducteurs (les deux traits verticaux), spars par une
matire isolante, appele dilectrique (l'espace entre les traits), l'ensemble
souvent en forme de "sandwich" ou parfois enrouls.
Condensateurs polariss
Il faut noter que, partir de la valeur d'environ 1uF, bon nombre de
condensateurs sont POLARISES - c'est dire qu'ils ont un "+" et un "-". On les
appelle souvent condensateurs chimiques. Il faut les brancher dans le bon sens
afin d'viter les surprises dsagrables : inverss ils ont tendance a se gonfler
jusqu' parfois se rompre carrment. Les produits chimiques l'intrieur sont
trs corrosifs...
D'habitude c'est le fil "-" qui est repr avec une bande noir sur le cot. Crdits
photo : merci Wikipedia :
Le condensateur est conu pour stocker les charges lectriques. Leur valeur est
mesure et calcule en Farads (F). Plus la valeur est grande et plus le
condensateur peut stocker de charge. Les valeurs rencontres dans
l'lectronique classique sont de l'ordre de nanofarads (10-9 Farads), jusqu' des
centaines de microfarads (10-6 F). Souvent les valeurs sont crites de la manire
suivante :
47uF = 47 microfarads ou 47 10-6 ;
Anti-rebond
Nous avons dj utilis des boutons afin de commander nos montages Arduino
et vous avez srement eu a faire avec le problme de rebond des contacts
(contact bounce, en anglais). La construction mcanique des boutons fait que les
contacts rebondissent plusieurs fois avant de sarrter en position ouverte ou
ferme. Avec un Arduino capable de ragir en un milliardime de seconde, ces
rebonds sont un vrai casse-tte.
D'habitude on rsout le problme dans le logiciel - on attend un certain nombre
de millisecondes et on lit nouveau l'entre concerne pour dterminer l'tat.
Sachez toutefois qu'il y a aussi une solution lectronique qui peut parfois nous
simplifier la vie : Voici le branchement typique d'un bouton en entre d'un
microcontrleur :
L'entre est tenue au niveau 1 par la rsistance. Quand on appuie sur le bouton
l'entre est 'tire' vers le niveau 0. Regardons dj quoi ressemble le 'bounce' :
division = 25uS. On voit bien que cela peut tre interprt par le microcontrleur
comme au moins six pressions ! On peut amliorer la situation on ajoutant un
condensateur (et oui, c'est toujours le sujet de ce chapitre...) comme ici :
Ce n'est pas un carr parfait, mais notre Arduino ne verra qu'une seule pression.
Sans avoir ajouter du code spcifique anti-rebond. Utile les petits
condensateurs !
Base de temps RC
Voil un montage simple construire avec l'Arduino. D'abord le montage sur la
platine de prototypage ou "breadboard" (littralement "planche pain" en
anglais...) :
Trs simple cbler, ce petit montage sert pour voir comment les condensateurs
peuvent nous fournir des bases de temps. La sortie 13 de l'Arduino est celle
quipe d'une DEL (LED) sur la platine de l'Arduino. Quand la sortie est au
niveau '1' la DEL s'allume. Nous prenons la mme sortie logique pour piloter
notre montage. A travers la rsistance de 10K le condensateur se charge
pendant que la sortie 13 est au niveau '1', et se dcharge pendant le niveau '0'.
Le transistor est utilis comme une sorte d'interrupteur pilot (nous allons parler
des transistors bientt...) pour allumer la DEL rouge. Voici le schma :
SlowBlink
et vrifier que la LED sur l'Arduino clignote (trs) lentement. Regarder la LED rouge sur
la platine dexprimentation : elle clignote aussi, mais avec presque une seconde de
retard. Le dlai exact dpend de plusieurs paramtres, notamment le type de
transistor.
T = RC
avec T = temps en secondes ; R la rsistance en Ohms ; et C la capacitance en
Farads.
(*) Mais ce temps dpend beaucoup des conditions de branchement,
notamment la rsistance de sortie du montage (souvent appele l'impdance).
Prenant l'exemple ici, nous avons R = 10000 et C = 0,00047F ce qui donne le
temps de charge ou dcharge de 4,7 secondes. Pourquoi notre DEL n'avait qu'un
retard d'environ 1 seconde, alors ? La rponse au chapitre "transistors" ! Vous
pouvez changer le condensateur pour un plus grand ou plus petit, ou en mettre
plusieurs en parallle ou srie. Vous verrez que les valeurs des condensateurs
en parallle s'additionnent, et la valeur des condensateurs en srie se calcule
comme ceci :
(5 points)
Voici une srie de questions portant sur les vidos et documents de la semaine,
histoire de voir si ce qu'on raconte est comprhensible.
1. Si on regarde le code suivant :
for(int uneBroche = 2; uneBroche < 8; uneBroche++) {
digitalWrite(uneBroche, HIGH);
}
Que va t'il se passer si des LED sont branches sur toutes les broches
numriques ( numrotes de 0 13) ?
monServo = attach(9);
monServo.attach(9);
Il faut
Que va t'on observer dans le moniteur srie lorsque ce code sera excut ?
bip bip ,meuh,bip bip,meuh
bip bip,meuh
TP4
Cette semaine, nous restons dans nos montages de feux en compliquant un peu
la chose avec une barrire. Le montage raliser devra comporter :
Quelques indices
Vous aurez besoin de mobiliser toutes les comptences vues ces dernires
semaines pour raliser ce TP :
Pour crer un nouveau fichier dans lIDE Arduino, il suffit de cliquer sur la petite
flche en haut de lespace ddition du code puis ensuite de cliquer sur Nouvel
onglet ou New Tab comme mis en vidence sur la capture dcran ci-dessous :
Le fichier .h
lorsque lon veut sparer son code en plusieurs fichiers, il y a certaines choses
respecter. Ainsi, chaque fois que lon veut crer un nouveau fichier de code on
ne vas pas en crer un mais deux ! Le premier fichier aura lextension .h
signifiant header, cest ce que nous allons voir maintenant.
Ce fichier va regrouper les prototypes des fonctions ainsi que les dfinitions de
structures ou de classes mais nous verrons cela aprs.
Le prototype dune fonction reprsente un peu un contrat. Il va dfinir le nom de
la fonction, ce qui rentre lintrieur (les paramtres) et ce qui en sort (la variable
de retour). Ainsi, votre programme principal aura une ide de comment
fonctionne extrieurement votre fonction. Un peu comme sil sadressait une
bote noire.
Si lon devait crire lexemple ci-dessus on pourrait avoir le contenu de fichier
suivant :
horloge.h
char getHeure();
char getMinute();
char getSeconde();
char getJour();
char getMois();
char getAnnee();
void afficherDate();
void afficherHeure();
void afficherDateHeure();
Comme vous pouvez le voir, avec ces dfinitions on peut savoir ce quest
suppos faire la fonction grce son nom et le type de variable quelle manipule
en entre et en sortie.
Bien, maintenant passons la suite pour voir o et comment implmenter ces
fonctions.
char getHeure() {
Serial.println("getHeure");
return 0;
}
char getMinute() {
Serial.println("getHeure");
return 0;
}
char getSeconde() {
Serial.println("getHeure");
return 0;
}
char getJour() {
Serial.println("getHeure");
return 0;
}
char getMois() {
Serial.println("getHeure");
return 0;
}
char getAnnee() {
Serial.println("getHeure");
return 0;
}
Serial.println(val, DEC);
}
void afficherDate() {
Serial.println("afficherDate");
}
void afficherHeure() {
Serial.println("afficherHeure");
}
void afficherDateHeure() {
Serial.println("afficherDateHeure");
Cest bon ?
Bien, il ne reste quune seule chose faire, linclure dans le programme. Pour
cela cest tout bte, il suffit dajouter la ligne #include "horloge.h" en haut de
votre fichier.
Et voil ! Il ne vous reste plus qu faire des appels tout simples vos fonctions
perso dans le programme (setup ou loop ou o vous voulez !).
Maintenant, quand vous allez compiler, le compilateur va aller chercher le fichier
point par le include, le compiler puis le lier dans votre programme principal.
Il peut arriver que le lien avec les symboles/librairies Arduino ne se fasse pas
correctement. Dans ce cas l, rajoutez linclude suivant au dbut de votre .h ou
.cpp : #include "Arduino.h"
Sparer son code en fichiers est important pour facilement sy retrouver, jespre
que vous lavez bien compris. Une fois cette tape faite, vous devriez y voir plus
clair dans vos gros programmes.
Les plus aguerris dentre vous qui connaissent le C++ peuvent mme coder en C+
+ pour crer des classes et ainsi pousser lorganisation encore plus loin !