정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

2개의 신호등 연동 할려고 하는 데 힘드네요 ,, 도와주세요
정대한 | 2018-05-19

1. 프로젝트 사용한 보드 종류

  아두이노 UNO

 

 

2. 사용한 개발 프로그램명

 아두이노 IDE

 

 

3. 사용한 센서 모델명

  (센서 모델명을 자세하게 적어 주실 경우 더 정확하게 확인할 수 있습니다.)

 

 

4. 연결한 회로 설명 (또는 이미지)

 

 Selection_004.png

위의 사진의 스위치를 눌리면 신호가 초기화 되고 가변저항으로 인하여 다음 신호등은 일정 시간이 지난뒤 초기화가 됩니다. 하지만 저희는 가변저항을 제외 시키고 일정한 시간간격을 둘 계획입니다

밑의 사진의 스위치를 눌리면 자동차의 파란 불 꺼지면서 보행자 신호의 녹색불이 켜지도록 되어있습니다

 

 

5. 소스코드 (주석 필수)

신호등 코드 입니다 이코드를 중심으로 연동하려고 하는데 잘 안되네요

/** 자동차신호등에서 사용하는 LED 핀위치 */

#define pinCarG 13

#define pinCarY 12

#define pinCarR 11

 

/** 사람이 사용하는 LED 핀위치 */

#define pinHumanG 10

#define pinHumanR 9

/** 사람이 사용하는 스위치 핀위치 */

#define pinHumanSw 8

 

// 신호등 녹색등이 점등되는 시간

#define TIME_USE_HUMAN 2 // sec

// 신호등이 녹색이 점멸되는 시간 (초)

#define BLINK_COUNT 5

 

unsigned long prevTime;

 

void setup() {

 // 디버깅이 필요한 경우 시리얼로 데이터를 전달

 // Serial.begin(9600);

  

 pinMode(pinCarG, OUTPUT);

 pinMode(pinCarY, OUTPUT);

 pinMode(pinCarR, OUTPUT);

 

 pinMode(pinHumanG, OUTPUT);

 pinMode(pinHumanR, OUTPUT);

 pinMode(pinHumanSw, INPUT_PULLUP);

 

 // Serial.println("Start Traffic Sign System.");

 

 initLED();

}

 

void loop() {

 int sw = digitalRead(pinHumanSw);

 

 if (sw == 0 && digitalRead(pinCarG) == 1) {

   /*

    * 사람이 누르는 스위치는 자동차신호등이 녹색인 상태에서만

    * 작동하도록 구현함

    */

   changeLED();

 } else {

   unsigned long currentTime = millis();

   if (currentTime > prevTime + 10 * 1000) {

     /*

      * 스위치를 작동하지 않아도 차 신호등이 10초간 유지되면

      * 보행자 신호로 자동 변환하도록 설계함

      */

     changeLED();

   }

 }

 

}

 

void changeLED() {

 // 버튼클릭후 1초 대기

 // Serial.println("Press Switch. wait 3 sec.");

 delay(1000);

 

 // 차량 신호등에 노란색 점등

 // Serial.println("Turn on car yellow led during 3 sec.");

 digitalWrite(pinCarG, LOW);

 digitalWrite(pinCarY, HIGH);

 delay(2000);

 

 // 자동차 신호등을 빨강으로 전환

 digitalWrite(pinCarY, LOW);

 digitalWrite(pinCarR, HIGH);

 // 사람용 신호등도 변경한다.

 digitalWrite(pinHumanR, LOW);

 digitalWrite(pinHumanG, HIGH);

 

 // 2초간 횡단보도사용

 delay(TIME_USE_HUMAN * 1000);

 

 // 5초동안 점멸

 // Serial.println("Remain 5 sec using cross line.");

 for(int i = 0; i < BLINK_COUNT; i++) {

   digitalWrite(pinHumanG, LOW);

   delay(500);

   digitalWrite(pinHumanG, HIGH);

   delay(500);

 }

 

 // Serial.println("Reset traffic sign");

 // 신호등을 원래 상태로 전환한다.

 initLED();

}

 

void initLED() {

 digitalWrite(pinCarG, HIGH);

 digitalWrite(pinCarY, LOW);

 digitalWrite(pinCarR, LOW);

 

 digitalWrite(pinHumanG, LOW);

 digitalWrite(pinHumanR, HIGH);

 

 prevTime = millis();

}

http://www.makewith.co/page/project/568/story/1064/ 신호등 참고

http://winduino.co.kr/272 신호등 연동 참고

 

6. 문제점 및 에러 내용

회로 사진의 밑의 사진 처럼 각각의 자동차신호(led3개),보행자신호(led2개)를 만들어 위의 사진 처럼 연동하여 만들려고 계획 하였습니다.

밑의 사진에 보행자 신호에 녹색불이 켜지면 스위치를 눌리므로써 보행자 녹색신호등으로 변화 하는 것까지는 하였지만 그것을 두개의 아두이노로 연동하고 스위치를 눌리면 다음 신호등에서 얼마의 시간간격 뒤에 변화 하는 것을 아직 재현 하지 못하고 있습니다. 가변저항은 더 힘들어 빼고 만들려고 하는데 힘드네요 도와주세요

너무 답도없이 도전하는거라 한심해 보일수도 있지만 교통체계를 공부하는 중이라 한번 완성시켜 보고 싶네요 한번만 도와 주시면 감사하겠습니다 

이전글   |    RC카 프로젝트 중인데 질문있습니다. 2018-05-18
다음글   |    오렌지보드 Wifi shiled not present 2018-05-19