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)

19 commentaires:

  1. J'ai essayé de construire ce circuit, cependant, ne fonctionne pas. La résistance demeure la même

    RépondreSupprimer
  2. S'agit-il exactement du même modèle de potentiomètre numérique? Je crois que le message numérique à envoyer n'est pas le même d'un modèle à l'autre.

    RépondreSupprimer
  3. Très bon petit tutoriel. Je pense que c'est l'un des tutoriels idéal pour s'initier à l'Arduino (le contrôle d'une résistance c'est adapté à tous les débutants)
    Merci pour le partage.

    RépondreSupprimer
  4. Bonjour, j'aurais besoin d'un potentiomètre numérique de 220k mais je n'en trouve pas, si j'en mets deux ou trois en série commander par le même signal cela conviendrai ?

    RépondreSupprimer
    Réponses
    1. Ça me semble raisonnable, mais je n'ai jamais essayé (et je n'en ai qu'un seul, donc impossible d'essayer...).

      Supprimer
  5. Est ce que ces potentiomètres sont convenables dans un circuit 230V ?

    RépondreSupprimer
    Réponses
    1. Je ne crois pas. Généralement, le courant ne doit pas dépasser 1 mA, et la puissance maximale est de l'ordre du milliwatt.

      Supprimer
  6. Bonjour,
    Je suis débutant en électronique et j'aimerais acheté ce modèle de potentiomètre.

    J'aimerais savoir si votre modèle c'est du E/P ou I/P? Ca signifie quoi ces sigles?

    P.S: Je les ai vu sur le lien suivant: http://fr.farnell.com/Search?catalogId=15001&langId=-2&storeId=10160&categoryName=Toutes%20les%20cat%C3%A9gories&selectedCategoryId=&gs=true&st=MCP41100

    Merci d'avance pour ton aide

    RépondreSupprimer
    Réponses
    1. D'après la fiche technique (page 29), la version "I" fonctionne pour des températures allant de -40°C à +85°C, alors que la version "E" fonctionne pour des températures allant de -40°C to +125°C. Le "P" indique le format du circuit intégré (DIP dans ce cas). Donc à température de la pièce, je crois que les deux modèles sont identiques.

      Supprimer
    2. Ah ok. Merci beaucoup pour ces éclaircissement. Cela m'a beaucoup aidé.
      J'ai une question concernant un autre sujet (toujours électronique). Je ne sais pas si je dois le poster ici ou dois-je t'envoyer un mail?

      Supprimer
  7. Bonjour Yves, je te remercie pour cet excellent tutoriel. Sur ce principe combien de potentiomètres numérique est-il possible de piloter avec une carte Arduino? Peut que l'Arduino permet le multiplexage des commandes?
    merci

    RépondreSupprimer
  8. Bonjour,
    je vois que le potentiomètre ne peut prendre que 256 valeur, je demandais donc comment faire si l'on souhaite régler une résistance de manière très précis ?
    Merci

    RépondreSupprimer
  9. Thank you very much for the post! Merci!

    RépondreSupprimer
  10. Mike Descamps, vous pouvez utiliser ce potentiomètre dans un pont de 3 résistances (potentiomètre compris) afin que la valeur réglable soit beaucoup plus petite que la valeur totale des 3 résistances et ainsi le réglage sera plus fin mais pas sur l'ensemble de la résistance totale.

    RépondreSupprimer
  11. Bonjour!

    Petite question qui peut sembler bête...
    J'arrive sans problème à piloter le MCP avec mon Arduino mais j'aimerai avoir des indices pour pouvoir réaliser la chose suivante:

    mon but est de contrôler un autoradio, les commandes sont interprétés par ce dernier en fonction d'une valeur de résistance (voir http://jvde.net/node/7).
    Également, en sachant que l'autoradio envoie entre 3,3V et 5V, le MCP est-il prévu pour ça ?

    Merci d'avance !

    RépondreSupprimer
  12. bonsoir
    je suis encore un apprenti et j'aimerais réaliser ce projet pour mieux comprendre la chose.
    svp j'aimerais le schéma électronique sur proteus de ce projet

    RépondreSupprimer
    Réponses
    1. Votre majesté,

      Par quel raisonnement tordu êtes-vous arrivé à la conclusion que, puisque vous aimeriez obtenir un schéma électronique sur Proteus, c'est moi qui devrait le faire?

      J'ai rédigé un article qui contient toutes les informations nécessaires à la réalisation du projet. S'il ne vous suffit pas, veuillez SVP aller voir ailleurs.

      Veuillez agréer, votre majesté, l'expression de mes sentiments les meilleurs.

      Supprimer
  13. Bonjour et merci pour ce petit tuto.

    La question a déjà été posée, mais je n'ai pas vu de réponse. Combien de potentiomètres peut-on piloter avec une seule carte arduino? (avec une seules sortie SPI). je sais qu'il est possible de les couplés en "daisy chain", mais alors tous les potars prendront la même valeur. Je me demande s'il ne serait pas possible de tous les connecter en parallèle sur le port SPI, mais de différencier le "slaveselectpin" pour qu'un seul prenne l'ordre d'écriture de consigne. Qu'en pensez vous?

    RépondreSupprimer