BASIC4MCU | 질문게시판 | 아두이노 4차선 신호 코딩 질문있습니다.
페이지 정보
작성자 율향 작성일2020-08-09 18:59 조회52,395회 댓글6건본문
메가보드와 오토닉스 사 포토센서8개와 로드셀 무게센서8개로
4차선 횡단보도및 교통신호 체계를 만들고 있습니다.
목적은 카운트된 수들을 바탕으로 신호를 빠르게 변경하고 능동적으로 변경하는데 목적이있습니다.
포토센서는 각 도로구간에 마주보게설치하여 차량을 카운트하고,
무게센서는 횡단보도앞에 설치하여 보행자무게의 평균을 나타내 카운트하는 용도로 사용예정입니다.
if문으로 6개의 조건을 만들어 사용할려합니다.
//////////////////////////////현재 구상중에 있는 코딩입니다.(사진첨부)
예를 들어 C신호에서 A의 신호 조건을 충족하는 상황이 될 경우,
if(3의 차량과 4의 사람이 많다, 4와 2,1에 차량이 없다)
{
if(1,4,3에 사람이 없다)
{
A
B
C
D
E
F
}
순서를 가지고 A신호로 바꿔준다.
그러나, LOOP문 특성상 반복실행하기 때문에 만약 If 문을 통해 C를 실행 하면 A로 돌아가기 때문에 D~F신호를 기다리고 있던 사람은 계속 대기하게 되는 상황이 발생한다.
예를 들어 C의 신호로 바꿨을 경우, C→D→E→F→A→B 순으로 실행 되어야 한다.
이를 실행하기 위해 status 변수를 지정하여 status값에 따라 각 신호 이후의 신호를 실행 시킬 수 있게 코딩을 하였다.
처음에 If문으로 코딩을 한다.
if(조건을 만족하는 경우가 없을 때)
{
A
B
C
D
E
F
}
기본 C 문에 Status로 3(C)를 넣어 3번째가 실행되게 한다.
EX) Status = 3(C)
////////////////////
이런식으로 a~f 까지 코딩을 하여 신호체계를 만들생각인데, 코딩이 너무길어지고 4차선이라 복잡한부분이 너무 많아서 조금이나마 줄일수있는 방법이 있는지
개선할수 있는 방안을 질문하고싶습니다 ㅠㅠ.
센서 총 16개와 led 총 24개를 사용하기때문에 메가보드를 사용합니다.
댓글 6
조회수 52,395master님의 댓글
master 작성일
우선 A->B->C->D... 이 순서는 지키세요
이 순서까지 엉망으로 신호가 들어오면 운전자와 보행자가 헷갈려합니다.
A->D로 건너 뛰고 싶을 때는 B와 C의 시간이 1~2초 정도로 짧으면 되겠죠
master님의 댓글
master 작성일
현재 A에 있을 때
B의 대기 차량이 많을 때라도 A의 차량이 남아있다면 A 시간을 더 줄 것인지, 일정시간 후에는 A의 차량이 남았더라도 B로 시간을 넘길 것인지 정하세요
master님의 댓글
master 작성일
현재 A에 있을 때
아직 일정시간이 경과하지 않았더라도 B의 사람이 많이 대기한다면
A 시간을 일정시간동안 유지 할 것인지 B로 시간을 넘길 것인지 정하세요
사람위주인지 차량 위주인지를 정하라는 의미입니다.
사람위주가 아니라면 사람이 신호등에 많이 대기하든 말든 신경 쓸 필요가 없습니다.
단, 보행시간이 주어졌을 때 사람이 있다면 차량이 없더라도 보행시간을 유지해야겠죠
master님의 댓글
master 작성일
정해진 시간대로 움직이는 기존의 사거리 신호등 프로그램을 먼저 완성 시키고
각 구간에서 경과시간 및 센서를 읽고 다음 신호로 넘길지 말지를 결정하면 됩니다.
복잡할 것이 없겠죠
다음신호로 넘어왔는데 차량도 없고 사람도 없으면 1~2초 대기 후 또 다음 신호로 넘기면 됩니다.
율향님의 댓글
율향 작성일
감사합니다. 기존 사거리신호등 프로그램은 완성하였습니다!
a~f순서에서 차량이많을경우에는 보행자신호를줄이고 보행자가많을경우 차량신호를 줄일생각입니다.
사람과 차량둘다 센서로 할경우에는 많이 복잡할까요? 사람위주로하는게 뭔가더 나아보일듯합니다.
master님의 댓글
master 작성일
사람이든 차량이든 많을 때에는 시간을 연장 해보죠(정해진 시간의 2배까지)
현재단계 신호등출력
delay(1000);
if(사람이 있는 경우){
if(정해진 시간의 2배 이상이면)현재 단계 종료,다음단계로
}
else if(차량이 있는 경우){
if(정해진 시간의 2배 이상이면)현재 단계 종료,다음단계로
}
else{ 현재 단계 종료,다음단계로 } // 사람과 차량이 모두 없는 경우