그냥 개발자 블로그

[워크식스] 라즈베리파이로 팬(쿨러) 컨트롤 하기 본문

프로그래밍팁/C

[워크식스] 라즈베리파이로 팬(쿨러) 컨트롤 하기

마음이파파 2017. 10. 30. 00:56

라즈베리파이로 여러 프로젝트를 하다보면 라즈베리파이의 CPU 및 GRU 과열로 인하여 다운 될때가 있습니다. 그래서 열을 식혀 주기 위해 5V 팬(쿨러)를 달아주기도 하는데요. 지속적으로 팬이 돌아갈 경우 전류 소모량이 증가하고 팬의 소음이 발생합니다.


약간의 전기 지식과 프로그래밍을 할 수 있다면 라즈베리파이 온도에 따라 팬을 끄고 켤수 있게 할 수 있습니다.





라즈베리파이 5V 팬(쿨러) 연결


라즈베리파이에서 최대로 제공 가능한 전압이 5V 임으로 5V 팬을 이용 합니다.



 

NPN 트랜지스터와 저항이 필요하며 위 그림에서 모터는 팬을 나타냅니다.


5V 의 전원을 트랜지스터가 차단하고 있다가 특정 온도에 다다르면 신호를 줘서 트랜지스터가 전원을 허용하게 하는 원리 입니다.





라즈베리파이 온도 체크 하기


라즈베리파이에 이미 리눅스가 설치되어 있음으로 쉘 스크립트를 만들어서 라즈베리파이 온도를 구합니다. (리눅스 설치법)


$sudo nano temperature.sh


#!/bin/sh

cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)

cpuTemp1=$(($cpuTemp0/1000))

cpuTemp2=$(($cpuTemp0/100))

cpuTempM=$(($cpuTemp2 % $cpuTemp1))



if [ $cpuTemp1 -ge 40 ]

then

 sudo /home/pi/project/cooling_switch o

else

 sudo /home/pi/project/cooling_switch x

fi

 

ctrl + X로 저장해줍니다.


간단히 설명하면 온도를 체크하여 40도 보다 클 경우 C언어로 만들어진 cooling_switch 를 변수 o 나 x 를 넣어 실행하라는 코드 입니다.








crontab으로 주기적 온도 체크 쉘 스크립트 실행


온도 체크 쉘 스크립트만 만들어서는 온도를 주기적으로 체크하지 못합니다. 리눅스의 스케줄 프로그램 크론에 스케줄을 등록하여 1분마다 온도 체크 쉘 스크립트가 동작할 수 있게 해줍니다.


$sudo crontab -e 


*/1 * * * * sh /home/pi/sh/temperature.sh


ctrl + X로 저장해줍니다.







C언어로 팬 컨트롤 하기


크론에서 온도 체크 쉘 스크립트를 1분마다 실행 시키고 쉘 스크립트에서는 온도에 따라 팬을 켜거나 끌 C언어 프로그램을 실행해줘야 합니다.


C언어 프로그램을 만들어 줍니다. (여기서는 이미 라즈베리파이에서 C언어를 사용할 수 있게 해주는 WiringPi 프로그램이 설치되어 있습니다. WiringPi 설치)


$sudo nano cooling_switch.c


#include<stdio.h>

#include<wiringPi.h>


#define SWITCH1 28  //switch




int main(int argc, char* argv[]){



    int data;



    if(wiringPiSetup()==-1){

        return 1;

    }



    pinMode(SWITCH1,OUTPUT);




    if(argc == 1){

        fputs("옵션을 입력하지 않으셨습니다.",stderr);

        return 1;

    }else{

        data = (int)argv[1][0];

    }



    if(data=='o'){

        digitalWrite(SWITCH1,1);

        printf("on");

    }


    if(data=='x'){

        digitalWrite(SWITCH1,0);

        printf("off");

    }




    return 0;

}}


ctrl + X로 저장해줍니다.

28번은 상단에 연결도에 표시된 녹색 선과 연결된 라즈베리파이 핀 입니다. 보시면 변수에 따라 28번 핀에 신호를 주거나 주지 않거나 하는 것을 보실 수 있습니다.

C언어로 만들어진 프로그램은 항상 컴파일하여 실행파일을 만들어줘야 합니다.


$ gcc -o cooling_switch cooling_switch.c -lwiringPi

 


정상이라면 라즈베리파이 온도에 따라 자동으로 실행 됩니다.






[문의하기]







copyright ⓒ 2017. 워크식스