일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 튜닝
- 웹퍼블리싱
- 커스터마이징
- 제이쿼리
- 포트폴리오
- CSS
- jQuery Plugin
- 플러그인
- work6.kr
- 쇼핑몰구축
- 고도몰
- 3D프린터
- 웹디자이너
- 홈페이지제작
- 홈페이지구축
- 홈페이지
- 웹에이전시
- 안드로이드
- 쇼핑몰
- 웹퍼블리셔
- 프로그래머
- 워크식스
- 웹디자인
- 웹개발자
- 개발자
- 사이트제작
- 쇼핑몰제작
- JQuery
- plugin
- PHP
- Today
- Total
그냥 개발자 블로그
[워크식스] 라즈베리파이로 팬(쿨러) 컨트롤 하기 본문
라즈베리파이로 여러 프로젝트를 하다보면 라즈베리파이의 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;
$ gcc -o cooling_switch cooling_switch.c -lwiringPi
'프로그래밍팁 > C' 카테고리의 다른 글
맥에서 Qt 응용프로그램 배포 만들기 (0) | 2018.08.11 |
---|---|
[워크식스] 라즈베리파이로 시작하는 사물인터넷(IOT) (0) | 2017.09.22 |
에디트플러스로 c, c++ 개발환경 만들기 (MinGW이용) (0) | 2015.10.03 |