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