본문 바로가기
회로설계

이글캐드를 활용한 제품개발 (신호등 만들기_1)

by KlayLee 2023. 6. 28.

이글캐드를 활용한 제품개발 (신호등 만들기)

안녕세요. 이글캐드를 활용한 제품개발을 시작하겠습니다.

이번시간엔 신호등 만들기입니다.

썸네일

 

체험판 다운로드 | Fusion 360 | 오토데스크

Fusion 360의 30일 무료 체험판을 다운로드하려면 다운로드 프로세스를 탐색하세요.

www.autodesk.co.kr

1) 신호등 콘셉트 정하기

순서가 신호등 콘셉트를 정하고 마지막에 코딩을 해야 하는데, 바로 코딩을 해 버리겠습니다.

 

운전자일 때와 보행자일 때 신호등이 다르게 움직입니다. 서로 상호작용을 하는 거죠. 우선 보행자 입장에서 필요한 신호등 색상은 RED, GREEN 2가지 색상이고, 운전자 입장에서 필요한 신호등 색상은 RED, YELLOW, GREEN 3가지 색상입니다. 신호등이 유기적으로 움직이기 위한 INPUT으로서 별도의 스위치를 하나 달도록 하겠습니다. 신호등의 시작은 운전자 입장에서 보는 GREEN으로 하겠습니다. 스위치를 3초 이상 누르면 운전자가 보는 GREEN 신호등이 꺼지고 YELLOW 신호등이 3초간 켜진후 다시 YELLOW 신호등은 꺼지고 운전자가 보는 RED신호등이 2초 동안 켜집니다. 그다음 보행자가 보는 GREEN 신호등 5초 동안 켜집니다. 그다음 GREEN신호등이 500 msec 동안 켜지고 500 msec동안 꺼지기를 5번 반복합니다. 그리고 보행자 입장에서 보는 RED 신호등이 켜지고 1초간 지속됩니다. 그 후 운전자 입장에서 보는 신호등의 색상이 RED에서 YELLOW로 바뀌고  5초간 지속됩니다. 그 후 운전자가 보는 신호등이 YELLOW에서 GREEN으로 바뀝니다. 만들어 놓은 스위치 입력이 들어올 때까지 이 상태를 계속 유지합니다.

위의 내용을 아래에 코딩해 보겠습니다.

 

2) 코딩하기

int carRed = 12; //운전자 입장에서 보는 RED신호등을 정수 선언하고, 아두이노 12번핀에 할당
int carYellow = 11;//운전자 입장에서 보는 YELLOW신호등을 정수 선언하고, 아두이노 11번핀에 할당
int carGreen = 10;//운전자 입장에서 보는 GREEN신호등을 정수 선언하고, 아두이노 10번핀에 할당
int button = 9; //아두이노 9번핀을 버튼 입력으로 할당
int pedRed = 8; //보행자 입장에서 보는 RED신호등을 정수 선언하고, 아두이노 8번 핀에 할당
int pedGreen = 7; //보행자 입장에서 보는 GREEN신호등을 정수 선언하고, 아두이노 7번핀에 할당
int crossTime = 5000; //보행자와 운전자의 교차시간을 5000msec
long changeTime; //체인지 시간,  long선언
void setup() {
 pinMode(carRed, OUTPUT); //carRed핀은 output핀으로 설정
 pinMode(carYellow, OUTPUT);//carYellow핀은 output핀으로 설정
 pinMode(carGreen, OUTPUT);//carGreen핀은 output핀으로 설정
 pinMode(pedRed, OUTPUT);//pedRed핀은 output핀으로 설정
 pinMode(pedGreen, OUTPUT);//carGreen핀은 output핀으로 설정
 pinMode(button, INPUT); //button핀은 output핀으로 설정
 digitalWrite(carGreen, HIGH); //운전자 입장에서 보는 GREEN신호등을 켜기
 digitalWrite(pedRed, LOW); //보행자 입상에서 보는 RED신호등 끄기
void loop() {
 int state = digitalRead(button);//button 핀을 함수 선언, state를 정수선언  
 if(state == HIGH && (millis() - changeTime)> 3000) { //state가 High(5V)이고 millis함수에서 changeTime을 뺀 값이 3000 msec보다 크다면, 즉 버튼 입력이 3초이상 눌러진다면
 changeLights();//changeLights함수를 실행하라
 }
}
void changeLights() {//changeLight함수는 다음과 같다
 digitalWrite(carGreen, LOW); //운전자 입장에서 본 GREEN신호등은 끄고
 digitalWrite(carYellow, HIGH); //운전자 입장에서 본 YELLOW신호등은 켜라
 delay(3000); //3초 간 기다리고
 digitalWrite(carYellow, LOW); //운전자 입장에서 본 YELLOW신호등은 끄고
 digitalWrite(carRed, HIGH); //운전자 입장에서 본 RED신호등은 켜라
 delay(2000); //2 초동안 기다리고
 digitalWrite(pedRed, LOW); //보행자 입장에서 본 RED 신호등은 끄고
 digitalWrite(pedGreen, HIGH); //보행자 입장에서 본 GREEN 신호등은 켜라
 delay(crossTime); // 교차로를 위한 시간을 다음과 같이 하라
 for (int x=0; x<5; x++) {//아래의 행위를 5번 반복하라
 digitalWrite(pedGreen, HIGH);//보행자 입장에서 본 GREEN 신호등은 키고
 delay(500); //500 msec동안 기다리고
 digitalWrite(pedGreen, LOW);//보행자 입장에서 본 GREEN 신호등은 끄라
 delay(500); //500 msec동안 기다리고
 }
 digitalWrite(pedRed, HIGH); //보행자 입장에서 본 RED 신호등은 키고
 delay(1000); //1000msec  기다리고
 digitalWrite(carRed, LOW); //운전자 입장에서 본 RED 신호등은 꺼라
 digitalWrite(carYellow, HIGH); //운전자 입장에서 본 YELLOW 신호등은 키고
delay(1000); //1000msec  기다리고 
 delay(1000); //1000msec  기다리고
 digitalWrite(carYellow, LOW); //운전자 입장에서 본 YELLOW 신호등은 끄고
 digitalWrite(carGreen, HIGH); //운전자 입장에서 본 GREEN 신호등은 켜라
 changeTime = millis() // changeTime은 millis함수와 같다. 마지막으로 바뀐 변경사항을 기억하라.
}

 

다음 포스팅에서는 필요한 회로부품 선정 및 회로설계를 진행하도록 하겠습니다.

 

2023.06.30 - [회로설계] - 이글캐드를 활용한 제품개발 (신호등 만들기_2)

 

이글캐드를 활용한 제품개발 (신호등 만들기_2)

2023.06.28 - [회로설계] - 이글캐드를 활용한 제품개발 (신호등 만들기_1) 이글캐드를 활용한 제품개발 (신호등 만들기_1) 이글캐드를 활용한 제품개발 (신호등 만들기) 안녕세요. 이글캐드를 활용한

lbtglhs79.tistory.com