이글캐드를 활용한 제품개발 (신호등 만들기)
안녕세요. 이글캐드를 활용한 제품개발을 시작하겠습니다.
이번시간엔 신호등 만들기입니다.
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)
'회로설계' 카테고리의 다른 글
이글캐드를 활용한 제품개발 (신호등 만들기_3) (0) | 2023.06.30 |
---|---|
이글캐드를 활용한 제품개발 (신호등 만들기_2) (0) | 2023.06.30 |
Autodesk사의 Eagle Cad 기능 소개 (0) | 2023.06.27 |
이글캐드를 활용한 제품개발 (SOS 조난 신호기 만들기-3) (0) | 2023.06.27 |
이글캐드를 활용한 제품개발 (SOS 조난 신호기 만들기-2) (0) | 2023.06.26 |