Mesure de distance - Ultrason

De Wiki L.A.B
Aller à : navigation, rechercher
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

Montage LED RGB avec LDR Montage LED RGB avec LDR

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.
}