• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
ventola velocità modifica

[Risolto] Modifica velocità ventola
#1
Salve a tutti, mio primo post quindi non sono certo di aver centrato la sezione corretta.
Ho acquistato una ventola per raffreddare il mio PI4
per la precisione questa https://www.waveshare.com/wiki/Fan_HAT
Funziona benissimo, ho solo un piccolo problema, vorrei modificare l'avvio della stessa sui 45 gradi invece degli attuali 40 (impostati di default).
Il file da modificare in teoria dovrebbe essere main.py all'interno della cartella Fan_Hat ma una volta cambiati i parametri, salvato e riavviato resta uguale a prima, ovvero parte appena il sensore è a 40 gradi.
Idee?
Grazie
Risposta
#2
Premesso che al di la di casi veramente eccezionali, un pi4 con firmware aggiornato non necessita di alcuna ventola (il primissimo firmware era un po' "bacato" sotto questo aspetto) ricordo che tutti i modelli di Raspberry sono progettati per funzionare tranquillamente a temperature di CPU di 50/70 gradi.
Quindi è inutile una ventole tarata a 40*, ma è inutile (sempre a mio personale parere, eh) una tarata a 45*. Dovrebbe essere 75, 80.. allora sì.

Comunque, tornando al tuo problema, è strano,
Come hai modificato lo script? Nel senso, con i permessi di sudo? magari prova così. Posta lo script o uno spezzone.

PS: ora il firmware fa questa cosa in hardware, magari è attivo e va in conflitto, verifica con sudo raspi-config.

articolo sull'argomento sul blog, per chi volesse approfondire https://www.raspberryitaly.com/ventola-si-ventola-no/
Risposta
#3
Ti ringrazio della risposta, piu della temperatura ero curioso di modificare la velocità e capire..........
La modifica è si con i permessi SU 
ti allego quello che reputo il file che gestisce la temperatura
Codice:
#!/usr/bin/python

# -*- coding:utf-8 -*-



import SSD1306

import PCA9685

import time

import traceback

import socket

import threading

import os

from PIL import Image,ImageDraw,ImageFont



try:

oled = SSD1306.SSD1306()



pwm = PCA9685.PCA9685(0x40, debug=False)

pwm.setPWMFreq(50)

pwm.setServoPulse(0,100)



# Initialize library.

oled.Init()

oled.ClearBlack()



# Create blank image for drawing.

image1 = Image.new('1', (oled.width, oled.height), "WHITE")

draw = ImageDraw.Draw(image1)

font = ImageFont.load_default()

while(1):

draw.rectangle((0,0,128,32), fill = 1)

# get ip

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.connect(('8.8.8.8', 80))

localhost = s.getsockname()[0]

print("ip:%s" %localhost)

draw.text((0,0), "IP:", font=font, fill = 0)

draw.text((20,0), localhost, font=font, fill = 0)



# get temp

draw.text((0,16), "Temp(Celsius):", font=font, fill = 0)

file = open("/sys/class/thermal/thermal_zone0/temp") 

temp = float(file.read()) / 1000.00 

temp = float('%.2f' % temp)

file.close()

print("temp : %.2f" %temp)

draw.text((85,16), str(temp), font=font, fill = 0)



if(temp > 45):

pwm.setServoPulse(0,30)

elif(temp > 50):

pwm.setServoPulse(0,50)

elif(temp > 55):

pwm.setServoPulse(0,75)

elif(temp > 60):

pwm.setServoPulse(0,90)

elif(temp > 65):

pwm.setServoPulse(0,100)

else:

pwm.setServoPulse(0,0)

#show

oled.ShowImage(oled.getbuffer(image1.rotate(180)))

time.sleep(1)







except IOError as e:

    oled.Closebus()

    print(e)

   

except KeyboardInterrupt:   

    print("ctrl + c:")

    oled.Closebus()
Risposta
#4
Non sono certamente esperto in pithon, ma non mi sembra di vedere alcun input che modifichi il valore della temperatura. C'è un IP al DNS di Google (?), ma nella struttura del file non vi è alcun modo di impostare diversamente la temperatura di default (40° C). Temperatura assolutamente non necessaria (molto bassa) al SOC del PI. Considera che a 90°C va automaticamente in autoprotezione abbassando moltissimo la velocità del clock, con visibili rallentamenti nelle esecuzioni dei comandi (anche video)
Risposta
#5

Nemmeno io sono esperto di Python , ma la parte di codice c'è

if(temp > 45):
pwm.setServoPulse(0,30)
elif(temp > 50):
pwm.setServoPulse(0,50)
elif(temp > 55):
pwm.setServoPulse(0,75)
elif(temp > 60):
pwm.setServoPulse(0,90)
elif(temp > 65):
pwm.setServoPulse(0,100)
else:
pwm.setServoPulse(0,0)


In pratica significa se la Temp arriva a 45 gradi la ventola gira al 30% della sua max velocità e cosi via aumentando......
Risposta
#6
Quella parte di codice l'avevo notata ma quello che non c'è, è l'input per impostare un valore di temperatura scelto. Di fatto viene letto semplicemente il valore di temperatura esistente al momento:
Codice:
file = open("/sys/class/thermal/thermal_zone0/temp")
ed in base a questo valore la ventola girerà più o meno velocemente (la successione di if e elif).
Risposta
#7
quindi non è main.py il file da modificare per far partire la ventola alla temp impostata da me?
Risposta
#8
Si. il file da modificare è il main.py. Hai mantenuto l'indentazione? Nel codice allegato non è mantenuta.
Per test, commenta il codice per le temperature più basse e vedi nel file temp cosa viene riportato.
Risposta
#9
(01/07/2023, 10:10)ippogrifo Ha scritto: Si. il file da modificare è il main.py. Hai mantenuto l'indentazione? Nel codice allegato non è mantenuta.
Per test, commenta il codice per le temperature più basse e vedi nel file temp cosa viene riportato.
Se mi dici come fare sarò ben lieto di farlo...... Smile
Risposta
#10
L'indentazione è indispensabile in python per definire la modalità di procedere ed eseguire le istruzioni da parte dell'interprete. Questo è un esempio di indentazione:

Codice:
while(1):
........
........
........
     if(temp > 45):
          pwm.setServoPulse(0,30)
     elif(temp > 50):
          pwm.setServoPulse(0,50)
     ..................:
           ...............   # ecc.

Per quanto riguarda il commentare una riga di codice, si utilizza il cancelletto " # " all'inizio della riga.
Nell'esempio di cui sopra, volendo commentare la sola prima istruzione:
Codice:
#if(temp > 45):
          #pwm.setServoPulse(0,30)
      if(temp > 50):
          pwm.setServoPulse(0,50)
      ............
          ............

.................
.................
................. :
       .............

Per vedere il contenuto del file "temp":
" cat /sys/class/thermal/thermal_zone0/temp"
Risposta
  


Vai al forum:


Navigazione: 5 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect