Arduino Nano - Semáforo
Este tutorial ensina como usar um Arduino Nano para controlar um módulo de semáforo. Especificamente, vamos abordar os seguintes aspectos:
Estabelecer a conexão entre o módulo de semáforo e o Arduino Nano
Programar o Arduino Nano para gerenciar o módulo de semáforo RGB
Implementar a programação do Arduino Nano para controlar o módulo de semáforo RGB sem depender da 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 quatro pinos:
Pino GND: Conecte este pino ao GND do Arduino Nano.
Pino R: Controla a luz vermelha; conecte este pino a uma saída digital do Arduino Nano.
Pino Y: Gerencia a luz amarela; conecte este pino a uma saída digital do Arduino Nano.
Pino G: Governa a luz verde; conecte este pino a uma saída digital do Arduino Nano.
Configure os pinos de um Arduino Nano como 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 3
#define PIN_YELLOW 4
#define PIN_GREEN 5
#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);
}
Copie o código acima e abra com a Arduino IDE
Clique no botão Upload na Arduino IDE para carregar o código no Arduino Nano
Confira o módulo de semáforo
É importante observar que o funcionamento exato de um semáforo pode variar conforme o projeto e a 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áfego 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 otimização melhor.
#define PIN_RED 3
#define PIN_YELLOW 4
#define PIN_GREEN 5
#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 3
#define PIN_YELLOW 4
#define PIN_GREEN 5
#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 3
#define PIN_YELLOW 4
#define PIN_GREEN 5
#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!