Îmi construiesc un homelab și am nevoie să controlez ventilatorul Noctua NF-A20 PWM chromax.black.swap 200x200mm folosind Raspberry Pi. Așa am reușit să fac asta.
Componente necesare:
- Un Raspberry Pi
- Ventilatorul Noctua NF-A20 PWM (ar trebui să funcționeze la fel și cu alte ventilatoare de 12V)
- Un multimetru
- Sursă Ridicătoare LM2577 DC-DC
- Transistor NPN
- Rezistență de 1K Ohm
Diagramă:
Să începem de la Pi:
1- Conectează un fir de la pin-ul GPIO 16, sau orice pin simplu, la rezistența de 1k, apoi conectează celălalt capăt la tranzistor pe pin-ul din mijloc.
2- Un fir de la pin-ul din dreapta al tranzistorului la orice pin Ground sau minus/negativ al Pi-ului. Fața tranzistorului este cea plată.
3- Un fir de la pin-ul din dreapta al tranzistorului la conectorul negativ/minus de 5V marcat “IN-” al sursei ridicătoare.
4- Un fir de la orice pin de 5V al Pi-ului (le găsești în parea de sus, dreapta) la conectorul pozitiv/plus de 5V marcat “IN+” al sursei ridicătoare.
5- Important: ajustează sursa la 12V sau mai puțin.
NU conecta ventilatorul acum pentru că îl poți arde instant dacă îl conectezi la o tensiune mai mare decat 12V.
A- Ca să pornești sursa ridicătoare temporar conectează un fir de la un pin ground/minus/negativ al Pi-ului direct la teminalul marcat “IN-” al sursei SAU poți executa codul python din urmatoarea secțiune. Trebuie doar să execuți speed(fan, 100) / time.sleep(180)
.
B- Conectează multimetru la conectorii marcați “OUT+” și “OUT-” apoi selectează măsurarea voltajului la multimetru (de obicei marcat cu “2V”).
C- Pe sursă învârte șurubul mic și galben de pe componenta albastră până când multimetrul arată 12V sau puțin mai mic, ca să fim siguri ca nu se strică. Eu l-am lăsat pe al meu la 11.5V.
D- Când ești gata deconectează multimetrul și firul conectat la ground, sau oprește programul python.
Am găsit schema pin-urilor ventilatorului Noctua aici: https://faqs.noctua.at/en/support/solutions/articles/101000081757-what-pin-configuration-do-noctua-fans-use-
5- Un fir de la conectorul marcat “OUT-” (12V negativ) al sursei la pin-ul 1 al conectorului noctua.
6- Un fir de la conectorul marcat “OUT+” (12V pozitiv) al sursei la pin-ul 2 al conectorului noctua.
5- Un fir de la pin-ul 4 al conectorului noctua la pin-ul GPIO 12 al Pi-ului. Acest pin are capabilitate PWM .
Codul python:
Am folosit următorul cod din acest tutorial publicat pe the-diy-life.com de Michael Klements ( cod sursă ), și l-am modificat ca să folosească tranzistorul ca să oprească ventilatorul pentru că ventilatorul nu poate scădea viteza până la 0 RPM. Viteza minimă de rotație este de 20% (350RPM).
1#!/usr/bin/env python3
2import RPi.GPIO as GPIO
3import time
4import signal
5import sys
6
7# Ventilatorul Noctua PWM are nevoie de 25 kHz (kilo!), vezi pagina 6 de pe:
8# https://noctua.at/pub/media/wysiwyg/Noctua_PWM_specifications_white_paper.pdf
9PWM_FREQ = 25 # [Hz] frecvență PWM
10FAN_PIN = 12 # pin BCM pentru control ventilator PWM
11TRAN_PIN = 16 # NPN Transistor
12
13def speed(fan, percent):
14 print("set fan to", percent)
15 if (percent < 20):
16 GPIO.output(TRAN_PIN, False)
17 fan.ChangeDutyCycle(20)
18 else:
19 GPIO.output(TRAN_PIN, True)
20 fan.ChangeDutyCycle(percent)
21
22try:
23 signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
24 GPIO.setwarnings(True)
25 GPIO.setmode(GPIO.BCM)
26 GPIO.setup(TRAN_PIN, GPIO.OUT)
27 GPIO.setup(FAN_PIN, GPIO.OUT, initial=GPIO.LOW)
28 fan = GPIO.PWM(FAN_PIN, PWM_FREQ)
29
30 # facem cateva cicluri pentru testare
31 speed(fan, 100)
32 time.sleep(30)
33
34 speed(fan, 50)
35 time.sleep(30)
36
37 speed(fan, 0)
38 time.sleep(30)
39
40 speed(fan, 20)
41 time.sleep(30)
42
43 speed(fan, 70)
44 time.sleep(30)
45
46 speed(fan, 100)
47 time.sleep(30)
48
49except KeyboardInterrupt:
50 pass
51
52finally:
53 GPIO.cleanup()
Finalizat!
Ultima modificare la 2024-11-18