dimanche 25 octobre 2020

Mesure d'une distance avec télémètre laser VL53L1X et Raspberry Pi

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.

-

-


Exemple de script #2

Ce deuxième script utilise tkinter pour afficher la distance dans une fenêtre plus esthétique.


-

-

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.


Yves Pelletier (TwitterFacebook)


1 commentaire:

  1. Super !!!, merci Yves !!!
    Pour augmenter la precision à longue distance tu pourrais éventuelement augmenter le temps d emmission de laser infra rouge avec la fonction set_timing_budget_in_ms(self, TimingBudgetInMs). Essaie avec 200 et 500.


    def set_timing_budget_in_ms(self, TimingBudgetInMs):

    RépondreSupprimer