Mesure de distance - Ultrason
De Wiki L.A.B
Matériel
- Arduino Uno
- Plaque d'essai (breadbord)
- LED RGB à cathodes communes
- 3 Résistances 1/4W 270Ω ( 220Ω ou 330Ω peuvent également convenir)
- Capteur de distance US HC-SR04
- Straps ou fils de liaison
Montage
Programme
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino
/*
Ce programme allume une LED RGB cathodes communes en fonction de la distance mesurée
par le capteur US HC-SR04, les valeurs sont affichées dans le moniteur série
*/
int echo = 2; // broche echo du capteur US HC-SR04
int trig = 4; // broche trig du capteur US HC-SR04
int ledR = 3; // broche de la LED Rouge
int ledG = 5; // broche de la LED Verte
int ledB = 6; // broche de la LED Bleue
long lecture_echo = 0; // variable sur 4 octets mesure de distance
long cm = 0; // variable sur 4 octets pour la conversion en cm
void setup() // setup est déroulé une seule fois après la remise à zéro
{
pinMode(ledR, OUTPUT); // la broche led (3) est initialisée en sortie
pinMode(ledG, OUTPUT); // la broche led (5) est initialisée en sortie
pinMode(ledB, OUTPUT); // la broche led (6) est initialisée en sortie
pinMode(trig, OUTPUT); // la broche trig est initialisée en sortie
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig
pinMode(echo, INPUT); // la broche echo est initialisée en entree
Serial.begin(115200); // initialisation de la liaison série à 115200 bauds
}
void loop() // loop est déroulé indéfiniment
{
digitalWrite(ledR,0); // valeur 0 sur la LED B
digitalWrite(ledG,0); // valeur 0 sur la LED G
digitalWrite(ledB,0); // valeur 0 sur la LED B
digitalWrite(trig, HIGH); // met un niveau logique , HIGH (HAUT) sur la broche trig
delayMicroseconds(10); // attente pendant 10 millisecondes
digitalWrite(trig, LOW); // met un niveau logique , LOW (BAS) sur la broche trig.
lecture_echo = pulseIn(echo, HIGH); // lit la durée du niveau HAUT appliqué sur la broche echo
cm = lecture_echo / 58; // conversion de la distance en cm
Serial.print("Distance en cm : "); // affiche le message : "Distance en cm" sur le moniteur série
Serial.println(cm); // affiche la mesure en cm avec retour à la ligne
if (cm < 10) digitalWrite(ledR,1); // si mesure < 10 => LED = Rouge
else
{
if (cm < 30) // si mesure < 30 => LED = Orange
{
analogWrite(ledR,255);
analogWrite(ledG,127);
}
else // si mesure >= 30 => LED = Verte
{
digitalWrite(ledR,0);
digitalWrite(ledG,1);
}
}
delay(1000); //attente pendant 1 seconde.
}
Voici un programme avec les mêmes fonctionnalités qui fait appel à une librairie :
librairie Newping
/*
Ce programme allume une LED RGB cathodes communes en fonction de la distance mesurée
par le capteur US HC-SR04, les valeurs sont affichées dans le moniteur série
en faisant appel à la librairie NewPing
*/
#include <NewPing.h> // appel à la librairie Newping
#define distMax 200 // distance maximales (en cm)
int trig = 2; // broche trig du capteur US HC-SR04
int echo = 4; // broche echo du capteur US HC-SR04
int ledR = 3; // broche de la LED Rouge
int ledG = 5; // broche de la LED Verte
int ledB = 6; // broche de la LED Bleue
unsigned int uS = 0 ; // variable utilisée pour la mesure
NewPing sonar(trig, echo, distMax); // initialisation de NewPing (broches et distance max)
void setup() // setup est déroulé une seule fois après la remise à zéro
{
pinMode(ledR, OUTPUT); // la broche led (3) est initialisée en sortie
pinMode(ledG, OUTPUT); // la broche led (5) est initialisée en sortie
pinMode(ledB, OUTPUT); // la broche led (6) est initialisée en sortie
Serial.begin(115200); // initialisation de la liaison série à 115200 bauds
}
void loop() // loop est déroulé indéfiniment
{
digitalWrite(ledR,0); // valeur 0 sur la LED B
digitalWrite(ledG,0); // valeur 0 sur la LED G
digitalWrite(ledB,0); // valeur 0 sur la LED B
delay(50); // attente 50ms entre 2 impulsions
uS = sonar.ping(); // lecture de la distance (temps : impulsions en µs).
Serial.println(uS);
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // conversion durée impulsion en cm
Serial.println("cm");
if (uS < 600) digitalWrite(ledR,1); // si mesure < 10cm => LED = Rouge
else
{
if (uS < 1700) // si mesure < 30cm => LED = Orange
{
analogWrite(ledR,255);
analogWrite(ledG,127);
}
else // si mesure >= 30cm => LED = Verte
{
digitalWrite(ledR,0);
digitalWrite(ledG,1);
}
}
delay(1000); //attente pendant 1 seconde.
}