Publié le 12 septembre 2020 - par

Piloter un ventilateur de Raspberry Pi en PWM

Christian a déjà écrit de nombreux articles pour le blog. Cette fois il nous propose de réguler un ventilateur en PWM. Il s’est inspire d’une carte ArgonFanHAT qu’il a achetée chez Kubii. Son montage et son programme pourront s’adapter à divers ventilateurs sans problème.

Réguler la vitesse du ventilateur d’un Raspberry Pi en PWM

Christian m’a envoyé ce message il y a quelques jours : « J’ai acheté la ArgonFanHAT chez KUBII qui fonctionne très bien sur un PI3B+. Mais pourquoi ne pas réguler son ventilateur en PWM par un petit script lancé dans autostart : Voulez vous un petit article sur ce sujet avec le soft et l’interface avec le ventilateur ? Quatre de mes raspi en sont équipés et le ventilo ne tourne plus tout le temps !!« 

Ce que j’ai bien entendu accepté et voici donc cet article de Christian.

Objectif de la réalisation

Le but est de commander le ventilateur du Raspberry selon la température de son CPU.
On va utiliser un port GPIO configuré en PWM pour faire varier sa vitesse.


Comme le GPIO ne peut fournir le courant necessaire au ventilateur, on utilise un transistor darlington, le BC517,  en interface.

BC517

Schéma

Caractéristiques

Type de boîtier : TO-92
Type de transistor : NPN Darlington
Courant collecteur maximal (Ic) : 1,2A
Tension maximale collecteur-émetteur (VCE) : 30V
Tension maximale collecteur-base (VCB) : 40V
Tension maximale base l’émetteur (VEBO) : 10V
Dissipation maximale au collecteur (Pc) : 625 miliWatt
Fréquence de transition maximale (fT) : 200 MHz
Gain en courant continu (hFE) : 30000
Température maximale de stockage et de fonctionnement : -55 à +150 °C

Le montage de régulation

Ce qui traduit en schéma plus classique donne ceci :

Et une fois câblé sur une plaquette de prototypage

Le GPIO sera programmé par un Script en Python lancé au démarrage. Ce Script permet également d’avoir un bouton d’arrêt propre qui va provoquer un ShutDown et terminer normalement et sans danger l’exécution du système d’exploitation.

Le Script ShutD2.py :
J’utilise le GPIO-18 en PWM et GPIO-26 pour le ShutDown
La variable FANwait = 10 permet de mettre une hysthérésie de 10s dans la boucle
Les températures et vitesses sont à adapter dans la liste cnf :

  • < 50°C  Arrêt
  • >=50°C et <53°C vitesse 1
  • >=53°C et <58°C vitesse 2
  • >=58°C vitesse 3

Pour lancer au démarrage avec autostart :
Créer le fichier :

sudo nano /home/pi/ShutD2.sh

Lui donner les droits :

sudo chmod +x /home/pi/ShutD2.sh

Puis déclarez le dans autostart :

sudo nano /home/pi/.config/autostart/Lxinput-setup.desktop

Programme Python de régulation du ventilateur en PWM

 

Script ShuD2.py

Vous pouvez télécharger le programme au format .zip en cliquant sur ce lien.

Tester le programme en « chargeant le Raspberry Pi

Pour tester ce programme et son fonctionnement, il faut faire travailler le Raspberry Pi. en utilisation normale (c’est quoi normal ?) ce fainéant n’en fout pas une et on a parfois du mal à faire monter sa température. Christian a écrit un programme de test en Python que vous pourrez bien entendu utiliser pour tester d’autres radiateurs, refroidisseurs, ventilateurs etc. sur le Raspberry Pi ! Vous pouvez le télécharger en cliquant sur ce lien.

Le programme Test-Charge est en mode graphique et intègre matplotlib en canvas tkinter

Modules nécessaires :

  • matplotlib
    sudo pip3 install matplotlib
  • psutil
    sudo pip3 install psutil
  • stress
    sudo apt-get install stress

Les graphes sont en moyenne glissante sur 3 points et mise à l’échelle automatique

Limites de température :

  • <55 °C Affichage en vert
  • >= 55 °c Affichage en magenta ligne –
  • >= 60 °c Affichage en rouge ligne –
  • >=70 °c Affichage en rouge ligne pleine

Cycle en S

temps entre chaque acquisition en secondes
si 0, fixé à 0.1
modifiable en live si en MANUEL

Bouton MANUEL

Lance acquisition selon le cycle
vous pouvez modifier la charge en live avec les options de stress
Affichage du graphe tous les 10 points
On peut arreter à tout moment

Bouton AUTO

lance une acquisition de 100 points selon Cycle pour chaque séquence de charge :
charge 0, charge 25, charge 50, charge 75, charge 100, charge 0

Indique le temps restant

  • si Cycle=0 durée #11 minutes
  • si Cycle=1 durée #20 minutes
  • si Cycle=2 durée #30 minutes

Affichage du graphe à la fin, on peut arreter à tout moment

Bouton ENREGISTRER

Définir un nom de fichier seul sans extension…..il sera Horodaté

Enregistre le graphe présent en JPG

ShutD2 Test-Charge

Conclusion

Une nouvelle fois un grand merci Christian pour ces exemples très pratiques de développement destiné à améliorer l’expérience utilisateur sur le Raspberry Pi, tout en fournissant une approche de l’électronique et de la programmation.

 

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

12 réflexions au sujet de « Piloter un ventilateur de Raspberry Pi en PWM »

    1. CDBI72

      Michel,
      Bien sûr la carte argone a un logiciel de commande
      qui fonctionne très bien , mais assez lourd et qui crée des raccourcis sur le bureau.
      Le Raspi, c’est pour essayer de tout faire sois-même.
      D’où l’idée de coupler la régulation du ventilateur avec la gestion d’un bouton de ShutDown
      que j’utilise depuis longtemps sur tous mes Raspi

      Répondre
  1. Gordon

    Salut à tous.

    J’ai fait l’acquisition de deux Argon FanHat pour mes deux RPi 4B/8G et je peux vous assurer qu’ils sont très silencieux et performants.
    Même en poussant à l’extrême (stress) la raspberry, la température ne dépasse jamais, chez moi, les 50°C.

    J’ai configuré l’Argon FanHat selon les paramètres suivants : 35°C / 25% – 45°C / 50% – 55°C / 75% – 65°C / 100%.
    Je me contente du script python d’Argon qui répond bien à mon attente.
    Le but du paramétrage est d’avoir parfois des arrêts du ventilateur quand la température est faible.

    Par PWM, je suppose que tu voulais dire faire varier le ventilateur autrement qu’en 25%, 50%, 75% et 100%.
    Ton projet électronique est fort intéressant, mais je ne vois pas en quoi une meilleure précision de la vitesse du ventilateur apporte un plus.

    Je n’ai pas compris, à partir de ton schéma, comment effectues-tu le montage sur la raspberry ?
    Je suppose que l’Argon FanHat est positionné dans les 40 broches des GPIO de la raspberry.
    Je ne comprends pas où se branche ta sortie « 1 » sur l’Argon FanHat.

    En regardant ton prototypage, je vois les résistances et le transistor, mais où se trouve le condensateur ? Il a totalement disparu.
    De même, on doit deviner à quoi correspond les trois pins de ton prototypage.
    En fait, il manque la photo du dessous de ton prototypage.

    Tu utilises la GPIO-26 pour le ShutDown.
    Comment cela se traduit dans ton schéma ou dans ton prototypage ?
    Je ne vois aucun bouton poussoir. Est-ce un autre oubli ?
    Ou bien, est-ce un autre montage, entre la gpio 26 et la masse ?
    Pas de résistance pull-up externe car tu utilises celui interne à la raspberry.

    Pas de reboot comme dans la version python d’Argon ? Et pourtant, c’est très utile.

    Je ne connais pas du tout le transistor Darlington.
    Vis-à-vis d’un transistor bipolaire comme le BC327-40, qu’apporte-t-il en plus ?
    Le symbole du condensateur n’est pas celui classique des deux branches parallèles.
    Dois-je comprendre que c’est un condensateur polarisé ?

    Le script python d’Argon FanHat est de 99 lignes.
    Tu dis qu’il est lourd, mais ton script ne possède pas toutes les fonctionnalités que propose Argon.
    Par exemple, pas de fichier de configuration, pas de reboot.

    Est-il envisageable d’utiliser le bouton poussoir, en plus du shutdown et du reboot, pour démarrer la raspberry quand il est à l’arrêt ?

    @+

    Répondre
  2. CDBI72

    Bonjour à tous,
    Bon, je vois qu’il y a toujours confusion:
    Je n’ai pas voulu remplacer le soft de la Fan HAT….je m’en suis inspiré.
    j’ai plein de Raspi avec des ventilateurs car ils sont en boitier (certains à l’extérieur)
    Je ne vais pas acheter 10 FanHAT (Chère !…le prix d’un Raspi)
    En plus, on ne peut mettre d’autres HATs (connecteur Femelle)….c’est la cata
    J’avais déjà un script lancé au démarrage pour le ShutDown sur tous mes raspi
    Je lui ai simplement ajouté la commande du ventilateur en thread
    GORDON:
    installer le soft Argon sur un PI qui ne sert qu’à remonter des capteurs sur le réseau est « LOURD »
    J’ai supprimé le condo chimique de 47 µF
    WYATT:
    Pour le câblage…OK (de haut en bas sur la photo)
    un 2n2222 n’a pas assez de gain en courant pour commander 200mA à partir d’un port
    d’où le Darlington
    Arduino….j’ai pas et un « autre programme » ???

    Répondre
  3. Wyatt

    Bonjour,
    Je préfère tester sur un arduino à 2€ que sur mon pi … j’imagine que si sa marche sur l’arduino (avec 2n2222 (lent)) ça devrait marcher aussi avec le darlingtion… je vais re-re-refaire le montage on verra…
    Merci de la réponse au moins je ne me suis pas trompé dans la connexion

    Répondre
  4. mcnico

    Bonjour, merci pour ce partage.
    De mon côté, j’ai un RasPi 3b+ en boîtier avec un petit ventilateur 30mm monté via un transistor comme vous.
    J’ai fait un petit script pour que le ventilateur s’enclenche à 52°C et s’éteigne à 48°C.
    Je partagerai ce script avec grand plaisir si vous le souhaitez.
    Bonne continuation.

    Répondre
  5. ericb

    Bonjour,

    Je viens d’acheter un RPi 4 pour faire des mesures thermiques, et je découvre les problèmes de refroidissement. L’article est très clair, et je commence à voir ce qu’on peut faire.

    Par contre, je n’ai pas compris pourquoi c’est lent avec un 2N2222 par rapport à un darlington.

    Je sais bien que le courant est moindre, mais sinon, il doit se saturer/désaturer très vite .. qu’est ce que je n’ai pas compris ?

    Merci d’avance 🙂

    Répondre
  6. Ping : Un lanceur IP pour le Raspberry Pi - Framboise 314, le Raspberry Pi à la sauce française....

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.