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)


samedi 17 octobre 2020

Balance à base de Raspberry Pi


Je vous ai récemment présenté ma balance constituée d'une cellule de charge et d'un module HX711. Après l'avoir testée avec succès avec une carte Arduino Uno, je me suis amusé, cette fois, à la brancher à un Raspberry Pi.

Assemblage de la balance

La cellule de charge est vissée à deux plaques de façon à former un profil qui rappelle la lettre "S".  Au besoin, vous trouverez quelques photos supplémentaires dans mon article précédent.


Connexion de la cellule de charge au module HX711

Le module HX711 comporte 6 connecteurs servant à brancher la cellule de charge (E+, E-, A-, A+, B-, B+), et quatre connecteurs servant à l'alimentation et à la communication avec le Raspberry Pi (GND, DT, SCK, VCC).


La cellule de charge est branchée au module HX711 de la façon suivante:

  • Fil rouge: E+
  • Fil noir: E-
  • Fil blanc: A-
  • Fil vert: A+


Connexion du module HX711 au Raspberry Pi

J'ai branché le module HX711 au Raspberry Pi de cette façon:

  • GND du HX711: GND du Raspberry Pi
  • DT du HX711: broche GPIO 5 du Raspberry Pi
  • SCK du HX711: broche GPIO 6 du Raspberry Pi
  • VCC du HX711: sortie 3,3 V du Raspberry Pi

Installation de la bibliothèque de tatobari

Pour faciliter la programmation en Pyhton, j'ai téléchargé cette bibliothèque sur le github de Tatobari.

Un script minimaliste

Basé sur le script example.py, fourni avec la bibliothèque, le script ci-dessous accomplit le strict minimum, soit afficher la masse à chaque demi-seconde.


Pour calibrer ma balance, j'ai d'abord utilisé "1" comme paramètre à hx.set_reference_unit() (ligne 23 du script), puis j'ai placé une masse connue sur le plateau de la balance. J'ai ensuite divisé la mesure affichée par la masse, ce qui m'a donné 382,6, qui est devenu le nouveau paramètre de hx.set_reference_unit().

Par exemple: 
  • J'exécute le script avec hx.set_reference_unit(1).
  • Lorsque la balance est prête, je place une masse de 200 grammes sur le plateau.
  • Le programme affiche 76520.
  • Je calcule 76520/200, ce qui donne 382,6.
  • J'exécute à nouveau le script, mais avec hx.set_reference_unit(382.6).
  • La masse s'affiche correctement en grammes.
-

-

Une interface grahique avec Tkinter

Pour faire plus joli, j'ai aussi programmé cette deuxième version.



-

-

À lire également:


Yves Pelletier (TwitterFacebook

Livre: Les réseaux informatiques par la pratique

Les réseaux informatiques par la pratique
par Julien Launay
Éditions Eyrolles, Collection Serial Makers
2020
136 pages

Comme son titre l'indique, ce nouveau livre de la collection Serial Makers propose un certain nombre d'activités permettant d'explorer le fonctionnement des réseaux: choisir une adresse IP, scanner un réseau, tester un réseau par la commande ping, échanger des données par TCP, échanger et créer des pages web, utiliser un broker MQTT pour l'internet des objets...

Des marches à suivre détaillées sont offertes pour réaliser ces activités au moyen de divers outils: PC, smartphone et, surtout, l'ESP32, qu'on propose de programmer en MicroPython, ou avec Blockly (programmation en ligne par agencement de blocs, puis compilation du programme avec l'IDE Arduino).

Environ 25% du livre est consacré à la simulation de réseaux au moyen des logiciels Packet Tracer et Filius.

Julien Launay est également l'auteur des livres Python pour la carte micro:bit et  Créer des applis avec App Inventor.

Yves Pelletier (TwitterFacebook

samedi 10 octobre 2020

Balance à base d'Arduino

Dans cet article, nous mesurons la masse d'un objet au moyen d'une balance branchée à un module HX711 et à un Arduino Uno.


Matériel

Je me suis procuré un kit constitué d'une cellule de charge, d'un module HX711 (convertisseur analogique/numérique à 24 bits spécialement conçu pour traiter le signal d'une cellule de charge), de deux plaques circulaires en acrylique et de la quincaillerie nécessaire pour assembler le tout.

Si vous préférez, il est facile d'acheter uniquement la cellule de charge et le module HX711.


Principe de fonctionnement

La cellule de charge (load cell), ou capteur de force, est un morceau de métal sur lequel on a collé quatre jauges de contrainte (ou jauges de déformations): il s'agit de résistances qui varient lorsque la cellule de charge se déforme. Ces quatre jauges sont branchées de façon à former un pont de Wheatstone.  Le module HX711 amplifie la très faible variation de signal engendrée par la très subtile déformation de la cellule de charge, et la convertit en un signal numérique qui pourra ensuite être traité par un microcontrôleur.

Assemblage

Chacun des disques en acrylique est fixé à un côté de la cellule de charge, de façon à former un profil qui ressemble un peu à un "S":


Sur la cellule de charge, une flèche indique le sens de la déflexion: cette flèche pointera vers le bas pendant l'utilisation de la balance.


Une fois l'assemblage terminé, un des disques en acrylique forme la base de la balance, alors que l'autre constitue son plateau.


Connexion de la cellule de charge au module HX711

Le module HX711 comporte 6 connecteurs servant à brancher la cellule de charge (E+, E-, A-, A+, B-, B+), et quatre connecteurs servant à l'alimentation et à la communication avec un microcontrôleur (GND, DT, SCK, VCC).


La cellule de charge est branchée au module HX711 de la façon suivante:

  • Fil rouge: E+
  • Fil noir: E-
  • Fil blanc: A-
  • Fil vert: A+


E+ et E- sont des sorties (signal d'excitation du pont de Wheatstone), alors que A+ et A- sont des entrées.

Connexion du module HX711 à l'Arduino

Le module HX711 est branché à l'Arduino Uno de cette façon:

  • GND du HX711: GND de l'Arduino
  • DT du HX711: broche 2 de l'Arduino (données numériques)
  • SCK du HX711: broche 3 de l'Arduino (signal d'horloge)
  • VCC du HX711: sortie 5 V de l'Arduino


Installation de la bibliothèque HX711

Le gestionnaire de bibliothèques présente plusieurs bibliothèques spécialement conçues pour faciliter l'utilisation du HX711. J'ai choisi celle qui a été mise au point par Bogdgan Necula, qui est également compatible avec l'ESP8266, l'ESP32 et le STM32.


Pour vérifier le fonctionnement correct de votre balance, vous pouvez utiliser le sketch "HX711_basic_example" qui est fourni avec la bibliothèque.


Ce sketch affiche dans le moniteur série les données brutes issues du HX711. N'espérez pas obtenir une valeur déjà calibrée en kilogrammes, mais si la valeur affichée augmente lorsque vous augmentez la masse sur le plateau, tout va bien!


Calibration et utilisation de la balance

Le sketch ci-dessous affiche la masse en grammes, à la condition d'avoir trouvé le bon paramètre de calibration.

-

-

Pour calibrer la balance, il faut modifier la ligne 34 pour que set_scale soit utilisé sans paramètres:

balance.set_scale();

On exécute le sketch pendant que le plateau de la balance est vide et, une fois la balance en fonction, on place sur le plateau une masse dont on connaît la valeur.

Dans mon cas, la valeur 76486 s'affichait lorsqu'une masse de 200 g était placée sur le plateau. 

76486 divisé par 200 donne 382, et j'ai donc ajouté le paramètre "382" à la méthode set_scale (ligne 34):

balance.set_scale(382);

Voici les résultats obtenus après calibration, lorsque le plateau est vide, puis lorsque j'y place 200 grammes, 400 grammes et 600 grammes:




À lire également

La même balance a été branchée à un Raspberry Pi et à un ESP32/ESP8266.

Il y a quelques années, une tentative de mesurer une masse avec un ressort et un potentiomètre s'était révélée beaucoup plus approximative.

Yves Pelletier (TwitterFacebook