DRI0023 아두이노 모터쉴드보드를 사용하는 밸런싱 로봇 스테퍼 모터 전류 조정 시험
파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자.
머신 러닝을 배우려는 초보자들이 가지게 될 의문점들을 하나하나 찾아내어
실제 풀어보고 결과를 확인해볼 수 있도록 완전히 뒷문으로 들어가 시작하는 머신 러닝!
____________________________________________________________________________
DRI0023 스테퍼 모터 드라이브를 위한 아두이노 쉴드 보드 사용법을 알아보자. 이 실험을 위해서는 파워서플라이라는 장치가 필요하다. 전자과나 정보통신과에서 흔히 사용하는 기자재로서 배터리를 대신하여 일정한 수준의 전압을 제공함과 동시에 일정한 법위의 전류를 흘려주는 기능이 있다.
스테퍼 모터도 반드시 커넥터를 제공해주는 모델을 사도록 주의하자. 사진과 같이 단순히 꽂으면 된다.
이 실험의 목적은 DRI0023 아두이노 쉴드 보드를 다음과 같이 배선하여 전류 성능을 확인해 보는 것이다. 위 사진을 참고하면 스테모터 배선은 이미 완료가 되었다.
전류성능 시험을 시작하기 전에 쉴드보드의 Micro resolution selection of Motor X 와 Y 의 3개의 스위치들이 전부 반드시 LOW에 설정되어 있는지 확인하자. 이는 스테퍼 모터의 Full Step 해상도를 사용하는 경우이다.
아두이노 우노보드는 쉴드보드를 끼우기 전에 첨부된 단순 모터 회전 확인을 위한 코드를 컴파일 업로딩 해둔다. 반드시 테스트 코드가 들어가 있어야 이 실험이 가능함에 유의하자. 업로딩이 끝난 후 DRI0023 보드와 조립하고 9V 전지를 사용하여 어댑터에 전원을 공급한다. 대개의 RC카 전원 공급 방식을 관찰해 보면 아두이노 전원과 모터 회전을 위한 전원공급이 따로따로 분리되어 있다.
배선 준비가 완료되었으면 파워서플이의 전원을 on 하자. 이 스위치가 전원 스위치가 된다. 전류(current) 가 0.0A인 상태에서 Voltage 스위치를 돌려 12V로 조정하자. 소숫점 이하는 Fine 스위치를 돌려 맞추도록 한다. 이렇게 되면 스테퍼 모터 드라이브 회로에 일정한 12V 의 전압이 가해지는 상태이지만 아직 전류흐름이 안정화 되어 있는 것은 아니다.
전류 스위치를 서서히 돌리게 되면 다음과 같이 전압이 7V 대로 툭 떨어지면서 스테퍼 모터에서 듣기 괴로운 잡음이 발생하다. 그래도 서서히 전류 손잡이를 돌려 1A 가 넘어갈 때까지 돌리면 갑자기 튜닝이 되면서 전압이 12V 로 전류는 0.7A 로 설정되면서 2개의 스태퍼 모터가 경쾌하게 회전하게 된다.
이 과정을 동영상을 통해서 파워서플라이의 전압전류 값 변동과 잡음 및 최종 튜닝 상태를 관찰해 보자. 한편 아직 의문점은 리튬폴리머 배터를 사용해서 자동적으로 0.7A를 공급하는지 확인하는 과정을 남겨 두고 있는데 밸런싱 로봇을 꾸미려면 결국 리튬배터리 전압에서 저항 회로를 사용 분압하여 5V를 아두이노 보드에 공급하는 회로를 부가해야 할 필요가 있을 것이다. 이 부분은 차후에 시제작하여 결과를 제시할 예정이다.
https://youtu.be/DgBTbbaZ8xs
첨부된 아두이노 코드를 DRI0023쉴드보드를 끼우기 전에 반드시 컴파일 업로딩 해두자.
//stepmotor_test_01
int M1dirpin = 7; //Motor X direction pin
int M1steppin = 6; //Motor X step pin
int M1en=8; //Motor X enable pin
int M2dirpin = 4; //Motor Y direction pin
int M2steppin = 5; //Motor Y step pin
int M2en=12; //Motor Y enable pin
void setup() {
pinMode(M1dirpin,OUTPUT);
pinMode(M1steppin,OUTPUT);
pinMode(M1en,OUTPUT);
pinMode(M2dirpin,OUTPUT);
pinMode(M2steppin,OUTPUT);
pinMode(M2en,OUTPUT);
digitalWrite(M1en,LOW);// Low Level Enable
digitalWrite(M2en,LOW);// Low Level Enable
}
void loop() {
int j;
delayMicroseconds(2);
digitalWrite(M1dirpin,LOW);
digitalWrite(M2dirpin,LOW);
for(j=0;j<=5000;j++) {
digitalWrite(M1steppin,LOW);
digitalWrite(M2steppin,LOW);
delayMicroseconds(2);
digitalWrite(M1steppin,HIGH); //Rising step
digitalWrite(M2steppin,HIGH);
delay(1);
}
}//End