mercredi 24 avril 2013

Faire varier une résistance au moyen de votre Arduino (potentiomètre numérique)

Vous êtes satisfait de l'amplificateur que vous avez fièrement réalisé vous-même, mais vous aimeriez bien pouvoir faire varier son gain au moyen d'une télécommande, sans être obligé de vous déplacer jusqu'à l'ampli pour tourner un potentiomètre?

Ou vous mettez au point un quelconque système automatisé qui requiert qu'une résistance soit modifiée automatiquement par un programme exécuté par un microcontrôleur?

Une solution possible consisterait à construire un robot qui se chargera de tourner le potentiomètre pour vous :-) , mais l'utilisation d'un potentiomètre numérique vous permettra probablement d'atteindre votre but beaucoup plus facilement.

Comme son nom l'indique, un potentiomètre numérique est une résistance variable.  Pour faire varier cette résistance, on envoie au potentiomètre une instruction numérique au moyen du protocole SPI (contrairement aux potentiomètres conventionnels, un potentiomètre numérique ne comporte donc aucune partie mobile).

Dans cet article, je vais contrôler un potentiomètre MCP41100 (100 kΩ) fabriqué par Microchip au moyen d'un Arduino Uno.  La marche à suivre est identique pour les modèles MCP41050 (50 kΩ) et MCP41010 (10 kΩ).

Branchements

Ce potentiomètre numérique prend la forme d'un circuit intégré DIP à 8 broches.


Deux pins servent à alimenter la puce:  la pin 4 se branche dans une des connection "GND" de l'Arduino, et la pin 8 se branche dans la sortie 5 V de l'Arduino.

Trois pins se chargent de la réception des données numérique émises par l'Arduino.  Comme pour tous les périphériques utilisant le protocole SPI, la pin 1 (chip select) se branche de préférence sur la sortie 10 de l'Arduino, la pin 2 (serial clock) sur la sortie 13 de l'Arduino, et la pin 3 (données numérique) va dans la sortie MOSI (11) de l'Arduino (les connexions sont différentes si vous utilisez un Arduino Mega).

Finalement, les trois autres pins du circuit intégré constituent les sorties du potentiomètre:  la résistance entre les pins 5 et 7 demeurera constante (à la valeur maximale d'environ 100 kΩ), mais on pourra varier à volonté la résistance entre la pin 6 (l'équivalent du curseur d'un potentiomètre conventionnel)  et la pin 5, et la résistance entre la pin 6 et la pin 7.

Pour cette expérience, j'ai branché un multimètre  (réglé en mode "ohmmètre") aux pins 6 et 7.

Résumé des connexions:

Potentiomètre Arduino
1 10
2 13
3 11
4 GND
8 5 V


Programmation

À la lecture de la fiche technique, on constate que, pour régler la résistance, il faut envoyer au potentiomètre un premier message d'un octet indiquant la commande à effectuer.  Pour la commande "write data" (la seule qui me semble utile), il faut envoyer le nombre binaire xx01xx01 dans lequel la valeur des x n'a aucune importance.  Si on remplace les x par des 0, on envoie donc le nombre binaire 00010001, qui correspond au nombre hexadécimal 11, ou tout simplement au nombre décimal 17.

Il faut ensuite envoyer un deuxième message d'un octet:  un nombre entre 0 et 255 qui indique à quelle valeur la résistance doit être réglée (0 pour la valeur minimale, 255 pour la valeur maximale).

Voici donc un sketch qui règle d'abord la résistance à sa valeur minimale pendant 10 secondes (mon multimètre affiche alors 145 Ω), puis à sa valeur maximale (mon multimètre affiche 90.9 kΩ), puis finalement à une valeur médiane (45.8 kΩ).



Yves Pelletier (Twitter: @ElectroAmateur)

dimanche 21 avril 2013

Moteur électrique alimenté par énergie solaire (1): la solution Zener

Vous venez d'acquérir une cellule photovoltaïque capable de générer 5 ou 6 volts, et une multitude de projets se mettent à germer dans votre esprit:  une voiture de course miniature propulsée par énergie solaire, un ventilateur à énergie solaire pour les chaudes journées d'été, un robot à énergie solaire qui vous servira des boissons rafraîchissantes au bord de la piscine...

Comme premier test, vous branchez donc un petit moteur électrique à votre cellule solaire et...le moteur reste obstinément immobile.  C'est étrange: ce moteur accepte pourtant de tourner sous une tension beaucoup plus faible, d'habitude...  Et il fait un soleil radieux...

Faites une petite expérience:  en plein soleil, branchez un voltmètre à votre cellule photovoltaïque.  Vous devriez mesurer quelques volts.  Maintenant, branchez le moteur, et mesurez la tension à nouveau:  vous ne mesurez plus rien!?!?

C'est que votre cellule solaire a une puissance limitée:  si vous y branchez une charge de faible résistance (votre moteur), elle serait obligée de débiter une assez forte intensité de courant pour maintenir sa tension, mais elle est incapable de le faire.

La solution:  ajouter, entre le moteur et la cellule solaire, un circuit qui stockera temporairement l'énergie électrique (au rythme où la cellule est capable de la produire) avant de la délivrer au moteur lorsque le niveau atteint est suffisant.  Les anglophones adeptes de petits robots solaires appellent ça un "solar engine".

Comme vous pouvez l'imaginer, ce circuit comportera un condensateur (comme moyen d'emmagasiner de l'énergie électrique de façon temporaire, il est difficile de trouver mieux).  Deux transistors (un NPN et un PNP) s'occuperont de faire basculer le circuit entre l'état "stockage d'énergie" et l'état "alimentation du moteur".

Il ne reste plus qu'à ajouter un composant qui se chargera d'établir à quelle tension le condensateur est suffisamment chargé.  L'idéal semble d'utiliser un circuit intégré spécialement conçu pour mettre un appareil mobile en veille lorsque ses piles fournissent une tension trop basse.  On mentionne très souvent le 1381J de Panasonic (à peu près introuvable depuis qu'il a été retiré du marché, il y a de nombreuses années) ou le TC-54 de Microchip.  Je n'ai rien qui ressemble à ça dans mes tiroirs pour l'instant.

Une autre solution consiste à utiliser une LED clignotante ("FLED" pour "Flashing Light Emitting Diode").  Je n'en ai pas non plus:  pour dire la vérité, je ne savais même pas qu'il était possible de se procurer des LEDs qui clignotent par elles-mêmes lorsqu'on les alimente avec une tension continue.

J'ai l'intention de tester les deux les deux options précédemment mentionnées lorsque j'aurai acquis le matériel nécessaire.  En attendant, j'ai dû me contenter de l'option réputée la moins efficace et la plus difficile à faire fonctionner:  un circuit comportant une diode zener.

Voici le circuit, dont je ne suis évidemment pas l'inventeur.  Le schéma est tout droit sorti du site Solarbotics.net.  J'ai utilisé une diode zener dont le numéro est IN5224 (tension de claquage de 2,8 V) et j'ai remplacé la résistance de 2,2 kΩ par un potentiomètre de 5 kΩ.  Vous pouvez facilement remplacer les transistors par d'autres modèles équivalents (BC327 et BC337, par exemple), et vous pouvez diminuer un peu la capacité du condensateur.

Résultat:  en plein soleil, mon moteur tourne rapidement et de façon continue.  Sous une intensité lumineuse un peu moins élevée, le moteur tourne par impulsions (environ un demi tour rapide, suivi d'une seconde de repos), mais à la condition de régler le potentiomètre à une position différente.   Ça correspond assez bien au reproches que j'avais lus concernant ce circuit:  il faut modifier les réglages aussitôt qu'on change de moteur ou que les conditions d'éclairage sont modifiées (on dit que les circuits comportant une LED clignotante ou un superviseur de tension supportent mieux ces changements:  je vous en reparlerai).

Si vous désirez lire mes autres articles sur l'alimentation d'un moteur électrique par énergie solaire:
Circuit à base de LED clignotante
Solar Miller Engine

Yves Pelletier (Twitter: @ElectroAmateur)

jeudi 4 avril 2013

Une boîte de circuits intégrés en vrac

Je me suis récemment procuré
une "Box of ICs" du distributeur américain Electronic Goldmine.  Il s'agit d'une petite boîte contenant au minimum une cinquantaine de circuits intégrés en vrac (vous savez ce que vous avez acheté uniquement au moment où vous ouvrez la boîte).

Je dévoile ici le contenu de la boîte que j'ai reçue, au cas où ça pourrait être utile à quelqu'un qui hésite à en acquérir une...

Je précise que j'ai profité d'une "vente VIP":  pendant quelques jours, la boîte était offerte à $5 au lieu du prix régulier de $10.  De plus, l'ajout de cette boîte aux autres articles que j'ai commandés n'a eu aucun impact sur les frais d'expédition (qui sont de $10,50 pour les clients canadiens).  Par comparaison, leur "Super Electronic Surprise Box" est vendue au prix de $8, mais les frais d'envoi grimpent à $35 aussitôt que vous en ajoutez une à votre commande...


Ma boîte contenait 68 circuits intégrés.  À environ 7 cents par puce, c'est effectivement très économique (9 fois moins cher que si je les avais achetées à l'unité du même fournisseur).  Par contre, j'aurais espéré un peu plus de variété:  la sélection est constituée de tout au plus une douzaine de modèles différents, avec 6 ou 7 exemplaires d'un même modèle (la duplication demeure somme toute raisonnable, j'ai quand même évité l'écueil des lots en vrac contenant des centaines de composants identiques).

L'avenir dira si un nombre appréciable de ses composants me sera utile ou non.  Une chose est certaine, je vais passer quelques heures agréables à étudier et expérimenter leur fonctionnement.

Contenu de ma "box of ICs"
Numéro Quantité Description
 SN74LS645N     7  Octal bus transceiver
 SN74LS245N    6  Octal bus transceiver
 SN74LS629N    7  Voltage Controlled Oscillator
 SN74LS174N    10  Hexadecimal D-Type Flip-flops
 SN7445N    7  BCD to decimal decoder/driver 
 SN74175N    3  Hex D-Type Flip-flops 
 SN74367AN    5  Hex bus driver with 3 states output 
 SN74LS193N    3  4 bit binary up-down counter
 MC74HC165N    9  Serial output shift register 
 SN74s374N    3  Octal D-type flip-flops 
 DM74LS166N    5  Parallel in serial out shift register 
 SN74160N    1  Synchronous 4 bit counter 
 MC74CHT244N    1  Octal 3-states non-inverting buffer 


Yves Pelletier (Twitter: @ElectroAmateur)