개발자/라즈베리파이4

라즈베리파이 FAN 제어 실습 코드

지구빵집 2022. 8. 30. 07:28
반응형

 

 

라즈베리파이 GPIO를 이용하여 DC모터를 제어해보자. 모터(Motor, 전동기)는 전력(전기적 에너지)을 이용하여 회전운동의 힘(기계적 에너지)을 얻는 기계이다. 전력을 공급하면 전동기의 중심축이 회전하고 이 회전력을 이용하여 각종 기계를 동작시킨다. 이 모터는 이름 그대로 직류전압으로 구동되는데 건전지를 이용할 수 있는 작은 용량의 모터도 있다. 일상생활에 필요한 전자제품에 많이 적용되고 있으며 더운 여름 휴대용 선풍기, 전기면도기, 헤어 드라이기 등이 대표적이다.  

 

DC 모터 구동회로: DC 모터 구동 디바이스 : TB6552  

 

DC 모터 구동회로: DC 모터 구동 디바이스 : TB6552

 

라즈베리파이와 FAN 연결도는 아래를 참고한다.

 

fan 연결도

 

FAN 구동 소스코드를 아래에 나타내고 코드 설명을 추가한다.

 

#include <wiringPi.h>

#define FAN_MT_P_PIN	11	// left rotation
#define FAN_MT_N_PIN	9	// right rotation

void FanOn(void);
void FanOff(void);

int main(void)
{	
	if (wiringPiSetupGpio() == -1)
		return 1;

	pinMode(FAN_MT_P_PIN, OUTPUT);
	pinMode(FAN_MT_N_PIN, OUTPUT);

    while(1)
    {
		FanOn();
		delay(2000);

		FanOff();
		delay(2000);
    }
	return 0;
}

void FanOn(void)
{
	digitalWrite(FAN_MT_P_PIN, HIGH);
	digitalWrite(FAN_MT_N_PIN, LOW);
}

void FanOff(void)
{
	digitalWrite(FAN_MT_P_PIN, LOW);
	digitalWrite(FAN_MT_N_PIN, LOW);
}

 

소스코드 설명을 참고한다.

 

Program Source Description
#include <wiringPi.h> GPIO access library 헤더파일 선언
#include <softPwm.h> Software PWM library 헤더파일 선언
#define MOTOR_MT_N_PIN  17
#define MOTOR_MT_P_PIN  4
MOTOR 포트 MT_N 핀 정의
MOTOR 포트 MT_P 핀 정의
#define LEFT_ROTATE  1
#define RIGHT_ROTATE  2
반시계방향 회전 상수 정의
시계방향 회전 상수 정의
void MotorStop(void);
void MotorControl(unsigned char speed, unsigned char rotate);
모터 제어 관련 함수 프로토타입 정의
int main(void)
{
 
if (wiringPiSetupGpio() == -1)
return 1;
Wiring PiGPIO를 사용하기 위한 설정
pinMode(MOTOR_MT_N_PIN, OUTPUT);
pinMode(MOTOR_MT_P_PIN, OUTPUT);
MT_N / MT_P 핀 출력 설정
softPwmCreate(MOTOR_MT_N_PIN, 0, 100);
softPwmCreate(MOTOR_MT_P_PIN, 0, 100);
MT_N / MT_P PWM 설정
while(1)
{
 
MotorControl(30, LEFT_ROTATE);
delay(2000);
MotorStop();
delay(5000);
모터 제어
- 듀티비 30% / 시계반대 방향 회전
모터 정지
MotorControl(80, RIGHT_ROTATE);
delay(2000);
MotorStop();
delay(5000);
모터 제어
- 듀티비 80% / 시계 방향 회전
모터 정지
}
return 0;
}
 
void MotorStop()
{
softPwmWrite(MOTOR_MT_N_PIN, 0);
softPwmWrite(MOTOR_MT_P_PIN, 0);
}


모터 스톱
void MotorControl(unsigned char speed, unsigned char rotate)
{
if(rotate == LEFT_ROTATE) {
  digitalWrite(MOTOR_MT_P_PIN, LOW);
  softPwmWrite(MOTOR_MT_N_PIN, speed);
}
else if(rotate == RIGHT_ROTATE) {
  digitalWrite(MOTOR_MT_N_PIN, LOW);
  softPwmWrite(MOTOR_MT_P_PIN, speed);
}}


좌회전
우회전

 

컴파일 실행은 아래 명령으로 참고한다.

 

컴파일 명령어 gcc o fan fan.c -lwiringPi 실행파일명을 fan설정하여 컴파일한다.
실행 sudo ./fan 프로그램을 실행한다.

 

fan.c를 컴파일하고 실행하면 팬 모터가 주기적으로 좌회전 및 우회전을 되풀이 하는 것을 확인한다. fan.c 프로그램 소스에서 DC모터의 속도를 줄이려면 어떤 작업을 해야 하는지 알아보고 소스 파일을 수정한 다음 DC모터의 속도가 줄어들었는지 확인한다.

 

softPwmCreate(MOTOR_MT_N_PIN, 0, 100);문장을 해석하고 softPwmWrite(MOTOR_ MT_N_PIN, speed);문장과의 연관성을 확인해보자. 키패드 모듈을 이용하여 PB1을 누르면 오른쪽으로 회전, PB2를 누르면 왼쪽으로 회전하는 프로그램을 작성하고 컴파일한 후 실행 결과를 확인한다.  

 

 

 

 

반응형