로그인

검색

[pi4, rpi4, 라즈베리파이4] ice tower fan speed control

[pi4, rpi4, 라즈베리파이4] ice tower fan speed control

 

 

 

image.png.jpg

 

 

 

image.png.jpg

 

 

https://wiki.52pi.com/index.php?title=ZP-0129-4wire

 

 

Raspberry Pi OS 다운로드 (구, Raspbian-라즈비안)에서 작동은 쉬웠습니다.

- 메뉴얼만 보고, 따라하면 잘 작동이 됩니다.

 

 

 

이번에 rpi4 에 우분투 22.04.2 LTS (64bit) 설치 하면서,

fan 컨트롤 하는법을 다시 익혀야 했습니다.

 

sudo apt-get update

sudo apt install python3-pip
sudo pip3 install RPi.GPIO

 

pip freeze |grep RPi.GPIO

feedback    ;    RPi.GPIO==0.7.1

 

ubuntu 24.04

sudo apt update

sudo apt upgrade

sudo apt install python3-pip

sudo apt install python3-rpi.gpio

 

pip freeze |grep RPi.GPIO
RPi.GPIO==0.7.1a4

 

또는 (위에서 sudo apt install python3-rpi.gpio 로 변경하는 대신, 아래 명령어를 치면 됩니다.)

python3 -m pip config set global.break-system-packages true

 

 

 

 

스크립트작성

sudo nano pwm-fan.py

 

아래 내용을 붙여 넣습니다.

 

import RPi.GPIO as GPIO
import time
import subprocess as sp


# initializing GPIO, setting mode to BOARD.
# Default pin of FAN Adapter is physical pin 32, GPIO12;
Fan = 8  #if you connect to pin txd physical pin 8, GPIO14,then set to :Fan = 8
GPIO.setmode(GPIO.BOARD)
GPIO.setup(Fan, GPIO.OUT)

p = GPIO.PWM(Fan, 50)
p.start(0)

try:
    while True:
        temp = sp.getoutput("vcgencmd measure_temp|egrep -o '[0-9]*\.[0-9]*'")
        # print(temp)
        if float(temp) < 58.0:
            p.ChangeDutyCycle(0)
        elif float(temp) > 58.0 and float(temp) < 68.0:
            p.ChangeDutyCycle(50)  #속도를 50으로 감소, 소음 제거됨
            time.sleep(120)    #120초 간격으로 다음명령어 실행
        elif float(temp) > 68.0:
            p.ChangeDutyCycle(100)
            time.sleep(120)

except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

 

ubuntu 24.04   (2024.11)   - 너무 cpu 사용량을 잡아 먹는다.

temp = sp.getoutput("vcgencmd measure_temp|egrep -o '[0-9]*\.[0-9]*'")      #에러발생

수정 ==>  temp = sp.getoutput(r"vcgencmd measure_temp|egrep -o '[0-9]*\.[0-9]*'")      # r 추가

 

 

ubuntu 24.04   (2024.12)

import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
pwm = GPIO.PWM(14,100)

#print("\nPress Ctrl+C to quit \n")
dc = 0
pwm.start(dc)

try:
    while True:
        temp = subprocess.getoutput("vcgencmd measure_temp|sed 's/[^0-9.]//g'")
#       print("Current CPU Temperature is: %f degree", temp)
        if round(float(temp)) >= 55:
            dc = 100
            pwm.ChangeDutyCycle(dc)
            time.sleep(120)
        else:
            dc = 0
            pwm.ChangeDutyCycle(dc)
            time.sleep(120)
except KeyboardInterrupt:
      pass
    pwm.stop()
    GPIO.cleanup()
#    print("Ctrl + C pressed -- Ending program")

 

 

실행

sudo python3 pwm-fan.py &

 

 

아래 사진처럼 좌측에 붙여서 정렬해야 합니다.

 

image.png.jpg

 

 

 

ubuntu 시작할때, 스크립트 실행하기  (안됨)

sudo crontab -e

sudo chmod +x /home/hs7/pwm-fan.py

@reboot sudo python /home/hs7/pwm-fan.py &

 

 

 

** ubuntu 시작할때, 스크립트 실행하기   (2023.12.10)

- pwn-fan.service 파일을 만듭니다.

sudo nano /etc/systemd/system/pwm-fan.service

- 아래 내용을 넣습니다.

[Unit]
Description=pwm-fan
After=network.target

[Service]
Type=simple
User=hs7               #root 로 하니까 안됨(이부분삭제해야함)              
WorkingDirectory=/home/hs7
ExecStart=/usr/bin/python3 /home/hs7/pwm-fan.py &
Restart=always

[Install]
WantedBy=multi-user.target

ubuntu 24.04 에서는

User=hs7   를 주석처리 하니까 에러없이 실행됨.

 

 

 

 

- enable

$sudo systemctl enable pwm-fan.service

Created symlink /etc/systemd/system/multi-user.target.wants/pwm-fan.service → /etc/systemd/system/pwm-fan.service.

 

$sudo systemctl start pwm-fan.service

$sudo systemctl stop pwm-fan.service

$sudo systemctl status pwm-fan.service

$sudo systemctl disable pwm-fan.service         #부팅시 실행 금지

$sudo systemctl reload pwm-fan.service         #설정변경후 재시작

$sudo systemctl list-jobs                              #실행중인 파일

 

- 안된다면, 속성 확인

hs7@hcp:~$ ls -al
total 40
drwxr-x--- 5 hs7  hs7  4096 Dec 11 20:23 .
drwxr-xr-x 4 root root 4096 Dec 12 09:56 ..
-rw------- 1 hs7  hs7  1211 Dec 12 10:54 .bash_history
-rw-r--r-- 1 hs7  hs7   220 Jan  7  2022 .bash_logout
-rw-r--r-- 1 hs7  hs7  3771 Jan  7  2022 .bashrc
drwx------ 3 hs7  hs7  4096 Dec 11 20:22 .cache
drwxrwxr-x 3 hs7  hs7  4096 Dec 11 20:22 .local
-rw-r--r-- 1 hs7  hs7   807 Jan  7  2022 .profile
drwx------ 2 hs7  hs7  4096 Dec 11 18:50 .ssh
-rw-r--r-- 1 hs7  hs7     0 Dec 11 18:50 .sudo_as_admin_successful
-rw-r--r-- 1 root root  880 Dec 11 20:23 pwm-fan.py

 

$sudo chmod 755 pwm-fan.py

또는

$sudo chmod 755 /home/hs7

 

이 게시물을

이 댓글을 삭제하시겠습니까?