BASIC4MCU | 질문게시판 | 초음파센서와 스텝모터
페이지 정보
작성자 두팔 작성일2022-05-07 23:07 조회158회 댓글2건본문
저희가 초음파센서를 이용해 손잡이를 만드려고하는데 손이있는위치를 초음파센서로 인지하여 손앞까지올때까지 스텝모터를 돌려 제어하는 시스템입니다 그런데 코딩을했을때 모터가 버벅되고 12v를 모터드라이브에 직접연결하였는데도 버벅됩니다 ㅜㅜ 이코딩에서 잘못된점이있을까요?
#include<Stepper.h>
const int stepsPerRevoltion = 200; //모터 스탭각이 1.8도 360/1.8
Stepper myStepper(stepsPerRevoltion, 11,10,9,8); //각개체선언 모터드라이브
int APIN = 11;
int BPIN = 10;
int nAPIN = 9;
int nBPIN = 8;
int trigPin = 7;
int echoPin = 6;
void setup() {
myStepper.setSpeed(60); //60rpm으로 맞춤
Serial.begin(9600);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
long duration;
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //10usec 정지
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); //에코핀 HIGH구간 측정
long value = duration / 29/ 2; //초음파가 식
Serial.println(duration);
Serial.print("\nDIstance :");
Serial.print(value);
Serial.println("Cm");
delay(500);
if(value < 20 && value >5) //거리가 20cm거리를 감지했을때
{
myStepper.step(stepsPerRevoltion);
}
if(value < 5) //거리가 2cm보다 작으면
{
myStepper.step(-stepsPerRevoltion);
}
}
댓글 2
조회수 158master님의 댓글
master 작성일
버벅대는 이유는 여러가지가 있을텐데요
스텝모터는 탈조현상이라고 부릅니다.
전원장치 전류가 부족해도 탈조현상이 발생합니다.
모터 토크에 비해서 부하가 커도 탈조현상이 발생합니다.
스텝딜레이가 짧아도(스피드(rpm)가 빨라도) 탈조현상이 발생합니다.
물론 선연결에 문제가 있어도 탈조현상이 발생합니다.
master님의 댓글
master 작성일
#include<Stepper.h>
const int stepsPerRevoltion=200; //모터 스탭각이 1.8도 360/1.8
int APIN=11,BPIN=10,nAPIN=9,nBPIN=8;
Stepper myStepper(stepsPerRevoltion,11,10,9,8); //각개체선언 모터드라이브
int trigPin=7,echoPin=6;
//
void setup(){
pinMode(echoPin,INPUT); pinMode(trigPin,OUTPUT);
myStepper.setSpeed(60); //60rpm으로 맞춤
Serial.begin(9600);
}
//
void loop(){
digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW);
long duration=pulseIn(echoPin,HIGH); //에코핀 HIGH구간 측정
long value=duration / 29/ 2; //초음파가 식
Serial.println(duration); Serial.print("\nDIstance :"); Serial.print(value); Serial.println("Cm");
delay(100);
if (value< 5){ myStepper.step(-25); } //거리가 5cm보다 작으면
else if(value<20){ myStepper.step( 25); } //거리가 20cm거리를 감지했을때
}
스텝모터 1회전에 얼마나 움직이는지 모르겠지만
if (value< 5){ myStepper.step(-stepsPerRevoltion); } //거리가 5cm보다 작으면
else if(value<20){ myStepper.step( stepsPerRevoltion); } //거리가 20cm거리를 감지했을때
1회전씩 하면 너무 많이 움직이는 것 아닌가요?
if (value< 5){ myStepper.step(-25); } //거리가 5cm보다 작으면
else if(value<20){ myStepper.step( 25); } //거리가 20cm거리를 감지했을때
이렇게 변경하면 45도씩 움직입니다.
일반적으로는 전원장치 전류 부족일 경우가 가장 많을 것 같습니다.
전원장치 전류가 충분하다면 드라이버 모듈의 전류 제한 설정이 되어 있는 경우 전류제한을 좀 더 키우시고
myStepper.setSpeed(30); //30rpm으로 맞춤
속도도 줄이세요
모터 토크에 비해서 부하가 크면 속도를 늦춰야 합니다.