Arduino Uno 로 조이스틱 모듈(Joystick Module)을 사용해서 28BYJ-48 스테핑모터를 제어해 보는 프로젝트입니다
먼저 Arduino Uno 로 조이스틱 모듈(Joystick Module)을 사용해서 SG90 마이크로 서보모터와 LED를
제어해 보는 프로젝트입니다
<아두이노 조이스틱 모듈 이미지>
조이스틱 모듈은 Arduino 또는 AVR, STM 등의 마이크로컨트롤 보드와 연결해 입력 장치로 사용할수 있습니다
X,Y 축의 움직임은 2개의 5K 전위차계를 통해서 아날로그 신호로 출력되며 Z축은 스위치 처럼 눌러서
디지털 신호로 출력 가능합니다
<SG90 마이크로 서보모터 이미지>
서보모터(Servo Motor)는 모터와 제어구동보드(적당한 제어 회로와 알고리즘)를 포함하는 것으로
모터 자체만 가지고 서보모터라고 부르지 않습니다
서보모터의 개념은 모터와 구동 시스템 까지 포함하는 것으로 흔히 볼수 있는 공작기계, CCTV 카메라, 캠코더, 프린터 등에서사용되는 모터와 같이 명령에 따라 정확한 위치와 속도를 제어할수 있는 모터를 서보모터라고 부릅니다
서보 모터는 일반 모터와 달리 회전 반경이 정해져 있습니다. 종류에 따라 다르지만 일반적으로 약 0~270도 범위의 회전각을 가집니다
서보모터의 회전 각도는 아래 그림과 같이 PWM (펄스폭변조) 방식으로 제어합니다
다양한 종류의 서보 모터가 있지만 SG90 마이크로 서보 모터와 MG90S 메탈기어 서보모터를 사용해 보겠습니다
SG90 마이크로 서보 모터 Servo Motor 는 9g 급으로 동작 전압이 4.2V ~ 6V 로 아두이노로 테스트 하기 적합 합니다
회전각도 는 180도 이며 동작 속도는 0.1 s/60 degree 입니다
사용된 부품
Arduino Uno R3 (Italy)
브래드 보드
조이스틱 모듈
점퍼케이블
5mm LED 블루
막대저항 220 Ohm
구성 배선도
사용된 예제소스
주의사항
SG90 마이크로 서보모터는 전압과 전류가 충분히 필요하므로 꼭 5V로 연결합니다
(테스트 동영상과 배선도를 보면 알수 있듯이 외부전원 5V로 공급하였습니다)
외부전원없이 그냥 아두이노로 전원을 공급하고자 한다면 조이스틱 모듈을 3.3V로
SG90 마이크로 서보모터는 5V로 연결하면 됩니다
대신 이경우 조이스틱 모듈의 전원이 부족해서 출력값이 줄어 서보모터의 회전각 역시
줄어들게 되므로 이점 참고해야 겠습니다
예제코드를 살펴보면
#include <Servo.h>
Servo.h 라이브러리를 사용합니다
const int AXIS_X = A0;
const int AXIS_Y = A1;
const int SW_P = 3;
조이스틱 모듈의 X는 아날로그 A0에, Y는 아날로그 A1에
스위치는 디지털 3번핀으로 세팅됩니다
const int servoPin = 9;
const int blueLed = 13;
서보모터는 9번핀에 블루LED는 13번핀에 세팅됩니다
m_Angle = map(analogRead(AXIS_X),0,1023,0,180);
아두이노 5V의 아날로그 출력값인 1023을 서보모터 180로 제어합니다
A0에 연결된 조이스틱 X축을 사용해서 서보모터를 제어합니다
(때문에 조이스틱 모듈을 3.3V에 연결하면 회전이 덜 할수 밖에 없습니다)
digitalWrite(blueLed,digitalRead(SW_P));
스위치 핀을 눌러서 LED를 제어합니다
프로젝트 동영상
이렇게 간단하게 조이스틱 모듈로 서보모터와 LED를 제어하는 방법을 확인해 보았습니다
응용해서 전원만 잘 갖춰진다면 여러개의 조이스틱 모듈도 제어할수 있지 않을까 싶습니다
이어서 Arduino Uno 로 조이스틱 모듈(Joystick Module)을 사용해서
28BYJ-48 스테핑모터를 제어해 보는 프로젝트입니다
사용된 부품
Arduino Uno R3 (Italy)
브래드 보드
조이스틱 모듈
5V 스테핑모터 28BYJ-48 & ULN2003 드라이버
점퍼케이블
구성배선도
사용된 예제소스
주의사항
스테핑모터를 구동시키려면 충분한 전류(A)가 필요하므로 전력이 괜찮은 노트북이나 테스크탑 PC로 테스트 합니다
USB허브등을 사용하는 경우도 전류가 부족해서 모터가 구동이 안되거나 토크가 부족할수 있습니다
예제코드를 살펴보면
#include <Stepper.h>
Stepper.h 라이브러리를 사용합니다 (아두이노 IDE 설치시 기본 설치되는 라이브러리 입니다)
#define STEPS 32
스테핑모터 회전수는 32로 세팅입니다
28BYJ-48 스테핑모터는 감속비가 64/1 이고 1회전당 2048(64X32) 스텝으로 구성됩니다
#define IN1 11
#define IN2 10
#define IN3 9
#define IN4 8
스테핑모터 핀세팅입니다, 아두이노 8,9,10,11번 핀에 연결됩니다 (11,10,9,8)로 연결해도 상관없습니다
정방향과 역방향만 바뀌게 됩니다
#define joystick A0
조이스틱 모듈 X축은 아두이노 A0번 핀에 연결됩니다
int val = analogRead(joystick);
조이스틱 모듈의 아날로그 입력값을 출력해 줍니다
// if the joystic is in the middle ===> stop the motor
if( (val > 500) && (val < 523) )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
if문을 사용해서 아날로그 출력값이 500~523 사이일때 모터는 정지하게 됩니다
(아두이노의 아날로그 출력값은 0~1023)
else
{
// move the motor in the first direction
while (val >= 523)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val, 523, 1023, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(1);
val = analogRead(joystick);
}
else 그밖의 아날로그 출력값이 523 이상은 경우 5-500RPM 범위로 정회전 합니다
// move the motor in the other direction
while (val <= 500)
{
// map the speed between 5 and 500 rpm
int speed_ = map(val, 500, 0, 5, 500);
// set motor speed
stepper.setSpeed(speed_);
// move the motor (1 step)
stepper.step(-1);
val = analogRead(joystick);
}
그밖의 아날로그 출력값이 500 이하인 경우 5-500RPM 범위로 역회전 합니다
프로젝트 동영상
참고! 조이스틱 모듈없이 Arduino Uno로 28BYJ-48 스테핑모터를
ULN2003 드라이버를 사용해서 구동시키는 기본예제입니다
구성배선도
사용된 라이브러리
사용된 예제소스
프로젝트 동영상
댓글