0% ont trouvé ce document utile (0 vote)
221 vues31 pages

Arduino - Capteurs Et Actionneurs

Ce document présente une formation sur l'utilisation d'Arduino, incluant des capteurs tels que le TMP36 et le DHT11, ainsi que des actionneurs comme les moteurs et servomoteurs. Il fournit également des exemples de code pour la mesure de température, d'humidité et de distance, ainsi que des instructions pour le câblage et le contrôle des moteurs. Enfin, il aborde des concepts d'asservissement en position, incluant l'utilisation de PID pour le contrôle de moteurs.

Transféré par

ziadfri318
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
221 vues31 pages

Arduino - Capteurs Et Actionneurs

Ce document présente une formation sur l'utilisation d'Arduino, incluant des capteurs tels que le TMP36 et le DHT11, ainsi que des actionneurs comme les moteurs et servomoteurs. Il fournit également des exemples de code pour la mesure de température, d'humidité et de distance, ainsi que des instructions pour le câblage et le contrôle des moteurs. Enfin, il aborde des concepts d'asservissement en position, incluant l'utilisation de PID pour le contrôle de moteurs.

Transféré par

ziadfri318
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Formation Arduino

Samir EL OTEBY
Ingénieur et professeur agrégé de mécanique
e-mail : [email protected]
Chaînes d’énergie et d’information

2
De la mesurande au signal

3
First Step

La broche la plus longe de la LED


(Cathode, +) est liée à une sortie
Digital ou Analog de la carte Arduino.
La deuxième broche (Anode, -) est liée
à la masse de la carte à travers une
résistance 220 ohm pour limiter le
courant de ligne.

4
First Step

// C++ code
//
#define LED_BUILTIN 8

void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(LED_BUILTIN, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}

Simulation : Le code
Tinkercard
5
Capteur de température : TMP36

TMP3
6
Caractéristiques


Taille: boîtier TO-92 à 3 broches (similaire à
un transistor)

Gamme de température: -40°C a 150°C

Tension de sortie: 0.1V (-40°C) to 2.0V
(150°C)

Tension d’alimentation: 2.7V a 5.5V

6
Capteur de température : TMP36

int Reading;
float celsius;
void setup() {
pinMode(A0, INPUT);
Serial.begin(9600); // ouvre le port série
}
void loop() {
Reading = analogRead(A0) ;
float voltage = Reading * 5.0 / 1024;
celsius = (voltage – 0.5) * 100
Serial.println(celsius);
delay(1000); // attend une seconde
}

Le code
Le
montage

7
Capteur DHT11


Alimentation : 5V

Plage de mesure :

Température : 0°C à 50°C

Humidité : 20% à 90% RH

Précision :

Température : 2°C

Humidité : 5% RH

Sorties : S, Vcc, GND

Dimension : 23x17x9 mm
Capteur de
température
et d’humidité

8
Capteur DHT11

On câble le Vcc du capteur sur la


broche 5V de l’Arduino, la broche GND
du capteur sur la broche de la masse
de l’Arduino, la broche des données du
capteur sur une broche numérique de
l’Arduino

9
Capteur DHT11

10
Capteur DHT11

Résultat

Cod
e

11
Mesure de distance : HC-SR04

HC-
SR04

12
Mesure de distance : HC-SR04

Pour commencer :


Connecter la broche Vcc du capteur
à la broche 5V de la carte Arduino.


Câbler la broche GND avec la masse
de la carte.


Connecter le broche Trig du capteur
à une broche numérique d’Arduino.


Connecter la broche Echo du capteur
à une autre broche numérique de la
carte.

Le
montage

13
Mesure de distance : HC-SR04
// defines pins numbers
const int trigPin = 12;
const int echoPin = 11; // defines variables
long duration;
int distance;

void setup()
{
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop()

{
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
Le
digitalWrite(trigPin, LOW); résultat
duration = pulseIn(echoPin, HIGH); // Calculating the traveling
duration in microseconds
distance = duration * 0.034 / 2; // Calculating the distance in cm
Serial.print("Distance (cm): ");
Serial.println(distance); }

Le
code
14
Commander un actionneur : MCC

Méthodologie d’inversion de sens de rotation :


Pont en H

Câblag
τ
e U moy =
T
U max ⇒ Ω =f ( α , U max )

15
Commander un actionneur : MCC
//Ports de commande du moteur B void loop() {
int motorPin1 = 8; if (Serial.available() > 0){
int motorPin2 = 9; state = Serial.parseInt();
int enablePin = 5; if (state > 0) // avant
{
// Vitesse du moteur digitalWrite(motorPin1, HIGH);
int state = 0; digitalWrite(motorPin2, LOW);
Serial.print("Avant ");
void setup() Serial.println(state);
}
{ else if (state < 0)
// Configuration des ports en mode "sortie" {
pinMode(motorPin1, OUTPUT); digitalWrite(motorPin1, LOW);
pinMode(motorPin2, OUTPUT); digitalWrite(motorPin2, HIGH);
pinMode(enablePin, OUTPUT); Serial.print("Arriere ");
Serial.println(state);
// Initialisation du port série }
Serial.begin(9600); else // Stop (freinage)
} {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
Serial.println("Stop");
}
// Vitesse du mouvement
analogWrite(enablePin, abs(state));
}
delay(100);}

Cod
e
16
Commander un actionneur : MCC
v

17
Commander un actionneur : MCC
int MA = 8, MB = 9; // Initialisation des pins (MA etMB)
int enablePin = 5;
const float Pas = 255/3;

void setup()
{
Serial.begin(9600);
pinMode(MA, OUTPUT);
pinMode(MB, OUTPUT);
}

void loop()
{
for(int PWM = 0; PWM <=255; PWM = PWM + Pas){
digitalWrite(MA, HIGH);
digitalWrite(MB, LOW);
analogWrite(enablePin, PWM);
delay(1000);
}
delay(5000);
for(int PWM = 255; PWM >= 0; PWM = PWM - Pas){
digitalWrite(MA, HIGH);
digitalWrite(MB, LOW);
analogWrite(enablePin, PWM);
delay(1000);
}
delay(1000);
}

18
Commander un actionneur : ServoMoteur

Caractéristi
 ques
Alimentation : 4.5 Và6V

Couple : 1.2 kg/cm sous 4.5 V – 1.4 kg/cm
sous 6 V

Vitesse : 0.10 sec/60° sous 4.5 V – 0.12
sec/60° sous 6 V

Rotation : 180° Câblag
 e et la broche GND à
On relie la broche 5V
une alimentation externe, même que celle
de la carte.

On relie la broche Signal à un pin Digital
ServoMot de la carte.
eur

19
Commander un actionneur : ServoMoteur

// C++ Code
#include <Servo.h> // importation de la
librairie
Servo monServo; // Création de l’objet
monServo
void setup()
{
monServo.attach(10); // Définition de pin
de contrôle
monServo.write(0); // Remise à zero du
Servo
}
void loop()
{
monServo.write(90); // Servo à 90°
delay(1000);
monServo.write(0); // Servo à 0°
Simulation : delay(1000); Cod
}
Tinkercard e

20
Commander un actionneur : ServoMoteur

int MA = 10, MB = 11; // Initialisation des pins (MA et MB)


int enablePin = 5;
const byte pinPotVitesse = A0;
const int minPotVitesse = 0;
const int maxPotVitesse = 255;

void setup()
{
Serial.begin(9600);
pinMode(MA, OUTPUT);
pinMode(MB, OUTPUT);
pinMode(pinPotVitesse, INPUT);
}

void loop()
{
int vitesseMoteur = map(analogRead(pinPotVitesse),
minPotVitesse, maxPotVitesse, 0, 255);
digitalWrite(MA, HIGH);
digitalWrite(MB, LOW);
analogWrite(enablePin, vitesseMoteur);

Simulation : Cod
Tinkercard e
21
Commander un actionneur : ServoMoteur

// C++ code
#include <Servo.h> // importation de la
librairie
Servo monServo; // Création de l’objet
monServo
void setup()
{
monServo.attach(10); // Définition de pin
de contrôle
monServo.write(0); // Remise à zero du
Servo
}
void loop() {
for(int position = 0; position <= 180;
position ++){
monServo.write(position); // Servo à
position
delay(20);
Simulation : } Cod
Tinkercard e position >= 0;
for(int position = 180;
position --){
monServo.write(position); // Servo à
position
22
Commander un actionneur : Stepper Nema 17

23
Commander un actionneur : Stepper Nema 17

Montage

Les broches de l’A4988 :

VMOT / GND : Alimentation du 2B/2A/1A/1B : Les broches du connexion STEP : Broche de contrôle des
moteur. avec le moteur. steps
VDD/ GND : Alimentation du MS1/MS2/MS3 : Microstep pins (full, Half, Quarter, DIR : Broche de contrôle de
moteur. Eighth, Sixteenth).
direction .

24
Commander un actionneur : ServoMoteur
// Define pin connections & motor's steps per revolution void loop()
const int dirPin = 2; {
const int stepPin = 3; digitalWrite(dirPin, HIGH);
const int stepsPerRevolution = 200;
// Spin motor slowly
void setup() for(int x = 0; x < stepsPerRevolution; x++)
{ {
pinMode(stepPin, OUTPUT); digitalWrite(stepPin, HIGH);
pinMode(dirPin, OUTPUT); delayMicroseconds(2000);
} digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000); // Wait a second

// Set motor direction counterclockwise


digitalWrite(dirPin, LOW);

// Spin motor quickly


for(int x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Wait a second
}

25
Asservissement en position MCC

Composante
1)Potentiomètre
2)Différenciateur
3)Dispositif de
commande (Arduino +
Hacheur)
4)Moteur à courant
continu
5)Codeur incrémental.

26
Asservissement en position MCC

Les signaux de sortie de


l’encodeur
27
Asservissement en position MCC

La correction adoptée :
PID

1)Proportionnel :
U ( t )= K e ( t )
p p

2)Dérivateur :
U ( t )=K
de ( t )
d d
dt

3)Intégrateur : ∫ e ( t ) dt
U ( t )=K
I i

4)
La tension
d’alimentation
U ( t )=U : ( t ) +U ( t ) +U
p d I (t)

28
Asservissement en position MCC
// Déclaration des pins de l’encodeur void setup() {
#define ENCBA 9 Serial.begin(9600);
#define ENCBB 10
// Définition des pins de direction et de vitesse
// Déclaration des pins Dir et PWM du Driver pinMode(dirB_1, OUTPUT);
int dirB_1 = 2; pinMode(dirB_2, OUTPUT);
int dirB_2 = 3; pinMode(pwmB, OUTPUT);
int pwmB = 5;
// Définition des pins de lecture de l’encodeur
// Déclaration des variables pinMode(ENCBA, INPUT);
int posB = 0; pinMode(ENCBB, INPUT);
long prevT = 0;
float target_compteur; // Définition de l’interruption.
float target_en_cm; attachInterrupt(digitalPinToInterrupt(ENCBA), readEncoderB,
const float Pi = 3.14159; RISING);
int Compteur = 0; attachInterrupt(digitalPinToInterrupt(ENCBB), readEncoderB,
float eprevB = 0; RISING);
float eintegralB = 0; }
float kpB = 10;
float kiB = 0.05;
float kdB = 0.05;

29
Asservissement en position MCC
void loop() { setMotorB(directionvalB, pwrB);
// Lecture de la consigne eprevB = eB;
if(Serial.available()){ prevT = currT;
target_en_cm = Serial.parseFloat(); float Position_en_cm = posB*Pi*10/(24*98.7779);
float nombre_de_tour = target_en_cm/(Pi*10); Serial.print(target_en_cm);
float nombre_de_tour_moteur = nombre_de_tour*98.7779; Serial.print(" ");
targetB = nombre_de_tour_moteur*24; Serial.println(posB);
} void setMotorB(int cmd, int pwmval){
}
if (cmd > 0) {
void readEncoderB(){
// Calcul de l’erreur, sa dérivée et son integral. digitalWrite(dirB_1, HIGH);
int b1 = digitalRead(ENCBA);
long currT = micros(); digitalWrite(dirB_2, LOW);
int b2 = digitalRead(ENCBB);
float deltaT = ((float)(currT - prevT))/1.0e6; }
if(b1 == 0 & b2 == 1){
int eB = posB - targetB; else {
posB++;
float dedtB = (eB-eprevB)/(deltaT); digitalWrite(dirB_1, LOW);
}
eintegralB = eintegralB + eB*deltaT; digitalWrite(dirB_2, HIGH);
if(b1 == 1 & b2 == 0){
float uB = kpB*eB + kdB*dedtB + kiB*eintegralB; }
posB--;
float pwrB = fabs(uB); analogWrite(pwmB,abs(pwmval));}
}
if(pwrB>255){ }
pwrB = 255;
}

// Commande du moteur
int directionvalB = 1;
if(uB<0){
directionvalB = -1;
}

30
Merci !

31

Vous aimerez peut-être aussi