현재 제작하는 RC카 구조의 카메라 슬라이더 장착하려고 stepper motor 2개를 동시에 제어하는 부분을 찾아보고 있습니다. 아두이노 기본라이브러리는 동시 제어가 안됩니다.
구글링으로 AccelStepper라는 라이브러리를 구했는데 첨부된 샘플이 가속, 감속이 되도록 했더군요. 이 가, 감속 제어도 만만치 않고 제가 원하는 기능은 등속으로 회전하는 것입니다.
사용된 부품은 아두이노 uno, 브레드보드, 스테퍼 모터 28YBJ-48 2개, 모터 드라이버 ULN2003 2개, 전선 몇 개 입니다.
■ 28YBJ-48 2개, 모터 드라이버 ULN2003
모터와 드라이버가 한셋으로 된 것을 샀습니다. 비교적 저가인데 나름 정확하게 동작하네요. 내구성은 아직 모르겠습니다.
자세한 설명은 이곳에 더 잘되어 있으니 생략할께요. 스펙은 아래와 같습니다.
- 4 Phase 5 Wire Connection
- StepperMotor5V-2.jpg100% Brand New
- Phase : 4
- Current : 160 mA per winding (320 mA in 4-step mode) Measured: 250mA stopped, 200 mA running fast
- Resistance : 31 Ω per coil winding (from Red wire to any coil) (Some 24-28 ohms)
- Voltage : 5V DC
- Step Angle (8-Step sequence: Internal Motor alone): 5.625° (64 steps per revolution)
- Step Angle (4-Step sequence: Internal Motor alone): 11.25° (32 steps per revolution)
- Gear Reduction ratio: 1 / 64 (Not really exact: probably 63.68395.:1 )
- SO: it takes (64*64 = 4096 steps per output shaft revolution.. In 8-step sequence.
- SO: it takes (32*64 = 2048 steps per output shaft revolution.. In 4-step sequence.
- NOTE: Arduino "Stepper Library" runs in 4-step mode
- No-Load Pull-Out Frequency : 800pps
- No-Load Pull-In Frequency : 500pps
- Pull-In Torque : ≥ 78.4mN.m
- Wiring Instruction : A (Blue), B (Pink), C (Yellow), D (Orange), E (Red, Mid-Point)
- Weight : 30g
■ 아두이노와 배선 방법
드라이버의 1, 2, 3, 4 번을 아두이노 8, 9, 10, 11 번 핀과 연결합니다. 모터가 하나더 추가될 때 마찬가지로 다른핀에 순서대로 연결만 해주면 됩니다. 저는 아두이노 4, 5, 6, 7 번 핀에 모터를 하나 더 연결 했습니다. 드라이버의 1 ~ 4번 핀 순서를 섞으면 안됩니다. 이유는 소스코드에서 설명됩니다.
■ Source Code
-> 먼저 라이브러리를 받아야 합니다. 라이브러리에 첨부된 예제는 가, 감속 함수로 되어 있습니다. 등속 회전이 필요한 경우는 소스나 라이브러리내 doc을 보고 찾아내야 하는데 그 부분은 아래 소스에 있습니다.
-> 기본 동작
w : 전진, d : 후진, a : 왼쪽, d : 오른쪽, q : 제자리 왼쪽 회전, e : 제자리 오른쪽 회전
-> Source Code download
-> 연결하기
- #define mtrPin1 8 // IN1 on the ULN2003 driver 1
- #define mtrPin2 9 // IN2 on the ULN2003 driver 1
- #define mtrPin3 10 // IN3 on the ULN2003 driver 1
- #define mtrPin4 11 // IN4 on the ULN2003 driver 1
- #define mtrPin_1 4 // IN1 on the ULN2003 driver 2
- #define mtrPin_2 5 // IN2 on the ULN2003 driver 2
- #define mtrPin_3 6 // IN3 on the ULN2003 driver 2
- #define mtrPin_4 7 // IN4 on the ULN2003 driver 2
- AccelStepper stepper1(HALFSTEP, mtrPin1, mtrPin3, mtrPin2, mtrPin4);
- AccelStepper stepper2(HALFSTEP, mtrPin_1, mtrPin_3, mtrPin_2, mtrPin_4);
모터 2개가 각각 아두이노의 8 ~ 11번, 4 ~ 7번 핀에 연결 되어 있습니다. 여기서 주의 할 점은 AccelStepper 클래스 생성할때 핀번호가 매개변수가 되는데 첫번째 세번째가 한쌍, 두번째 네번째가 한쌍입니다. 그래서 매개변수가 mtrPin1, mtrPin3, mtrPin2, mtrPin4 이렇게 됩니다.
-> 속도 방향 제어하기
가, 감속 제어는 라이브러리에 충분한 샘플이 있으므로 저는 등속 제어만 설명하겠습니다. 위에 첨부된 소스 코드도 등속 제어입니다.
- stepper1.setMaxSpeed(2000.0); // 최대속도는 항상 선언해주어야 합니다. setup()에 한번만 선언
- stepper1.move(leftWheelForeward); // 가, 감속은 moveTo, 등속은 move 함수를 사용합니다.
- stepper1.setSpeed(500); //move 후에 setSpeed를 호출해야 합니다.
- stepper1.runSpeedToPosition(); // 가, 감속은 run, 등속은 runSpeedToPosition을 사용합니다.
모터를 2개 사용한다면
- stepper1.move(leftWheelForeward);
- stepper2.move(rightWheelForeward);
- stepper1.setSpeed(500);
- stepper2.setSpeed(500);
- stepper1.runSpeedToPosition();
- stepper2.runSpeedToPosition();
이렇게 각각의 인스턴스를 실행해주면 됩니다.
0:00 => 가속, 감속 모드 , 동일 스텝
0:40 => 가,속 감속 모드 , 다른 스텝
1:13 => 동일 속도 모드, RC카처럼 자유 컨트롤 됩니다. 첨부된 소스코드로 작동 되는 부분
컨트롤 종류 => w : 전진, d : 후진, a : 왼쪽, d : 오른쪽, q : 제자리 왼쪽 회전, e : 제자리 오른쪽 회전
'Hobby > 아두이노' 카테고리의 다른 글
MIT App Inventor program : 아두이노로 만든 RC 카 블루투스 컨트롤 앱 (0) | 2018.06.17 |
---|---|
아두이노 아날로그 센서 사용팁 (0) | 2018.06.14 |
아두이노 나노 Serial port busy 업로드 에러 해결 방법 (0) | 2018.06.09 |
우분투 가상화 환경에 아두이노 설치, 포트 설정하기 (0) | 2018.06.06 |
스테퍼 모터 발열을 줄이는 방법 (0) | 2018.06.05 |
Servo motor bracket assemble and arduino source code (0) | 2018.05.30 |
아두이노 RC카 시제품 도면 완성 기념 스샷 (0) | 2018.05.22 |
댓글0