BASIC4MCU | 질문게시판 | 초음파센서 스텝모터 질문입니다
페이지 정보
작성자 응애 작성일2022-05-09 20:37 조회146회 댓글1건본문
#include <Stepper.h>
const int stepsPerRevolution = 200;
// 모터 스탭각이 1.8도 이므로 360/1.8=200입력
Stepper myStepper(stepsPerRevolution, 11,9,10,8);
// 객체 선언시 매개변수로 stepsPerRevolution 값과 A,B,/A,/B핀 번호를 "순서대로" 전달
int APIN = 11; // A상
int BPIN = 10; // B상
int nAPIN = 9; // nA상
int nBPIN = 8; // nB상
int trigPin1 = 7; // 초음파센서 트리거핀
int echoPin1 = 6; // 초음파센서 에코핀
int trigPin2 = 5;
int echoPin2 = 4;
void setup()
{
myStepper.setSpeed(30); //300rpm으로 맞춤
Serial.begin(9600); // 시리얼 통신속도 지정
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
}
long duration1, distance1; //Long Type 변수선언
long duration2, distance2;
long stepss;
void loop ()
{
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10); // 10usec 정지
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH); // 에코핀의 HIGH구간을 측정
distance1 = duration1 / 29/ 2;
// 초음파가 1cm이동하는데 걸리는 시간 - 29usec, 거리(cm) = dur것을 프린트 합니다.
Serial.print("sensor left : ");
Serial.print(distance1); //측정된 물체로부터 거리값(cm값)
Serial.println("Cm");
delay(1000); //1초마다 측정값을 보여줍니다.
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10); // 10usec 정지
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH); // 에코핀의 HIGH구간을 측정
distance2 = duration2 / 29/ 2;
// 초음파가 1cm이동하는데 걸리는 시간 - 29usec, 거리(cm) = dur것을 프린트 합니다.
stepss = atan((distance1-distance2)/15)/1.8; // 차이 스텝
Serial.print("sensor right : ");
Serial.print(distance2); //측정된 물체로부터 거리값(cm값)
Serial.println("Cm");
delay(3000); //1초마다 측정값을 보여줍니다.
if(distance1 > 0) //왼쪽이 오른쪽보다 멀면
{
myStepper.step(stepss);
}
}
초음파센서 2개로 양쪽 거리를 측정해서 평행이 되도록 스텝각을 지정해줬는데 모터가 아예 돌지를 않습니다
이유가 뭔지 궁금합니다 ㅠㅠ
아크탄젠트 값이 소수점으로 나와서 그런건가요?
댓글 1
조회수 146master님의 댓글
master 작성일소숫점이하는 무시합니다.