BASIC4MCU | 질문게시판 | 적외선 센서의 인식 속도
페이지 정보
작성자 심플민 작성일2019-11-15 17:44 조회3,981회 댓글0건본문
아래 프로그램으로 업로드 하면 적외선 센서가 인식되면서 서보 모터가 움직이기 까지의 시간이
생각보다 많이 소요됩니다. 아래 프로그램에서 인식 속도에 영향을 주는 게 있나요??
#include <Servo.h>
int servoPin1 = 12;
int servoPin2 = 11;
Servo servo1;
Servo servo2;int distance = 0 ;
int angle = 0 ;#define motor1 5
#define motor2 4
#define motor3 3
#define motor4 2#define sensor1 A0
#define sensor2 A1
#define sensor3 A2#define df 6
#define dc 7
#define trig A3
#define echo A4int analog_value = 0;
int last_s =0;//마지막 센서값
int cube = 0;
int cross = 0;
void motor_control(int a, int b, int m1_speed, int m2_speed){
if(a!=0){
analogWrite(motor1,m1_speed);
analogWrite(motor2,0);
}
else{
analogWrite(motor1,0);
analogWrite(motor2,m1_speed);
}
if(b!=0){
analogWrite(motor3,m2_speed);
analogWrite(motor4,0);
}
else{
analogWrite(motor3,0);
analogWrite(motor4,m2_speed);
}
}void setup() {
pinMode(motor1,OUTPUT);
pinMode(motor2,OUTPUT);
pinMode(motor3,OUTPUT);
pinMode(motor4,OUTPUT);pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
pinMode(sensor3,INPUT);pinMode(df,OUTPUT);
pinMode(dc,OUTPUT);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);servo1.attach(servoPin1);
servo2.attach(servoPin2);}
void loop() {
int volt = map(analogRead(A5), 0, 1023, 0, 5000);
distance = (27.61 / (volt - 0.1696)) * 1000;
if(cube<4){if (distance > 12 ) {
if(sensor_read(sensor1)&&sensor_read(sensor2)&&sensor_read(sensor3)){// LED = 0 일때 검은색일 경우 000(검검검)
motor_control(0,0,200,200);//후진 속도 값, 0이 역회전
delay(1000);//후진하는 시간
}
else if(sensor_read(sensor2)){ //흰검흰(101)
motor_control(1,1,200,200);//전진 속도 값
delay(100);
}
else if(sensor_read(sensor1)&&sensor_read(sensor2)){ //검검흰(001)
motor_control(0,1,100,100);//좌회전 속도 값
delay(100);
}
else if(sensor_read(sensor2)&&sensor_read(sensor3)){ //흰검검 (100)
motor_control(1,0,100,100);//우회전 속도 값
delay(100);
}
else if(sensor_read(sensor1)){ //검흰흰 (011)
motor_control(0,1,100,100);//좌회전 속도 값
last_s = 1;//마지막 센서 값을 1로 바꾼다.
delay(100);
}
else if(sensor_read(sensor3)){
motor_control(1,0,100,100);//좌회전 속도 값
last_s = 2;//마지막 센서 값을 2로 바꾼다.
delay(100);
}
else{
if(last_s==1){//마지막 센서 값이 1일 때 (좌)회전
motor_control(1,0,100,100);//(좌)회전 속도 값
delay(100);
}
else if(last_s==2){//마지막 센서 값이 2일 때 (우)회전
motor_control(0,1,100,100);//(우)회전 속도 값
delay(100);
}
}
}
else if (distance <= 12) {
motor_control(0,0,0,0);
for (angle = 165; angle >= 15; angle -=1.5)
{
servo1.write(angle);
servo2.write(90);
delay(15);
}
delay(500);
for (angle = 15; angle <= 165; angle +=1.5)
{
servo1.write(angle);
servo2.write(0);
delay(15);
servo2.write(90);
}
delay(500);
cube = cube+1;
}
}
if(sensor_read(sensor1)&&sensor_read(sensor2)&&sensor_read(sensor3)){// LED = 0 일때 검은색일 경우 000(검검검)
motor_control(0,0,200,200);//후진 속도 값, 0이 역회전
delay(1000);//후진하는 시간
motor_control(0,1,200,200);//회전
delay(3000);
cross = cross+1;
}
else if(sensor_read(sensor2)){ //흰검흰(101)
motor_control(1,1,200,200);//전진 속도 값
delay(100);
}
else if(sensor_read(sensor1)&&sensor_read(sensor2)){ //검검흰(001)
motor_control(0,1,100,100);//좌회전 속도 값
delay(100);
}
else if(sensor_read(sensor2)&&sensor_read(sensor3)){ //흰검검 (100)
motor_control(1,0,100,100);//우회전 속도 값
delay(100);
}
else if(sensor_read(sensor1)){ //검흰흰 (011)
motor_control(0,1,100,100);//좌회전 속도 값
last_s = 1;//마지막 센서 값을 1로 바꾼다.
delay(100);
}
else if(sensor_read(sensor3)){
motor_control(1,0,100,100);//좌회전 속도 값
last_s = 2;//마지막 센서 값을 2로 바꾼다.
delay(100);
}
else{
if(last_s==1){//마지막 센서 값이 1일 때 우회전
motor_control(0,1,100,100);//우회전 속도 값
delay(100);
}
else if(last_s==2){//마지막 센서 값이 2일 때 좌회전
motor_control(1,0,100,100);//좌회전 속도 값
delay(100);
}
}
if(cross==1){
if(sensor_read(sensor1)&&sensor_read(sensor2)&&sensor_read(sensor3)){// LED = 0 일때 검은색일 경우 000(검검검){
motor_control(1,0,200,200);
delay(1500);
cross = cross+1;
}
else{
motor_control(0,0,200,200);
delay(300);
}
}
else if(cross==2){
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
long dist = pulseIn(echo,HIGH)/58.2;
if(dist>4){
if(sensor_read(sensor2)){ //흰검흰(101)
motor_control(0,0,200,200);//전진 속도 값
delay(100);
}
else if(sensor_read(sensor1)&&sensor_read(sensor2)){ //검검흰(001)
motor_control(1,0,100,100);//좌회전 속도 값
delay(100);
}
else if(sensor_read(sensor2)&&sensor_read(sensor3)){ //흰검검 (100)
motor_control(0,1,100,100);//우회전 속도 값
delay(100);
}
else if(sensor_read(sensor1)){ //검흰흰 (011)
motor_control(1,0,100,100);//좌회전 속도 값
last_s = 1;//마지막 센서 값을 1로 바꾼다.
delay(100);
}
else if(sensor_read(sensor3)){
motor_control(0,1,100,100);//좌회전 속도 값
last_s = 2;//마지막 센서 값을 2로 바꾼다.
delay(100);
}
else{
if(last_s==1){//마지막 센서 값이 1일 때 우회전
motor_control(1,0,100,100);//우회전 속도 값
delay(100);
}
else if(last_s==2){//마지막 센서 값이 2일 때 좌회전
motor_control(0,1,100,100);//좌회전 속도 값
delay(100);
}
}
}
else{
motor_control(0,0,0,0);
analogWrite(df,150);
delay(500);
analogWrite(dc,150);
delay(500);
}
}
}
int sensor_read(int i){
int di;
analog_value=analogRead(i);
if(analog_value>=110){
di=1;
}
else{
di=0;
}
return di;
}
댓글 0
조회수 3,981등록된 댓글이 없습니다.