TP Arduino
Table des matières
1. Installation et configuration de la carte Arduino..............................................................................................................2
1.1. Carte Arduino...........................................................................................................................................................2
1.2. Le shield d'extension E/S.........................................................................................................................................2
1.3. Structure d’un programme.......................................................................................................................................3
1.4. Interface de développement.....................................................................................................................................3
2. Utilisation de la sortie numérique.....................................................................................................................................4
2.1. Clignotement d'une LED..........................................................................................................................................4
2.2. Clignotement de 2 LED...........................................................................................................................................5
3. Utilisation de l'entrée numérique......................................................................................................................................6
3.1. Détection d'un Bouton Poussoir...............................................................................................................................6
4. Utilisation de l’entrée analogique.....................................................................................................................................7
4.1. Mesure de l’éclairement...........................................................................................................................................7
4.2. Télémétrie................................................................................................................................................................9
4.2.1. Capteur SRF05...........................................................................................................................................................9
4.2.2. Capteur Ultrasonic Ranger.......................................................................................................................................10
4.3. Simulation store électrique.....................................................................................................................................11
5. Utilisation de la sortie MLI.............................................................................................................................................14
5.1. Commande d’un moteur à courant continu............................................................................................................14
5.2. Commande d’un moteur à l'aide d'un potentiomètre.............................................................................................16
5.3. Programmation d'un moteur...................................................................................................................................17
5.4. Servo moteur..........................................................................................................................................................19
6. Afficheur LCD................................................................................................................................................................21
7. Modules..........................................................................................................................................................................23
shields...........................................................................................................................................................................23
8. Références......................................................................................................................................................................24
5-TP_arduino.odt 1
Classe de première STI2D
• Mémoire Flash 32 ko
• Mémoire RAM 2 ko
• Mémoire EEPROM 1 ko
• Fréquence d’horloge 16 MHz
• Courant max. E/S40 mA
Pour en savoir plus, consultez la page : http://arduino.cc/en/Main/ArduinoBoardUno
• Le commentaire de description du programme, appelé sketch, débute par /* et se termine par */.
• Puis il est placé la définition des constantes et des variables avec les instructions const et int.
• Vient ensuite la configuration des entrées / sorties avec l’instruction void setup(). La suite d’instructions est
précédé de { et se termine par }.
• On définit par l’instruction void loop() la programmation des interactions et comportements. La suite
d’instructions est précédé de { et se termine par }.
5-TP_arduino.odt 3
Classe de première STI2D
3. Brancher la carte sur un port USB. Vérifier que le port COM est bien configuré. Outils > Port série > COM X.
4. Vérifier que le port COM X est bien reconnu par windows : Panneau de Configuration > Système et sécurité >
Gestionnaire de périphériques > Ports : Arduino Uno (COM X).
avec shield
extension I/O
2. Modifier le programme de telle façon que la sortie sur laquelle on connectera la LED soit la sortie 12.
3. Modifier les instructions pour que la période soit de 1 s et la durée d’allumage de la LED 100 ms.
4. Lancer l’exécution du programme en cliquant sur le bouton en dessous Édition :
/*
clignotement diode
*/
5-TP_arduino.odt 4
Classe de première STI2D
delay(100); // allumé 100ms
digitalWrite(led, LOW); // led éteinte
delay(100); // éteint 100ms
}
/*
clignotement 2 diodes alternées
*/
// à compléter
// ...
delay(1000); // durée 1s
}
5-TP_arduino.odt 5
Classe de première STI2D
2. Modifier ce programme pour que la carte Arduino commande la LED lors de la pression du bouton.
/*
5-TP_arduino.odt 6
Classe de première STI2D
détection bouton poussoir
*/
// the setup function runs once when you press reset or power the board
void setup()
{
pinMode(led, ...); // on définit la led en sortie
pinMode(button, ...); // on définit le bouton en entrée
}
5-TP_arduino.odt 7
Classe de première STI2D
1. ouvrir un terminal
2. Régler la vitesse de
communication à 9600 bauds
3. Obturer le détecteur
4. Relever les valeurs :
- avec lumière
- sans lumière
5. En déduire la valeur de seuil
3. Modifier le programme ci-dessous pour régler le seuil de détection qui allumera LED.
/*
détection luminosité
*/
5-TP_arduino.odt 8
Classe de première STI2D
void loop()
{
int value = analogRead(...); // lecture capteur
Serial.println(value); // affichage valeur sur terminal série
delay(10); // stabilisation 10 ms
}
4.2. Télémétrie
On veut mesurer une distance par télémétrie à ultrason.
2. Modifier le programme pour que la LED s'allume lorsque la distance à un obstacle est inférieure à 20 cm.
/*
Télémétrie par ultrason
*/
/* Routine d'initialisation */
void setup()
{
Serial.begin(9600); // Initialisation port COM
5-TP_arduino.odt 9
Classe de première STI2D
digitalWrite(emetteur, LOW);
}
void loop()
{
// envoi salve (impulsion émettrice)
digitalWrite(emetteur, HIGH);
delayMicroseconds(10);
digitalWrite(emetteur, LOW);
delay(50);
}
2. Modifier le programme pour que la LED s'allume lorsque la distance à un obstacle est inférieure à 20 cm.
/*
Télémétrie par ultrason avec librairie ultrasonic
*/
/* Routine d'initialisation */
void setup()
{
Serial.begin(9600); // Initialisation port COM
5-TP_arduino.odt 10
Classe de première STI2D
void loop()
{
long distance = ultrasonic.MeasureInCentimeters();
delay(50);
}
2. Modifier le programme de la mesure de l'éclairement pour que la LED s'éteigne quand le BP est enfoncé en
vous aidant du tableau ci-dessous.
5-TP_arduino.odt 11
Classe de première STI2D
simulation store électrique
*/
delay(10); // stabilisation 10 ms
}
3. En cas de vent trop violent, le moteur ne doit pas être déclenché même si la lumière est trop importante.
Modifier le tableau pour prendre en compte le vent mesuré à l'aide d'un anémomètre qui sera simulé à l'aide
d'un potentiomètre.
4. Réaliser le schéma de montage ci-dessous :
Broche 4 : module BP
Broche 9 : module LED
Broche A0 : module
capteur luminosité
Broche A3 : potentiomètre
5. Modifier le programme précédent pour que la LED s'éteigne quand on tourne le potentiomètre de plus d'un
demi tour.
/*
simulation store électrique - v2
*/
5-TP_arduino.odt 12
Classe de première STI2D
const int BP = ...; // broche 4 pour le BP
const int led = ...; // broche 9 pour la LED
const int lux = ...; // broche analogique A0 pour le luxmètre
const int vent = ...; // broche analogique A3 pour le potentiomètre
delay(10); // stabilisation 10 ms
}
5-TP_arduino.odt 13
Classe de première STI2D
2. Modifier le programme ci-dessous pour imposer une vitesse au moteur (de 0 à 255).
/*
MLI par interface série
*/
/* Routine d'initialisation */
void setup()
{
Serial.begin(...); // Initialisation port COM
5-TP_arduino.odt 14
Classe de première STI2D
/* Fonction principale */
void loop()
{
if ( Serial.available() > 0 ) {
char c = Serial.read();
if ( c == '\r' ) {
buffer[i] = 0;
int speed = atoi(buffer);
if ( speed >= 0 && speed <= 255 ) {
analogWrite(...);
Serial.print("vitesse : ");
Serial.println(...);
}
else
Serial.println("valeur incorrecte");
i = 0;
}
else if ( (int) c != -1 )
buffer[i++] = c;
}
}
Pour piloter le moteur en vitesse, respecter les consignes suivantes :
1. Lancer le terminal
2. Cocher Défilement automatique
3. Sélectionner caractère de Retour
4. Sélectionner la bonne vitesse
5. Saisir la vitesse (0 à 255) dans la zone de texte
5-TP_arduino.odt 15
Classe de première STI2D
/* Routine d'initialisation */
void setup()
{
Serial.begin(...); // Initialisation port COM
/* Fonction principale */
void loop()
{
timer.run();
5-TP_arduino.odt 16
Classe de première STI2D
// Normalisation et contrôle du moteur
int speed = ...;
if ( speed >= 0 && speed <= 255 )
...;
delay(10);
}
/* Routine d'initialisation */
5-TP_arduino.odt 17
Classe de première STI2D
void setup()
{
Serial.begin(...); // Initialisation port COM
// moteur à l'arrêt
...;
/* Fonction principale */
void loop()
{
timer.run();
// maintien vitesse 2s
delay(2000);
// arrêt 1s
delay(1000);
}
5-TP_arduino.odt 18
Classe de première STI2D
#include <Servo.h>
void setup()
{
// On connecte les broches aux servos
servo1.attach(pin_servo1);
servo2.attach(pin_servo2);
5-TP_arduino.odt 19
Classe de première STI2D
void loop()
{
if ( ... )
init();
else {
const int tempo = 10; // 10 ms
// cycle 3
acc = 180 * tempo / 2000;
for (... angle(0); angle <= ...; angle += acc) {
servo1.write(...);
servo1.write(...);
delay(tempo);
}
// cycle 8
acc = 90 * tempo / 1000;
for (... angle(0); angle <= ...; angle += acc) {
servo1.write(...);
servo1.write(...);
delay(tempo);
}
}
}
void initServo()
{
// initialisation positions des servo moteurs à 90°
servo1.write(90);
servo2.write(90);
5-TP_arduino.odt 20
Classe de première STI2D
6. Afficheur LCD
On souhaite afficher la température et le taux d'humidité contenue dans une pièce sur une afficheur LCD 4.
1. Connecter l'afficheur sur le bus I²C selon le schéma ci-dessous.
Broche A0 : capteur température
Broche A2 : capteur humidité
Bus I²C : LCD
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while ( !Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
Serial.println("Scanning...");
int nDevices(0);
for (int address(1); address < 127; address++) {
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
int error = Wire.endTransmission();
if ( error == 0 ) {
Serial.print("dispositif I2C détecté à l'adresse : 0x");
if ( address < 16 )
Serial.print("0");
Serial.println(address,HEX);
nDevices++;
if ( nDevices == 0 )
Serial.println("Aucun dispositif I2C trouvé\n");
else
Serial.println("terminée\n");
3. Modifier le programme pour que les mesures soient affichées sur 2 lignes (t° puis% humidité) et rafraîchies
toutes les secondes.
/*
Mesure t° et humidité
*/
#include <wire.h>
#include <LiquidCrystal_I2C.h> // https://bitbucket.org/fmalpartida/new-
liquidcrystal/downloads
void setup()
{
lcd.begin(16, 2); // initialise le lcd à 16 chars 2 lignes
lcd.noBacklight();
delay(250);
}
void loop()
{
// clear the screen
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Hum : ");
... h = ...;
lcd.print(h);
lcd.print("%");
delay(1000);
5-TP_arduino.odt 22
Classe de première STI2D
}
7. Modules
• Mesure de distance par ultrason
• Infrarouge distance GP2Y0A21
• Diviseur de tension DFR 0051
• Module relais de puissance 24V
• Bouton poussoir
• Infrarouge receiver DFR 0094
• Capteur de température DFR 0023
• Potentiomètre
• Mesure du son
• Buzzer
• 10cm infrared sensor SEN 0024
• Current sensor 30A phjidget
• IR transmitter
• Capteur Capacitif
• Commande moteur
• Capteur d’humidité
• Mesure de luminosité
• roues codeuses
• Écran LCD 4x16
• Écran LCD 2x16
• Centrale inertielle 6DOF
• LED
• capteur sensitive
shields
• Relay Shield for Arduino V2.1
• Grove Base Shield
• shield moteur 2A
• shield Xbee
• shield wifi
• shield NFC
• shield I/O V7
• shield I/O V6
• shield GSM
• shield CAN bus
• shield SD card
• shield ethernet
• shield chargeur solaire
5-TP_arduino.odt 23
Classe de première STI2D
8. Références
• Tutoriel Arduino
• Manuel de référence Aduino
• langage C
• langage C++
• la résistance
• la diode
• le Transistor
• Travaux Pratique Arduino
• Référence Langage Arduino
5-TP_arduino.odt 24