Sem谩foro con temporizador hecho con arduino

Publicado el: 19 de junio de 2019
Principiante
Acerca de este proyecto
Utiliza dos displays de dos colores (rojo y verde) que encienden dependiendo del color en que se encuentre el sem谩foro.
semaforo
Publicidad
DETALLES

ste proyecto consiste en la simulaci贸n de un sem谩foro como los que se encuentran en muchas calles, que contienen un temporizador y dos displays bicolor (rojo y verde) los cuales se encienden dependiendo del color en que se encuentre el faro del sem谩foro. Si esta en verde, se encienden los displays de color verde, si se encuentra en rojo, se encienden los displays de color rojo.

VIDEO DE FUNCIONAMIENTO


LISTA DE MATERIALES


  • Arduino Uno o equivalente.
  • Circuito integrado 74LS47.
  • 7 transistores NPN 2N3904 o similar.
  • 7 transistores PNP 2N3906 o similar.
  • 15 leds de color rojo.
  • 15 leds de color verde.
  • 1 led de color amarillo.
  • 14 resistores de 10K ohms.
  • 31 resistores de 100 ohms.
  • Cables de conexi贸n.

DIAGRAMA ESQUEM脕TICO



Diagrama esquematico





CODIFICACI脫N
Codigo en arduino-
Codificacion del semaforo con temporizador
//Programa contador BCD desde 00 hasta 99 con 1 ic 7447
const int ledRojo = 12;
const int ledAmarillo = 13;
const int ledVerde = 2;

const int A = 4;
const int B = 5;
const int C = 6;
const int D = 7;

unsigned long previousMillis = 0;        // will store last time LED was updated

const long interval = 2000;           // interval at which to blink (milliseconds)

const int displayDecenasRojo = 8;
const int displayDecenasVerde = 9;

const int displayUnidadesRojo = 10;
const int displayUnidadesVerde= 11;

const int tiempo = 10;

int numero = 35;
int unidades = 0;
int decenas = 0;

//int conta = 0;  // Variable para el contador


void escribirBcd(byte num)
{
  digitalWrite(A, (num&1)==1);
  digitalWrite(B, (num&2)==2);
  digitalWrite(C, (num&4)==4);
  digitalWrite(D, (num&8)==8);
}

void setup() 
{
  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
  
  pinMode(displayUnidadesRojo,OUTPUT);
  pinMode(displayDecenasRojo,OUTPUT);
  pinMode(displayUnidadesVerde,OUTPUT);
  pinMode(displayDecenasVerde,OUTPUT);
  
  digitalWrite(displayUnidadesRojo,LOW);
  digitalWrite(displayDecenasRojo,LOW);
  digitalWrite(displayUnidadesVerde,LOW);
  digitalWrite(displayDecenasVerde,LOW);

 }
 
//************************************************************************

void encenderRojos()
{
  habilitarUnidadesRojo();
  habilitarDecenasRojo();
}

void encenderVerdes()
{
  habilitarUnidadesVerde();
  habilitarDecenasVerde();
}

void habilitarUnidadesRojo()
{
  escribirBcd(unidades);
  digitalWrite(displayUnidadesRojo,HIGH);
  digitalWrite(displayDecenasRojo,LOW);
  digitalWrite(displayUnidadesVerde,LOW);
  digitalWrite(displayDecenasVerde,LOW);
  delay(tiempo);
}  

void habilitarDecenasRojo()
{
  escribirBcd(decenas);
  digitalWrite(displayUnidadesRojo,LOW);
  digitalWrite(displayDecenasRojo,HIGH);
  digitalWrite(displayUnidadesVerde,LOW);
  digitalWrite(displayDecenasVerde,LOW);
  delay(tiempo);
}  

void habilitarUnidadesVerde()
{
  escribirBcd(unidades);
  digitalWrite(displayUnidadesRojo,LOW);
  digitalWrite(displayDecenasRojo,LOW);
  digitalWrite(displayUnidadesVerde,HIGH);
  digitalWrite(displayDecenasVerde,LOW);
  delay(tiempo);
}  

void habilitarDecenasVerde()
{
  escribirBcd(decenas);
  digitalWrite(displayUnidadesRojo,LOW);
  digitalWrite(displayDecenasRojo,LOW);
  digitalWrite(displayUnidadesVerde,LOW);
  digitalWrite(displayDecenasVerde,HIGH);
  delay(tiempo);
}  


void loop() 
{       
        unsigned long currentMillis = millis();

        if (currentMillis - previousMillis >= interval) 
        {
          numero = numero-1; 
          // save the last time you blinked the LED
          previousMillis = currentMillis;
        }

        if(numero <= 10)
        {
          encenderRojos();
        }
        else
        {
          encenderVerdes();
        }
                                
        if(numero<0)
        {
          numero = 35;
        }  
         
        decenas = numero/10;  //Extraigo el d矛gito de las unidadesSS
       
        unidades=  numero-( decenas*10);  //Extraigo el d矛gito de las decenas
         
        //habilitarUnidades();
        
        //habilitarDecenas();
         
 
}

Download me
Autor: sistemasymicros
24 proyectos 1 seguidores 0 siguiendo

Ingeniero en electronica, desarrollador de software. Desarrollo de proyectos con microcontroladores.

COMENTARIOS
Para publicar un comentario debes