이전 게시글에서 유튜브 영상 튜토리얼을 통해 배운 정말 기본 스텝모터 컨트롤을 다루었습니다!
https://study4machine.tistory.com/4
액추에이터 프로젝트1 - 스텝모터 컨트롤 기본
아두이노로 서보모터를 컨트롤 하는것은 인터넷, 책을 비롯해 많은 기본 예제 및 강의에서 다루고 있고, 저 또한 이를 응용해서 많은 경험을 했습니다. 하지만 어느샌가 각도제어의 제한도 없고
study4machine.tistory.com
오늘은 이 기본적인 모터 구동방식을 활용할 수 있도록 코드만 살짝 수정 해 볼게요
우선, 아두이노는 c언어를 기반으로 한 언어 이기 때문에 c언어와 거의 유사한 문법을 공유합니다.
그 중에서 for문 이라는 반복문 함수를 사용 해 볼건데요,
일단 회로도와 코드는 이렇습니다

int en = 2;
int step = 3;
int dir = 4;
void setup() {
pinMode(en, OUTPUT);
pinMode(step, OUTPUT);
pinMode(dir, OUTPUT);
digitalWrite(en, LOW); // 모터에 전원을 인가합니다
digitalWrite(step, LOW);
digitalWrite(dir, LOW); // 모터의 회전 방향을 반시계로 기본 설정 합니다
delay(1000); // 1초간 대기
}
void loop() {
int i; // for문을 위한 변수 i선언
for (i = 0; i < 800; i++ ){ // for( 초기값; i가 800이 되기 전까지; 반복문 한 사이클당 1씩 증가)
digitalWrite(step, HIGH); // 본 회로도 대로 연결할 경우, 800스텝이 한바퀴 회전 입니다.
delay(1);
digitalWrite(step, LOW);
delay(0.1); // 여기까지가 한 스텝 움직이는 코드, 이걸 800번 반복하여 한바퀴를 돌립니다.
}
digitalWrite(dir, HIGH); // 회전 방향을 시계방향으로 설정
for (i = 0; i < 800; i++ ){ // 딜레이 없이 바로 한바퀴 회전
digitalWrite(step, HIGH);
delay(1);
digitalWrite(step, LOW);
delay(0.1);
}
digitalWrite(dir, LOW); // 회전 방향을 다시 반시계로 설정
digitalWrite(en, HIGH); // 모터에 전원 공급 off
delay(2000); // 2초간 대기
digitalWrite(en, LOW); // 모터에 전원 공급 다시 on
delay(2000); // 2초간 대기
}
이 코드를 입력하면 결과적으로
반시계 방향으로 한바퀴 회전 -> 시계방향으로 한바퀴 회전 -> 2초동안 모터멈춤(모터 전원 off) -> 2초동안 모터멈춤(모터 전원 on)
이 실행됩니다.
여기서 시계방향으로 회전한 뒤 처음으로 모터가 멈추었을 때, 축을 잡고 돌리면 힘없이 돌아가버립니다. 그러고서 2초가 지나면 모터에 힘이 꽉 물리는? 느낌으로 축이 고정되어 안돌아가구요.
같은 코드의 내용을 아두이노 함수 기능을 통해 구현하면 다음과 같습니다.
int en = 2;
int step = 3;
int dir = 4;
void setup() {
pinMode(en, OUTPUT);
pinMode(step, OUTPUT);
pinMode(dir, OUTPUT);
digitalWrite(en, LOW);
digitalWrite(step, LOW);
digitalWrite(dir, LOW);
delay(1000);
}
void loop() {
CWrotation(); // loop 문의 내용이 간략화 되었습니다.
CCWrotation();
digitalWrite(en, HIGH);
delay(2000);
digitalWrite(en, LOW);
delay(2000);
}
void CWrotation() { // 시계방향 회전에 대한 내용
int i;
for (i = 0; i < 800; i++ ){
digitalWrite(step, HIGH);
delay(1);
digitalWrite(step, LOW);
delay(0.1);
}
digitalWrite(dir, HIGH);
}
void CCWrotation() { // 반시계방향 회전에 대한 내용
int j;
for (j = 0; j < 800; j++ ){
digitalWrite(step, HIGH);
delay(1);
digitalWrite(step, LOW);
delay(0.1);
}
digitalWrite(dir, LOW);
}
loop문 의 시계방향, 반시계방향 회전 내용을 함수를 통해 밖으로 뺀것이기 때문에 실행결과는 동일합니다.
지금 당장엔 코드가 더 길어졌지만, 나중엔 이러한 함수를 활용하여 동작을 구현 하는것이 더 효율적일 수도 있겠네요.
이상으로 스텝모터의 기본 동작에 대해 다뤄봤습니다 :)
궁금한 것이 있다면, 댓글 혹은 통학하는 공대생 인스타 DM으로 연락 주세요!
https://www.instagram.com/study_4_machine/
감사합니다
'공대스러운 > 액추에이터 프로젝트' 카테고리의 다른 글
| 액추에이터 프로젝트1 - 스텝모터 컨트롤 기본 (0) | 2023.08.22 |
|---|