samedi 8 octobre 2016

Capteur de lumière TSL2561 et Arduino

Je vous présente aujourd'hui une courte marche à suivre pour utiliser un module capteur de lumière TSL2561 avec une carte Arduino.

Lorsqu'on veut qu'un circuit électronique fasse la différence entre la lumière et l'obscurité (pour qu'une veilleuse s'allume automatiquement quand il fait noir, ou pour capter le signal pulsé d'une télécommande infrarouge, par exemple) l'utilisation d'une photorésistance ou d'un phototransistor est tout à fait appropriée.

Mais si vous désirez mesurer une intensité lumineuse, vous obtiendrez probablement de meilleurs résultats en utilisant un capteur plus sophistiqué.  Le TSL2561 est un capteur numérique (protocole I2C) qui indique l'intensité lumineuse en lux, de façon à imiter la réponse de l'oeil humain.  Pour ce faire, le TSL2561 comporte deux photodiodes: l'une d'entre elles mesure à la fois la lumière visible et l'infrarouge, alors que l'autre mesure exclusivement l'infrarouge.  Une équation empirique permet de calculer l'intensité lumineuse en lux à partir de ces deux mesures.

Le module

Le circuit intégré lui-même est liliputien:  ça vaut vraiment la peine de se procurer un module (breakout) auquel il suffira de souder une rangée de 5 pins.  Vous pouvez le trouver sur eBay pour $2 environ, à moins que vous préfériez vous procurer l'original développé par Sparkfun.

Les 5 connecteurs sont identifiés aux verso du module:

  • 3V3  et GND servent pour l'alimentation du module.
  • SCL et SDA servent à la communication i2C
  • INT peut être utilisée pour envoyer un "interrupt" au microcontrôleur, signifiant qu'une mesure a été prise.  Je n'ai pas utilisé cette option.
Connexions à l'Arduino

Rien de très surprenant ici, si vous avez déjà utilisé un périphérique i2c auparavant:  les pins i2c de l'Arduino Uno sont A4 (SDA) et A5 (SCL) (mais elles sont différentes sur d'autres modèle comme le Mega, par exemple)­.  Le breakout doit être alimenté en 3,3 V, mais il n'est pas nécessaire de convertir le signal de communication (qui sera, lui, à 5 V).
  • 3V3 du TSL2561 à 3V3 de l'Arduino Uno
  • GND du TSL2561 à GND de l'Arduino Uno
  • SCL du TSL2561 à A5 de l'Arduino Uno
  • SDA du TSL2561 à A4 de l'Arduino Uno

Installation de la bibliothèque

Sparkfun a mis au point une bibliothèque qui nous facilitera la tâche pour la phase de codage de l'Arduino.  Après avoir téléchargé la bibliothèque sur le site github, vous devrez l'installer manuellement (le menu "Ajouter une bibliothèque .zip" de l'IDE Arduino ne fonctionne pas pour ce fichier).   Vous devez donc décompresser le fichier "TSL2561_Luminosity_Sensor.zip", renommer son dossier "Librairies" à votre convenance, puis déplacer ce dossier à l'intérieur du dossier "Librairies" de votre sketchbook Arduino.

Utilisation du sketch d'exemple

Si votre bibliothèque a été convenablement installée, vous devriez voir dans le menu "Fichier / Exemples" une nouvelle catégorie intitulée "Sparkfun TSL2561", contenant un exemple intitutlé "SparkFunTSL2561Example".


Il s'agit d'ouvrir ce fichier, de le téléverser dans votre Arduino et d'activer le moniteur série pour voir apparaître les mesures.


"data0" et "data1" représentent respectivement les données brutes mesurées par chacun des deux capteurs, alors que le 3e nombre indique l'intensité lumineuse calculée en lux.  La mention "good" indique qu'aucun des deux capteurs n'était saturé.



Modifications au sketch d'exemple

Deux variables peuvent être modifiées pour que le sketch réponde mieux à vos besoins:

La variable booléenne "gain" est réglée par défaut à "0", ce qui est approprié pour mesurer des intensité lumineuses élevées.  Si vous désirez mesurer des intensités lumineuses plus faibles, vous pouvez régler cette variable à "1", ce qui multiplie le gain par 16.

L'entier "time" permet de régler le temps d'intégration (le temps pendant lequel le capteur compile une série de mesures qui seront utilisées dans le calcul).  Par défaut, ce temps d'intégration est de 402 ms, mais vous pouvez le régler à 13,7 ms (si time = 0), 101 ms (si time = 1),  402 ms (si time = 2) ou réglage manuel (si time = 3).

Vérifiez l'état de la variable booléenne "good":  si elle devient nulle, ça indique qu'au moins un des capteurs a saturé.  Il faut alors réduire le gain, ou diminuer le temps d'intégration.

Sources:  ce tutoriel rédigé par Sparkfun m'a été très utile.

Yves Pelletier   (TwitterFacebook)

mardi 6 septembre 2016

Amplificateur stéréo PAM8406

J'ai fait l'essai de ce petit circuit d'amplification vendu sur eBay au prix d'un dollar environ ("PAM8406 Digital Amplifier Board With Volume Potentiometer 5Wx2 Stereo M70 New").

La qualité sonore m'a semblé excellente, et je n'ai entendu aucun parasite ou autre bruit de fond.  Bien sûr, avec une puissance de 5 W, il est hors de question de l'utiliser pour un spectacle en plein air devant une foule en délire, mais pour écouter de la musique dans une petite pièce, ça peut très bien faire l'affaire.

Les connexions sont évidentes:  du côté gauche de la carte, trois connecteurs servent au signal d'entrée:
  • LN: Entrée, canal gauche
  • GND:  Masse du signal d'entrée
  • RN:  Entrée, canal droit

Du côté droit de la carte, on trouve d'abord deux connecteurs (VCC et GND) consacrés à l'alimentation (2,5 V à 5 V, avec un maximum absolu de 5,5 V).  J'ai utilisé une alimentation de 5 V ayant jadis accompagné un Zip Drive d'Iomega (!).

Finalement, 4 connecteurs permettent de brancher deux haut-parleurs (4 Ω ou 2 Ω):
  • ROUT+ et  ROUT-:  Haut-parleur droit
  • LOUT+  et LOUT-:   Haut-parleur gauche
Deux potentiomètres permettent de régler le gain de l'amplificateur, mais ils ne sont pas très pratiques s'il s'agit de votre seule option pour régler le volume.

Fiche technique du PAM8406 par le fabricant Diodes incorporated.


Yves Pelletier   (TwitterFacebook)

lundi 5 septembre 2016

Installation d'Armbian sur Orange Pi PC

Petite récapitulation:  il y a presque un an, j'ai fait l'acquisition d'un Orange Pi PC, une carte similaire au Raspberry Pi, mais offerte au prix très modique de $15.

Le problème avec l'Orange Pi PC, c'est que son manufacturier se contente de fabriquer des cartes sans investir quoi que ce soit dans la mise au point de logiciels qui rendraient les dites cartes utilisables. Par exemple, lorsqu'on installe un système d'exploitation officiellement recommandé sur le site web d'Orange Pi, on se retrouve avec des bugs majeurs:  un seul port USB opérationnel (sur les trois ports présents sur la carte), port ethernet non fonctionnel, etc.

Certains utilisateurs avaient mis en ligne des versions améliorées des systèmes d'exploitation (j'avais testé avec un relatif succès Ubuntu Vivid Mate et Raspbian) mais les bugs demeuraient nombreux et les créateurs de ces versions sont ensuite disparus dans la nature.

Le système d'exploitation approprié semble maintenant être Armbian:  une distro de Linux spécialement conçue pour les cartes comportant des processeurs de type ARM:  on peut donc faire fonctionner Armbian sur Orange Pi, Banana Pi, PCDuino, Cubieboard, Olimex, etc.

Alors aujourd'hui, j'installe Armbian sur mon Orange Pi PC.

1.  Téléchargement d'Armbian


Parmi toutes les cartes supportées par l'équipe de développement d'Armbian, je suis allé sur la page consacrée à l'Orange Pi PC et j'ai downloadé la version "Jessie Desktop".

2.  Décompression du fichier

Il s'agit d'un fichier de type ".7z" qui doit être décompressé au moyen du logiciel 7-zip.

Suite à la décompression, on se retrouve avec 3 fichiers:  un fichier .txt qui ne contient que du blablabla d'ordre légal, un fichier .raw et un fichier .asc.

3.  Création de la carte micro SD au moyen de Rufus

J'ai ensuite créé une carte microSD de démarrage grâce au logiciel Rufus (sous Windows).  Il ne faut pas se contenter de copier le fichier ".raw" sur la carte SD!

Je n'ai pas modifié les réglages par défaut de Rufus.  Il s'agit de s'assurer que le périphérique sélectionné est bien la carte microSD sur laquelle on désire copier Armbian, puis on clique sur le bouton situé à droite de "FreeDOS" afin de sélectionner le fichier .raw.



Il faut choisir l'option "Tous les fichiers" pour que notre fichier "Armbian_5.14_Orangepipc_Debian_jessie_3.4.112_desktop.raw" soit visible.


On clique ensuite le bouton "Démarrer":  la création de la carte micro SD prend environ 5 minutes.

4.  Premier démarrage

Ensuite, on insère la carte micro SD dans l'Orange Pi PC  auquel on a pris soin de connecter un écran HDMI, un clavier et une souris.

Vous devriez voir défiler une bonne quantité de texte blanc sur fond noir.  Ce premier démarrage prend plusieurs minutes.

Votre Orange Pi PC va ensuite redémarrer tout seul.  Nouveau défilement de texte blanc sur fond noir...

Lorsque votre Orange Pi PC est prêt, il vous demande d'ouvrir une session:

login:  root
mot de passe:  1234

On vous demande ensuite de modifier ce mot de passe d'administrateur, puis de créer un nouvel utilisateur autre que "root" (vous n'êtes pas obligé de répondre aux questions concernant votre nom complet, votre numéro de téléphone au travail, etc.).

Vous devriez finalement voir apparaître ce bureau:



Tout semble fonctionner convenablement. Ma seule déception:  je ne suis pas parvenu à faire fonctionner mon dongle WiFi (802.11n).  Il est pourtant visible si je fait "lsusb", mais il ne parvient pas à se connecter à mon réseau domestique.

5.  On teste l'accès aux pins GPIO

Puisque nous sommes dans un blog d'électronique, assurons-nous que nous avons accès aux pins GPIO de l'Orange Pi PC.

Il semble d'abord nécessaire d'écrire cette commande dans la console pour s'assurer que nous disposons de tous les fichiers nécessaires pour faire du développement en Python:

sudo apt-get install python-dev

Ensuite, comme je l'avais déjà expliqué dans ce précédent article, on télécharge la bibliothèque "Orange Pi PC GPIO pyH3" (bouton "download zip").

Après avoir décompressé le répertoire, vous installez la bibliothèque en écrivant cette commande:

sudo python setup.py install

J'ai ensuite testé avec succès le script blink_port.py disponible dans cet article.  Une LED branchée à la pin PA12 de l'Orange Pi PC s'est alors mise à clignoter, tel que prévu.




Yves Pelletier   (TwitterFacebook)