dimanche 24 février 2019

Capteur de lumière TSL2561 et Raspberry Pi

Le capteur de lumière TSL2561 permet de mesurer l'intensité lumineuse avec une très bonne précision. Il comporte en fait deux capteurs: un capteur large bande qui réagit à la lumière visible et à la lumière infrarouge, et un deuxième capteur qui ne réagit qu'à l'infrarouge. Au moyen des deux valeurs mesurées, il est possible de calculer l'éclairement en lux. Nous avons déjà eu l'occasion d'utiliser un de ces modules avec un Arduino mais voyons maintenant ce que nous pouvons en tirer si nous le connectons à un Raspberry Pi, que nous programmerons en Python

Connexion du module TSL2561 au Raspberry Pi


Puisqu'il s'agit d'un capteur I2C, nous utilisons les broches du Raspberry Pi qui sont dédiées à ce type de communication.

                                             Module TSL2561  ----------    Raspberry Pi
                                                         VCC   ---------------   Broche 1 (3,3 V)
                                                         GND   ---------------- Broche 6 (GND)
                                                         SCL     --------------   Broche 5 (GPIO3)
                                                         SDA    ---------------  Broche 3 (GPIO2)
                                                         INT      -------------    pas branché


Préparation du Raspberry Pi pour la communication i2c

La communication i2c doit avoir été activée sur votre Raspberry Pi. Pour ce faire, il s'agit d'aller dans le menu "Préférences / Configuration du Raspberry Pi".


On sélectionne ensuite "Activé" sur la ligne "I2C", et on redémarre le Raspberry Pi.


Si le module TSL2561 est correctement branché à votre Raspberry Pi, vous devriez le voir à l'adresse 39 en entrant la commande "i2cdetect -y 1" dans le Terminal.


Bibliothèque

Il n'est pas très difficile de récupérer les données brutes issues des deux capteurs du TSL2561, mais leur conversion en lux est assez délicate, et j'ai donc préféré utiliser une bibliothèque conçue par Keiichi Shima.  De tous ces fichiers présents dans cette collection, seuls tsl2561.py et sensorbase.py sont nécessaires.

Script 1: affichage des données dans le terminal

Commençons par un premier exemple minimaliste: une fois par seconde, l'intensité lumineuse mesurée par le capteur est affichée dans le terminal. Il est facile de faire varier la valeur affichée en couvrant le capteur, en le dirigeant vers une source lumineuse, etc.





Script 2: affichage dans une fenêtre avec Tkinter (interface graphique)

Dans ce deuxième exemple, j'ai utilisé Tkinter afin d'afficher la valeur mesurée dans une fenêtre plus élégante. Grâce à la méthode "after" de Tkinter, la valeur affichée se met à jour chaque seconde.




Script 3: datalogging dans un fichier csv

Finalement, ce troisième script consigne les mesures à l'intérieur d'un fichier intitulé "luminosité.csv", qui est créé dans le même répertoire que le script python, et qui peut ensuite être ouvert avec LibreOffice Calc.

La capture d'écran ci-dessus montre le résultat pendant que le soleil se lève, un matin d'hiver nuageux. La première colonne contient le moment de la mesure (en secondes), et la deuxième colonne contient la valeur mesurée en lux.





Yves Pelletier   (TwitterFacebook)

samedi 16 février 2019

Bras robotique Tinkerkit Braccio


J'ai eu l'occasion de faire l'essai du bras robotique Braccio, qui est spécialement conçu pour être utilisé avec une carte Arduino.

La boîte contient tout ce qui est nécessaire pour assembler un bras fonctionnel...sauf la carte Arduino, qui doit être achetée séparément (un modèle fonctionnement à un niveau logique de 5 V, comme par exemple le Uno, est nécessaire).

Assemblage

Le Braccio arrive en pièces détachées: une vingtaine de pièces de plastiques qui doivent être assemblées au moyen d'une soixantaine de vis (un tournevis cruciforme tout à fait conventionnel est fourni dans le kit, ce qui m'a semblé un peu discutable), 6 servomoteurs, une alimentation (5 V, 4 A) et le shield Braccio.


Les instructions d'assemblage fournies dans la boîte ressemblent à celles qui accompagnent un kit Lego: des illustrations, raisonnablement claires, et pas le moindre texte. En cas d'incertitude, des vidéos d'assemblage sont disponibles sur YouTube (celui-ci me semble très bien).

On commence par assembler la partie du bras se situant entre l'épaule et le coude (servomoteurs M2 et M3).





Le servomoteur M1 est fixé à la base.


L'épaule est reliée à la base rotative.


Assemblage de l'avant-bras (servomoteur M4).




On ajoute le poignet (servomoteur M5).




Assemblage de la pince (servomoteur M6)



Le shield Braccio V4

Le shield Braccio comporte 6 connecteurs de couleur orange auxquels vous branchez les servomoteurs (vous les insérez dans l'ordre, M1 étant situé du côté du jack d'alimentation).

Les connecteurs blancs permettent de brancher des capteurs analogiques (ils sont reliés aux entrées A0 à A5 de l'Arduino). Le connecteur jaune est pour la communication série, et le vert ("TWI") pour un capteur I2C.


Le bloc d'alimentation (5 V, 4 A) doit être branché au shield Braccio. Il supporte une tension d'entrée allant de 100 à 240 V, 50 ou 60 Hz.


Le shield Braccio doit être superposé à une carte Arduino qui fonctionne à un niveau logique de 5 V (Uno, par exemple).

La bibliothèque Braccio

Une bibliothèque spécialement conçue pour le contrôle du Braccio est disponible ici.

Une fois la bibliothèque installée, le premier exemple à essayer est testBraccio90, qui place le Braccio en position verticale, pour vérifier si tous les servomoteurs sont correctement alignés. Vous pouvez ensuite essayer les exemples simpleMovements et takethesponge.



Programmation

Mise à part la commande d'initialisation du Braccio ("Braccio.begin()" qui doit doit être placée dans "setup()"), tous les mouvements du Braccio sont contrôlés par une même commande:

Braccio.ServoMovement((step delay  M1 , M2 , M3 , M4 , M5 , M6);

  • Le premier paramètre (step delay) est le nombre de millisecondes de pause entre le mouvement de chaque servo. Les valeurs admises vont de 10 à 30.
  • M1 est l'angle de la base rotative, en degrés. Les valeurs admises vont de 0 à 180.
  • M2 est l'angle de l'épaule, en degrés. Les valeurs admises vont de 15 à 165.
  • M3 est l'angle du coude, en degrés. Les valeurs admises vont de 0 à 180.
  • M4 est l'articulation du poignet. Les valeurs admises vont de 0 à 180.
  • M5 contrôle la rotation de la pince. Les valeurs admises vont de 0 à 180.
  • M6 permet d'ouvrir ou fermer la pince. Les valeurs admises vont de 10° (complètement ouverte) à 73° (complètement fermée).
C'est une bonne idée, dans un premier temps, de faire bouger chaque servomoteur un par un, afin de bien visualiser ce que contrôle chaque paramètre, et pour vérifier que le mouvement peut bel et bien s'effectuer sur toute la plage des valeurs admissibles.

Résultats

Pour finir, une courte vidéo du Braccio qui s'amuse avec une éponge.




Yves Pelletier   (TwitterFacebook)

vendredi 15 février 2019

Et pendant ce temps, dans un blog près de chez vous...(1)

J'ai publié beaucoup de nouveaux articles au cours des dernières semaines, mais je ne suis pas le seul! Voici une sélection de billets publiés dans d'autres blogs en français depuis le début de l'année 2019:
Voilà qui devrait contribuer à assouvir votre soif d'informations pour un certain temps.  N'hésitez pas à me faire part de blogs en français qui mériteraient d'être mentionnés dans une éventuelle prochaine livraison de cette chronique. J'ai volontairement omis les chaînes YouTube, car je n'ai pas la patience de regarder des vidéos: je préfère de loin lire du texte et regarder des schémas.

Yves Pelletier   (TwitterFacebook)