J'ai déjà eu l'occasion de parler du télémètre laser VL53L1X il y a quelques mois: je l'avais alors utilisé avec une carte Arduino. Il s'agit d'un dispositif qui mesure avec une assez bonne précision la distance d'un obstacle situé à 4 mètres ou moins, grâce à un laser infrarouge de type VCEL.
Cette fois, je l'utilise avec un Raspberry Pi et un programme en Python.
Connexions au Rasbperry Pi
Mon module VL53L1X a été conçu par la compagnie Waveshare. Sparkfun et Pololu offrent également leur propre module à base de VL53L1X, j'imagine qu'ils se branchent de la même façon.
Le module comporte 6 connecteurs, mais je n'en ai utilisé que 4:- VCC: Branché à une sortie 3,3 V du Raspberry Pi (broche 1)
- GND: Branché à une broche GND du Raspberry Pi (broche 6)
- SDA: Branché à la broche SDA1 du Raspberry Pi (broche 3)
- SCL: Branché à la broche SCL1 du Raspberry Pi (broche 5)
- SHUT: "shutdown control". Je ne l'ai pas utilisée.
- INT: "interrupt output". Je ne l'ai pas utilisée.
Installation de la bibliothèque de Sparkfun
Sparkfun a mis au point un module Python; pour l'utiliser avec Python 3, il s'agit de taper cette commande dans le terminal:
sudo pip3 install sparkfun-qwiic-vl53l1x
Exemple de script #1
Voici un premier script qui affiche la distance en millimètres.
-
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
Mesure de la distance d'un obstacle avec un télémètre | |
laser VL53L1X branché à un Raspberry Pi. | |
Nécessite le module python Qwiic VL53L1X conçu par Sparkfun: | |
https://github.com/sparkfun/Qwiic_VL53L1X_Py | |
Pour plus d'infos: | |
https://electroniqueamateur.blogspot.com/2020/10/mesure-dune-distance-avec-telemetre.html | |
""" | |
import qwiic_vl53l1x as qwiic | |
import time | |
print("Inialisation du telemetre VL53L1X...") | |
ToF = qwiic.QwiicVL53L1X() | |
if (ToF.sensor_init() == None): | |
print("reussie!\n") | |
ToF.set_distance_mode(1) # 1: faible portée, 2: grande portée | |
while True: | |
try: | |
ToF.start_ranging() | |
time.sleep(.1) | |
distance = ToF.get_distance() | |
time.sleep(.1) | |
ToF.stop_ranging() | |
print("Distance: %s mm" % (distance)) | |
except Exception as e: | |
print(e) |
-
Exemple de script #2
Ce deuxième script utilise tkinter pour afficher la distance dans une fenêtre plus esthétique.
-
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
''' | |
Mesure de la distance d'un obstacle avec un télémètre | |
laser VL53L1X branché à un Raspberry Pi. | |
Nécessite le module python Qwiic VL53L1X conçu par Sparkfun: | |
https://github.com/sparkfun/Qwiic_VL53L1X_Py | |
Version à interface graphique avec tkinter. | |
Pour plus d'infos: | |
https://electroniqueamateur.blogspot.com/2020/10/mesure-dune-distance-avec-telemetre.html | |
''' | |
import qwiic_vl53l1x as qwiic | |
import time | |
from tkinter import * | |
ToF = qwiic.QwiicVL53L1X() | |
ToF.sensor_init() | |
ToF.set_distance_mode(1) # 1: faible portée, 2: grand portée | |
fenetre = Tk() # création d'une fenêtre | |
fenetre.geometry("300x100+150+150") # taille de la fenêtre et position initiale sur l'écran | |
fenetre.title("Télémètre laser") # titre de la fenêtre | |
label = Label(fenetre, text=" ") # ligne vide | |
label.pack() | |
label1 = Label(fenetre, fg="red", text="Distance mesurée:") | |
label1.pack() | |
label = Label(fenetre, text=" ") # ligne vide | |
label.pack() | |
label2 = Label(fenetre, text=" ") # contiendra la mesure totale | |
label2.pack() | |
def Majvaleur(): | |
ToF.start_ranging() | |
time.sleep(.01) | |
label2['text'] = "{0:0.1f}".format(ToF.get_distance()) + " mm" | |
time.sleep(.01) | |
ToF.stop_ranging() | |
fenetre.after(1000, Majvaleur) # on recommence dans 1 seconde | |
fenetre.after(1000, Majvaleur) | |
fenetre.mainloop() | |
-
La précision est excellente pour un objet situé à quelques dizaines de centimètres (la mesure varie d'environ 5 mm pendant que l'objet demeure immobile). Pour des objets situés à 2 mètres, l'imprécision peut être de quelques centimètres.