Classe de première STI2D 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
24
Embed
Classe de première STI2D TP Arduino - projet.eu.orgprojet.eu.org/pedago/sin/1STI2D/TP/5-TP_arduino.pdf · Classe de première STI2D TP Arduino Table des matières 1. Installation
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Classe de première STI2D
TP Arduino
Table des matières1. Installation et configuration de la carte Arduino..............................................................................................................2
1.1. Carte Arduino...........................................................................................................................................................21.2. Le shield d'extension E/S.........................................................................................................................................21.3. Structure d’un programme.......................................................................................................................................31.4. Interface de développement.....................................................................................................................................3
2. Utilisation de la sortie numérique.....................................................................................................................................42.1. Clignotement d'une LED..........................................................................................................................................42.2. Clignotement de 2 LED...........................................................................................................................................5
3. Utilisation de l'entrée numérique......................................................................................................................................63.1. Détection d'un Bouton Poussoir...............................................................................................................................6
4. Utilisation de l’entrée analogique.....................................................................................................................................74.1. Mesure de l’éclairement...........................................................................................................................................74.2. Télémétrie................................................................................................................................................................9
4.3. Simulation store électrique.....................................................................................................................................115. Utilisation de la sortie MLI.............................................................................................................................................14
5.1. Commande d’un moteur à courant continu............................................................................................................145.2. Commande d’un moteur à l'aide d'un potentiomètre.............................................................................................165.3. Programmation d'un moteur...................................................................................................................................175.4. Servo moteur..........................................................................................................................................................19
1. Installation et configuration de la carte Arduino
1.1. Carte Arduino Nous utiliserons une carte Arduino Uno. Elle emploi un microcontrôleur ATMEGA328P alimenté en 5 V. Il y a 14 entrées/sorties numériques dont 6 sont utilisables en PWM1. Il y a 6 entrées analogiques. Le microcontrôleur possède unCAN2 avec 10 bits de résolution. Sur la carte, il y a un circuit qui permet de gérer facilement l’USB3 qui peut alimenter la carte.
• 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
1.2. Le shield d'extension E/SLe shield d'extension E/S fournit un moyen facile de connecter des capteurs ou des servos pour la carte Arduino. Il augmente le nombre d' E/S numériques etanalogiques. Il fournit également des broches PWM distinctes qui sont compatibles avec le connecteur de servo standard. La prise de communication fournit un moyen extrêmement facile à brancher un module sans fil, tel le module APC220 RF module ou le module DF-Bluetooth. Il dispose d'une entrée de puissance individuelle pour les servos.
1 Pulse Width Modulation (ou MLI pour modulateur de largeur d’impulsion)2 Convertisseur Analogique Numérique3 Universal Serial Bus
1.3. Structure d’un programme Un exemple de programme est donné ci-dessous.
• 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 }.
1.4. Interface de développementPour utiliser l’interface de développement :
1. Lancer le logiciel Arduino .
2. Vérifier que la carte Arduino Uno est bien prise en compte par : Outils > Type de carte > Arduino Uno.
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).
2. Utilisation de la sortie numérique
2.1. Clignotement d'une LEDOuvrir le fichier Blink par : Fichier > Exemples > 01.Basics > Blink
Pour comprendre la syntaxe et le rôle d’une instruction, utiliser la page : http://arduino.cc/en/Reference/HomePage
1. Réaliser le schéma de montage ci-dessous (faire attention au sens de polarisation de la LED).
Broche 12 : module LED
avec shieldextension 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 */
const int led = 12; // broche 12 pour la LED
// cette fonction ne s'exécute qu'une seule foisvoid setup(){ pinMode(led, OUTPUT); // on définit la broche en sortie}
// cette fonction boucle indéfinimentvoid loop(){ digitalWrite(led, HIGH); // led allumée
2.2. Clignotement de 2 LED1. Modifier le programme pour que deux LED s’allument en opposition de phase comme dans le tableau suivant :
LED 1 Broche 11 Allumée Éteinte
LED 2 Broche 12 Éteinte Allumée
2. Modifier le schéma de montage comme indiqué ci-dessous :
Broche 11 : module LED1Broche 12 : module LED2
/*
clignotement 2 diodes alternées */
const int led1 = 11; // broche 11 pour la LED 1const int led2 = 12; // broche 12 pour la LED 2
// cette fonction ne s'exécute qu'une seule foisvoid setup(){ pinMode(..., OUTPUT); // on définit la LED 1 en sortie pinMode(..., OUTPUT); // on définit la LED 2 en sortie}
// cette fonction boucle indéfinimentvoid loop(){ // à compléter // ... delay(1000); // durée 1s // à compléter // ... delay(1000); // durée 1s}
5-TP_arduino.odt 5
Classe de première STI2D
Pour voir le résultat, cliquer sur l'image
3. Utilisation de l'entrée numérique
3.1. Détection d'un Bouton Poussoir1. Réaliser le schéma de montage ci-dessous (faire attention au sens de polarisation de la LED).
On utilisera un bouton poussoir (BP) qui commandera une LED à travers la carte Arduino.
Broche 4 : module LEDBroche 3 : module BP
2. Modifier ce programme pour que la carte Arduino commande la LED lors de la pression du bouton.
const int led = ...; // broche 4 pour la LEDconst int button = 3; // broche 3 pour le bouton poussoir
// the setup function runs once when you press reset or power the boardvoid setup(){ pinMode(led, ...); // on définit la led en sortie pinMode(button, ...); // on définit le bouton en entrée}
// the loop function runs over and over again forevervoid loop(){// lecture bouton
if ( digitalRead(button) == ... ) digitalWrite(led, ...); // led allumée
else digitalWrite(led, ...); // led éteinte
delay(...); // stabilisation 200 ms}
Pour voir le résultat, cliquer sur l'image
4. Utilisation de l’entrée analogique
4.1. Mesure de l’éclairementLe capteur de luminosité utilisé est le LDR VT935G (ou équivalent série VT900).
5-TP_arduino.odt 7
Classe de première STI2D
Par effet photovoltaïque, l'énergie rayonnante est transformée en énergie électrique.
La résistance interne du capteur est inversement proportionnelle avec la luminosité sur une échelle logarithmique.
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é */
const int led = 9; // broche 9 pour la LEDconst int lux = ...; // broche analogique A0 pour le capteur
// cette fonction ne s'exécute qu'une seule foisvoid setup(){ pinMode(...); // on définit la broche 9 en sortie
Serial.begin(9600); // initialise la vitesse du port série}
// cette fonction boucle indéfiniment
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 if ( value < 0 ) // détection du seuil de luminosité
digitalWrite(led, ...); // led allumée else
digitalWrite(led, ...); // led éteinte
delay(10); // stabilisation 10 ms}
4.2. TélémétrieOn veut mesurer une distance par télémétrie à ultrason.
4.2.1. Capteur SRF05Le capteur SRF05 et un émetteur récepteur d'ultrason (40 kHz), d'une portée allant théoriquement de 1 à 400 cm sur un angle de 30°. Il permet l'utilisation de 1 ou de 2 broches pour l’émission/réception (la deuxième solution accélère le traitement).
1. Réaliser le schéma de montage ci-dessous :
Broche 4 : TriggerBroche 7 : EchoBroche 8 : LED
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*/
const int led = ...; // broche 8 pour la LEDconst int emetteur = ...; // broche 7 pour envoi signalconst int recepteur = ...; // broche 4 pour réception signal
/* Routine d'initialisation */void setup(){ Serial.begin(9600); // Initialisation port COM pinMode(...); // LED en sortie pinMode(...); // signal en sortie pinMode(...); // écho en entrée
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.
Seuil atteint BP enfoncé LED
oui oui OFF
oui non ON
non oui OFF
non non OFF
/*
5-TP_arduino.odt 11
Classe de première STI2D
simulation store électrique */
const int BP = ...; // broche 4 pour le BPconst int led = ...; // broche 9 pour la LEDconst int lux = ...; // broche analogique A0 pour le capteur
// cette fonction ne s'exécute qu'une seule foisvoid setup(){ ...; // on définit la broche 4 en entrée ...; // on définit la broche 9 en sortie
Serial.begin(9600); // initialise la vitesse du port série}
// cette fonction boucle indéfinimentvoid loop(){ int bouton = ...; // lecture BP int value = ...; // lecture capteur Serial.println(value); // affichage valeur sur terminal série if ( ... && ... ) { // détection du seul de luminosité ...; // led allumée
else ...; // led éteinte
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.
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 BPconst int led = ...; // broche 9 pour la LEDconst int lux = ...; // broche analogique A0 pour le luxmètreconst int vent = ...; // broche analogique A3 pour le potentiomètre
// cette fonction ne s'exécute qu'une seule foisvoid setup(){ ...; // on définit la broche 4 en entrée ...; // on définit la broche 9 en sortie
Serial.begin(9600); // initialise la vitesse du port série}
// cette fonction boucle indéfinimentvoid loop(){ int bouton = ...; // lecture BP int value = ...; // lecture luxmètre int vitesse = ...; // lecture anémomètre Serial.println(vitesse); // affichage valeur sur terminal série if ( ... // détection du seuil de luminosité ... // détection du seuil de vitesse ... ) // détection BP ...; // led allumée else ...; // led éteinte
delay(10); // stabilisation 10 ms
}
5-TP_arduino.odt 13
Classe de première STI2D
5. Utilisation de la sortie MLI
5.1. Commande d’un moteur à courant continuLa carte arduino ne peut fournir que 40mA par sortie ce qui peut s'avérer insuffisant ou endommager le matériel si le moteur provoque un pic d'intensité au démarrage ou en charge.
Pour y remédier, nous utiliserons une interface de puissance dont le rôle sera de faire le lien entre la partie commande, représentée par la carte Arduino, et la partie puissance : le moteur.
Connecter l'interface à la carte Arduino et au servomoteur en respectant les branchements comme indiqué ci-dessous.
Côté servomoteur Côté Arduino
1. Réaliser le branchement comme indique sur le schéma ci-dessus.
2. Modifier le programme ci-dessous pour imposer une vitesse au moteur (de 0 à 255).
/* MLI par interface série*/
const int MOTEUR = 6; // Digital pin 6 pour commande moteur
char buffer[8] = "";int i = 0;
/* Routine d'initialisation */void setup(){ Serial.begin(...); // Initialisation port COM
5-TP_arduino.odt 14
Classe de première STI2D
...; // Sortie moteur}
/* 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 terminal2. Cocher Défilement automatique3. Sélectionner caractère de Retour4. Sélectionner la bonne vitesse5. Saisir la vitesse (0 à 255) dans la zone de texte
5-TP_arduino.odt 15
Classe de première STI2D
5.2. Commande d’un moteur à l'aide d'un potentiomètreUn potentiomètre est une résistance variable.
1. Modifier le montage précédent pour brancher le potentiomètre comme indiqué ci-dessous :
const int POTAR = ...; // broche A0 pour potentiomètreconst int MOTEUR = ...; // Digital pin pour commande moteurconst int TACHY = ...; // interruption 0 = pin2 arduino Uno/mega/*Board Digital Pins Usable For InterruptsUno, Nano, Mini, other 328-based 2, 3Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21*/
SimpleTimer timer; // Timer pour échantillonnageunsigned int delai_timer = 100; // Compteur de tick de la codeuseunsigned int tick_codeuse = 0; // Compteur de tick de la codeuse
/* Routine d'initialisation */void setup(){ Serial.begin(...); // Initialisation port COM
const int POTAR = ...; // broche A0 pour potentiomètreconst int MOTEUR = ...; // Digital pin pour commande moteurconst int TACHY = ...; // interruption 0 = pin2 arduino Uno/mega/*Board Digital Pins Usable For InterruptsUno, Nano, Mini, other 328-based 2, 3Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21*/
SimpleTimer timer; // Timer pour échantillonnageunsigned int delai_timer = 100; // délais échantillonnageunsigned int tick_codeuse = 0; // Compteur de tick de la codeuse
/* Routine d'initialisation */
5-TP_arduino.odt 17
Classe de première STI2D
void setup(){ Serial.begin(...); // Initialisation port COM
5.4. Servo moteurUn servomoteur est un système motorisé capable d'atteindre des positions prédéterminées, puis de les maintenir. La position est : dans le cas d’un moteur rotatif, une valeur d'angle et, dans le cas d’un moteur linéaire une distance.
On veut commander 2 servo moteurs.
Un premier servo moteur doit effectuer le cycle ci-contre.
Le deuxième doit être en opposition de phase.
1. Réaliser le montage ci-dessous.
Broche 9 : servo 1Broche 10 : servo 2
2. Modifier le programme afin de respecter le cahier des charges ci-dessus.
/* commande servo moteurs*/
#include <Servo.h> const int pin_servo1 = ...; // broche 9 servo 1const int pin_servo2 = ...; // broche 10 servo 2const int button = ...; // broche 3 pour le bouton poussoir
//Création des objets servo pour les contrôlerServo servo1, servo2; void setup(){ // On connecte les broches aux servos servo1.attach(pin_servo1); servo2.attach(pin_servo2); // initialisation position servo moteurs initServo();}
5-TP_arduino.odt 19
Classe de première STI2D
void loop(){ if ( ... ) init(); else { const int tempo = 10; // 10 ms // position 90° pensant 1s delay(...); // accélération servo 2s = 2000ms ... acc = 90 * tempo / 2000; for (... angle(0); angle <= 90; angle += acc) { servo1.write(90 ... (int) angle); servo1.write(90 ... (int) angle); delay(tempo); } // 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); delay(500); // attente 500ms pour que les servos se mettent en position}
5-TP_arduino.odt 20
Classe de première STI2D
6. Afficheur LCDOn souhaite afficher la température et le taux d'humidité contenue dans une pièce sur une afficheur LCD4.
1. Connecter l'afficheur sur le bus I²C selon le schéma ci-dessous.
2. Détecter l'adresse utilisée par l'afficheur LCD à l'aide du programme ci-dessous :
//// scanner I2C//
#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++;
void loop(){ // clear the screen lcd.clear(); //-------- Write characters on the display ------------------ // NOTE: Cursor Position: (CHAR, LINE) start at 0 lcd.setCursor(0, 0); //Start at character 4 on line 0 lcd.print("Temp : "); ... t = (... * 500) / 1024; lcd.print(t); lcd.print("°C");