Académique Documents
Professionnel Documents
Culture Documents
ARD-05 Le Réverbère
l’Entrée Analogique
1
Nom : Prénom : TP d’Initiation à Arduino
2
Nom : Prénom : TP d’Initiation à Arduino
3
Nom : Prénom : TP d’Initiation à Arduino
4
Nom : Prénom : TP d’Initiation à Arduino
5
Nom : Prénom : TP d’Initiation à Arduino
LE CIRCUIT A CABLER
LE CODE A TAPER
/* Blink
Allume une LED pendant une seconde puis l’éteint pendant une seconde, de façon répétée.
*/
int ledPin = 13; // LED connectée sur la patte numérique 13
void setup() // La fonction setup() s’exécute une fois,
{ // lorsque le programme se lance
pinMode(13, OUTPUT); //initialise la patte numérique en tant que sortie
}
void loop() // La fonction loop() s’exécute encore et encore, aussi longtemps
{ // que l’Arduino est alimentée
digitalWrite(13, HIGH); // allume la LED (HIGH=5V)
6
Nom : Prénom : TP d’Initiation à Arduino
delay(1000); // attend une seconde
digitalWrite(13, LOW); // éteint la LED (LOW=0V)
delay(1000); // attend une seconde
}
Validation
7
Nom : Prénom : TP d’Initiation à Arduino
2/2
2) On veut modifier la vitesse de clignotement de la LED de telle sorte que l’on est une fréquence
de clignotement de 2Hz ? Proposez une solution puis Testez.
2/2
2/2
4) A l’aide des explications sur la PWM données page suivante, exprimer Vmoy en fonction du
Rapport cyclique puis compléter le tableau ci-dessous.
Rapport 0 25 % 50 % 75 % 100 %
cyclique
Vmoy (V
2/2
8
Nom : Prénom : TP d’Initiation à Arduino
Fonctionnement de la PWM (Pulsation Widh Modulation, Modulation de la Largeur d’Impulsion) :
5) Remplacez maintenant les lignes de code commandant l’allumage et l’extinction de la LED par
le type de ligne suivante, en prenant soin de l’adapter à notre cas, on choisira une luminosité 4
fois moins forte que la précédente.
analogWrite(ledPin, nombre);
A savoir, nombre = n’importe quel nombre compris entre 0 et 255 (voir schéma ci-dessus).
2/2
void loop()
{
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) // pour la valeur de 0 à 255 par pas de
5
{
analogWrite(ledPin, fadeValue);
delay(30);
}
…..
9
Nom : Prénom : TP d’Initiation à Arduino
}
2/2
2/2
2/2
9) Une erreur s’est glissée dans le programme précédent, corriger là et tester à nouveau.
2/2
10) A votre avis, quelle est la fonction de la ligne : Valeur = map(Valeur, 0, 1023, 0, 255) ;
10
Nom : Prénom : TP d’Initiation à Arduino
2/2
11
Nom : Prénom : TP d’Initiation à Arduino
Le scénario : Créer des jeux de lumière pour les guirlandes du sapin de Noël !
LE CIRCUIT A CABLER
On va dans un premier temps créer un chenillard avec 8 leds.
LE CODE A TAPER
/* 8 LED fun */
int ledPins[] = {2,3,4,5,6,7,8,9}; // Un tableau pour stocker les pattes correspondant à
// chaque LED. Ex : la LED 0 est connectée à la patte 2
void setup()
{
12
Nom : Prénom : TP d’Initiation à Arduino
for(int i = 0; i < 8; i++) // Cette boucle sera répétée 8 fois
{
pinMode(ledPins[i],OUTPUT); // Les pattes des LED sont mises en sortie
}
}
void loop()
{
oneAfterAnotherNoLoop(); // appel du sous-programme “oneAfterAnotherNoLoop” :
} // allume chaque LED une par une puis les éteint
void oneAfterAnotherNoLoop() // sous-programme “oneAfterAnotherNoLoop”
{
int delayTime = 100; // le temps de pause (en millisecondes)
//Allumer chaque LED
digitalWrite(ledPins[0], HIGH); // Allume la LED 0 (connectée à la broche 2)
delay(delayTime); // attends delayTime en millisecondes
digitalWrite(ledPins[1], HIGH); // Allume la LED 1 (connectée à la broche 3)
delay(delayTime);
digitalWrite(ledPins[2], HIGH); // Allume la LED 2 (connectée à la broche 4)
delay(delayTime);
digitalWrite(ledPins[3], HIGH); // Allume la LED 3 (connectée à la broche 5)
delay(delayTime);
digitalWrite(ledPins[4], HIGH); // Allume la LED 4 (connectée à la broche 6)
delay(delayTime);
digitalWrite(ledPins[5], HIGH); // Allume la LED 5 (connectée à la broche 7)
delay(delayTime);
digitalWrite(ledPins[6], HIGH); // Allume la LED 6 (connectée à la broche 8)
delay(delayTime);
digitalWrite(ledPins[7], HIGH); // Allume la LED 7 (connectée à la broche 9)
delay(delayTime);
//Eteindre chaque LED
digitalWrite(ledPins[7], LOW); // Eteints la LED 0 (connectée à la broche 2)
delay(delayTime); // attends delayTime en millisecondes
digitalWrite(ledPins[6], LOW); // Eteints la LED 1 (connectée à la broche 3)
delay(delayTime);
digitalWrite(ledPins[5], LOW); // Eteints la LED 2 (connectée à la broche 4)
delay(delayTime);
digitalWrite(ledPins[4], LOW); // Eteints la LED 3 (connectée à la broche 5)
delay(delayTime);
digitalWrite(ledPins[3], LOW); // Eteints la LED 4 (connectée à la broche 6)
delay(delayTime);
digitalWrite(ledPins[2], LOW); // Eteints la LED 5 (connectée à la broche 7)
delay(delayTime);
digitalWrite(ledPins[1], LOW); // Eteints la LED 6 (connectée à la broche 8)
delay(delayTime);
digitalWrite(ledPins[0], LOW); // Eteints la LED 7 (connectée à la broche 9)
delay(delayTime);
}
1) Entrez le code et observez son fonctionnement. Décrire le jeu de lumière obtenu.
13
Nom : Prénom : TP d’Initiation à Arduino
Validation
ARD-02 TP de Synthèse Index des TPs
8/8
i 4 5 6 7
OnLED 4 5 6 7
OffLED 3 4 5 6
Bilan
3) Insérez le nouveau code et observez son fonctionnement. Est-il conforme à ce qui est
attendu ?
2/2
4/4
5) On propose le sous-programme suivant qui permet d’allumer les leds 2 à 2. Déchiffrez le code
et complétez le tableau à la suite du programme.
15
Nom : Prénom : TP d’Initiation à Arduino
void inAndOut()
{
int delayTime = 100;
6) Insérez le nouveau code et observez le fonctionnement attendu. Est-il conforme à ce qui est
attendu ?
2/2
16
Nom : Prénom : TP d’Initiation à Arduino
4/4
Le Déplacement de La Voiture
ARD-03 Index des TPs
Télécommandée
LE CIRCUIT A CABLER
L’Arduino est plus adaptée à la gestion de petits composants comme les LEDs qui consomment peu
de courant (10mA). Cependant vous pouvez gérer des composants plus importants et
consommateurs d’énergie (comme un moteur ou une machine à laver (plusieurs centaines de mA à
des A), on utilise alors une interface de puissance construite autour d’un transistor. Il contrôle une
grande quantité de courant à partir d’une plus petite. Nous allons dans un premier temps étudier
l’interface de puissance avant de câbler un des 2 moteurs de notre voiture télécommandée.
17
Nom : Prénom : TP d’Initiation à Arduino
Commande du moteur par l’Arduino
1) Ci-dessous, les caractéristiques de l’Arduino Uno et du moteur. La sortie logique 9 de
l’Arduino peut-elle alimenter notre moteur en direct ?
Caractéristiques de l’Arduino Uno :
L’Interface de Puissance
2) Quelle valeur doit on choisir pour Icsat ? Vérifier que c’est bien la valeur qui circule dans le
schéma proposé.
3) Calculez quelle doit être la valeur du courant Ibsat traversant la résistance de base pour saturer
le transistor. En déduire la valeur à choisir pour R.
18
Nom : Prénom : TP d’Initiation à Arduino
5V
void motorOnThenOff()
{
digitalWrite(motorPin, HIGH); // faire tourner le moteur
}
5) Câbler le montage et tester d’abord avec une résistance de 10k puis de 330. Décrire ce que
vous observez et expliquez.
19
Nom : Prénom : TP d’Initiation à Arduino
1/1
7) A l'aide de l'oscilloscope, relevez les chronogrammes des tensions sur la base du transistor
ainsi que sur le collecteur en concordance de temps. Les dessinez ci-dessous.
4/4
8) Mesurez à l'aide du multimètre la valeur du courant Ic circulant dans le transistor ainsi que le
courant circulant dans la base du transistor. Avant d’effectuer ces mesures, dessiner un
schéma de câblage faisant apparaître les appareils de mesure.
20
Nom : Prénom : TP d’Initiation à Arduino
2/2
3/3
10) Modifiez les temps onTime et offTime de telle sorte que l’on ait une fréquence de
fonctionnement de 50Hz tout en conservant le même rapport cyclique ( = Ton / T). Décrire le
nouveau fonctionnement observé.
2/2
21
Nom : Prénom : TP d’Initiation à Arduino
2/2
22
Nom : Prénom : TP d’Initiation à Arduino
12) Maintenant, modifiez le rapport entre les temps de telles sorte qu’on est un rapport cyclique
de 30% tout en conservant la même fréquence. Observez et décrire le nouveau
fonctionnement.
2/2
2/2
14) Modifiez le code pour obtenir un rapport cyclique de 50%. A l’aide de l’oscilloscope, observez
la tension Vce(t) avec la diode puis sans la diode. Quelle est la différence ? Expliquez à l’aide
de schémas et de chronogrammes. Conclure sur le rôle de la diode ?
23
Nom : Prénom : TP d’Initiation à Arduino
2/2
La Direction de la Voiture
ARD-04 Index des TPs
Télécommandée
LE CIRCUIT A CABLER
On a vu précédemment que l’on pouvait faire avancer la voiture télécommandée en faisant tourner
son moteur. Mais on aimerait bien contrôler ses mouvements, comment faire ? Un servomoteur. On
va placer un servomoteur pour commander l’angle de positionnement des roues avant et pouvoir
ainsi diriger la voiture vers la droite ou la gauche.
Les servomoteurs sont produits en masse, disponibles très facilement et coûtent de quelques euros
à des centaines d’euros. A l’intérieur il y a un petit réducteur (pour rendre les mouvements plus
puissants = moins de vitesse mais plus de couple) et de l’électronique (pour les rendre plus simples
à contrôler). Un servomoteur standard est
positionnable de 0 à 180 degrés. Le
positionnement est contrôlé par une pulsation
temporisée entre 1 ms (0 degré) et 2 ms (180
degrés) (1,5 ms pour 90 degrés). Le timing
diffère selon les constructeurs.
Si la pulsation est envoyée toutes les 20-50 ms,
le servomoteur bougera de façon fluide. L’un des
atout d’Arduino, c’est d’avoir une bibliothèque
(sous-programme) qui permet le contrôle du
servo (connecté sur la patte 9 ou 10) avec une
seule ligne de code.
24
Nom : Prénom : TP d’Initiation à Arduino
LE CODE A TAPER
#include <Servo.h> // inclue le sous-programme Servo
Validation
25
Nom : Prénom : TP d’Initiation à Arduino
10/10
26
Nom : Prénom : TP d’Initiation à Arduino
LE CIRCUIT A CABLER
LE CODE A TAPER
int lightPin = 0;
int ledPin = 9;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (analogRead(lightPin)<511) // Si valeur Photo < 511
digitalWrite(ledPin, HIGH); // alors allumer LED
else // sinon
digitalWrite(ledPin, LOW); // Eteindre LED
}
1) Testez ce code et décrire le fonctionnement obtenue.
Validation
27
Nom : Prénom : TP d’Initiation à Arduino
2) Justifier le rôle de la résistance en série avec la LED.
4) Quelle est la particularité de l’entrée patte 0 de l’Arduino. Donner des précisions sur ses
caractéristiques.
28
Nom : Prénom : TP d’Initiation à Arduino
LE CIRCUIT A CABLER
Pour commander le mouvement de la porte de garage, il suffit d’actionner un moteur, certes ! Mais
cette fois-ci, le type de moteur utilisé nécessite une tension bien supérieure au 5V disponible via
notre Arduino, pour obtenir un courant de l’ordre de plusieurs centaines de mA.
Pour cela, la solution se nomme : le relais. Un relais est un interrupteur mécanique contrôlé par une
impulsion électrique. A l’intérieur du boîtier plastique, il y a un électro-aimant, qui, quand il est
alimenté, provoque le basculement de l’interrupteur (souvent avec un claquement satisfaisant). Vous
pouvez acheter des relais d’un quart de la taille de celui du kit jusqu’à la taille d’un réfrigérateur,
chacun capable de laisser passer une certaine quantité de courant.
Par défaut, le relais est dans la position repos représenté sur le schéma, qd il est traversé par un
courant, alors le relais est actif et change de position.
29
Nom : Prénom : TP d’Initiation à Arduino
LE CODE A TAPER
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Validation
2) Compléter le tableau synthétisant le fonctionnement de la structure.
Patte 13 Etat du Etat du relais LED jaune LED rouge
transistor
0
1
3) On veut maintenant insérer le moteur de telle sorte qu’il se retrouve en // avec la diode jaune.
Attention, il est très important de ne pas oublier d’ajouter la diode de roue libre. Proposer un
schéma de câblage avant de réaliser les modifications
5) A votre avis, quel est l’intérêt de brancher le moteur à la sortie d’un relais plutôt qu’en direct au
collecteur du transistor ?
30
Nom : Prénom : TP d’Initiation à Arduino
31
Nom : Prénom : TP d’Initiation à Arduino
2/2
2) Proposez maintenant le code pour faire intervenir l’entrée bouton poussoir via la broche 2. On
veut que le moteur et la diode jaune se mettent en route uniquement quand le bouton poussoir
est appuyé = ordre de commande d’ouverture de la porte.
8/8
32
Nom : Prénom : TP d’Initiation à Arduino
2/2
4) Rajouter un capteur de fin de course simulé par un nouvel interrupteur pour que la porte
s’ouvre jusqu’à atteindre le capteur. Testez et conclure sur le fonctionnement de la porte de
garage
6/6
2/2
33
Nom : Prénom : TP d’Initiation à Arduino
LE CIRCUIT A CABLER
La ville de Sucy a installé des afficheurs pour informer les habitants des évènements qui ont lieu.
LE CODE A TAPER
/*
LiquidCrystal Library - Blink
Ce programme écrit "Bonjour à Sucy-en-Brie !" sur l’afficheur et fait clignoter le bloc curseur sur la
2ième ligne.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialise le sous-programme avec les numéros de broches
void setup()
{
lcd.begin(16, 2); // indique le nombre de colonnes et de lignes du LCD
lcd.clear(); // effacement de l‘afficheur
void loop()
{
lcd.setCursor(0,1); // placement du curseur sur la 2ième ligne
lcd.noBlink(); // éteint le clignotement du bloc curseur
delay(3000);
lcd.blink(); // allume le clignotement du bloc curseur
delay(3000);
}
35