Objectifs : Les objectifs de ce TP sont les
TP N°3 : suivants :
Se familiariser avec la programmation
Program d'interface (Luminosité variée d'une LED,
Commande d’un servomoteur à l'aide
mation
d'une résistance variable).
Mise en œuvre d'une application d'interface série.
A. Programmation d'interface pour une luminosité variée d'une
LED
1. Introduction :
Dans cette partie, l'objectif est de comprendre COMMENT
programmer une variation de la valeur moyenne de la
tension qui alimente un actionneur, dans notre cas c’est une
diode LED. Ce programme permet de faire varier la
luminosité d'une diode LED sur une broche d'une carte
Arduino. il exploite l'instruction analogWrite(broche, largeur)
qui permet de générer une impulsion PWM (Pulse Width
Modulation en anglais ou Modulation de Largeur d'Impulsion
(MLI) en français). Cette instruction permet de moduler la
largeur d'impulsion, la fréquence restant fixe aux alentours
de 490 hz par défaut.
Note: L'instruction analogWrite() n'est disponible que sur les
broches 3, 5,6,9,10,11.
Principe :
Une impulsion PWM est une impulsion (ou onde) carrée, c'est
à dire que le niveau de l'onde est soit HAUT soit BAS. Cette
impulsion se répète dans le temps de façon continue. Une
telle onde, comme toute onde est caractérisée par sa
période, c'est à dire la durée entre 2 impulsions. La définition
d'une onde PWM (Pulse Width Modulation en anglais ou
Modulation de Largeur d'Impulsion (MLI) en français) se fait
en modifiant la largeur du niveau HAUT par rapport à la
durée de la période : la largeur du niveau HAUT est appelée
« duty cycle ».
Avec l'instruction analogWrite(broche, largeur), on va pouvoir
générer une impulsion PWM avec une largeur de « duty cycle
» voulue :
• si valeur = 0, le duty cycle sera de 0% de la période
• si valeur = 255, le duty cycle sera de 100% de la période
• si valeur = 127, le duty cycle sera de 50% de la période
• si valeur = n, le duty cycle sera de (n/255)*100% de la
période
2. Réaliser le schéma de montage de la figure 2 suivante :
int led = 3;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(led, i);
delay(100);
}
}
B. Commande d’un servomoteur à l'aide d'une résistance
variable :
Le Servomoteur : est un moteur où on peut contrôler l’angle
de rotation avec précision. Le servomoteur contient :
un moteur DC
un driver : contrôler le sens de rotation
un potentiomètre : régulation pour avoir une précision sur
l’angle de rotation
des engrenages
#include <Servo.h>
Servo myservo;
int potpin = A0;
int val;
void setup() {
myservo.attach(9);
}
void loop() {
val = analogRead(potpin);
val = map(val, 0, 1023, 0, 180);
myservo.write(val);
delay(15);
#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
}
void loop() {
for (int i = 0; i <= 180; i++) {
myservo.write(i);
delay(60);
}
for (int j = 180; j >= 0; j--) {
myservo.write(j);
delay(60);
}
}
2.Réaliser le schéma de montage de la figure 6 suivante :
C. Programmation d'interface série :
char str[4];
void setup() {
Serial.begin(9600);
}
void loop() {
int value = 1234;
itoa(value, str, 10);
Serial.write(str,4);
}