안녕하세요. L293D 같은 경우 버튼을 눌렀을때 직관적으로 가능하고 코드도 비교적 간단한것 같습니다. 버튼을 눌렀을때 몇 스피드로, 몇 스텝만큼만 회전하라는 식으로 간단한데 A4988의 경우 AcccelStepper로 할경우 그걸 잡기가 어렵네요. 버튼을 눌렀을때 길게 누를수도 있고 짧게 누를수도 있고 한데 딱 누른시간만큼 이동하네요. 나중에 시간되실때 A4988을 l293d 코드 잡았을때처럼 코드잡는거 한번강의 부탁드립니다. L293D 코드 #include #define STEPS 200 bollean Button = false; Stepper stepper(STEPS, 8,9,10,11); void setup() { // put your setup code here, to run once: pinMode(3, INPUT); pinMode(4, INPUT); } void loop() { // put your main code here, to run repeatedly: int Button = digitalRead(3); if(Button == true){ stepper.setSpeed(30); stepper.step(200); Button = !Button ;
int Button = digitalRead(4); if(Button == true){ stepper.setSpeed(30); stepper.step(-200); Button = !Button ; } } 아래는 A4988로 버튼1을 누르면 일정거리만큼 시계방향 회전했다가 버튼2를 반대방향으로 회전하는건데, 아래코드로 해본 결과 , 업로드하고 버튼1을 누르면 600스텝을 가고 더이상 버튼들이 작동안함. 그리고 다시 업로드 해보고, 버튼 2를 누르면 반대방향으로 무한회전 합니다.. 이유가 월까요? /* * AccelStepper stepper = AccelStepper(연결방식, STEP핀, DIR핀); stepper.setMaxSpeed(1000); //최대속도 stepper.setCurrentPosition(0); //현재 스탭을 설정 stepper.currentPosition(); //현재 스탭을 반환 stepper.setSpeed(200); //스탭모터의 방향과 속도를 설정 stepper.runSpeed(); //스탭모터 작동(고정속도) stepper.setAcceleration(2000); //가속량을 설정함 stepper.moveTo(1000); //목표스탭량을 설정함 stepper.runToPosition(); //가속도를 붙혀서 스탭모터제어 */ #include //녹칸다 유튜브 아두이노2022-02-23 다시 테스트 해봐 #define DIR 2 #define STEP 3 #define btn1 4 #define btn2 5 AccelStepper stepper = AccelStepper(1, STEP, DIR); //드라이버를 쓸때는 '1'을 쓰라고 개발자가 지정했다 int speed = 1000; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(DIR,OUTPUT); pinMode(STEP,OUTPUT); pinMode(btn1,INPUT_PULLUP); pinMode(btn2,INPUT_PULLUP); stepper.setMaxSpeed(1000); //(최대속도)초당 몇 스텝이냐? (1000 이면 1초에 5바퀴다)-자신의 스텝모터 성능에따라 조정해야함 stepper.setCurrentPosition(0); //현재 스탭을 설정 } void loop() { // put your main code here, to run repeatedly: if(digitalRead(btn1) == LOW){ //여기서 LOW는 버튼1이 눌러진것 stepper.setSpeed(400); //스탭모터의 방향과 속도를 설정 200이면 초당 200스텝이므로 한 바퀴.(-)이면 반시계 방향 while(stepper.currentPosition() != 600){ //스텝의 양 stepper.runSpeed(); //스탭모터 작동(고정속도) } } if(digitalRead(btn2) == LOW){ //여기서 LOW는 버튼2가 눌러진것 stepper.setSpeed(-400); //스탭모터의 방향과 속도를 설정 200이면 초당 200스텝이므로 한 바퀴.(-)이면 반시계 방향 while(stepper.currentPosition() != 600){ //스텝의 양 stepper.runSpeed(); //스탭모터 작동(고정속도) } } }
성공했어요 감사합니다
/*
*
AccelStepper stepper = AccelStepper(연결방식, STEP핀, DIR핀);
stepper.setMaxSpeed(1000); //최대속도
stepper.setCurrentPosition(0); //현재 스탭을 설정
stepper.currentPosition(); //현재 스탭을 반환
stepper.setSpeed(200); //스탭모터의 방향과 속도를 설정
stepper.runSpeed(); //스탭모터 작동(고정속도)
stepper.setAcceleration(2000); //가속량을 설정함
stepper.moveTo(1000); //목표스탭량을 설정함
stepper.runToPosition(); //가속도를 붙혀서 스탭모터제어
*/
#include //녹칸다 유튜브 아두이노2022-02-23 다시 테스트 해봐
#define DIR 2
#define STEP 3
#define btn1 4
#define btn2 5
AccelStepper stepper = AccelStepper(1, STEP, DIR); //드라이버를 쓸때는 '1'을 쓰라고 개발자가 지정했다
int speed = 1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(DIR,OUTPUT);
pinMode(STEP,OUTPUT);
pinMode(btn1,INPUT_PULLUP);
pinMode(btn2,INPUT_PULLUP);
stepper.setMaxSpeed(600); //(최대속도)초당 몇 스텝이냐? (1000 이면 1초에 5바퀴다)-자신의 스텝모터 성능에따라 조정해야함
stepper.setAcceleration(600); //가속량을 설정함
//stepper.setCurrentPosition(500); //현재 스탭을 설정
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(btn1) == LOW){
//여기서 LOW는 버튼1이 눌러진것
stepper.moveTo(800);
stepper.runToPosition();
}
if(digitalRead(btn2) == LOW){
//여기서 LOW는 버튼2가 눌러진것
stepper.moveTo(-800);
stepper.runToPosition();
}
}
축하합니다!!!
😊 좋은 강의 감사합니다
아두이노 라즈베리 파이 어느게 좋을까요???
220볼트 모터 구동도 올려 주시면 감사 하겠습니다~
조이스틱 비례로 스텝모터 속도 제어는 힘든가봅니다 예시들이 거의 없네요
안녕하세요. L293D 같은 경우 버튼을 눌렀을때 직관적으로 가능하고 코드도 비교적 간단한것 같습니다. 버튼을 눌렀을때 몇 스피드로, 몇 스텝만큼만 회전하라는 식으로 간단한데
A4988의 경우 AcccelStepper로 할경우 그걸 잡기가 어렵네요. 버튼을 눌렀을때 길게 누를수도 있고 짧게 누를수도 있고 한데 딱 누른시간만큼 이동하네요.
나중에 시간되실때 A4988을 l293d 코드 잡았을때처럼 코드잡는거 한번강의 부탁드립니다.
L293D 코드
#include
#define STEPS 200
bollean Button = false;
Stepper stepper(STEPS, 8,9,10,11);
void setup() {
// put your setup code here, to run once:
pinMode(3, INPUT);
pinMode(4, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int Button = digitalRead(3);
if(Button == true){
stepper.setSpeed(30);
stepper.step(200);
Button = !Button ;
int Button = digitalRead(4);
if(Button == true){
stepper.setSpeed(30);
stepper.step(-200);
Button = !Button ;
}
}
아래는 A4988로 버튼1을 누르면 일정거리만큼 시계방향 회전했다가 버튼2를 반대방향으로 회전하는건데, 아래코드로 해본 결과 , 업로드하고 버튼1을 누르면 600스텝을 가고 더이상 버튼들이 작동안함. 그리고 다시 업로드 해보고, 버튼 2를 누르면 반대방향으로 무한회전 합니다.. 이유가 월까요?
/*
*
AccelStepper stepper = AccelStepper(연결방식, STEP핀, DIR핀);
stepper.setMaxSpeed(1000); //최대속도
stepper.setCurrentPosition(0); //현재 스탭을 설정
stepper.currentPosition(); //현재 스탭을 반환
stepper.setSpeed(200); //스탭모터의 방향과 속도를 설정
stepper.runSpeed(); //스탭모터 작동(고정속도)
stepper.setAcceleration(2000); //가속량을 설정함
stepper.moveTo(1000); //목표스탭량을 설정함
stepper.runToPosition(); //가속도를 붙혀서 스탭모터제어
*/
#include //녹칸다 유튜브 아두이노2022-02-23 다시 테스트 해봐
#define DIR 2
#define STEP 3
#define btn1 4
#define btn2 5
AccelStepper stepper = AccelStepper(1, STEP, DIR); //드라이버를 쓸때는 '1'을 쓰라고 개발자가 지정했다
int speed = 1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(DIR,OUTPUT);
pinMode(STEP,OUTPUT);
pinMode(btn1,INPUT_PULLUP);
pinMode(btn2,INPUT_PULLUP);
stepper.setMaxSpeed(1000); //(최대속도)초당 몇 스텝이냐? (1000 이면 1초에 5바퀴다)-자신의 스텝모터 성능에따라 조정해야함
stepper.setCurrentPosition(0); //현재 스탭을 설정
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(btn1) == LOW){
//여기서 LOW는 버튼1이 눌러진것
stepper.setSpeed(400); //스탭모터의 방향과 속도를 설정 200이면 초당 200스텝이므로 한 바퀴.(-)이면 반시계 방향
while(stepper.currentPosition() != 600){ //스텝의 양
stepper.runSpeed(); //스탭모터 작동(고정속도)
}
}
if(digitalRead(btn2) == LOW){
//여기서 LOW는 버튼2가 눌러진것
stepper.setSpeed(-400); //스탭모터의 방향과 속도를 설정 200이면 초당 200스텝이므로 한 바퀴.(-)이면 반시계 방향
while(stepper.currentPosition() != 600){ //스텝의 양
stepper.runSpeed(); //스탭모터 작동(고정속도)
}
}
}
여기사용된 부품들좀 전부알려주실수있을까요??
버튼 눌렀을태 정회전하고 다시 역회전하는데 뒤에 - 구간 명령지우면 역호전 어없에는거 아닌가요 잘안돼네요?