realisations:arduino:vu_metre

Vumètre

J'ai réalisé un montage avec un Arduino pour utiliser des vumètres analogiques afin de représenter des mesures de l'activité de Homelab telles que le taux d'occupation des disques et l'indicateur de charge (uptime) sur les dernières minutes.

Un vumètre est un appareil de mesure doté d'une aiguille qui se déplace proportionnellement à la tension ou au courant qui le traverse. Il était principalement utilisé dans les multimètres analogiques.

Vumètre analogique
Agrandir
Vumètre analogique

La sortie analogique d'un Arduino peut varier de moyenne de 0 à 5V à l'aide de la fonction digitalWrite(). L'aiguille se déplace vers la droite proportionnellement à la tension et de manière linéaire. Ainsi, une valeur de 2.5V déplace l'aiguille au milieu et 5V tout à droite.

Les sorties analogiques 9, 10 et 11 de l'Arduino sont chacune reliées à un vumètre via une résistance de $470\ Ω$.

Schéma de câblage
Agrandir
Schéma de câblage

Pour faciliter le câblage, j'ai mis en commun les 3 masses et soudés sur un module sécable les 3 entrées pour les relier sur la breadboard de l'Arduino.

Vue de dessus
Agrandir
Vue de dessus

Pour l'affichage du taux d'occupation des disques, une échelle linéaire est idéale : un disque rempli à 20% provoque un déplacement de l'aiguille sur la graduation 0.2.

Lors de l'achat des vumètres, je n'ai pas fait attention à la valeur des graduations qui sont en milli ampère, mais ce n'est pas grave, car je les ai re-dessiné avec inkscape. J'ai dessiné un arc de cercle correspondant au déplacement de l'aiguille gradué de 0 à 100%. Après quelques essais de taille et d'arrondis, j'ai collé la nouvelle échelle sur le fond, derrière l'aiguille afin de changer la signification du déplacement.

La valeur de l'uptime est un peu plus difficile à matérialiser. La plupart du temps, la valeur de la charge oscille entre 0 et 1 mais en cas de forte sollicitation, elle peut monter jusqu'à 9 voire plus. J'ai cherché à afficher sur la moitié du cadran une valeur inférieure à 1 et sur l'autre moitié, les valeurs de 1 à 9. Une échelle logarithmique est tout adaptée à ce type de représentation. En tâtonnant un peu, la formule utilisée est : $$ valeur = (\frac{log(0.01 + load^2)}{4*log(10)} + \frac{1}{2})*100 $$

La valeur finale est contrainte en 0 et 100 à l'aide des fonctions max et min.

En reprenant l'échelle graduée dessinée précédemment mais en changeant les marques sur l'arc de cercle, un déplacement de la moitié du cadran de l'aiguille correspond à un load de 1.

Les 3 vumètres sont fixés sur une plaque de plexiglas que j'ai découpé et ajusté à la boite contenant l'Arduino ainsi que l'afficheur LCD.

Voici l'assemblage final avec les afficheurs de la gauche vers la droite :

  • Taux d'occupation des disques
  • Valeur de la charge à 1 minute
  • Valeur de la charge à 5 minutes
Nouvelle échelle de graduation
Agrandir
Nouvelle échelle de graduation

J'ai enrichi le sketch Arduino pour ajouter des nouvelles commandes disk, load1 et load5 recevant une valeur de 0 à 100 correspondants à la position de l'aiguille : 70 déplacera de 70% l'aiguille vers la droite.

Exemple une fois connecté sur le moniteur série :

> load1 50
OK

> load5 30
OK

> disk 70
OK

Côté serveur, j'ai écrit un script perl appelé toutes les 10 min par un cron permettant de calculer les différentes valeurs à envoyer à l'Arduino.

Une dernière commande stats accepte en paramètre toutes les valeurs d'un seul coup :

  • charge à 1 min
  • charge à 5 min
  • taux d'occupation
> stats 50 30 70
OK

Voici le montage final intégré dans la boite en bois et installé dans le garage à côté de Popeye.

Vumètres installés
Agrandir
Vumètres installés

Malheureusement, ce n'est pas très lisible : la pièce ne bénéficie pas d'une luminosité importante et l'ensemble est placé en hauteur.

  • realisations/arduino/vu_metre
  • Dernière modification : 2026/04/23 13:59