gpio_pwm_fan_control.py

Carte porteuse Xerxes Nano pour modules Jetson Orin Nano Super et Turing RK1 · Fichier : gpio_pwm_fan_control.py · Langage : Python · Usage : Contrôle dynamique du ventilateur de refroidissement via PWM en fonction de la température CPU.

Script Python utilisant la bibliothèque RPi.GPIO pour piloter le connecteur PWM de la Xerxes Nano en fonction de la température du processeur Jetson/Turing.

Matériel : Carte Xerxes Nano avec ventilateur connecté au port PWM. Logiciel : Python 3, bibliothèque RPi.GPIO (ou Jetson.GPIO). Exécution : sudo python3 fan_control.py. Assurez-vous que le jumper d'alimentation est configuré pour alimenter le port GPIO si nécessaire.

gpio_pwm_fan_control.py

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import subprocess
import re

# Pin GPIO pour le contrôle PWM du ventilateur (à vérifier selon le schéma Xerxes Nano)
FAN_PIN = 18

# Configuration GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN_PIN, GPIO.OUT)
pwm = GPIO.PWM(FAN_PIN, 1000) # 1kHz PWM
pwm.start(0)

def get_cpu_temp():
    """Lit la température CPU via thermal_zone0"""
    try:
        with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f:
            temp = int(f.read().strip()) / 1000.0
            return temp
    except Exception as e:
        print(f"Erreur lecture température: {e}")
        return 0

def set_fan_speed(duty_cycle):
    """Ajuste le cycle de service PWM (0-100)"""
    pwm.ChangeDutyCycle(duty_cycle)

try:
    while True:
        temp = get_cpu_temp()
        # Logique de contrôle simple : 40°C = 0%, 80°C = 100%
        if temp < 40:
            speed = 0
        elif temp > 80:
            speed = 100
        else:
            speed = int((temp - 40) / 40 * 100)
        
        set_fan_speed(speed)
        print(f"Temp: {temp:.1f}°C | Fan: {speed}%")
        time.sleep(5)

except KeyboardInterrupt:
    pass
finally:
    pwm.stop()
    GPIO.cleanup()

← Retour à la fiche