MINI PROJET


On vous demande de simuler un radar de recul, la carte Microbit sera équipée d'un capteur Ultrason raccordé sur PIN1 et commandera un buzzer raccordé sur PIN0.


Temps: 1h à 2h

Travail par deux

Vous rendrez un document avec la répartition des tâches, les explications et le code.


Principe de la commande du BUZZER


Le buzzer doit commencer à sonner quand le capteur se trouve à 50 cm d'un obstacle au delà il ne se passe rien; entre 30 et 50 cm, le son est intermittent avec des pauses de 1s; entre 15 et 30 cm, le son s'intensifie (pauses de 0.5s),  en dessous de 15 cm le son est continu (pauses de 0.2s):


Exemple de code:



import utime

import music


# Ultrason pin1

# Buzzer pin0


 

while True:

  # mesure de la distance sur pin1 avec votre fonction get_distance

  distance = get_distance (pin1, pin1)

  # affichage de la distance dans la console

  print(('{}' * 3).format('distance: ', distance, 'cm'));

  # génération du son qui dépend de la distance

  if distance > 50:

    music.play(['c'], pin=pin0)

    set_volume(0)

  elif distance <= 50:

    set_volume(200)

    if distance > 30:

      music.play(['c'], pin=pin0)

      utime.sleep(1)

    elif ...



Principe de la mesure ULTRASON


Un capteur ultrason utilise un émetteur et un récepteur. L’émetteur émet une onde sonore  à une fréquence de 40 kHz (ultrason) et le récepteur collecte l’écho de l’onde répercuté par l’obstacle (voir le schéma ci-dessous).



La distance séparant le véhicule de l’obstacle est calculée à partir du temps mis par l’onde  pour aller et revenir au récepteur.


La relation de physique utile  est  distance = vitesse x temps 


L’onde se déplace à la vitesse du son soit  340 m/s ( il conviendra de convertir cette vitesse en cm/s dans le code).


Dans le cas d’une onde, la distance parcourue par l’onde est:


  • un trajet aller de l’onde  (distance émetteur-> obstacle)
  • un trajet retour de l’écho de l’onde (distance obstacle -> récepteur)

L’onde parcourt le double de la distance entre le véhicule et l’obstacle :



     



Mesure phase 1 : par programmation on configure la  broche 1 ( PIN1)  comme sortie ; on la met au niveau bas (0 logique)  pendant 2 µs puis au niveau haut (1 logique)  pendant  environ 10 µs, puis à nouveau au niveau bas.  La broche 1 envoie ainsi un ordre au capteur, lorsque le capteur reçoit une impulsion (passage de 0 -> 1-> 0), il émet 8 salves d’ondes ultrason de fréquence 40kHz :







Mesure phase 2 : On reconfigure ensuite la broche 1 ( PIN1) comme entrée pour qu’elle puisse recevoir la réponse du capteur. Le capteur renvoie la distance de l’obstacle sous la forme d’une impulsion. La durée du niveau haut  de cette impulsion correspond au temps mis par l’onde pour aller et revenir, elle permet de calculer la distance de l’obstacle. Pour mesurer la durée du niveau haut, on peut utiliser la fonction time_pulse_us du module machine


Voici le début du code d'une fonction qui renvoie la distance


from microbit import *

from machine import time_pulse_us


# la fonction prend en arguments les broches utilisées pour commander le capteur (trig) et pour recevoir l'écho (echo)

# lors de l'utilisation de la fonction on utilisera pin1 pour trig et echo

def get_distance (trig, echo):

  # Activation de la mesure (phase1)

  trig.write_digital(0)

  utime.sleep_us(2)

  trig.write_digital(1)

  utime.sleep_us(10)

  trig.write_digital(0)

  # récupération de la mesure (phase2)

  echo.read_digital()

  # calcul du temps écoulé entre envoi salve et echo de retour calculé par time_pulse_us

  # la fonction time_pulse_us arrête la mesure au bout de timeout = 30000 µs

  duree = time_pulse_us(echo, 1, 30000)/1e6 # temps en secondes

  if duree > 0:

  # Calcul puis renvoie de la distance de l'obstacle en cm

  ............................

else:

   return -1






Créé avec HelpNDoc Personal Edition: Générateur complet d'aides multi-formats