BASIC4MCU | 질문게시판 | 아두이노 4차선 신호 코딩 질문있습니다.
페이지 정보
작성자 율향 작성일2020-08-09 18:59 조회39,657회 댓글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
조회수 39,657master님의 댓글
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{ 현재 단계 종료,다음단계로 } // 사람과 차량이 모두 없는 경우