NESPI :Fan Control 2 problèmes résolus en même temps



  • Je suis tombé par hasard sur cette page, dont je vous donne les coordonnés :
    https://hackernoon.com/how-to-control-a-fan-to-cool-the-cpu-of-your-raspberrypi-3313b6e7f92c

    C'est le contrôle du ventilateur en relation avec la température de la CPU. Si je règle celle-ci a 60°, le ventilateur va juste démarrer quand la température sera atteinte, et stopper à nouveau quand la température va tomber en dessous de 55°. Je trouve cette solution excellente, d'autan plus que cela résoud le problème du switch on/off du NESPI Case. Parceque après un soft shutdown, le ventilateur va stopper aussi et ainsi la boîte sera en mode veille. Il y a quelques erreurs de syntaxe dans le programme affiché, j'ai dû me mettre dans phyton for dummies pour corriger.
    Mais avant encore autre chose.
    La fiche du Nespi sur le Gpio occupe tout de suite 10 pins ! Alors, solution, enlever soigneusement les fils en soulevant les petites languettes avec une aiguille et faire la même chose avec le connecteur du ventilateur. Et la case à 2pin, on met les fils + et - du Nespi. Pour le ventilateur on peut utiliser des cases de fils individuels comme livrés pour Arduino. J'utilise ici de mème un de ces fils pour me connecter à GPIO18.
    Donc une petite platine sert comme adaptateur pour le contrôle du ventilateur.
    alt text
    alt text



  • Pour les modifications. En fait le sleep ne fonctionnait pas et il faisait la mesure en temps réel aulieu de la faire toutes les quelque secondes. Ce qui bouffait du temps CPU et faisait monter la température....
    Maintenant cela fonctionne très bien et en mode repos allumé (sans jeu actif) le ventilateur se met en route de temps en temps seulement. Si on enlève le # devant print, il écrit la température à chaque lecture avec putty.

    #!/usr/bin/env python3
    # Author: Edoardo Paolo Scalafiotti
    import os
    from time import sleep
    import signal
    import sys
    import RPi.GPIO as GPIO
    pin = 18 # The pin ID, edit here to change it
    maxTMP = 60 # The maximum temperature in Celsius after which we trigger the fan
    def setup():
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(pin, GPIO.OUT)
        GPIO.setwarnings(False)
        return()
    def getCPUtemperature():
        res = os.popen('vcgencmd measure_temp').readline()
        temp =(res.replace("temp=","").replace("'C\n",""))
        #print("temp is {0}".format(temp)) #Uncomment here for testing
        return temp
    def fanON():
        setPin(True)
        return()
    def fanOFF():
        setPin(False)
        return()
    def getTEMP():
        CPU_temp = float(getCPUtemperature())
        if CPU_temp>maxTMP:
            fanON()
        if CPU_temp<maxTMP-5:
            fanOFF()
        return()
    def setPin(mode): # A little redundant function but useful if you want to add logging
        GPIO.output(pin, mode)
        return()
    try:
        setup() 
        while True:
            sleep(5) # Read the temperature every x sec, increase or decrease this limit if you want
    	getTEMP()
    except:
    	GPIO.cleanup() # resets all GPIO ports used by this program
    


  • interessant, comment l'integrer dans recalbox ?



  • @cissou
    Au risque de me faire tuer par @Substring....
    J'ai d'abord crée un sub-directory /recalbox/share/myscripts/ et j'ai copié le script d'au dessus sous le nom de run-fan.py dans cet directory.
    Après, pour avoir le script qui s'execute à chaque démarrage de Recalbox, j'ai fait une modification sous ssh dans /etc/init.d et spécifiquement le fichier S99custom, et ajouté une ligne

    #!/bin/bash
    
    python /recalbox/share/myscripts/run-fan.py
    
    test -e "/recalbox/share/system/custom.sh" && /recalbox/share/system/custom.sh $1
    

    C'est tout. Et je vais surement rien bricoler aux boutons du Nespi, puisque le Reset comme il est, est très utile pour redémarrer un PI en sommeil. Ou est ce-que quelqu'un a déja pensé que dans ce cas aucun script n'est executé et un bouton trafiqué n'a plus aucun effet ?



  • @dragu said in NESPI :Fan Control 2 problèmes résolus en même temps:

    Au risque de me faire tuer par @Substring....

    pas du tout, bonne trouvaille, et plutôt bien intégré :)



  • @Substring
    Je vais peut-être intégrer le script aussi dans mon bartop, avec un Mosfet du genre IFR620 (5A) au lieu du transistor S8050 (500mA).
    Avantage, tu peut faire tourner un ventilateur 12Volt à partir du PI, comme le IFR620 switch entre 2-4V déja. En général j'utilise le IRLML2502(4A), mais plus difficile à souder, si l'on est pas équipé smd.



  • Petite rajoute, pour l'appel du script, dans (S99custom), il faut rajouter un "&" à la fin pour ne pas être en conflit avec le shutdown et le reboot à partir de ES.

    #!/bin/bash
    
    python /recalbox/share/myscripts/run-fan.py &
    
    test -e "/recalbox/share/system/custom.sh" && /recalbox/share/system/custom.sh $1
    


  • ça marche très bien chez moi avec un autre ventilateur (en 5V).

    Par contre, ce petit ventilateur est très bruyant. J'ai donc modifié un peu le code pour faire du PWM manuel et le ralentir un peu, pour éviter qu'il ne se lance à pleine vitesse une fois les 60°C dépassés.

    Question : est ce que cette méthode peut impacter les performances ? Car envoyer 40 impulsions par secondes au ventilateur, ça doit manger quelque peu la puissance du CPU non ?



  • Voici le code que j'utilise pour ne pas lancer le ventilateur à pleine vitesse :

    Par ailleurs, si je n'arrive pas à faire un code qui permette que :

    • le ventilateur s'allume à faible vitesse à 60°C jusqu'à ce que la température redescende à 55°C.
    • le ventilateur s'allume à pleine vitesse à 70°C jusqu'à ce que la température redescende à 55°C.

    j'ai essayé en faisant :

    mais ça ne marche pas... des idées ?



  • Un premier problème existait déja au niveau du programme initial, puisque le sleep (5) que j'ai modifié en sleep (8) ne fonctionnait pas, or le ventilateur marchait correctement. Seulement il demandait la température tout le temps, ce qui bouffait d'énormes ressources au niveau des cores. Bref, le PI s'échauffait à cause du programme. :)
    Ton "PWM" ne peut pas marcher, je pense à C. Tu start et tu interrompt le courant tous les 5/100 de secondes. Mais tu oublis qu'il est endormi pendant cet temps là pendant 5 secondes. Un Soft PWM au niveau d'un uP ne pose pas de problème, alors qu'il n'a que cela a faire. J'utilise un prog. PWM comme Fader pour mes boutons, mais sur un Attiny13. Le Pi ne va pas digérer si tu enleve le sleep (5 ou 8).
    La ligne
    python /recalbox/share/myscripts/run-fan.py &
    je l'ai mise maitenant au niveau du script custom.sh



  • Ben en fait le PWM fonctionne dans la première version du programme que j'ai postée au dessus. Mais si je rajoute des "if" pour qu'il se comporte différement en fonction de la T° (deuxième version du programme), le ventilo ne se lance plus du tout quelle que soit la T°.

    Je pense que je vais me refaire une version de ce programme à partir de 0, en faisant simplement une grande boucle "while true" avec des "if" à l'intérieur pour chaque intervalle de T° et un sleep=5 tout en bas pour éviter la surcharge CPU.

    Si j'arrive à un truc qui fonctionne je le posterai ici.

    @Dragu comment tu fais pour poster le code comme tu l'as fait en haut de ce topic ? Désolé je débute autant en Raspberry qu'en forums ^^



  • @kantoulf
    Pour le code sur fond noir il faut faire 3x "`" au début et la même chose à la fin. C'est plus pervers que du Bbcode. :)
    Pour le reste, tu vas voir toi même que cela bouffe trop de ressources. Alors une solution plus simple, si le bruit te dérange, utiliser les petits circuits chinois stepdown 5V --> 3,3V (ne pas alimenter en 3,3V à travers les pins du PI)
    Dans ma case NESPI noir, je n'entend pas beaucoup du bruit. Il faut encore dire qu'il y a une variété de ventilateur sur le marché, beaucoup dépend du design des pales.



  • Ok merci ! Je vais essayer la méthode du stepdown ! ça sera surement moins galère que le PWM, et ça tirera effectivement moins sur le CPU. Je vais même peut-être essayer de faire un circuit qui alimentera en 3,3V entre 60 et 70°C et 5V si la température dépasse 70°C. ça serait l'idéal...



  • @kantoulf
    Si tu veux avoir la version Ventiluxe, tu pourras utiliser 2 pins. Un pour switcher 3,3Volt et un pour switcher 5V. Il faudra juste prévoir une diode >500mA dans la sortie des 3,3V pour ne pas le courtcircuiter. Sens vers le Ventilo dans la sortie +3,3V.
    Tu m'as maintenant incité à essayer une nouvelle perversité avec le Nespi, pas Ventilo. ;)



  • En fait je viens de découvrir qu'il y'avait un pin d'alimentation en 3,3V sur le raspberry (je vous avais dit que je débutais ^^). J'ai branché le système dessus, et ça marche très bien.

    La T° fluctue entre 55°C et 60°C et le système est très silencieux. Donc je pense que je vais abandonner le système avec un circuit en 5V et l'autre 3,3V.



  • @kantoulf
    C'est ton risque. Comme j'ai écris autrepart le fabricant limite les pins 3V3 à 50mA. Tout les PI avant le PI3B ne vont pas digèrer plus. Les B+ ont une alimentation différente 250mA pour tout ! les pins. Alors avec 200mA pour le fan, il reste plus grande chose.



  • Ha ok, je pensais que tu disais de ne pas utiliser les GPIO pour l'alimentation ! Bon je verrais...



  • Bonjour,
    Javoue etre coincé, le script fonctionne bien mais j'arrive pas le faire s'executer au démarrage. j'ai modifier /etc/init.d/s99custom voici se qu'il contient :

    #!/bin/bash

    python /recalbox/share/scripts/ventil.py &

    Quand je lance la commande :

    python /recalbox/share/scripts/ventil.py

    Cela s’exécute bien mais si je reboot, Evidemment, plus rien !

    Merci

    PS : J'ai egalement vérifier que s99custom etait bien executable avec chmod +x s99custom



  • @EVOTk

    @dragu said in NESPI :Fan Control 2 problèmes résolus en même temps:

    La ligne
    python /recalbox/share/myscripts/run-fan.py &
    je l'ai mise maitenant au niveau du script custom.sh

    Le mieux, c'est de ne pas modifier s99custom, mais de créer un script custom.sh avec la ligne d'appel. Aussi important le "&" à la fin, pour le faire tourner en background. L'appel du script custom.sh existe déjà dans s99custom.



  • Salut,
    Merci pour ta réponse, j'ai donc editer S99custom pour le remetre d'origine.

    J'ai créer custom.sh dans share/system avec pour seul ligne :

    python /recalbox/share/scripts/ventil.py &

    Mais cela ne marche toujours pas, snif

    PS : Si une foit logger en SSH je marque :

    python /recalbox/share/scripts/ventil.py

    Cela fonctionne, c'est donc juste le lancement au démarrage qui est problématique, je ne comprend pas :(

    Edit :
    Jessaye egalement avec ceci dans custom.sh :

    #! / bin / sh
    cd /recalbox/share/scripts
    python ventil.py &

    Sa ne marche toujours pas :(



Want to support us ?

Join us on :

168
Online

28941
Users

14684
Topics

110922
Posts

Looks like your connection to Recalbox Forum was lost, please wait while we try to reconnect.