BASIC4MCU | 질문게시판 | 적외선 거리센서 + 리니어 레일 + 적외선 리모컨
페이지 정보
작성자 capstone돌모자 작성일2020-11-16 21:00 조회4,876회 댓글2건첨부파일
본문
#include <IRremote.h>
#include <Stepper.h>
int stepsPerRevolution = 200;
int control;
int IR_sensor = A3;
Stepper motor1(stepsPerRevolution, 8, 9);
Stepper motor2(stepsPerRevolution, 10, 11);
int RECV_PIN = A0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
irrecv.enableIRIn();
digitalWrite(0,LOW);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode (IR_sensor, INPUT);
motor1.setSpeed(1200);
motor2.setSpeed(1200);
Serial.begin(9600);
}
void loop(){
long IR_value = analogRead(IR_sensor);
//
if (irrecv.decode(&results)){
Serial.println(results.value,HEX);
if(results.value == 0xFF38C7) { control=1; }
else if(results.value == 0xFF6897) { control=2; }
irrecv.resume();
}
//
if (control==1) { motor1.step(1); motor2.step(1); }
else if(control==2) { motor1.step(-1); motor2.step(-1); }
else if(IR_value<=600) { motor1.step(0); motor2.step(0); }
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
적외선 리모컨으로 리니어레일을 동작하면서 동시에 적외선 거리센서를 이용해서 가까워지는 거리를 측정하고자 합니다.
전에 피드백 해주신 부분을 참고하여 수정하여 위와 같은 코드처럼 실행시켰을 때 컴파일 오류가 발생하지는 않지만 업로드후 제대로 동작을 하지 않습니다.
같은 코드로 적외선 거리센서만 제거했을 시에는 제대로 동작을 합니다.
처음에는 전력 문제 인것 같아서 추가적으로 건전지를 이용해 전력을 보충해줬음에도 똑같은 결과가 나타납니다.
글로 표현하기에는 한계가 있는것 같아서 두 방식을 동영상으로 촬영해 첨부했습니다.
조언 부탁드립니다 ! :)
댓글 2
조회수 4,876master님의 댓글
master 작성일
else if(IR_value<=600) { motor1.step(0); motor2.step(0); }
여기서 motor1.step(0); motor2.step(0); 이런 명령은 의미가 없습니다.
모터를 더이상 돌아가지 않도록 하고 싶으면
else if(IR_value<=600) { control=0; } //control을 clear 시키면 됩니다.
스텝모터는 스텝명령을 주지 않으면 그 자체로 정지상태를 유지합니다.
master님의 댓글
master 작성일
만약 IR_value 600 이상에서 control에 의한 제어를 하고 600 이하에서 멈추도록 하고 싶다면
if(IR_value>600) { motor1.step(0); motor2.step(0); }
if (control==1) { motor1.step(1); motor2.step(1); }
else if(control==2) { motor1.step(-1); motor2.step(-1); }
}
이렇게 수정하면 되겠죠