BASIC4MCU | 질문게시판 | 초음파센서, 가변저항 차고
페이지 정보
작성자 코시 작성일2019-05-25 15:01 조회4,023회 댓글1건본문
초음파센서와 가변저항(원래는 압력센서였으나 압력센서 배송이 늦어져 가변저항으로 급히 발표하고자 변경)을 이용하여 차고를 컨트롤 하는 코드를 짜고 있었는데요.
우선 세 가지 부분으로 나눴습니다.
1. 초음파센서1과 가변저항의 값이 임계조건을 만족 할 경우 차고 문이 열린다(1분 유지).
2. 차고 문이 열리면 초음파센서2가 작동하여 차고 내부에 차량 주차 여부를 확인(주차장 천장에 달린 센서처럼 일정 거리 미만일 경우 주차로 가정)
3. 차량이 주차 되었을 경우 복도 등을 30초 동안 점등.
위 세 가지 부분 중 문이 열리고 초음파센서2가 동작하는 것 까지 완료 하였으나,
1. 차고 문 열림이 1분동안 유지되게 하는 방법을 모르겠으며
2. 초음파센서2의 거리 값이 임계값 미만일 경우 주차로 판정하여 복도 등이 켜져야 하는데 등이 점등되지 않음
위와 같이 두 가지 문제가 발생하여 해결에 도움을 구하고자 글을 올리게 되었습니다.
혹시 도와주실 수 있는 분 조언 혹은 수정 코드좀 부탁드리겠습니다.
감사합니다.
하단은 제가 작성한 코드입니다.
trig1, echo1, distance1 은 차고 입구에 있는 초음파센서 1과 그 거리값
trig2, echo2, distance2 는 차고 내부에 잇는 초음파센서 2와 그 거리값
#include <Servo.h>
Servo servo;
int angle = 0; // 모터 동작 각도 인수
int trig1 = 7; // 차고 입구 초음파센서 trig1 핀 지정
int echo1 = 8; // 차고 입구 초음파센서 echo1 핀 지정
int trig2 = 2; // 차고 내부 초음파센서 trig2 핀 지정
int echo2 = 4; // 차고 내부 초음파센서 echo2 핀 지정
int resPin = A3; // 가변저항 핀 지정
int light = 5; // 복도 등float duration1;
float distance1; // 위 아래 둘 다 초음파센서용
float duration2;
float distance2;void setup() {
Serial.begin(9600);
servo.attach(3); //서브모터 핀 지정
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
}void loop() {
int resVal = analogRead(resPin);
int resOut = map(resVal, 0, 1023, 0, 1000); // 저항값을 0~1000사이로 맵핑
Serial.print("Resistor value:");
Serial.println(resOut);digitalWrite(trig1, HIGH);
delayMicroseconds (10);
digitalWrite(trig1,LOW);
duration1 = pulseIn(echo1,HIGH);
distance1 = ((340*duration1) / 10000) / 2;
Serial.print("Door - Vehicle: ");
Serial.print(distance1); // 차고 문과 차량 사이 거리
Serial.println("cm");
if (resOut > 500 && distance1 < 70)
{
Serial.println("Open");
angle = 90;
delay (10);
digitalWrite(trig2, HIGH); // 이 부분부터 차고 문 열릴 시 초음파 센서 동작
delayMicroseconds (10);
digitalWrite(trig2,LOW);
duration2 = pulseIn(echo2,HIGH); // pulseln 단위 ms(microsecond) 초음파 시간차 duration값에 입력
distance2 = ((340*duration2) / 10000) / 2; // 초음파 속도 (34000) * 센서 시간차 / 100000 / 2
Serial.print("Celling - Vehicle: ");
Serial.print(distance2); // 차고 천장과 차량 사이 거리
Serial.println("cm");
if (distance2 <50) //차량 주차
{
digitalWrite(light, HIGH); // 복도 점등
delay(300); // 30초 동안 점등 30000으로 놓아야하지만 빠른 결과값 산출을 위해 30으로 설정
}
else
digitalWrite(light, LOW);
}
else
{
angle = 0;
Serial.println("Close");
delay (10);
}
servo.write(angle);
delay(1000); // 시리얼 출력속도
}
댓글 1
조회수 4,023master님의 댓글
master 작성일
setup() 함수에서 pinMode(light,OUTPUT); 출력 설정이 빠져있어서 불이 켜지지 않습니다.
나머진 답글에 적어드리죠