Arduino Nano ESP32 - Semáforo
Neste tutorial, vamos explorar como usar o Arduino Nano ESP32 para controlar um módulo de semáforo. Em detalhes, vamos aprender:
Como conectar o módulo de semáforo ao Arduino Nano ESP32
Como programar o Arduino Nano ESP32 para controlar o módulo de semáforo RGB
Como programar o Arduino Nano ESP32 para controlar o módulo de semáforo RGB sem usar a função delay()
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Um módulo de semáforo possui 4 pinos:
Pino GND: O pino de terra, conecte este pino ao GND do Arduino Nano ESP32.
Pino R: O pino para controlar a luz vermelha, conecte este pino a uma saída digital do Arduino Nano ESP32.
Pino Y: O pino para controlar a luz amarela, conecte este pino a uma saída digital do Arduino Nano ESP32.
Pino G: O pino para controlar a luz verde, conecte este pino a uma saída digital do Arduino Nano ESP32.

This image is created using Fritzing. Click to enlarge image
Configure os pinos do ESP32 no modo de saída digital usando a função
pinMode()
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
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);
}
Para começar com o Arduino Nano ESP32, siga estes passos:
Ligue os componentes de acordo com o diagrama fornecido.
Conecte a placa Arduino Nano ESP32 ao seu computador usando um cabo USB.
Abra o Arduino IDE no seu computador.
Selecione a placa Arduino Nano ESP32 e a porta COM correspondente.
Copie o código acima e abra no Arduino IDE
Clique no botão Upload do Arduino IDE para fazer o upload do código para o Arduino Nano ESP32
Confira o módulo de semáforo
É importante observar que o funcionamento exato de um semáforo pode variar dependendo do projeto e da tecnologia usados em diferentes regiões e cruzamentos. Os princípios descritos acima oferecem uma compreensão geral de como os semáforos operam para gerenciar o trânsito e aumentar a segurança nas vias.
O código acima demonstra o controle individual das luzes. Agora, vamos melhorar o código para uma melhor otimização.
#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);
}
}
#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);
}
}
#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);
}
}
※ NOSSAS MENSAGENS
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!