아두이노 스텝모터 제어에 대하여..
페이지 정보
작성자 sims 작성일20-01-13 22:02 조회14,309회 댓글0건첨부파일
본문
안녕하세요 스텝모터 제어와 관련하여 구글링 하던 도중 이 사이트를 알게 되어 처음 가입했습니다.
다름이 아니라 아래 소스코드에서 한가지 질문이 있어서 질문글을 작성합니다. (몇몇 사항들을 다시 한 번 확인 해 보니 디버깅하였고 게시글도 수정했습니다.)
//Arduino Mega를 사용합니다.
/*작동 방법은 다음과 같습니다.
*
먼저 arduino의 전원을 on하면 스크류를 이용한 슬라이더의 위치를 정렬합니다.
다음으로 up, down 버튼을 눌러 motor2의 회전수를 설정합니다.
startbutton을 누르게 되면 설정 값 만큼 회전하기 위해
motor2가 작동됨과 동시에 motor1은 motor2가 설정값을
만족시킬 때 까지 1000 step 씩 스크류를 이용한 슬라이더를
좌, 우로 왕복 운동합니다.
이후 설정값을 만족 시키게 되면 motor1과 motor2는 모두 정지하고
0.5초의 딜레이가 주어진 후 슬라이드를 원 위치로 복귀시키기 위해
motor1을 +방향으로 회전합니다.
슬라이드가 움직여 홈 위치에 있는 reset버튼을 눌러 홈 위치를 인식하게 되면
스위치와의 약간의 간격을 두기 위해 -100step 정도를 움직입니다.
*/
#include
#define STEPS 200// 1.8 deg/step, 360/1.8 = 200
#define rotation 200// limitless rotation
Stepper motor1(STEPS, 8, 10, 9, 11);
Stepper motor2(rotation, 4, 5, 6, 7);
int startbutton = 38;
int reset = 30;//슬라이드를 원 위치로 복귀
int up = 31;//숫자를 0~9범위에서 1씩 증가 설정
int down = 32;//숫자를 0~9범위에서 1씩 감소 설정
int count = 2;//아직 count의 값을 받도록 회로를 구성하지 않았기 때문에 2를 입력.
int notstart = 0;
int stp = 0;
int i;
void setup() {
pinMode(reset, INPUT);
pinMode(startbutton, INPUT);
pinMode(up, INPUT);
pinMode(down, INPUT);
}
void loop() {
/*if(digitalRead(up)==HIGH){
++count;
if(count>9){
count=0;
}
}
if(digitalRead(down)==HIGH){
--count;
if(count<0){
count=9;
}
}*/ //이것은 회로구성 하지 않았습니다.
if(notstart==0){
for(;;){ //arduino전원 on시 슬라이더 위치 정렬
motor1.setSpeed(60);
motor1.step(1);
if(digitalRead(reset)==HIGH){
motor1.setSpeed(70);
motor1.step(-100);//스위치와의 간격 두기
notstart=1;
break;
}
}
}
if(digitalRead(startbutton)==HIGH){ //startbutton을 누르면 작동 시작
for(i=0; i<=count; i++){
//
motor2.setSpeed(60);
motor2.step(200*count);//200step = 1rotation
//질문1. motor2가 실행된 후 motor1이 순차적으로 실행되는데 이것을 어떻게 동시에 실행시킬 수가 있을까요?(회로도를 참고하여 코드도 써 주시면 감사하겠습니다.)
motor1.setSpeed(20);
motor1.step(-10);
motor1.step(+10);
//
if(i==count){ //설정값 만큼을 움직이면
motor2.step(0); //motor2는 정지.
if(stp==0){
for(;;){
motor1.setSpeed(50);
motor1.step(+1);
if(digitalRead(reset)==HIGH){ //슬라이더가 움직여 reset버튼을 눌러 홈 위치를 인식 할 때 까지 +1step 씩 회전
motor1.setSpeed(70);
motor1.step(-100);//스위치와의 간격 두기
stp=1;
break;
}
}
}
stp=0;
}
}
}
}
지금까지 코드였고, 아래는 코드로 실행시킬 회로도 입니다.. 첨부파일에 소스코드와 회로도 사진 올려놓았습니다..
(보기는 좋지 못하지만 질문드리기 위해 열심히 그렸습니다...ㅠ)
회로도와 작동 방식을 참고하시어 코드를 수정해 주시면 정말.. 정말로 고맙겠습니다..
댓글 : 0
조회수 : 14,309
등록된 댓글이 없습니다.