ACTIVITES ARDUINO/PYTHON ULTRASON : radar de recul (avec codes Arduino et codes Python équivalent)

ACTIVITE 1 ULTRASON radar de recul :  mesure simple de distance avec un module ultrason HC-SR04

Remarque: Ces activités peuvent être programmées avec le langage d’Arduino mais aussi en Python. Pour cela, il faut utiliser Nanpy (voir l’article Programmer-en-python-pour-la-carte-arduino)

Objectif : mesurer une distance à partir de la mesure du temps de parcours d’une onde ultrasonore qui se réfléchit sur un obstacle.

/* 
 * Code d'exemple pour un capteur à ultrasons HC-SR04.
 */

/* Constantes pour les broches */
const byte TRIGGER_PIN = 13; // Broche TRIGGER
const byte ECHO_PIN = 12;    // Broche ECHO


 
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s, temps limite pour la mesure de distance

/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;

/** Fonction setup() */
void setup() {
   
  /* Initialise le port série */
  Serial.begin(9600);
   
  /* Initialise les broches */
  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
  pinMode(ECHO_PIN, INPUT);

//  
}
 
/** Fonction loop() */
void loop() {
  
  /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  
  /* 2. Mesure le temps en us entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
  long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
   
  /* 3. Calcul de la distance à partir du temps mesuré */
  float distance_mm = measure / 2.0 * SOUND_SPEED;
  

  
  /* Affiche les résultats en mm */

  Serial.print("distance en mm : ");
  Serial.print(distance_mm);
  Serial.println(" mm, ");

//   
  /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
  delay(500);
}
# -*- coding: utf-8 -*-
"""
Radar de recul :
On veut mesurer une distance à partir de la mesure du temps de parcours d’une onde ultrasonore qui se réfléchit sur un obstacle. On utiliser pour cela un module ultrason HC-SR04
"""

#########################################  IMPORTATION DES BIBLIOTHEQUES ET MODULES  #############################################################################


from nanpy import ArduinoApi    # importation des bibliothèques pour communication avec Arduino
from nanpy import SerialManager
from nanpy import Ultrasonic  # pour utiliser le module HC-SR04
from time import sleep   # pour faire des "pauses" dans l'exécution du programme


#########################################  COMMUNICATION AVEC CARTE ARDUINO ET DEFINITION DES BROCHES ET VARIABLES  #######################################################


connection = SerialManager(device='COM9') #indiquer le bon port de la carte Arduino, ici COM9

a = ArduinoApi(connection=connection)  #connection à la carte Arduino, on précédera chaque instruction Arduino par a. (exemple a.pinMode(2,a.OUTPUT)

capteurUltraSon = Ultrasonic(echo=12, trig=13, useInches=False, connection=connection) # Branchements du capteur

#########################################   CODE ARDUINO  EN LANGAGE PYTHON    #################################################################################

while True :

    # Mesure de la durée pris par le son pour faire l'Aller/Retour entre le capteur US et l'obstacle.
    duree_µs = capteurUltraSon.get_duration()
    duree_s  = duree_µs/1000000.0             # Conversion µs en s
    print ('durée aller retour = ',duree_s)

    VITESSE_SON = 340.0                    #vitesse du son dans l'air en m/s
    distanceAllerRetour_s = VITESSE_SON * duree_s;
    distance_m = distanceAllerRetour_s / 2	#Distance jusqu'a l'obstacle.


    print ('distance en m = ', distance_m)
    sleep(0.5)

ACTIVITE 1bis ULTRASON radar de recul : activité 1 avec alertes LED couleurs différentes selon distance

Objectif : Faire clignoter des LED de couleurs différentes (rouge, orange, verte) selon la position de l’obstacle par rapport au capteur US. On utilise des résistances de protection de 220 Ω.

  • Zone verte : entre 30 cm et 50 cm
  • Zone orange : entre 10 cm et 30 cm
  • Zone rouge : moins de 10 cm

Bonus : Faire clignoter les LED plus rapidement quand l’obstacle se rapproche !

/* 
 * Code d'exemple pour un capteur à ultrasons HC-SR04 avec alertes LED.
 */

/* Constantes pour les broches */
const byte TRIGGER_PIN = 13; // Broche TRIGGER
const byte ECHO_PIN = 12;    // Broche ECHO
const byte LED_verte = 8; // broches pour les LED 
const byte LED_orange = 9;
const byte LED_rouge = 10;



 
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s, temps limite pour la mesure de distance

/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;

/** Fonction setup() */
void setup() {
   
  /* Initialise le port série */
  Serial.begin(9600);
   
  /* Initialise les broches */
  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
  pinMode(ECHO_PIN, INPUT);
  pinMode (LED_verte, OUTPUT); // On déclare les broches des LED et buzzer comme sorties
  pinMode (LED_orange, OUTPUT);
  pinMode (LED_rouge, OUTPUT);
//  
}
 
/** Fonction loop() */
void loop() {
  
  /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  
  /* 2. Mesure le temps en us entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
  long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
   
  /* 3. Calcul de la distance à partir du temps mesuré */
  float distance_mm = measure / 2.0 * SOUND_SPEED;
  
 // zone pour laquelle la LED verte clignote 
if ((distance_mm < 500.0)and (distance_mm > 300.0)) {
digitalWrite (LED_verte, HIGH); //la LED s'allume pendant 1 s et s'éteint pendant 0,5 s
delay(1000);
digitalWrite (LED_verte,LOW);
delay (500);
 }
 
//zone pour laquelle la LED orange clignote 
if ((distance_mm < 300.0) and (distance_mm > 100.0)) { //la LED s'allume pendant 0,5 s et s'éteint pendant 0,25 s
digitalWrite (LED_orange, HIGH); 
delay(500);
digitalWrite (LED_orange,LOW);
delay (250);
}

//zone pour laquelle la LED rouge clignote
 if (distance_mm < 100.0) { //la LED s'allume pendant 0,1 s et s'éteint pendant 0,05 s
digitalWrite (LED_rouge, HIGH); 
delay(100);
digitalWrite (LED_rouge,LOW);
delay (50);

 }

// sinon il ne se passe rien ... 
else {
  digitalWrite (LED_verte,LOW);
  digitalWrite (LED_orange,LOW);
  digitalWrite (LED_rouge,LOW);
  delay (50);
  
}
    
  
  /* Affiche les résultats en mm*/
 
  Serial.print("distance en mm : ");
  Serial.print(distance_mm);
  Serial.println(" mm, ");

//   
  /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
  delay(500);
}
# -*- coding: utf-8 -*-
"""
Radar de recul avec LED d'alerte:
On veut mesurer une distance à partir de la mesure du temps de parcours d’une onde ultrasonore qui se réfléchit sur un obstacle. On utiliser pour cela un module ultrason HC-SR04
On fera clignoter des LED de couleurs différentes (rouge, orange, verte) selon la position de l’obstacle par rapport au capteur US, de plus en pus vite selon la zone.
Zone verte : entre 30 cm et 50 cm
Zone orange : entre 10 cm et 30 cm
Zone rouge : moins de 10 cm

"""
#########################################  IMPORTATION DES BIBLIOTHEQUES ET MODULES  #############################################################################



from nanpy import ArduinoApi    # importation des bibliothèques pour communication avec Arduino
from nanpy import SerialManager
from nanpy import Ultrasonic  # pour utiliser le module HC-SR04
from time import sleep   # pour faire des "pauses" dans l'exécution du programme



#########################################  COMMUNICATION AVEC CARTE ARDUINO ET DEFINITION DES BROCHES ET VARIABLES  #######################################################


connection = SerialManager(device='COM9') #indiquer le bon port de la carte Arduino

a = ArduinoApi(connection=connection)  #connection à la carte Arduino, on précédera chaque instruction Arduino par a. (exemple a.pinMode(2,a.OUTPUT)

capteurUltraSon = Ultrasonic(echo=12, trig=13, useInches=False, connection=connection) # branchement des broches du capteur.

LED_verte = 8  #broches pour les LED (montage en série avec une résistance de 220 ohms)
LED_orange = 9
LED_rouge = 10
a.pinMode(LED_verte,a.OUTPUT) #ces broches sont déclarées comme sorties
a.pinMode(LED_orange,a.OUTPUT)
a.pinMode(LED_rouge,a.OUTPUT)


#########################################   CODE ARDUINO  EN LANGAGE PYTHON    #################################################################################

while True :

    # Mesure de la durée pris par le son pour faire l'Aller/Retour entre le capteur US et l'obstacle.
    duree_µs = capteurUltraSon.get_duration()
    duree_s  = duree_µs/1000000.0             # Conversion µs en s
    print ('durée aller retour = ',duree_s)

    VITESSE_SON = 340.0                    #vitesse du son dans l'air en m/s
    distanceAllerRetour_s = VITESSE_SON * duree_s;
    distance_m = distanceAllerRetour_s / 2	# Distance jusqu'a l'obstacle.
    print ('distance en m = ', distance_m)


    if distance_m <  0.5 and distance_m > 0.3 : #zone pour laquelle la LED verte clignote

        a.digitalWrite (LED_verte, a.HIGH) #la LED s'allume pendant 1 s et s'éteint pendant 0,1 s
        sleep(1)
        a.digitalWrite (LED_verte,a.LOW)
        sleep (0.1)




    if distance_m < 0.3 and distance_m > 0.1: #zone pour laquelle la LED orange clignote

        a.digitalWrite (LED_orange, a.HIGH); #la LED s'allume pendant 0,1 s et s'éteint pendant 0,01 s
        sleep(0.1)
        a.digitalWrite (LED_orange,a.LOW)
        sleep (0.01)



    if distance_m < 0.1: #zone pour laquelle la LED rouge clignote

        a.digitalWrite (LED_rouge,a.HIGH) #la LED s'allume pendant 0,05 s et s'éteint pendant 0,005 s
        sleep (0.05)
        a.digitalWrite (LED_rouge,a.LOW)
        sleep (0.005)




    sleep(0.5)

ACTIVITE 1ter ULTRASON radar de recul : activité 1 avec alertes LED + buzzer

Objectif : Idem activité 1bis avec buzzer qui émet des bips de plus en plus rapides et de plus en plus aigus quand l’obstacle se rapproche

  • Zone verte : entre 30 cm et 50 cm, buzzer à 440 Hz
  • Zone orange : entre 10 cm et 30 cm, buzzer à 880 Hz
  • Zone rouge : moins de 10 cm, buzzer à 880 Hz
/* 
 * Code d'exemple pour un capteur à ultrasons HC-SR04 avec alertes LED et buzzer.
 */

/* Constantes pour les broches */
const byte TRIGGER_PIN = 13; // Broche TRIGGER
const byte ECHO_PIN = 12;    // Broche ECHO
const byte LED_verte = 8; // broches pour les LED et le buzzer
const byte LED_orange = 9;
const byte LED_rouge = 10;
const byte buzzer = 11;



 
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s, temps limite pour la mesure de distance

/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;

/** Fonction setup() */
void setup() {
   
  /* Initialise le port série */
  Serial.begin(9600);
   
  /* Initialise les broches */
  pinMode(TRIGGER_PIN, OUTPUT);
  digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
  pinMode(ECHO_PIN, INPUT);
  pinMode (LED_verte, OUTPUT); // On déclare les broches des LED et buzzer comme sorties
  pinMode (LED_orange, OUTPUT);
  pinMode (LED_rouge, OUTPUT);
  pinMode (buzzer, OUTPUT);
//  
}
 
/** Fonction loop() */
void loop() {
  
  /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  
  /* 2. Mesure le temps en us entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
  long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
   
  /* 3. Calcul de la distance à partir du temps mesuré */
  float distance_mm = measure / 2.0 * SOUND_SPEED;
  
 // zone pour laquelle la LED verte clignote , buzzer à 440 Hz
if ((distance_mm < 500.0)and (distance_mm > 300.0)) {
digitalWrite (LED_verte, HIGH); //la LED s'allume pendant 1 s et s'éteint pendant 0,5 s
tone (buzzer,440);  //buzzer à 440 Hz
delay(1000);
digitalWrite (LED_verte,LOW);
noTone (buzzer);
delay (500);
 }
 
//zone pour laquelle la LED orange clignote , buzzer à 880 Hz
if ((distance_mm < 300.0) and (distance_mm > 100.0)) { //la LED s'allume pendant 0,5 s et s'éteint pendant 0,25 s
digitalWrite (LED_orange, HIGH); 
tone (buzzer,880); //buzzer à 880 Hz
delay(500);
digitalWrite (LED_orange,LOW);
noTone (buzzer);
delay (250);
}

//zone pour laquelle la LED rouge clignote , buzzer à 1760 Hz
 if (distance_mm < 100.0) { //la LED s'allume pendant 0,1 s et s'éteint pendant 0,05 s
digitalWrite (LED_rouge, HIGH); 
tone (buzzer,1760);// buzzer à 1760 Hz
delay(100);
digitalWrite (LED_rouge,LOW);
noTone (buzzer);
delay (50);

 }

// sinon il ne se passe rien ... 
else {
  digitalWrite (LED_verte,LOW);
  digitalWrite (LED_orange,LOW);
  digitalWrite (LED_rouge,LOW);
  delay (50);
  
}
    
  
  /* Affiche les résultats en mm*/

  Serial.print("distance en mm : ");
  Serial.print(distance_mm);
  Serial.println(" mm, ");

//   
  /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
  delay(500);
}
# -*- coding: utf-8 -*-
"""
Radar de recul avec LED d'alerte:
On veut mesurer une distance à partir de la mesure du temps de parcours d’une onde ultrasonore qui se réfléchit sur un obstacle. On utiliser pour cela un module ultrason HC-SR04
On fera clignoter des LED de couleurs différentes (rouge, orange, verte) selon la position de l’obstacle par rapport au capteur US, de plus en pus vite selon la zone.
Un buzzer émet des bips de plus en plus rapides et plus aigus qaund on s'approche de l'obstacle
Zone verte : entre 30 cm et 50 cm
Zone orange : entre 10 cm et 30 cm
Zone rouge : moins de 10 cm

"""
#########################################  IMPORTATION DES BIBLIOTHEQUES ET MODULES  #############################################################################

from nanpy import ArduinoApi  # importation des bibliothèques pour communication avec Arduino
from nanpy import SerialManager
from nanpy import Ultrasonic # pour utiliser le module HC-SR04
from time import sleep  # pour faire des "pauses" dans l'exécution du programme


#########################################  COMMUNICATION AVEC CARTE ARDUINO ET DEFINITION DES BROCHES ET VARIABLES  #######################################################

connection = SerialManager(device='COM7') #indiquer le bon port de la carte Arduino

a = ArduinoApi(connection=connection)  #connection à la carte Arduino, on précédera chaque instruction Arduino par a. (exemple a.pinMode(2,a.OUTPUT)

capteurUltraSon = Ultrasonic(echo=12, trig=13, useInches=False, connection=connection) # Branchements du capteur

LED_verte = 8 #broches pour les LED (montage en série avec une résistance de 220 ohms)
LED_orange = 9
LED_rouge = 10
buzzer = 11 # broche pour le buzzer
a.pinMode(LED_verte,a.OUTPUT) #ces broches sont déclarées comme sorties
a.pinMode(LED_orange,a.OUTPUT)
a.pinMode(LED_rouge,a.OUTPUT)
a.pinMode (buzzer,a.OUTPUT)

#########################################   CODE ARDUINO  EN LANGAGE PYTHON    #################################################################################

while True :

    # Mesure de la durée pris par le son pour faire l'Aller/Retour entre le capteur US et l'obstacle.
    duree_µs = capteurUltraSon.get_duration()
    duree_s  = duree_µs/1000000.0             # Conversion µs en s
    print ('durée aller retour = ',duree_s)

    VITESSE_SON = 340.0                    #vitesse du son dans l'air en m/s
    distanceAllerRetour_s = VITESSE_SON * duree_s;
    distance_m = distanceAllerRetour_s / 2	#Distance jusqu'a l'obstacle.
    print ('distance en m = ', distance_m)


    if distance_m <  0.5 and distance_m > 0.3 : #zone pour laquelle la LED verte clignote , buzzer à 440 Hz

        a.digitalWrite (LED_verte, a.HIGH)  #la LED s'allume pendant 1 s et s'éteint pendant 0,5 s
        a.tone(buzzer,440)                    #buzzer à 440 Hz
        sleep(1)
        a.digitalWrite (LED_verte,a.LOW)
        a.noTone(buzzer)
        sleep (0.5)





    if distance_m < 0.3 and distance_m > 0.1: #zone pour laquelle la LED orange clignote , buzzer à 880 Hz

        a.digitalWrite (LED_orange, a.HIGH) #la LED s'allume pendant 0,5 s et s'éteint pendant 0,25 s
        a.tone(buzzer,880)                #buzzer à 880 Hz
        sleep(0.5)
        a.digitalWrite (LED_orange,a.LOW)
        a.noTone(buzzer)
        sleep (0.25)



    if distance_m < 0.1:  #zone pour laquelle la LED rouge clignote , buzzer à 1760 Hz

        a.digitalWrite (LED_rouge,a.HIGH) #la LED s'allume pendant 0,1 s et s'éteint pendant 0,05 s
        a.tone(buzzer,1760)            #buzzer à 1760 Hz
        sleep (0.1)
        a.digitalWrite (LED_rouge,a.LOW)
        a.noTone(buzzer)
        sleep (0.05)





    sleep(0.5)

Laisser un commentaire