Do It Yourself

Raspberry Pi: Điều khiển quạt tản nhiệt

Điều chỉnh tốc độ quạt trên Pi

Điều chỉnh tốc độ quạt trên Pi theo nhiệt độ CPU để giảm ồn

24 phút để đọc hết nội dung

Raspberry Pi có thể vận hành 24/7 mà không cần tản nhiệt – ít nhất là không cần các giải pháp tản nhiệt bổ sung mà chỉ cần chuyển nhiệt ra môi trường xung quanh. Tuy nhiên, với sự ra mắt các mẫu Pi với tốc độ CPU cao và nhiều loại kết nối bổ sung, nhiệt độ khi vận hành bình thường của các mẫu Pi đã tăng vọt qua các thế hệ gần đây.

So sánh nhiệt độ Raspberry Pi
Nhiệt độ so sánh tham khảo của Pi khi “nhàn rỗi” (nguồn: martinrowan.co.uk)

Khi được sử dụng cho các ứng dụng thực tế, mà khá phổ biến với chúng ta là sử dụng là máy chủ Home Assistant cho Nhà Thông Minh, nhiệt độ của Raspberry Pi sẽ còn tăng cao hơn, đặc biệt khi phải thực hiện các tác vụ nặng. Quan sát của chúng tôi cho thấy, trong môi trường Việt Nam với nhiệt độ phòng từ 28 – 30°C, nhiệt độ của các mẫu Pi phổ biến, tương đối vào khoảng:

  • Pi 3B: 48°C khi để trần – 53°C khi đặt trong vỏ (case)
  • Pi 3B+: 53°C khi để trần – 60°C khi đặt trong case
  • Pi 4B+: 55°C khi để trần – 64°C khi đặt trong case

Tất cả các board mạch được quan sát đều được bổ sung tản nhiệt thụ động bằng nhôm và case là loại thông thoáng. Đặc biệt, mẫu Raspberry Pi 4B+ 2GB khi chạy ứng dụng Home Assistant ở mức độ trung bình (cho một căn hộ khoảng 80m2 – là thiết bị được chúng tôi khuyến cáo dùng cho ứng dụng kiểu này) liên tục vận hành ở nhiệt độ 65°C khi đặt trong case kim loại có nhiều lỗ thoáng.

Vì vậy, dù Pi có thể vận hành mà không cần giải pháp tản nhiệt bổ sung, để giữ ổn định về hiệu suất và độ bền, nên áp dụng các biện pháp tản nhiệt cho Pi.

  • Nếu bạn có thời gian và hứng thú với video thì dưới đây là một số các giải pháp tản nhiệt Pi khá cồng kềnh và tốn kém, chủ yếu mang tính trình diễn

Tản nhiệt chủ động cho Pi

Nếu bổ sung các miếng/đế tản nhiệt thụ động, vẫn không làm nhiệt độ hoạt động của các mẫu Pi ổn định trong mức độ khiến bạn thấy an tâm, tản nhiệt chủ động bằng quạt là giải pháp đơn giản và hiệu quả nhất.

Hầu hết vỏ – case phổ biến cho Pi đều kèm theo các miếng tản nhiệtquạt tản nhiệt nhỏ 5V.

Ưu điểm của các quạt kèm theo này là rẻ, nhỏ gọn nhưng hiệu quả, thường đi kèm sẵn đầy đủ phụ kiện để gắn vào case, dùng nguồn trực tiếp từ Pi (nguồn, không phải chân GPIO).(1)

Nhược điểm chính của các quạt này là rất ồn do tốc độ quay cao với kích thước nhỏ, hình dáng của cánh quạt ưu tiên cho lượng gió hơn là giảm ồn và thường cần được bảo dưỡng, thay thế sau khoảng một năm.

Loại quạt này khi gắn theo cách thức được hướng dẫn của nhà sản xuất (gắn trực tiếp vào 2 chân nguồn 5V hoặc 3.3V) thì thường tạo nên tiếng rít rất khó chịu, kể cả khi đặt trong tủ kĩ thuật kín.

Để khắc phục tiếng ồn của loại quạt này:

  • Tìm loại quạt khác phù hợp hơn như loại ít ồn (quiet/silent), loại có kích thước lớn hơn (6cm)
  • Tìm cách giảm tốc độ của quạt bằng cách giới hạn cường độ dòng điện như gắn thêm điện trở nối tiếp
  • Giảm tốc độ của quạt bằng cách chủ động điều chỉnh thông qua phần mềm, tương tự cách làm của máy tính từ trước đến nay

(1) Các mẫu Pi gần đây (trừ Zero) đều có sẵn 40 chân, phân thành 2 (thực ra là 3) loại: chân cấp nguồn (3.3V, 5V & GND) và GPIO (general-purpose input/output). Cắm nhầm quạt vào chân GPIO có khả năng làm hỏng chân trên chip xử lý hoặc làm hỏng Pi. Tương tự với các hành động gây chập (short) nguồn, quá tải nguồn v.v..

Chủ động điều chỉnh tốc độ quạt trên Pi: Phần cứng

Yêu cầu tối thiểu

Ngoài Pi và quạt như bên trên, bạn sẽ cần thêm:

  1. Mosfet TIP41C, đây là loại rẻ và rất phổ biến, bạn có thể mua trên các trang TMĐT như Shopee, Lazada hoặc xin/mua ở các tiệm sửa chữa điện tử.
    Bạn cũng có thể dùng các Mosfet cùng loại hoặc transistor thay thế nhưng phải hiểu rõ cách dùng và giới hạn của loại mình dùng.(2)
  2. Cáp bẹ (các tên hay dùng: cáp bảy màu, cáp bus, cáp test board) loại cái-cái, dài 10cm là đủ (hoặc 20cm nếu bạn muốn thoải mái đi dây bên trong case).
    Cáp này cũng mua dễ dàng như TIP41C, nên mua cùng chỗ để tiết kiệm tiền gửi hàng.
  3. (thêm) Cáp bẹ như trên nhưng là loại đực-cái (hoặc cái-đực) nếu dây nguồn trên quạt tản nhiệt là loại 2 chân gắn liền(3). Cáp này chỉ để tiện hơn cho bạn, có thể không dùng.
TIP41C
TIP41C
Cáp bus test board
Cáp cái-cái và cái-đực

(2) Nếu không thoải mái với chỉ Mosfet, bạn cũng có thể dùng các mạch điều khiển động cơ dùng cho động cơ 5V và nguồn điều khiển 3.3V, các mạch này có thêm trở hạn dòng điều khiển, mạch chống nhiễu v.v..

Pi Fan
(3) Quạt với 2 chân nguồn liền nhau

Sơ đồ nối

Sơ đồ nguồn và GPIO trên Raspberry Pi

! Use At Your Own Risk/Lưu ý Trách Nhiệm

I. Mọi thao tác trên thiết bị điện hay thiết bị là nguồn nguy hiểm phải được tiến hành bởi người có chuyên môn và chứng chỉ phù hợp.

II. Bạn phải tuân theo mọi chỉ dẫn an toàn (Safety Instruction/Safety Information) đi kèm với thiết bị.

III. Tất cả nội dung trên trang web này (https://konnected.vn) đến từ KonnectED, KonnectED Team và nhóm tác giả đều được kiểm tra và kiểm nghiệm bởi những người có kiến thức và kinh nghiệm trong lĩnh vực đó, cũng như được áp dụng phổ biến bởi cộng đồng, tuy vậy chúng tôi không thể đảm bảo những chỉ dẫn hay nội dung này hoạt động tốt và an toàn trên tất cả các hệ thống, thiết bị hay tình huống. Vì vậy, tuyên bố này miễn cho KonnectED, KonnectED Team và các tác giả mọi trách nhiệm liên quan đến tai nạn hay sự cố hư hỏng thiết bị, hệ thống khi đọc giả làm theo các hướng dẫn hay nội dung được chia sẻ trên trang web này.
Tất cả các trách nhiệm khác của công ty Konnect ED đối với sản phẩm thương mại hay dịch vụ thương mại không bị miễn trừ bởi tuyên bố này.

Xem thêm Tuyên bố Pháp lý, Công bằng và Minh bạch

Bạn hãy xem ảnh dưới để biết vị trí các chân nguồn và chân GPIO trên Raspberry Pi.

Raspberry Chân GPIO
Sơ đồ chân cấp nguồn và GPIO của Raspberry Pi (40 chân) (ảnh gốc: raspberrypi.org)

Bạn lưu ý 2 chân nguồn được đánh dấu màu xanh và chân GPIO 17 được đánh dấu màu tím, đây là 3 chân sẽ được sử dụng mặc định trong nội dung tiếp theo.

Thứ tự các chân vật lý (1 đến 40) và chân GPIO là không giống nhau.

Các chân của MOSFET

Trước tiên bạn cần biết các chân của Mosfet, các chân này (hầu hết) giống hệt nhau trên tất cả Mosfet. Nếu bạn cảm thấy không an tâm hoặc bạn dùng loại khác (transistor BJT) thì có thể tìm datasheet bằng cách Google: “datasheet <mã linh kiện>”.

Mosfet Tip41C Chân
Vị trí 3 chân của Mosfet

Bạn ghi nhớ thứ tự của 3 chân B, C và E này.

Đấu nối Pi, Mosfet và Quạt

Với quạt thì chân 5V sẽ là chân (dây đỏ), chân còn lại (dây đen) sẽ là GND (chân 0V). Nếu quạt có 3 chân thì chân còn lại không cần nối.

Bên dưới là sơ đồ đấu nối các chân của Pi, Mosfet và quạt. Lưu ý ngắt nguồn Pi trước khi thực hiện.

Điều khiển quạt Pi
Sơ đồ đấu nối Pi, Mosfet và Quạt

Sau cùng là gắn quạt, mosfet lên case. Bạn có thể “gia cố” các chỗ cắm dây bằng keo, băng keo hay ống gen nhiệt. Cẩn thận đừng để mosfet hay các dây có khả năng rơi vào mạch Pi khi hoạt động.

Điều khiển quạt tản nhiệt Pi
Đấu nối thực tế quạt và mosfet

Một số chú ý

Quạt thổi ra hay hút vào?

Quạt hút vào, tức trực tiếp thổi luồng khí lên chip sẽ hiệu quả hơn. Tuy nhiên, nếu sau khi gắn lên case, quạt cách xa chip/tản nhiệt thì hút khí nóng ra khỏi case sẽ hiệu quả hơn.

Flyback diode đâu?

Nếu bạn tham khảo một số mạch điều khiển động cơ sẽ thấy luôn có diode nối giữa 2 cực của động cơ (ở đây là quạt) để “dập” inductive voltage spike (dòng điện cảm ứng?) khi động cơ dừng. Diode này có sẵn trong mosfet, tuy chậm nhưng đủ dùng. Nếu bạn dùng transistor BJT, có thể cần bổ sung diode này. Tuy nhiên với điện áp 5V trên quạt, flyback diode là không thật sự cần thiết.

Chủ động điều chỉnh tốc độ quạt trên Pi: Phần mềm

Phần mềm điều khiển ở đây sẽ làm nhiệm vụ điều khiển tốc độ của quạt theo nhiệt độ CPU. Cụ thể, phần mềm sẽ điều chỉnh tốc độ quạt tản nhiệt thông qua điều chỉnh điện áp trên quạt bằng cách điều chỉnh chu kỳ của xung PWM trên chân GPIO điều khiển (GPIO-17). (xem thêm: wikipedia – kĩ thuật điều chế độ rộng xung).

Tốc độ của quạt (hay chu kỳ xung PWM) được nội suy từ nhiệt độ của CPU dựa trên một số cấu hình cho trước.

Tuỳ vào hệ điều hành bạn đang chạy trên Pi mà cách thức thực hiện sẽ khác nhau. Dưới đây là cách thực hiện trên 2 hệ điều hành phổ biến:

+ Raspbian

+ HassOS (chuyên biệt để vận hành máy chủ Home Assistant)

Trên Raspbian

Trên Raspbian, ta sẽ sử dụng một chương trình python được viết sẵn bởi tác giả của Konnect ED Vietnam (github: https://github.com/wolverinevn/pi_fan_control) để điều chỉnh tốc độ quạt. Các đặc điểm của chương trình này:

  • Chạy trên python3, được tự động cài đặt bởi chương trình cài đặt nếu bạn chưa có sẵn
  • Điều chỉnh tốc độ quạt tuyến tính theo nhiệt độ CPU
  • Tự động khởi động cùng Raspbian và chạy với quyền ưu tiên cao nhất.

Tải về và cài đặt

Để tải về và cài đặt, bạn chạy lần lượt các lệnh ở dưới qua kết nối SSH/Console:

curl -sL https://github.com/wolverinevn/pi_fan_control/releases/download/v0.1/pi_fan.zip -o pi_fan.zip
unzip pi_fan.zip && rm pi_fan.zip
cd pi_fan
sudo ./install.sh

Ở lệnh cuối (4), có thể bạn cần nhập mật khẩu của tài khoản (Pi) để cấp cho script chạy với quyền root.

Cài đặt Pi Fan trên Raspbian
Kiểm tra lại sơ đồ đấu nối

Nhập y rồi Enter để tiếp tục cài đặt. Lưu ý, nếu Raspbian chưa có các phần mềm cần thiết (như python3), script sẽ yêu cầu bạn nhập y để đồng ý cài đặt các phần mềm này trước.

Điều chỉnh tốc độ quạt Raspbian
Cài đặt và chạy chương trình thành công

Cấu hình chương trình

File cấu hình của chương trình trên mặc định nằm tại /usr/share/pi_fan/config.json

pi_fan cấu hình

"pin" : 17 chính là GPIO-17, nếu bạn dùng GPIO khác, thay đổi cho phù hợp

"wait_time" : 3 số giây chờ giữa 2 lần điều chỉnh

"temp_steps" : [50, 70] khoảng nhiệt độ thấp nhất và cao nhất tương ứng với tốc độ quạt thấp nhất và cao nhất

"speed_steps" : [30, 100] tốc độ quạt tương ứng nhiệt độ CPU, 30% – 100%(4)

Để chỉnh sửa file, bạn dùng lệnh

sudo nano /usr/share/pi_fan/config.json

Sau khi chỉnh sửa, ấn Ctrl-X rồi Y để thoát và lưu lại.

Sau đó dùng lệnh dưới để khởi động lại chương trình pi_fan:

sudo systemctl restart pi_fan

(4) Không chọn tốc độ quạt quá thấp sẽ khiến quạt không thể khởi động được từ vị trí dừng, đặc biệt sau một vài tháng hoạt động khi quạt không còn trơn như ban đầu và cánh nặng hơn do bám bụi

Trên HassOS

Để sử dụng cùng chương trình trên trong HassOS sẽ phức tạp hơn. Do vậy, chúng tôi sẽ sử dụng một cách khác, thao tác nhiều bước hơn nhưng hoàn toàn là những thao tác cấu hình bình thường trên Home Assistant.

* Cách này cũng dùng được cho Home Assistant trên Raspbian (từ Jessie)

Cài đặt addon pigpio

Addon này vốn dùng các chân GPIO của Pi để điều khiển đèn led (trắng hay RGB). Tuy nhiên ta có thể dùng cùng addon này để điều khiển tốc độ của quạt.

Bạn vào Supervisor > Add-on store, chọn dấu ..., chọn Repositories.

Nhập địa chỉ sau rồi bấm THÊM – ADD:

https://github.com/Poeschl/Hassio-Addons

Tiêp theo tìm pigpio rồi bấm vào addon này trong kết quả tìm kiếm, chọn CÀI ĐẶT – INSTALL.

Home Assistant pigpio addon
Cài đặt pigpio

Sau khi cài đặt, bạn quay lại addon pigpio đã cài đặt, chọn Start on bootSTART.

Cấu hình light và cảm biến tốc độ

Sở dĩ phải cấu hình light trong Home Assistant vì hiện chỉ có light được hỗ trợ bởi platform rpi_gpio_pwmpigpio.

Ta cũng cấu hình thêm một sensor để hiển thị tốc độ của quạt trong mức 0% đến 100%. Sensor này chỉ có tác dụng hiển thị, bạn có thể cho thêm vào giao diện quản lý máy chủ của Home Assistant.

Cấu hình mẫu như sau:

light:
  - platform: rpi_gpio_pwm
    leds:
      - name: CPU Fan
        driver: gpio
        pins: [17]
        type: simple
        frequency: 25
sensor:
  - platform: template
    sensors:
      cpu_fan_speed:
        friendly_name: "CPU Fan Speed"
        unit_of_measurement: '%'
        value_template: "{{(state_attr('light.cpu_fan', 'brightness')|int/2.55)|round(0)}}"

Trong đó:

  • 4 name: CPU Fan tên của đèn, liên quan đến dòng 14
  • 6 pin: [17] chính là GPIO 17 ở phần đấu nối
  • 14 value_template cảm biến sẽ lấy attributes brightness của đèn chia cho 2.55 vì độ sáng của đèn trong khoảng 0-255.

Khởi động lại Home Assistant để khởi tạo 2 entity đã cấu hình.

CPU Light và sensor

Sau khi khởi động lại, trong Hass sẽ có thêm thực thể light.cpu_fan như ảnh. Bạn có thể kéo thanh trượt chỉnh độ sáng để xem quạt có hoạt động và thay đổi tốc độ hay không.

Hass điều chỉnh quạt làm mát
light.cpu_fan

Đồng thời sensor.cpu_fan_speed cũng sẽ thể hiện mức % tốc độ của quạt.

Xác định tốc độ thấp nhất khởi động quạt

Để xác định tốc độ thấp nhất mà quạt có thể khởi động, bạn vào mục Công cụ nhà phát triển > DỊCH VỤ. Chọn dịch vụ light.turn_on.

Dùng data bên dưới cho dịch vụ light.turn_on:

entity_id: light.cpu_fan
brightness: 0

brightness: 0 sẽ tắt quạt.

Bạn lần lượt TẮT rồi thay đổi brightness lên dần dần để xem ở mức nào thì quạt có thể khởi động được từ trạng thái không quay. Không để quạt ở trạng thái on nhưng không quay quá lâu.

Với loại quạt như trong bài này, tốc độ thấp nhất vào khoảng 30%, tương đương 30*2.55 ~ 77 – brightness.

Nội suy tốc độ quạt từ nhiệt độ CPU

Điều kiện là bạn phải xác định được nhiệt độ CPU trong Home Assistant. Xem bài này nếu bạn chưa có: Hiển thị thông số máy chủ.

Ở đây ta sẽ cần 2 cặp số:

  1. [T1, T2] là cặp nhiệt độ CPU thấp nhất và cao nhất mà ta mong muốn
  2. [S1, S2] là cặp tốc độ thấp nhất (đã xác định ở trên) khi CPU ở mức T1 và cao nhất của quạt (thường là 100) khi CPU ở mức T2

Khi đó tốc độ của quạt S (/100) khi CPU ở mức T sẽ được tính là:

S = (S2 - S1)*(T - T1)/(T2 - T1) + S1

Nhìn công thức có vẻ phức tạp, tuy nhiên bạn không cần tính, chỉ cần áp dụng automation ở bước sau thôi.

Nội suy tuyến tính
Quan hệ giữa tốc độ quạt và nhiệt độ

Automation điều chỉnh tốc độ quạt

Automation mẫu như bên dưới.

- id: '1597578875604'
  alias: Hass Adjust CPU Fan Speed
  description: Điều chỉnh tốc độ quạt làm mát CPU
  trigger:
  - entity_id: sensor.hass_cpu_temperature
    platform: state
  condition: []
  action:
  - data_template:
      brightness: >
        {% set Temp = trigger.to_state.state|int %}
        {% set T = [0,45,70] %}
        {% set S = [0,30,100] %}
        {% if Temp < 45 %}
        0
        {% else %}
        {{ (((S[2] - S[1])*(Temp - T[1])/(T[2] - T[1]) + S[1])*2.55)|int }}
        {% endif %}
    entity_id: light.cpu_fan
    service: light.turn_on

Trong đó:

  • 5 automation kích hoạt bằng sensor.hass_cpu_temperature
  • 11 [0,45,70] 4570 là nhiệt độ thấp nhấtcao nhất để điều chỉnh tốc độ quạt
  • 12 [0,30,100] 30100 là tốc độ quạt thấp nhấtcao nhất
  • 14 khi nhiệt độ xuống dưới 45 độ, tắt quạt
  • 17 công thức nội suy và nhân 2.55 để quy đổi từ tốc độ ra độ sáng

Kết quả:

Pi Quạt Tản Nhiệt
Nhiệt độ CPU
Pi Điều Tốc Quạt
Tốc độ quạt tản nhiệt

Một số lưu ý

Quạt có dừng trong quá trình khởi động lại Hass?

Không. Một khi quạt đang chạy, chỉ có dừng addon pigio sao đó khởi động lại cả máy chủ Home Assistant mới khiến quạt dừng.

Lưu ý tốc độ tối thiểu

Ở đây ta chọn 30 là tốc độ tối thiểu, tuy nhiên để an toàn, bạn nên thêm một chút, ví dụ 35.

Cảm ơn bạn đã xem bài viết này!

konnectED Team.

Lên Đầu
  • Đăng ký
Bạn quên mất mật khẩu? Vui lòng nhập tên đăng nhập và địa chỉ email đã đăng ký. Bạn sẽ nhận được liên kết tạo mật khẩu mới qua email (bạn nhớ kiểm tra hộp spam trong trường hợp email đi lạc).