아두이노 나노 ESP32 - 신호등 | Arduino Nano ESP32 - Traffic Light
이 튜토리얼에서는 Arduino Nano ESP32를 사용하여 교통 신호등 모듈을 제어하는 방법을 탐구할 것입니다. 자세히 말하자면, 우리는 다음을 배울 것입니다:
아두이노 나노 ESP32에 교통 신호등 모듈을 연결하는 방법
RGB 교통 신호등 모듈을 제어하기 위해 아두이노 나노 ESP32를 프로그래밍하는 방법
Delay() 함수를 사용하지 않고 RGB 교통 신호등 모듈을 제어하기 위해 아두이노 나노 ESP32를 프로그래밍하는 방법
1 | × | Arduino Nano ESP32 | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | Amazon | |
1 | × | Traffic Light Module | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Recommended) Screw Terminal Expansion Board for Arduino Nano | 쿠팡 | Amazon | |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
교통 신호등 모듈에는 4개의 핀이 포함되어 있습니다:
GND 핀: 접지 핀, 이 핀을 Arduino Nano ESP32의 GND에 연결하세요.
R 핀: 빨간색 빛을 제어하는 핀, 이 핀을 Arduino Nano ESP32의 디지털 출력에 연결하세요.
Y 핀: 노란색 빛을 제어하는 핀, 이 핀을 Arduino Nano ESP32의 디지털 출력에 연결하세요.
G 핀: 초록색 빛을 제어하는 핀, 이 핀을 Arduino Nano ESP32의 디지털 출력에 연결하세요.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
pinMode() 함수를 사용하여 ESP32의 핀을 디지털 출력 모드로 설정하세요.
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);
#define PIN_RED D3
#define PIN_YELLOW D4
#define PIN_GREEN D5
#define RED_TIME 4000
#define YELLOW_TIME 4000
#define GREEN_TIME 4000
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
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 Nano ESP32를 시작하는 방법은 다음 단계를 따르세요:
제공된 다이어그램에 따라 구성 요소를 연결하세요.
USB 케이블을 사용하여 Arduino Nano ESP32 보드를 컴퓨터에 연결하세요.
컴퓨터에서 Arduino IDE를 실행하세요.
Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
위의 코드를 복사하여 Arduino IDE에서 열기
Arduino IDE의 Upload 버튼을 클릭하여 코드를 Arduino Nano ESP32에 업로드하세요
신호등 모듈을 확인하세요.
교통 신호등의 정확한 작동 방식은 다양한 지역과 교차로에서 사용되는 특정 설계와 기술에 따라 달라질 수 있음을 주목하는 것이 중요합니다. 위에 설명된 원리들은 교통 신호등이 교통을 관리하고 도로의 안전을 향상시키는 방법에 대한 일반적인 이해를 제공합니다.
위의 코드는 개별 조명 제어를 보여줍니다. 이제 코드를 더 잘 최적화하기 위해 개선해 봅시다.
조명 제어를 위한 함수를 구현하여 코드를 개선합시다.
#define PIN_RED D3
#define PIN_YELLOW D4
#define PIN_GREEN D5
#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);
}
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 반복문을 사용하여 코드를 개선해봅시다.
#define PIN_RED D3
#define PIN_YELLOW D4
#define PIN_GREEN D5
#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);
}
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() 함수를 사용하여 코드를 개선해 봅시다.
#define PIN_RED D3
#define PIN_YELLOW D4
#define PIN_GREEN D5
#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 };
unsigned long last_time = 0;
int light = RED;
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
trafic_light_on(light);
last_time = millis();
}
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 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.