아두이노 DC 모터 사용자에게 입력 받아 제어하기
1. 아두이노 DC 모터 회로도 연결 및 모터 제어하기
https://2minmin2.tistory.com/14
저번 글에서 DC모터와 아두이노 보드 연결 후
모터를 제어하는 것까지 했었다.
하지만 내가 할 것은 단순 모터 제어가 아니라, 사용자 입력에 따라 제어하고 싶은 것이 첫번째이다.
2. 컨베이어 벨트 모터와 연결
사진은 지저분하지만, 나름 연결이 잘 되어 있다.
이 컨베이어 벨트로 테스트 도구를 만들 것이다.
내가 만들 테스트 도구는 사용자에 입력에 따라 전진, 후진, 멈춤이 필요하다.
그래서 코드를 작성해봤다.
3. DC 모터 제어 코드 (사용자 입력에 따라 제어)
int Dir1Pin_A = 2;
int Dir2Pin_A = 3;
int SpeedPin_A = 10;
boolean motor_on = false;
void setup() {
pinMode(Dir1Pin_A, OUTPUT);
pinMode(Dir2Pin_A, OUTPUT);
pinMode(SpeedPin_A, OUTPUT);
Serial.begin(9600);
Serial.println("Type 'p' to start motor, 's' to stop motor");
Serial.println("While motor is running, type 'r' to rotate counterclockwise, 'q' to rotate clockwise");
}
void loop() {
if (Serial.available() > 0) {
char input = Serial.read();
switch (input) {
case 's':
stopMotor();
break;
case 'p':
startMotor();
break;
case 'r':
rotateCounterClockwise();
break;
case 'q':
rotateClockwise();
break;
default:
break;
}
}
}
void startMotor() {
if (!motor_on) {
digitalWrite(Dir1Pin_A, HIGH);
digitalWrite(Dir2Pin_A, LOW);
analogWrite(SpeedPin_A, 255);
motor_on = true;
Serial.println("Motor started");
} else {
Serial.println("Motor is already running");
}
}
void stopMotor() {
if (motor_on) {
analogWrite(SpeedPin_A, 0);
motor_on = false;
Serial.println("Motor stopped");
} else {
Serial.println("Motor is not running");
}
}
void rotateCounterClockwise() {
if (motor_on) {
digitalWrite(Dir1Pin_A, LOW);
digitalWrite(Dir2Pin_A, HIGH);
Serial.println("Rotating counterclockwise");
} else {
Serial.println("Motor is not running");
}
}
void rotateClockwise() {
if (motor_on) {
digitalWrite(Dir1Pin_A, HIGH);
digitalWrite(Dir2Pin_A, LOW);
Serial.println("Rotating clockwise");
} else {
Serial.println("Motor is not running");
}
}
1. startMotor(): 모터를 가동시키는 함수
- motor_on 변수가 false인 경우에만 모터를 가동
- 디지털 출력(Dir1Pin_A, Dir2Pin_A)을 설정하고, 아날로그 출력(SpeedPin_A)을 이용하여 모터의 속도를 제어
motor_on 변수를 true로 변경하고, 시리얼 모니터에 "Motor started" 메시지를 출력
2. stopMotor(): 모터를 정지시키는 함수
- motor_on 변수가 true인 경우에만 모터를 정지
- 아날로그 출력(SpeedPin_A)을 0으로 설정하여 모터를 정지
motor_on 변수를 false로 변경하고, 시리얼 모니터에 "Motor stopped" 메시지를 출력
3. rotateCounterClockwise(): 모터를 반시계방향으로 회전시키는 함수
- motor_on 변수가 true인 경우에만 모터를 회전
- 디지털 출력(Dir1Pin_A, Dir2Pin_A)을 변경하여 모터를 반시계방향으로 회전시키고, 시리얼 모니터에 "Rotating counterclockwise" 메시지를 출력
4. rotateClockwise(): 모터를 시계방향으로 회전시키는 함수
- motor_on 변수가 true인 경우에만 모터를 회전
디지털 출력(Dir1Pin_A, Dir2Pin_A)을 변경하여 모터를 시계방향으로 회전시키고, 시리얼 모니터에 "Rotating clockwise" 메시지를 출력
코드 구현이 완료되었으니, 잘 작동하는지 확인
참고로 아두이노는 시리얼 모니터가 있기 때문에 그 부분에 입력하면 된다.
아두이노 IDE
표시된 번호를 순서대로 클릭해주면 된다.
1. 업로드 (실행)
2. 시리얼 모니터
Message라고 써있는 입력창에 s, p, q, r을 입력하면 해당 동작이 실행된다.
동작 영상
'사물인터넷 (IoT) > Arduino' 카테고리의 다른 글
아두이노 DC 모터 회로도 연결 및 모터 제어하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.04.17 |
---|