라즈베리파이 GPIO를 이용하여 DC모터를 제어해보자. 모터(Motor, 전동기)는 전력(전기적 에너지)을 이용하여 회전운동의 힘(기계적 에너지)을 얻는 기계이다. 전력을 공급하면 전동기의 중심축이 회전하고 이 회전력을 이용하여 각종 기계를 동작시킨다. 이 모터는 이름 그대로 직류전압으로 구동되는데 건전지를 이용할 수 있는 작은 용량의 모터도 있다. 일상생활에 필요한 전자제품에 많이 적용되고 있으며 더운 여름 휴대용 선풍기, 전기면도기, 헤어 드라이기 등이 대표적이다.
DC 모터 구동회로: DC 모터 구동 디바이스 : TB6552
라즈베리파이와 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 Pi의 GPIO를 사용하기 위한 설정 |
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를 누르면 왼쪽으로 회전하는 프로그램을 작성하고 컴파일한 후 실행 결과를 확인한다.
'개발자 > 라즈베리파이4' 카테고리의 다른 글
Raspberry Pi Pico 윈도우에서 개발하기 (1) | 2022.10.26 |
---|---|
mysqli_real_connect(): (HY000/1045): Access denied for user 'phpmyadmin'@'localhost' (using password: YES) (1) | 2022.09.05 |
라즈베리파이 i2c lcd display 제어 (1) | 2022.09.02 |
라즈베리파이 FND Flexible Numeric Display 제어 (4) | 2022.08.31 |
라즈베리파이 부저 제어 (0) | 2022.08.29 |
라즈베리파이 음성 녹음 재생 모듈 (1) | 2022.08.26 |
Raspberry Pi PICO 사용 방법 (1) | 2022.08.02 |
라즈베리파이4 액츄에이터 7종 제어 C 언어 (0) | 2022.06.29 |
더욱 좋은 정보를 제공하겠습니다.~ ^^