Для проектів на базі Raspberry Pi, що працюють 24/7, питання охолодження є критичним. У цій статті я розгляну керування вентилятором Raspberry Pi 5 на прикладі Waveshare PoE M.2 HAT+ та розберусь, чому він може працювати на максимальних обертах. На перший погляд може здатися, що достатньо під’єднати HAT і все запрацює автоматично. Але на практиці іноді виникають нюанси, як це сталося і в мене.
Раніше я публікував огляд PoE M.2 HAT для Raspberry Pi 5 від Waveshare, де детально описував процес підключення цієї плати.
Я купив Waveshare PoE M.2 HAT+. Підключив його згідно інструкції, проте звернув увагу на те, що вентилятор працював постійно на максимальних обертах. Звісно така поведінка неочікувана і я почав шукати причину щоб усунути її.

Параметрами ядра
Вентилятор PoE HAT не працює “напряму” від напруги. Він керується параметрами ядра та спеціальним драйвером, який реагує на температуру процесора і змінює оберти. Ці параметри налаштовуються в файлі конфігурації распбері пай /boot/firmware/config.txt
В цей файл необхідно додати наступний блок налаштувань :
# Fan settings
dtparam=cooling_fan=on
dtparam=fan_temp0=55000,fan_temp0_hyst=2000,fan_temp0_speed=80
dtparam=fan_temp1=60000,fan_temp1_hyst=2000,fan_temp1_speed=140
dtparam=fan_temp2=65000,fan_temp2_hyst=2000,fan_temp2_speed=200
dtparam=fan_temp3=70000,fan_temp3_hyst=2000,fan_temp3_speed=255
Опишу цей блок детальніше на прикладі першого рядка:
- dtparam=cooling_fan=on – вмикає драйвер апаратного вентилятора на Raspberry Pi 5.
- fan_temp0=55000 – поріг у мілі-градусах °C (55 000 = 55 °C). При досягненні цієї температури вентилятор увімкнеться.
- fan_temp0_hyst=2000 – гістерезис (2 °C). Це означає, що вентилятор вимкнеться лише тоді, коли температура опуститься нижче 53 °C.
- fan_temp0_speed=80 – швидкість обертів при цьому порозі. Значення в діапазоні 0–255 (де 255 = максимальні оберти). 80 ≈ низька швидкість, фактично «тихе охолодження».
Після застосування цих змін, я перезавантажив Raspberry Pi, проте зміни не відбулися, вентилятор продовжував працювати на максимальних обертах. Я був змушений шукати інші причини вирішення проблеми – постійні максимальні оберти вентилятора.
Діагностика несправності
Оскільки внесені параметри не вплинули на поведінку роботи вентилятора, то я вирішив подивитися всі можливі параметри які могли б теоретично відповідати за температуру та оберти вентилятора. Для цього я послідовно запустив три команди.
cat /sys/class/hwmon/*/fan1_input
13863
Показує кількість імпульсів за секунду вентилятора. fan1_input – стандартний сенсор у Linux hardware monitoring (hwmon). Зазвичай тут значення коливаються залежно від PWM-сигналу (тобто від того, яку швидкість встановлено через fan_tempX_speed або target_pwm).
/vcgencmd measure_temp
temp=27.9'C
Утиліта vcgencmd читає температуру CPU (через firmware GPU). Означає, що ядро ARM зараз має температуру 27,9 °C. Це «офіційний» спосіб подивитися температуру Raspberry Pi, і саме ці дані використовує система охолодження.
cat /sys/class/hwmon/hwmon0/temp1_input
27050
Той самий сенсор CPU, але доступний через інтерфейс Linux hwmon. temp1_input подає температуру в міліградусах Цельсія. 27050 = 27 050 м°C = 27,05 °C. Це більш «сирий» спосіб доступу до температури, який використовують утиліти типу sensors або monitoring-системи (Zabbix, Prometheus, lm-sensors).
Для того, щоб упевнитися, що нова крива охолодження працює коректно, раджу налаштувати моніторинг температури Raspberry Pi за допомогою Zabbix.
Оскільки кожен параметр видав мені дані, то це значить, що сенсори активні та працюють. Я почав шукати проблему в апаратній частині. Спершу я вимкнув і від’єднав живлення Raspberry Pi, від’єднав шлейф PCI Express та від’єднав повністю плату PoE HAT. Я побачив, що в конекторі для вентилятора распбері пай одна ніжка погнута, і це стало великою проблемою, адже сам роз’єм дуже маленький, і навіть масштаб розмірів голки здається доволі великим. Щоб ви розуміли масштаб мініатюри, я це фото зробив на макро об’єктив.

Як видно на фотографії, контакт було притиснуто до низу і трошки деформовано. Я голкою зміг його підняти тільки у вертикальне положення, проте сам контакт залишився погнутим. Для того, щоб він коректно зайшов в конектор, я змушений був голкою розширити для нього отвір. Після під’єднання, распбері пай запустилася, і вентилятор почав отримувати сигнали щодо кількості обертів в залежності від температури.
Наразі виконавши команду перевірки кількість імпульсів вентилятора cat /sys/class/hwmon/*/fan1_input я отримав значення 3447 що втричі менше за попереднє значення. Таким чином я поборов проблему, і тепер мій вентилятор керується коректно в залежності від температури процесора.
Головний висновок такий: для стабільної та тихої роботи PoE HAT на Raspberry Pi необхідно не лише правильно налаштувати параметри в config.txt, а й переконатися в цілісності конектора та пінів. Мій приклад наочно показує що цим нехтувати не треба, а якщо вже і сталася проблема, то її вирішити не просто, адже елементи конектора настільки маленькі, що їх фізично вирівняти буде або неможливо, або дуже важко і для цього голка або пінцет будуть доволі великими інструментами.
