코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-30 17:18:36
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | 아두이노 호환보드 |
2 | 바이폴라 스테핑 모터쉴드 | 1 | A4988드라이버 2개 포함 |
3 | 바이폴라 스테핑 모터 | 1 | SM-42byg011-25(4선 스텝모터 사용) |
4 | 8v-35v DC 어댑터 | 1 | 전원공급장치 |
부품명 | 오렌지 보드 | 바이폴라 스테핑 모터쉴드 | 바이폴라 스테핑 모터 | 8v-35v DC 어댑터 |
사진 | X1 | X1 | X1 | X1 |
SM-42BYG011-25 스테핑 모터 스펙
바이폴라 스테핑 모터쉴드
아래의 코드를 아두이노에 업로드 합니다.
//A4988 드라이버를 이용한 스테핑 모터 제어 예제
//VDD 는 Arduino 3.3v 나 5v에 연결합니다.
//GND 는 Arduino의 GND에 연결합니다.
//1A 와 1B 는 stepper coil 1에 연결합니다.
//2A 와 2B 는 stepper coil 2에 연결합니다.
//VMOT 는 외장전원의 +극에 연결합니다.
//GRD 는 외장전원의 -극에 연결합니다.
// 최종수정 : www.kocoafab.cc
int m1stp = 5; //첫벗째 스텝모터의 stp를 5번핀에 연결합니다.
int m1dir = 4; //첫번째 스텝모터의 dir를 4번핀에 연결합니다.
int m2stp = 6; //두번째 스텝모터의 stp를 6번핀에 연결합니다.
int m2dir = 7; //두번째 스텝모터의 dir을 7번핀에 연결합니다.
int a = 0; //a라는 변수를 통해 스텝을 카운트 합니다.
int d;//d라는 변수를 선언하여 임의의 딜레이 값으로 활용합니다.
void setup()
{
d = 1; // d의 초기값을 1로 설정하여 1밀리초만큼의 대기시간으로 회전합니다
Serial.begin(9600);//시리얼통신을 시작합니다.
pinMode(m1stp, OUTPUT);//m1stp를 출력으로 설정합니다.
pinMode(m1dir, OUTPUT);//m1dir을 출력으로 설정합니다.
pinMode(m2stp, OUTPUT);//m2stp를 출력으로 설정합니다.
pinMode(m2dir, OUTPUT);//m2dir을 출력으로 설정합니다.
}
void loop()
{
if (Serial.available())// 시리얼 통신이 가능할때,{
d = Serial.read() - 48;// 입력된 문자값을 읽고 -48을 빼준값을 d(딜레이)값으로 사용합니다.
Serial.println(d);//시리얼 모니터에 d값을 출력합니다.
}
if (a < 1000) //만약 a가 1000보다 작을때,
{
a++;//a의 값을 계속 증가시키고,
digitalWrite(m1stp, HIGH); //각각의 stp를 HIGH로 합니다,
digitalWrite(m2stp, HIGH);
delay(d); //d밀리초만큼 대기한뒤
digitalWrite(m1stp, LOW); // stp를 LOW로 합니다.
digitalWrite(m2stp, LOW);
delay(d); // d밀리초만큼 대기합니다.
} else //아닐경우,
{
digitalWrite(m1dir, HIGH);//dir을 HIGH로 출력하고,
digitalWrite(m2dir, HIGH);
a++;//a값을 증가시킵니다.
digitalWrite(m1stp, HIGH);//stp를 HIGH로 출력하고,
digitalWrite(m2stp, HIGH);
delay(d); //d밀리초 만큼 대기한뒤,
digitalWrite(m1stp, LOW);//stp를 LOW로 출력합니다.
digitalWrite(m2stp, LOW);
delay(d);//d밀리초만큼 대기합니다.
if (a>2000) //a가 2000보다 커지면,
{
a = 0;//초기화를 합니다.
digitalWrite(m1dir, LOW);
digitalWrite(m2dir, LOW);
}
}
}
스케치 설명
int m1stp = 5; //첫벗째 스텝모터의 stp를 5번핀에 연결합니다.
int m1dir = 4; //첫번째 스텝모터의 dir를 4번핀에 연결합니다.
int m2stp = 6; //두번째 스텝모터의 stp를 6번핀에 연결합니다.
int m2dir = 7; //두번째 스텝모터의 dir을 7번핀에 연결합니다.
int a = 0; //a라는 변수를 통해 스텝을 카운트 합니다.
int d;//d라는 변수를 선언하여 임의의 딜레이 값으로 활용합니다.
stp는 스텝모터의 상을 제어합니다.
상이 HIGH,LOW(켜고 꺼짐)속도에 따라 회전속도가 변화합니다.
dir는 스텝모터의 방향을 제어합니다.
a라는 변수는 스텝모터의 스텝을 카운트 합니다.
d라는 변수는 시리얼 모니터 통신을 통해 속도를 제어하기 위해 사용됩니다.
if (Serial.available())// 시리얼 통신이 가능할때,{ d = Serial.read() - 48;// 입력된 문자값을 읽고 -48을 빼준값을 d(딜레이)값으로 사용합니다. Serial.println(d);//시리얼 모니터에 d값을 출력합니다.
시리얼 통신을 통해 앞서 선언한 변수 'd'의 값을 제어하는데,
d는 앞으로 delay값으로 사용되며 스텝모터의 회전속도에 영향을 줍니다.
이는 지연시간을 통해 펄스 신호의 주파수를 제어합니다.
입력된 문자값에 -48을 빼줍니다.
-48이라는 연산이 없으면,
숫자 1을 입력 했을때 , 49라는 값이 출력됩니다.
시리얼 모니터를 통해
1-9의 숫자입력으로 속도를 제어되고,
0을 입력하면 스텝모터가 멈추게 됩니다.
if (a < 1000) //만약 a가 1000보다 작을때,
{
a++;//a의 값을 계속 증가시키고,
digitalWrite(m1stp, HIGH); //각각의 stp를 HIGH로 합니다,
digitalWrite(m2stp, HIGH);
delay(d); //d밀리초만큼 대기한뒤
digitalWrite(m1stp, LOW); // stp를 LOW로 합니다.
digitalWrite(m2stp, LOW);
delay(d); // d밀리초만큼 대기합니다.
} else //아닐경우,
{
digitalWrite(m1dir, HIGH);//dir을 HIGH로 출력하고,
digitalWrite(m2dir, HIGH);
a++;//a값을 증가시킵니다.
digitalWrite(m1stp, HIGH);//stp를 HIGH로 출력하고,
digitalWrite(m2stp, HIGH);
delay(d); //d밀리초 만큼 대기한뒤,
digitalWrite(m1stp, LOW);//stp를 LOW로 출력합니다.
digitalWrite(m2stp, LOW);
delay(d);//d밀리초만큼 대기합니다.
if (a>2000) //a가 2000보다 커지면,
{
a = 0;//초기화를 합니다.
digitalWrite(m1dir, LOW);
digitalWrite(m2dir, LOW);
}
}
}
a라는 카운터를 통해 일정 스텝이상 진행되면,
방향을 바꾸도록 설정하였습니다.
또한 2000스텝 이상일 경우,
초기화하여 0부터 다시 스텝카운터가 진행됩니다.
따라서 0부터 시작하여 스텝카운터가 1000 이상이되면, 방향을 반대 방향으로 바꾸고,
2000보다 커지면 다시 방향을 바꾸게 됩니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!