-
Step Motor를 연결하고 작동해보기Arduino/Step Motor 2020. 11. 12. 17:45
하드웨어 연결
연결은 쉽다.
Step Motor의 각 연결핀 IN4핀을 아두이노의 11번핀에 연결하고
Step Motor의 각 연결핀 IN2핀을 아두이노의 9번핀에 연결하고
Step Motor의 각 연결핀 IN3핀을 아두이노의 10번핀에 연결하고
Step Motor의 각 연결핀 IN1핀을 아두이노의 8번핀에 연결한다.
Step Motor의 -5핀은 아두이노의 GND핀에 연결하고
Step Motor의 +12V핀은 아두이노의 5V핀에 연결한다.
우선, 라이브러리를 써보고 구현을 직접해보자.
소스 코드
더보기#include <Stepper.h> // 회전각도 설정. 2048 한 바퀴 (360도), 1024 : 반바퀴(180도) const int stepsPerRevolution = 2048; // 모터 드라이브에 연결된 핀 IN4 IN2 IN3 IN1(핀 연결 설정) Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8); void setup() { // put your setup code here, to run once: myStepper.setSpeed(14); // 모터의 회전속도 조절 Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: // 반 시계 반대 방향으로 한바퀴 회전 Serial.println("counterclockwise"); myStepper.step(stepsPerRevolution); delay(1000); // 시계 반대 방향으로 한바퀴 회전 Serial.println("clockwise"); myStepper.step(-stepsPerRevolution); delay(1000); }
구현에 앞서, bitRead함수에 대해 알아보자.
소스 코드
더보기void setup() { // put your setup code here, to run once: Serial.begin(9600); // 15를 대입하면 아래에서 모두 1이 출력된다. Serial.print(bitRead(0b1000,0)); // 해당 2진수의 0번째 자리 수를 구하기 Serial.print(bitRead(0b1000,1)); // 해당 2진수의 1번째 자리 수를 구하기 Serial.print(bitRead(0b1000,2)); // 해당 2진수의 2번째 자리 수를 구하기 Serial.print(bitRead(0b1000,3)); // 해당 2진수의 3번째 자리 수를 구하기 } void loop() {}
실행결과
아래는 직접 구현한 예제이다.
모터를 시계방향으로 360도 회전하고 다시 반시계방향으로 360도 회전하는 예제이다.
소스 코드
더보기#define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 #define STEP 2048 int pinArray[4] = {IN1,IN2,IN3,IN4}; // 핀 배열 int CW[4] = {0b1000, 0b0100, 0b0010, 0b0001}; int CCW[4] = {0b0001, 0b0010, 0b0100, 0b1000}; void setup() { // put your setup code here, to run once: for (int i = 0; i < 4; i++) { pinMode(pinArray[i],OUTPUT); } } void loop() { // put your main code here, to run repeatedly: int temp; for (int i = 0; i < STEP; i++) { temp = i % 4; digitalWrite(pinArray[0],bitRead(CW[temp],0)); digitalWrite(pinArray[1],bitRead(CW[temp],1)); digitalWrite(pinArray[2],bitRead(CW[temp],2)); digitalWrite(pinArray[3],bitRead(CW[temp],3)); delay(3); } delay(1000); for (int i = 0; i < STEP; i++) { temp = i % 4; digitalWrite(pinArray[0],bitRead(CCW[temp],0)); digitalWrite(pinArray[1],bitRead(CCW[temp],1)); digitalWrite(pinArray[2],bitRead(CCW[temp],2)); digitalWrite(pinArray[3],bitRead(CCW[temp],3)); delay(3); } delay(1000); }
소스 코드
더보기#define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 #define STEP 2048 int pinArray[4] = {IN1,IN2,IN3,IN4}; // 핀 배열 int CW[4] = {0b1100, 0b0110, 0b0011, 0b1001}; int CCW[4] = {0b1001, 0b0011, 0b0110, 0b1100}; void setup() { // put your setup code here, to run once: for (int i = 0; i < 4; i++) { pinMode(pinArray[i],OUTPUT); } } void loop() { // put your main code here, to run repeatedly: int temp; for (int i = 0; i < STEP; i++) { temp = i % 4; digitalWrite(pinArray[0],bitRead(CW[temp],0)); digitalWrite(pinArray[1],bitRead(CW[temp],1)); digitalWrite(pinArray[2],bitRead(CW[temp],2)); digitalWrite(pinArray[3],bitRead(CW[temp],3)); delay(3); } delay(1000); for (int i = 0; i < STEP; i++) { temp = i % 4; digitalWrite(pinArray[0],bitRead(CCW[temp],0)); digitalWrite(pinArray[1],bitRead(CCW[temp],1)); digitalWrite(pinArray[2],bitRead(CCW[temp],2)); digitalWrite(pinArray[3],bitRead(CCW[temp],3)); delay(3); } delay(1000); }
소스 코드
더보기#define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 #define STEP 4096 // (2098 * 2) int pinArray[4] = {IN1,IN2,IN3,IN4}; // 핀 배열 int CW[8] = {0b1000, 0b1100, 0b0100, 0b0110,0b0010,0b0011,0b0001,0b1001}; int CCW[8] = {0b1000, 0b1001, 0b0001, 0b0011,0b0010,0b0110,0b0100,0b1100}; void setup() { // put your setup code here, to run once: for (int i = 0; i < 4; i++) { pinMode(pinArray[i],OUTPUT); } } void loop() { // put your main code here, to run repeatedly: int temp; for (int i = 0; i < STEP; i++) { temp = i % 8; digitalWrite(pinArray[0],bitRead(CW[temp],0)); digitalWrite(pinArray[1],bitRead(CW[temp],1)); digitalWrite(pinArray[2],bitRead(CW[temp],2)); digitalWrite(pinArray[3],bitRead(CW[temp],3)); delay(1); } delay(1000); for (int i = 0; i < STEP; i++) { temp = i % 8; digitalWrite(pinArray[0],bitRead(CCW[temp],0)); digitalWrite(pinArray[1],bitRead(CCW[temp],1)); digitalWrite(pinArray[2],bitRead(CCW[temp],2)); digitalWrite(pinArray[3],bitRead(CCW[temp],3)); delay(1); } delay(1000); }