BASIC4MCU | 질문게시판 | 답변 : 초음파센서, 가변저항 차고
페이지 정보
작성자 master 작성일2019-05-25 22:31 조회4,032회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8815
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-05-25 오후 10:41:18// by Ok-Hyun Park//초음파센서와 가변저항(원래는 압력센서였으나 압력센서 배송이 늦어져 가변저항으로 급히 발표하고자 변경)을 이용하여 차고를 컨트롤 하는 코드를 짜고 있었는데요.우선 세 가지 부분으로 나눴습니다.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 trig1=7,echo1=8; // 차고 입구 초음파센서int trig2=2,echo2=4; // 차고 내부 초음파센서int resPin=A3; // 가변저항 핀 지정int light=5; // 복도 등//int angle=0; // 모터 동작 각도 인수float duration1,distance1,duration2,distance2; // 위 아래 둘 다 초음파센서용bool flag=0;int sec=0;//void setup(){Serial.begin(9600);servo.attach(3); //서브모터 핀 지정pinMode(trig1,OUTPUT); pinMode(echo1,INPUT);pinMode(trig2,OUTPUT); pinMode(echo2,INPUT);pinMode(light,OUTPUT);}//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){if(flag==0){ flag=1; Serial.println("Open"); angle=90; sec=60; }}//if(flag){digitalWrite(trig2,HIGH); delayMicroseconds(10); digitalWrite(trig2,LOW); // 차고 문 열릴 시 초음파 센서 동작duration2=pulseIn(echo2,HIGH); distance2=((340*duration2)/10000)/2;Serial.print("Celling-Vehicle: "); Serial.print(distance2); Serial.println("cm"); // 차고 천장과 차량 사이 거리//if(distance2<50){ //차량 주차digitalWrite(light,HIGH); delay(300); // 복도 점등 // 30초(test30)}else{ digitalWrite(light,LOW); }//if(sec){if(--sec==0){ flag=0; angle=0; Serial.println("Close"); }}}servo.write(angle);delay(1000);}
댓글 1
조회수 4,032코시님의 댓글
코시 작성일감사합니다 질문 올리고 어찌어찌 타이머 집어넣어서 해결하긴 했으나 지저분하였는데 깔끔히 정리되네요