iznobe
Posts: 88
Joined: Sun Feb 05, 2017 4:14 pm

[ RESOLU ] script brancher un ventilateur PWM fonction de la temperature du processeur

Fri Jul 12, 2019 2:40 pm

Bonjour ,

je me demandais si il existait deja un tuto tout pret pour brancher un ventilateur en PWM et donc gerer la vitesse de celui-ci en fonction de la temperature du processeur : genre 3 paliers idle , midle et high , apres moulte recherche je n' ai pas trouvé , pourtant ca me parait etre un " truc basique " :?

je sais deja qu ' avec la commande :

Code: Select all

/opt/vc/bin/vcgencmd measure_temp
on recupere la temperature du proc .
il ne reste plus qu ' a faire un ptit script genre si moins de 50 ° vitesse basse , si plus de 50 ° = vitesse moyenne , si plus de 65 ° vitesse rapideet de brancher le tout , cela m' etonne que ca ne soit pas deja fait .
Last edited by iznobe on Fri Jul 19, 2019 2:09 pm, edited 1 time in total.


iznobe
Posts: 88
Joined: Sun Feb 05, 2017 4:14 pm

Re: brancher un ventilateur PWM en fonction de la temperature du processeur

Wed Jul 17, 2019 8:51 am

Bopnjour et merci pour ce lien :) que je n' avais pas trouve .

Effectivement ce que je cherche est quelquechose d' approchant , a une difference pres , dans son schema il utilise ( a priori ) un ventilateur sans entree PWM et le transforme .

Je cherche donc un objectif similaire , mais avec un ventilateur 4 broches ( une ne sert pas puisque c ' est un retour d' info je crois ) .

Mon ventilateur est alimente en 12 volts ( + et - ) actuellement le fil PWM est aussi cable sur le 12 V directement , et donc il tourne a fond en permanence .
j ' ai aussi teste de cabler le PWM sur le + 5 VOLTS, mais si je fais du surf internet , il ne refroidis pas assez :( surtout si je m ' acharne sur la souris :lol:

j ' ai chercher pas mal de temps et n ' ai rien trouver ( en francais ) d' interressant :cry:

j ' ai fait une ebauche de script bash qui me recupere la temperature du pi , mais je n' arrive pas a transferer la gestion PWM en bash , normal vu que je n ' y connais pas grand chose :?

voici l' ebauche de code :

Code: Select all

#!/bin/bash

#gpio -g mode "12" OUT

while [ 1 ] ; do # recup temperature
	temp=$(/opt/vc/bin/vcgencmd measure_temp)
	temp=${temp:5:2} # enleve les 5 premieres caracteres et garde les 2 suivants
	#echo "$temp"
	if [ $temp -gt 50 ] ;	then # si temp plus grand que
		echo "la temperature est de $temp"
	fi
	sleep 5
done
en suite il suffirait de dire que si la temperature est plus grande que 50 = > on envoit 50 % en PWM au ventilo
si > que 65 => 75 %
si > que 80 => 100 %

mais je n' est pas trouve en bash comment gerer la PWM .

par contre j ' ai trouve en python comment gerer la PWM :) mais pas comment recuperer la temperature :mrgreen:

Code: Select all

#!/usr/bin/env python
# coding: utf-8
# -*- coding: utf-8 -*-

import os
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)  # notation BCM
pin = 12  # équivalent de GPIO 18
GPIO.setup(pin, GPIO.OUT)  # pin configurée en sortie

pwm = GPIO.PWM(pin, 50)  # pwm à une fréquence de 50 Hz

rapport = 50       # rapport cyclique initial de 50%
pwm.start(rapport)

temp=0

while True:
    
    time.sleep(2)
    
    os.system('/opt/vc/bin/vcgencmd measure_temp')
    #print eval (str ( os.system ('/opt/vc/bin/vcgencmd measure_temp') ) )
    print temp
    
    if temp <= 50 :
        pwm.ChangeDutyCycle(float(35))
    elif temp <= 60 :
        pwm.ChangeDutyCycle(float(55))
    elif temp <= 70 :
        pwm.ChangeDutyCycle(float(75))
    else :
        pwm.ChangeDutyCycle(float(100))

    print "Rapport cyclique actuel: " , rapport
je recupere une erreur de type de variable sur la temperature ...et je n' arrive pas a recuperer la variable du retour commande .

iznobe
Posts: 88
Joined: Sun Feb 05, 2017 4:14 pm

Re: brancher un ventilateur PWM en fonction de la temperature du processeur

Wed Jul 17, 2019 9:26 am

voici le script pyhton nettoye ;)

Code: Select all

#!/usr/bin/env python
# coding: utf-8
# -*- coding: utf-8 -*-

import os
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)  # notation BCM
pin = 12  # équivalent de GPIO 18
GPIO.setup(pin, GPIO.OUT)  # pin configurée en sortie
temp=0

pwm = GPIO.PWM(pin, 50)  # pwm à une fréquence de 50 Hz

rapport = 35       # rapport cyclique initial de 50%
pwm.start(rapport)

while True :
    time.sleep(1)
    temp = os.system('/home/pi/projets_auto/nouvelle/vrac/bash/recup_temp.sh') 
    # impossible de mettre la valeur de la commande bash dans la variable temp ici 

    print "la temperature est de : " ,temp
    if temp <= 50 :
        pwm.ChangeDutyCycle (float (35) )
        rapport = 35
    elif temp <= 60 :
        pwm.ChangeDutyCycle (float (55) )
        rapport = 55
    elif temp <= 70 :
        pwm.ChangeDutyCycle (float (75) )
        rapport = 75
    else :
        pwm.ChangeDutyCycle (float (100) )
        rapport = 100

    print "Rapport cyclique actuel: " , rapport
et le bash qui va avec nettoye aussi :

Code: Select all

#!/bin/bash

#gpio -g mode "12" OUT

function recup_temp {
	temp=$(/opt/vc/bin/vcgencmd measure_temp)
	temp=${temp:5:2} # enleve les 5 premieres caracteres et garde les 2 suivants
	sleep 5

	return $temp;
}

while [ 1 ] ; do # recup temperature
	recup_temp
	echo $temp;
done

jelopo
Posts: 1477
Joined: Wed Oct 17, 2012 7:53 pm

Re: brancher un ventilateur PWM en fonction de la temperature du processeur

Thu Jul 18, 2019 11:42 am

Bonjour,

Il y a différentes méthodes pour lire la température sous Python dont celle-ci
https://gpiozero.readthedocs.io/en/stab ... emperature

Code: Select all

from gpiozero import CPUTemperature
print(cpu.temperature)
N.B.: la notation de la température se fait avec un nombre flottant (float séparé par un point). Pas de problème Python sait l'interpréter directement.

A+

iznobe
Posts: 88
Joined: Sun Feb 05, 2017 4:14 pm

Re: brancher un ventilateur PWM en fonction de la temperature du processeur

Thu Jul 18, 2019 3:01 pm

Salut ,

merci beaucoup , je vais peaufiner tout ca alors :D

iznobe
Posts: 88
Joined: Sun Feb 05, 2017 4:14 pm

[ SCRIPT ] brancher un ventilateur PWM fonction de la temperature du processeur

Fri Jul 19, 2019 7:57 am

Bonjour , grace a votre aide , j' ai pu finir le script qui permet de gerer la vitesse de ventilation ;)

voici ce que j ' ai fait ( ca reste basique mais ca fonctionne et c ' est facile a comprendre ;) )

Code: Select all

#!/usr/bin/env python
# coding: utf-8
# -*- coding: utf-8 -*-

#import os
import RPi.GPIO as GPIO
import time
from gpiozero import CPUTemperature

GPIO.setmode(GPIO.BCM)  # notation BCM
pin = 24  # équivalent de pin 18 physique
GPIO.setup(pin, GPIO.OUT)  # pin configurée en sortie
temp=0

#To create a PWM instance:
#p = GPIO.PWM(channel, frequency

#To start PWM:
#p.start(dc)   # where dc is the duty cycle (0.0 <= dc <= 100.0)

#To change the frequency:
#p.ChangeFrequency(freq)    # where freq is the new frequency in Hz

#To change the duty cycle:
#p.ChangeDutyCycle(dc)  # where 0.0 <= dc <= 100.0

#To stop PWM:
#p.stop()

pwm = GPIO.PWM(pin, 50)  # creation PWM à une fréquence de 50 Hz
rapport = 50       # rapport cyclique initial de 50%
pwm.start(rapport)

print "le pin PWM utilise est le :", pin, ". Demarrage avec un rapport de : ", rapport

while True :
    cpu = CPUTemperature()
    temp = cpu.temperature
    print "la temperature est de : " ,temp
    
    if temp <= 65 :
        rapport = 50
    elif temp <= 70 :
        rapport = 65
    elif temp <= 75 :
        rapport = 80
    else :
        rapport = 95
        
    
    pwm.ChangeDutyCycle (float (rapport) )
    print "Rapport cyclique actuel : ", rapport
    time.sleep(5)
    #rapport = raw_input ("Rapport cyclique désiré:  ") # permet d' entree une valeur 
    #pwm.ChangeDutyCycle(float(rapport)) # permet de prendre en consideration l ' entree d' entree
    
gpio.cleanup()
comme le mien a une facheuse tendance a chauffer , je me suis cantonne a une plage de temperature haute , et des vitesse haute , libre a vous de modifier a votre convenance ;)

Merci jelopo !

Return to “Français”