Ultra Semáfaro

Sobre o projeto

Gif do circuito super semáfaro funcionando

Em nosso cotidiano movimentado, a eficiência e segurança do tráfego rodoviário são essenciais. Nesse contexto, a tecnologia pode desempenhar um papel fundamental na criação de soluções inteligentes e interativas. O projeto do semáforo Arduino com buzzer e botão é um exemplo eloquente dessa interseção entre eletrônica e mobilidade urbana. Ao combinar um semáforo simulado, um buzzer para feedback sonoro e um botão de controle, esse projeto não apenas demonstra o potencial do Arduino, mas também ilustra como a tecnologia pode aprimorar sistemas de tráfego e segurança.

Funcionalidades do Semáforo Arduino com Buzzer e Botão:

O circuito do semáforo Arduino com buzzer e botão é um exercício em automação e controle. Utilizando a plataforma Arduino, um microcontrolador programável, o projeto simula o funcionamento de um semáforo funcional, com luzes indicativas de trânsito. Além disso, um buzzer integrado fornece um feedback sonoro sincronizado com as mudanças das luzes, imitando o sinal sonoro de um semáforo. Um botão é utilizado para permitir a interação do usuário, permitindo que ele alterne entre os estados do semáforo.

Exemplos de Aplicações:

  1. Demonstração de Conceitos: Pode ser utilizado para ilustrar os princípios básicos de automação, controle e integração de dispositivos eletrônicos.
  2. Protótipo para Soluções Urbanas: Serve como protótipo de baixo custo para testar conceitos de controle de tráfego e segurança em ambientes urbanos.
  3. Aprendizado Prático (Huh!? Interessante): Oferece uma experiência prática para estudantes que desejam explorar a programação de microcontroladores e a automação.

Participantes do Projeto:

Logo abaixo, apresentamos a nossa montagem de um circuito que incorpora esse semáfaro Arduino


Componentes que vamos usar

Imagem de um Arduino

Arduino

Arduino é uma plataforma de prototipagem eletrônica que se tornou extremamente popular e amplamente utilizada em projetos de robótica, arte interativa etc. É baseado em uma placa de hardware de código aberto, com um microcontrolador programável e uma série de pinos de entrada e saída.

Imagem de um breadboard, placa de plástico com muitos buracos

Breadboard

É uma placa de plástico com orifícios que permitem a montagem temporária de circuitos eletrônicos. Ela possui trilhas condutoras internas que permitem a conexão dos componentes sem a necessidade de soldagem, tornando a montagem rápida e flexível.

Imagem de push button, botão

Push Button

É um componente que permite a abertura ou o fechamento de um circuito elétrico quando pressionado. Ele possui dois ou mais terminais que se conectam quando o botão é pressionado e se desconectam quando ele é liberado.

Imagem com três leds

LED (Light Emitting Diode)

É um diodo emissor de luz, um componente eletrônico que emite luz quando uma corrente elétrica passa por ele. Os LEDs são amplamente utilizados como indicadores luminosos em circuitos eletrônicos.

Imagem com vários resistores

Resistor

É um componente eletrônico que limita o fluxo de corrente em um circuito. Ele é usado para controlar a quantidade de corrente que passa por outros componentes, como LEDs, evitando danos causados por correntes muito altas.

Imagem com vários cabos jumpers

Fio jumper (jump wire)

São fios condutores pré-fabricados, geralmente flexíveis e com conectores em suas extremidades, que permitem a conexão dos componentes eletrônicos em uma placa de prototipagem ou breadboard de forma rápida e prática.

Imagem de um cabo de energia conectado a um laptop

Bateria de laptop (Energia)

A bateria de laptop é um componente essencial na montagem do circuito Botão pressionar e LED, pois fornece a fonte de energia necessária para o funcionamento do circuito. Ela é conectada ao Arduino por meio de cabos.

Imagem de um buzzer

Buzzer

Um buzzer é um dispositivo eletrônico que produz som ou tom quando uma corrente elétrica passa por ele. É frequentemente utilizado em projetos eletrônicos para emitir alertas sonoros, notificações ou até mesmo reproduzir melodias simples


Montagem por passos

Primeiramente, vamos precisar de:

  • Um Arduino
  • 5 LEDs (2 vermelhos, 2 verdes e 1 laranja/amarelo)
  • 6 resistências 330 Ω
  • 1 botão + 1 resitência 1 kΩ
  • 1 Buzzer
  • 19 Cabos jumpers machos-machos

Passo 1 - conectando alguns cabos jumpers

Passo 1 - conectando alguns cabos jumpers

Passo 2 - conectando resistores e LEDs

Passo 2 - conectando resistores e LEDs

Passo 3 - conectando BUZZER e BOTÃO

Passo 3 - conectando alguns cabos jumpers

Passo 4 - conectando jumpers entre os resistores e os cátodos dos LEDs

Passo 4 - conectando jumpers entre os resistores e os cátodos dos LEDs

Passo 5 - conectando MAIS alguns cabos jumpers

Passo 5 - conectando alguns MAISS cabos jumpers

Saiu do forno!

Foto do circuito completo

Dando vida ao circuito

Os códigos que serão utilizados para dar vida ao circuito usando a linguagem de programação C++. O C++ é uma linguagem amplamente utilizada em desenvolvimento de software, conhecida por sua eficiência, flexibilidade e poder. No contexto dos circuitos eletrônicos, o C++ é frequentemente empregado para programar microcontroladores, que desempenham um papel crucial no controle e na automação de dispositivos eletrônicos. Esses microcontroladores podem ser encontrados em uma ampla gama de dispositivos, desde eletrodomésticos inteligentes até sistemas embarcados em carros e aviões.

            
    // Variáveis para controlar o ciclo de troca automática
    long ciclo = 1 * 1000l; // 10 segundos
    long ultimo_ciclo = 0;
    
    // Variáveis para controlar o botão
    int debounce_delay = 800;
    int request_person = 0;
    int pedido_estado = 0;
    
    // Arduino's digital input (Portas digitais do arduino)
    const byte PERSON_GREEN = 2;
    const byte PERSON_RED = 3;
    const byte BUTTON = 5;
    const byte BELL = 6;
    const byte CAR_GREEN = 8;
    const byte CAR_YELLOW = 9;
    const byte CAR_RED = 10;
    
    // som de aviso para peões/pedestres
    const byte NOTE_A6 = 2000;  // experimentem mudar para sons diferentes
    
    void setup(){
      // semafaro pedestres
      pinMode(PERSON_GREEN, OUTPUT);
      digitalWrite(PERSON_GREEN, LOW);
      pinMode(PERSON_RED, OUTPUT);
      digitalWrite(PERSON_RED, HIGH);
    
      // semaforo transito
      pinMode(CAR_GREEN, OUTPUT);
      digitalWrite(CAR_GREEN, HIGH);
      pinMode(CAR_YELLOW, OUTPUT);
      digitalWrite(CAR_YELLOW, LOW);
      pinMode(CAR_RED, OUTPUT);
      digitalWrite(CAR_RED, LOW);
    
      // botao person
      pinMode(BUTTON, INPUT);
    
      // definir o ultimo ciclo
      ultimo_ciclo = millis();
    
      Serial.begin(9600);
    }
    
    void loop(){
      // detetar botao pressionado, com proteção debounce
      // http://arduino.cc/it/Tutorial/Debounce
      long ms = millis();
      byte request = digitalRead(BUTTON);
    
      if( ultimo_ciclo + ciclo < ms ){
        // esta na hora de trocar para peoes (ciclo automático)
        Serial.print("Prioridade aos peoes (auto)\n");
        stopCars();
        person();
        greenLightCars();
        pedido_estado = 1;
        ultimo_ciclo = millis();
      } else if( request == 1){
        // um pedestre pediu para parar o trânsito
        Serial.print("Prioridade aos peoes (manual)\n");
        stopCars();
        person();
        greenLightCars();
        pedido_estado = 1;
        ultimo_ciclo = millis(); // repor o contador automatico para nao acionar logo de seguida
      } else if( request != pedido_estado ){
        request_person = ms;
      }
    
      pedido_estado = request;
      
      //A cada 60 segundos, irá aparaecer um "Hello, world!" no serial monitor. 
      Serial.print("Hello, world!\n"); 
      delay(60000);
    }
    
    void stopCars(){
      delay(1000);
      digitalWrite(CAR_GREEN, LOW);
      digitalWrite(CAR_YELLOW, HIGH);
    
      delay(1000);
      digitalWrite(CAR_YELLOW, LOW);
      digitalWrite(CAR_RED, HIGH);
    
      delay(1500);
    }
    
    void greenLightCars(){
      digitalWrite(CAR_RED, LOW);
      digitalWrite(CAR_YELLOW, LOW);
      digitalWrite(CAR_GREEN, HIGH);
    }
    
    void person(){
      digitalWrite(PERSON_RED, LOW);
      digitalWrite(PERSON_GREEN, HIGH);
    
      delay(5000);
      piscaLuz(PERSON_GREEN, 5, 400);
      digitalWrite(PERSON_GREEN, LOW);
      digitalWrite(PERSON_RED, HIGH);
      delay(2000);
    }
    
    void piscaLuz(byte luz, byte vezes, int tempo){
      for( byte i = 0; i < vezes; i++ ){
        digitalWrite(luz, LOW);
        tone(BELL, NOTE_A6, 1000/2);
        delay(tempo);
        digitalWrite(luz, HIGH);
        delay(tempo);
        noTone(BELL);
      }
    }
            
    
          

Outros projetos

Test Image