티스토리 뷰


관련 글 보기:

[아두이노] 스텝 모터 사용하기


    포텐셔미터(가변저항)를 이용해서 스탭 모터를 제어해 보겠습니다. 스텝 모터는 크게 돌아가는 각도, 방향, 속도로 제어할 수 있습니다. 포텐셔미터로는 속도와 방향을 제어해 보겠습니다. 포텐셔미터를 중간에 놔두면 정지해 있습니다. 한쪽으로 돌리면 돌리는 각도에 따라서 모터의 속도가 점차 빨라집니다. 다른 쪽으로 포텐셔미터를 돌리면 반대 방향으로 돌아가게 만들어 보겠습니다.

 

완성된 회로도






완성된 코드

#include <Stepper.h> #define STEPS 2037 Stepper myStepper(STEPS, 8, 10, 9, 11); int Control = A0; int Steps; int motorSpeed; void setup() { Serial.begin(9600); } void loop() { Control = analogRead(A0); Serial.println(Control); Serial.println(); if( Control < 400 ){ Steps = -100; // when potentiometer turned left, motor rotation is CW motorSpeed = map(Control, 1, 400, 15, 5); // Map potentiometer to the motor speed } else if (Control > 700){ Steps = 100; // when potentiometer turned right, motor rotation is CCW motorSpeed = map(Control, 700, 1024, 5, 15); // Map potentiometer value to the motor speed } else if (Control > 400 && Control <700){ // When potentiometer is center, stop rotation Steps = 0; } myStepper.setSpeed(motorSpeed); // Rotation Speed myStepper.step(Steps); // Rotate angle as Steps delay(10); }


    포텐셔미터는 돌리는 정도에 따라 저항이 변합니다. 포텐셔미터 중간에 있는 다리에 0-5V 사이 값이 나오며 이를 아날로그 입력 핀에 연결해주면 아두이노는 전압크기에 따라 0-1024 값으로 읽습니다. 이 아날로그 값은 스탭 모터 속도로 사용하겠습니다.

우선 포텐셔미터가 중간에 있을 때는 모터가 멈춰야 하니 아날로그 입력 값이 400~700사이는 Steps 값을 0으로 하겠습니다.

   Steps = 0;

그 다음 포텐셔미터를 한쪽으로 돌려 아날로그 입력 값이 400보다 낮아지면 모터가 돌아가도록 하겠습니다. 이 때 포텐셔미터를 더 돌릴 수록(아날로그 값이 더 낮아질 수록) 모터 회전속도가 더 빨라져야 합니다. 따라서 아날로그 입력이 400일 때 제일 느리고(속도: 5), 0일 때 제일 빠릅니다(속도: 15). 아래와 같이 Mapping 해줍니다.

   motorSpeed = map(Control, 1, 400, 15, 5); 

만약 포텐셔미터를 반대로 돌려 아날로그 입력 값이 700보다 높으면 모터가 반대로 돌아갑니다. 이번에는 입력값이 높을 수록 모터 회전이 빠르므로 아래와 같이 Mapping 해줍니다.

   motorSpeed = map(Control, 700, 1024, 5, 15);


작동 모습

<그림 3> 스탭모터 포텐셔미터로 제어하기

포텐셔미터를 돌리는 방향에 따라 모터가 방향을 바꿔가면 회전합니다. 그리고 포텐셔미터를 돌릴 수록 모터가 빨리도는 것을 볼 수 있습니다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함