아두이노 나노 - 교통 신호등 | Arduino Nano - Traffic Light

이 튜토리얼은 아두이노 나노를 이용하여 교통 신호등 모듈을 제어하는 방법에 대해 안내합니다. 구체적으로, 다음과 같은 내용을 다룰 예정입니다:

준비물

1×Arduino Nano Amazon
1×USB A to Mini-B USB cable 쿠팡 | Amazon
1×Traffic Light Module Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Nano Amazon
1×(Recommended) Screw Terminal Adapter for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

교통 신호등 모듈에 관하여

핀배열

신호등 모듈은 네 개의 핀으로 구성됩니다:

  • GND 핀: 이 핀을 아두이노 나노의 GND에 연결하세요.
  • R 핀: 빨간색 빛을 제어합니다; 이 핀을 아두이노 나노의 디지털 출력에 연결하세요.
  • Y 핀: 노란색 빛을 관리합니다; 이 핀을 아두이노 나노의 디지털 출력에 연결하세요.
  • G 핀: 초록색 빛을 지배합니다; 이 핀을 아두이노 나노의 디지털 출력에 연결하세요.
Traffic Light Pinout

작동 원리

선연결

Arduino Nano traffic light Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

신호등 모듈 프로그래밍 방법

pinMode() 함수를 사용하여 아두이노 나노의 핀을 디지털 출력 모드로 설정하세요.

Certainly, here is the code without any additional phrases or comments: pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT);

digitalWrite() 함수를 사용하여 빨간색 불을 켜는 프로그램:

digitalWrite(PIN_RED, HIGH); // 빨간색 켜기 digitalWrite(PIN_YELLOW, LOW); // digitalWrite(PIN_GREEN, LOW); delay(RED_TIME); // 일정 시간 동안 빨간색 LED를 켜져 있게 함

아두이노 나노 코드

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-traffic-light */ #define PIN_RED 3 // 아두이노 나노 핀, 트래픽 라이트 모듈의 R 핀에 연결됨 #define PIN_YELLOW 4 // 아두이노 나노 핀, 트래픽 라이트 모듈의 Y 핀에 연결됨 #define PIN_GREEN 5 // 아두이노 나노 핀, 트래픽 라이트 모듈의 G 핀에 연결됨 #define RED_TIME 4000 // 밀리초 단위의 RED 시간 #define YELLOW_TIME 4000 // 밀리초 단위의 YELLOW 시간 #define GREEN_TIME 4000 // 밀리초 단위의 GREEN 시간 void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // loop 함수는 무한히 반복됩니다 void loop() { // 빨간 불 켜짐 digitalWrite(PIN_RED, HIGH); // 켜기 digitalWrite(PIN_YELLOW, LOW); // 끄기 digitalWrite(PIN_GREEN, LOW); // 끄기 delay(RED_TIME); // 일정 시간 동안 빨간 불을 켜둡니다 // 노란 불 켜짐 digitalWrite(PIN_RED, LOW); // 끄기 digitalWrite(PIN_YELLOW, HIGH); // 켜기 digitalWrite(PIN_GREEN, LOW); // 끄기 delay(YELLOW_TIME); // 일정 시간 동안 노란 불을 켜둡니다 // 초록 불 켜짐 digitalWrite(PIN_RED, LOW); // 끄기 digitalWrite(PIN_YELLOW, LOW); // 끄기 digitalWrite(PIN_GREEN, HIGH); // 켜기 delay(GREEN_TIME); // 일정 시간 동안 초록 불을 켜둡니다 }

사용 방법

  • 위의 코드를 복사하고 Arduino IDE로 엽니다
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino Nano에 코드를 업로드합니다
  • 신호등 모듈을 확인하세요

교통 신호등의 정확한 작동 방식은 다양한 지역과 교차로에서 사용되는 특정 설계와 기술에 따라 달라질 수 있다는 점을 주목하는 것이 중요합니다. 위에서 설명한 원리들은 교통 신호등이 교통을 관리하고 도로의 안전을 향상시키는 방식에 대한 일반적인 이해를 제공합니다.

위 코드는 개별 조명 제어를 보여줍니다. 이제 코드를 개선하여 최적화를 더 잘 진행해봅시다.

아두이노 나노 코드 최적화

코드를 개선하기 위해 조명 제어 기능을 구현합시다.

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-traffic-light */ #define PIN_RED 3 // 아두이노 나노 핀이 교통 신호등 모듈의 R 핀에 연결됨 #define PIN_YELLOW 4 // 아두이노 나노 핀이 교통 신호등 모듈의 Y 핀에 연결됨 #define PIN_GREEN 5 // 아두이노 나노 핀이 교통 신호등 모듈의 G 핀에 연결됨 #define RED_TIME 2000 // 밀리초 단위의 빨간색 시간 #define YELLOW_TIME 1000 // 밀리초 단위의 노란색 시간 #define GREEN_TIME 2000 // 밀리초 단위의 초록색 시간 #define RED 0 // 배열 내의 인덱스 #define YELLOW 1 // 배열 내의 인덱스 #define GREEN 2 // 배열 내의 인덱스 const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN }; const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME }; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // loop 함수는 무한히 반복됨 void loop() { // 빨간 불 켜기 trafic_light_on(RED); delay(times[RED]); // 일정 시간 동안 빨간 불 유지 // 노란 불 켜기 trafic_light_on(YELLOW); delay(times[YELLOW]); // 일정 시간 동안 노란 불 유지 // 초록 불 켜기 trafic_light_on(GREEN); delay(times[GREEN]); // 일정 시간 동안 초록 불 유지 } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // 켜기 else digitalWrite(pins[i], LOW); // 끄기 } }

for 반복문을 사용하여 코드를 개선해 보자.

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-traffic-light */ #define PIN_RED 3 // Arduino Nano 보드의 R 핀에 연결된 핀 #define PIN_YELLOW 4 // Arduino Nano 보드의 Y 핀에 연결된 핀 #define PIN_GREEN 5 // Arduino Nano 보드의 G 핀에 연결된 핀 #define RED_TIME 2000 // 밀리초 단위의 빨강 시간 #define YELLOW_TIME 1000 // 밀리초 단위의 노랑 시간 #define GREEN_TIME 2000 // 밀리초 단위의 초록 시간 #define RED 0 // 배열에서의 인덱스 #define YELLOW 1 // 배열에서의 인덱스 #define GREEN 2 // 배열에서의 인덱스 const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN}; const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME}; void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // loop 함수는 무한히 반복됨 void loop() { for (int light = RED; light <= GREEN; light ++) { trafic_light_on(light); delay(times[light]); // 일정 시간 동안 불을 켜둠 } } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i ++) { if (i == light) digitalWrite(pins[i], HIGH); // 켜기 else digitalWrite(pins[i], LOW); // 끄기 } }

delay() 대신 millis() 함수를 사용하여 코드를 개선해 봅시다.

/* * 이 Arduino Nano 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-traffic-light */ #define PIN_RED 3 // 아두이노 나노 핀이 신호등 모듈의 R 핀에 연결됨 #define PIN_YELLOW 4 // 아두이노 나노 핀이 신호등 모듈의 Y 핀에 연결됨 #define PIN_GREEN 5 // 아두이노 나노 핀이 신호등 모듈의 G 핀에 연결됨 #define RED_TIME 2000 // RED 시간(밀리초) #define YELLOW_TIME 1000 // YELLOW 시간(밀리초) #define GREEN_TIME 2000 // GREEN 시간(밀리초) #define RED 0 // 배열에서의 인덱스 #define YELLOW 1 // 배열에서의 인덱스 #define GREEN 2 // 배열에서의 인덱스 const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN }; const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME }; unsigned long last_time = 0; int light = RED; // 시작은 RED에서 void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); trafic_light_on(light); last_time = millis(); } // loop 함수는 무한히 반복됨 void loop() { if ((millis() - last_time) > times[light]) { light++; if (light >= 3) light = RED; // 새로운 사이클 trafic_light_on(light); last_time = millis(); } // 할 일: 여러분의 다른 코드 } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // 켜기 else digitalWrite(pins[i], LOW); // 끄기 } }

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!