ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [워크식스] 라즈베리파이로 팬(쿨러) 컨트롤 하기
    프로그래밍팁/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. 워크식스





    댓글 0

work6.kr