[아두이노#618] arduino에 accelstepper 라이브러리로 스탭모터(28byj-48)와 드라이버(uln2003)를 마이크로스탭으로 제어하는 방법!(녹칸다의 아두이노)
프로그래밍/아두이노 호작질 2025. 2. 17. 23:11
https://youtube.com/live/5-aWJF_npLQ
[아두이노#618] arduino에 accelstepper 라이브러리로 스탭모터(28byj-48)와 드라이버(uln2003)를 마이크로스탭으로 제어하는 방법!
(준비물)
5V용 28byj-48
12V용 28byj-48
스탭모터 드라이버(uln2003)
아두이노
외부전원(5V, 12V)
(대략적인 목차)
1.녹칸다가 기본 stepper 라이브러리에서 accelstepper라이브러리로 바꾸려는 이유 알아보기!
2.아두이노에 스탭모터 1개 연결해서 속도제어, 위치제어를 accelstepper 라이브러리로 구현해보기!
3.버튼이나 가변저항 등을 이용해서 제어해보기!
4.스탭모터가 2개일때 반전된 신호를 입력해보기!
5.스탭모터가 2개일때 개별 제어해보기!
6.스탭모터 2개를 시리얼입력이나 버튼으로 제어해보기!
(필요라이브러리-설치해야함)
라이브러리 매니저에서 accelstepper 검색해서 설치하기!(1.61.0버전)
(깨알지식)
1.스탭모터는 5V용이 있고 12V용이 있는데 12V용은 뒷면에 스티커가 없다!
2.아두이노가 스탭모터 1개를 제어할때는 아두이노에서 출력되는 5V로써 충분히 제어가 가능하다! 그러나 5V용이라 하더라도 2개이상부터는 5V아답터(외부전원)가 필요하다!
3.스탭모터 12V용은 아두이노에 전원으로 해당이 없기 때문에 1개던 2개던 무조건 외부전원이 필요하다!
4.오늘녹칸다가 할 제어방식은 속도제어와 위치제어이다!
5.생성자의 구성 AccelStepper(A,B,C,D,E);
- A는 4라고 쓰면 풀스탭, 8이라고쓰면 하프스탭!
- B,C,D,E는 순서대로 4개의 신호선을 연결하면됨!
6.풀스탭과 하프스탭의 차이는 풀스탭은 2048스탭에 360도 회전하고 하프스탭은 4096스탭에 360도 회전하기 때문에 하프스탭이 조금더 정밀하다고 볼 수 있음! 단, 하프스탭은 풀스탭에 비해서 토크와 속도가 떨어진다고 함!
7.accelstepper 생성자 1개당 스탭모터 1개가 되고 서로 다른 변수명으로 생성하면됨!
8.스탭모터 모양이 같다고 동일한 신호에 똑같은 방향으로 회전하는게 아니다! 구입할때 서로다른 구매처에서 구입했다면 회전방향이 반대일 수 도있음!
9.스탭모터의 최대속도는 녹칸다가 실험적으로 해보았을때 1300정도가 한계였다! (안정적인것은 대략 1200정도)
10.스탭모터 2개의 IN1,IN2,IN3,IN4가 아두이노의 똑같은 신호선에 연결되면 스탭모터는 동시에 똑같은 제어신호로 회전한다!
11.상대적으로 스탭량이 더 긴 스탭모터의 속도와 가속도를 기준으로해서 이동량이 짧은 스탭모터에 스탭량의 비율로써 속도와 가속도를 설정한다!
12.외부전원5V를 12V로 교체하고 5V스탭모터를 12V스탭모터로 교체하면 모든 예제를 동일한 코드로 사용가능함!
(예제목차)
1.아두이노에 스탭모터를 2,3,4,5번핀에 신호선을 연결하고 accelstepper 라이브러리를 적용해서 속도제어를 하는데, 시리얼모니터에 1을 입력하면 시계방향으로 회전하고 0을 입력하면 정지하고 2를 입력하면 반시계방향으로 회전하도록 하시오!(고정속도)
2.이번에는 시리얼입력으로 속도를 입력하고 입력된 속도대로 회전하도록 하시오! 예를들어 500이라고 입력하면 시계방향으로 500의 속도로 회전하고 -300이라고 입력하면 시계반대방향으로 300의 속도로 회전하고 0을 입력하면 멈추는 것이다!
3.아두이노에 10,11,12에 버튼을 3개 연결하고 버튼1을 누르면 1000의 속도로 시계방향, 버튼2를 누르면 정지, 버튼3을 누르면 1000의 속도로 반시계방향 회전하도록 하시오!
////여기서부터 외부전원이 필요함!
4.예제1번에서 6,7,8,9번핀에 스탭모터를 1개더 연결하고 아래와 같은 명령으로 동작하도록 하시오!
스탭모터1번 : 0(정지),1(시계),2(반시계)
스탭모터2번 : 3(정지),4(시계),5(반시계)

////여기부터는 위치제어를 해봄
5.스탭모터를 2,3,4,5에 연결하고 시리얼입력으로 0을 입력하면 원위치, 1을 입력하면 90도위치, 2를 입력하면 180도 위치, 3을 입력하면 270도 위치, 4를 입력하면 360도, 5를 입력하면 -90도, 6을 입력하면 -180도, 7을 입력하면 -270도, 8을 입력하면 -360도로 회전하도록 하시오!
6.예제5번에서 녹칸다가 원하는 위치를 시리얼입력하면 해당하는 위치로 이동되도록 하시오!(스탭량과 각도를 변환하는 함수를 이용하시오)
7.스탭모터를 6,7,8,9에 하나더 연결하고 아래와 같은 규칙에 의해서 스탭모터 2개가 개별적으로 제어되도록 하시오!
0입력 : 스탭모터 2개가 다 원점으로 돌아옴!
1입력 : 스탭모터1이 180도 회전함
2입력 : 스탭모터1이 360도 회전함
3입력 : 스탭모터1이 -180도 회전함
4입력 : 스탭모터1이 -360도 회전함
5입력 : 스탭모터2이 180도 회전함
6입력 : 스탭모터2이 360도 회전함
7입력 : 스탭모터2이 -180도 회전함
8입력 : 스탭모터2이 -360도 회전함
8.버튼을 10,11,12번에 추가해서 버튼1,버튼2,버튼3이라 부르고 버튼1을 누르면 스탭모터1번과 2번이 동시에 360의 위치로가고 버튼2를 누르면 0의 위치로가고 3을 누르면 -360의 위치로 가도록 하시오!
9.시리얼입력으로 스탭모터 2개의 목표위치가 서로 차이가 날 경우 똑같이 출발해서 똑같이 도착하도록 하려면 어떻게 해야겠는가?
0입력 : 스탭모터1과 스탭모터 2가 동시에 0의 위치로 이동
1입력 : 스탭모터1은 360도, 스탭모터2는 90도 회전하는데 동시에 도착할 것!
2입력 : 스탭모터1은 270도, 스탭모터2는 -90도 회전하는데 동시에 도착할 것!




