miércoles, 19 de agosto de 2015

Contador digital con display de 7 segmentos

En electrónica digital, Un contador (en inglés, counter) es un circuito secuencial construido a partir de biestables y puertas lógicas capaz de almacenar y contar los impulsos (a menudo relacionados con una señal de reloj), que recibe en la entrada destinada a tal efecto, asimismo también actúa como divisor de frecuencia. Normalmente, el cómputo se realiza en código binario, que con frecuencia será el binario natural o el BCD natural (contador de décadas).
Con Arduino haremos un pequeño contador que irá de 0 a 9 y para eso vamos a usar un display de 7 segmentos.

Materiales
§  Arduino mega 2560
§  Display de 7 segmentos catodo común modelo DC05
§  1 Resistencia de 220 Ohms
§  Cables
Configuración del display de 7 segmentos
Un display de este tipo no es más que un conjunto de LED’s como los que hemos estado utilizando, solo que estos están conectados en un circuito. Nosotros usaremos el display modelo DC05, el cual es de catodo común, es decir, internamente todos los LED’s comparten la misma tierra (GND).


Circuito
El circuito es fácil de armar, las configuraciones pueden variar, solo recuerda declarar bien los pines dentro del código de Arduino.

Como pueden apreciar las conexiones quedaron de la siguiente manera:
§  Pin A del Display al pin 39 del Arduino
§  Pin B del Display al pin 51 del Arduino
§  Pin G del Display al pin 43 del Arduino
§  Pin F del Display al pin 41 del Arduino
§  Pin E del Display al pin 47 del Arduino
§  Pin D del Display al pin 49 del Arduino
§  Pin C del Display al pin 45 del Arduino
§  La tierra del display va conectada a un extremo de la resistencia y el otro extremo de la resistencia va conectado a tierra del Arduino (GND)
Programa de Arduino.

Versión 1: en esta version utilizamos un delay(1000), lo que significa que se detiene el programa por 1000 milisegundos = 1 segundo, esto con el fin de dejar prendido el estado del display por 1 segundo. Después podemos ver como es que vamos prendiendo cada uno de los números en el Display.

int a = 39;
int b = 51;
int c = 45;
int d = 49;
int e = 47;
int f = 41;
int g = 43;//Hacemos que todas nuestras variables sean salidas
void setup(){
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);}

void loop(){
//Cero
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);

delay(1000);
//Uno
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);

delay(1000);

//Uno
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);

delay(1000);

//Dos
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);

delay(1000);

//Tres
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);

delay(1000);

//Cuatro
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);

delay(1000);

//Cinco
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);

delay(1000);

//Seis
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);

delay(1000);

//Siete
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);

delay(1000);

//Ocho
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);

delay(1000);

//Nueve
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);

delay(1000);


}


Conclucion 
Los contadores digitales son utiles en todos los dispositivos electronicos ya que estos pueden ser diferentes indicadores que se ven reflejados en el display ademas de que son muy faciles de conectar puedes que en el display te de el voltaje de una bateria etc. 



jueves, 30 de julio de 2015

Cruce de semáforos LED (Salidas TRI – Estado)

Materiales
-2 x Diodo LED Red
-2 x Diodo LED Yellow
-2 x Diodo LED Green
-6 x Resistencia 220 ohmios
-1 x Resistencia 10 Kohmios
-1 x Arduino UNO
-Cables
-1 x boton



Los LEDs los conectaremos desde la salida de la resistencia hacia el controlador. (ver imagen)

- LED Verde (derecha): PIN 2 del Arduino.
- LED Amarillo: PIN 3 (PWM)
- LED Rojo: PIN 4
- LED Verde: PIN 5
- LED Amarillo: PIN 6
- LED Rojo: PIN 7
  

Programación

const int button = 8;

void setup() {
 for (int pin = 2; pin <= 7; pin++) {
   pinMode(pin, OUTPUT);
 }
 pinMode(button, INPUT);
}

void semaphoreOne() {
 digitalWrite(2, HIGH);
 int count = 0;
 while (count < 30) {

   if (digitalRead(button) == true) {
     break;
   }
   count++;
   delay(200);
 }
  digitalWrite(2, LOW);
 delay(500);
 digitalWrite(2, HIGH);
 delay(500);
 digitalWrite(2, LOW);
 delay(500);
 digitalWrite(2, HIGH);
 delay(500);
 digitalWrite(2, LOW);
 delay(500);
 digitalWrite(2, HIGH);
 delay(500);
 digitalWrite(2, LOW);
 delay(500);
 digitalWrite(2, HIGH);
 delay(500);
 digitalWrite(2, LOW);
 digitalWrite(3, HIGH);
 delay(2500);
 digitalWrite(3, LOW);
 digitalWrite(4, HIGH);
 digitalWrite(7, LOW);
  semaphoreTwo();
}

void semaphoreTwo() {
 digitalWrite(5, HIGH);
 int count = 0;
 while (count < 30) {
   if (digitalRead(button) == true) {
     break;
   }
   count++;
   delay(200);
 }
 digitalWrite(5, LOW);
 delay(500);
 digitalWrite(5, HIGH);
 delay(500);
 digitalWrite(5, LOW);
 delay(500);
 digitalWrite(5, HIGH);
 delay(500);
 digitalWrite(5, LOW);
 delay(500);
 digitalWrite(5, HIGH);
 delay(500);
 digitalWrite(5, LOW);
 delay(500);
 digitalWrite(5, HIGH);
 delay(500);
 digitalWrite(5, LOW);
 digitalWrite(6, HIGH);
 delay(2500);
 digitalWrite(6, LOW);
 digitalWrite(7, HIGH);
 digitalWrite(4, LOW);
 semaphoreOne();
}

void loop() {
 for (int pin = 2; pin <= 7; pin++) {
   digitalWrite(pin, LOW);
 }
 digitalWrite(2, HIGH);
 digitalWrite(7, HIGH);
 semaphoreOne();
}

Conclusión

Con esta actividad podemos realizar diferentes operaciones continuas programadas con un semáforo o programar una máquina, es de gran utilidad al hacer actividades secuenciales ya que puedes programar por tiempo en cuanto termine una inicia la otra actividad en este caso son las luces de un semáforo de crucero, en este puedes escoger el tiempo de encendido y de apagado.  

domingo, 26 de julio de 2015

Circuitos aritmerticos

Circuito aritmético
La conexión del circuito es bastante sencilla, simplemente conectamos la salida digital del arduino al lado positivo del LED poniendo entre medias unas resistencias de 330 ohm´s, mientras que el lado negativo de cada LED iría al la conexión de tierra del Arduino.



Como se ve en el esquema.
Montándolo en la placa protoboard, a mí me ha quedado algo así:


Una vez tenemos el circuito montado, viene la parte de la programación, antes de nada hay que descargarse el entorno de programación del Arduino.
El código en cuestión sería algo como:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int outPin[] = {13, 12, 11, 10, 9};

int delayValue = 600;

void setup()
{
  int i = 0;
  for ( i = 0; i < 5; i++)
    pinMode(outPin[i], OUTPUT);
}

void loop()
{

  int i = 0, j=0;

  for ( i = 0; i < 32; i++)
  {
     for ( j = 0; j < 5; j++)
     {
       if ( ( (i >> j) & 1 )  == 1 )
           digitalWrite(outPin[j], HIGH);
       else digitalWrite(outPin[j], LOW);
     }
     delay(delayValue);
  }
}
Es bastante sencillo, declaramos un array con el conjunto de pines a los cuales están conectados nuestros LEDs. En la función setup, los configuramos en modo salida.
Está en la función loop(), esta se ejecutará una y otra vez, lo que hacemos es iterar por los 32 numeros que podemos mostrar, ya que tenemos 5 LEDs, y 2 elevados a 5 son 32. Por cada número, encendemos o apagamos cada led correspondiente. La clave está en el bucle que realiza la operación “(i >> j) & 1″. Cada iteración del bucle divide el numero en cuestion por 2 y se queda unicamente con el bit de menor valor. Asi sabemos si tenemos que encender o no el LED.
Por ejemplo, para mostrar el número 21, que en binario es (10101) deberiamos encender los LEDs 0, 2 y 4 y dejar apagados el resto. El calculo sería:
·         LED 0: 21 (10101 & 1) -> 1 , encendido
·         LED 1: 21 / 2 = 10 (01010 & 1) -> 0, apagado
·         LED 2: 21 / 4 = 5 (00101 & 1) -> 1, encendido
·         LED 3: 21 / 8 = 2 (00010 & 1) -> 0, apagado
·         LED 4: 21 / 16 = 1 (00001 & 1) -> 1, encendido
Como vemos, el resultado del calculo es correcto. Básicamente lo que se hace es ir desplazando los bits hacia la derecha y quedandonos con el bit menos significativo.

Conclucion

En esta practica pode realizar sumas secuenciales las que ayudan en diferentes casos segun lo requeramos podemos ir sumando numero de 2 en 2 o ir restando para realizar diferentes actividades ya sea para mostrar un marcador o para realiazar un conteo.

viernes, 24 de julio de 2015

Comparador de magnitudes

Comparadores de magnitud

Un comparador de magnitud es un circuito combinacional que compara dos números, A y B y determina sus magnitudes relativas. La salida de la comparación se especifica por tres variables binarias que indican si A>B, A=B o A
Para determinar si A es mayor o menor que B, se inspeccionan las magnitudes relativas de pares de dígitos significativos empezando desde la posición mas significativa. Si los dos dígitos son iguales, el par de dígitos de la siguiente posición significativa más baja se comparan. Esta comparación continúa hasta que se alcanza un par de dígitos desiguales. Si el dígito correspondiente de A es 0 y B es 1, se tiene que A < B.
Funciones para A mayor o menor que B La comparación secuencial puede expresarse en forma lógica por las siguientes dos funciones booleanas:
(A>B)= A3B3’ + A2B2’X3 + A1B1’X3X2 + A0B0’X3X2X1
(A<B)= A3’B3 + A2’B2X3 + A1’B1X3X2 + A0’B0X3X2X1

Circuito Comparador
Los circuitos comparadores son integrados que se encargan de evaluar dos números en sistema binario conformados por cuatro dígitos cada uno. Dichos circuitos nos informan si los números son diferentes o iguales por medio de tres salidas.


La siguiente imagen contiene un esquema que indica el orden de los pines de la referencia mas común de integrados comparadores que es la 7485.


Construccion de circuito




Materiales

·          - Circuito integrado 7485
·         - 3 led’s
·         - 3 resistencias de 330 Ω
·         - Interruptor de 8 vías (Nosotros lo haremos programando los pulsos en el arduino)
·         Arduino

Descripción
En este proyecto vamos a construir un sistema comparador, este se encarga de comparar 2 números en su sistema binario con un interruptor de 8 vías creando los pulsos ya sean high o Low correspondiendo a “0” y a “1”. Este interruptor lo vamos a sustituir con la tablilla arduino ya que con este dispositivo puedes generar dichos pulsos sin la necesidad de utilizar un interruptor.


Estas son entradas del circuito integrado estas van a estar a los pines 15, 13, 12, 10 ya que son aquí donde vamos introducir los pulsos binarios que uniéndolos van a ser el primer número a comparar.
En las entradas 1, 14, 11, 9 es donde vamos a introducir los pulsos binarios del segundo número.

Los pines 5, 6, 7 son las salidas donde nos va comparar los 2 números introducíos en en las entradas y nos dira si “es mayor que”, “Menor que” y una “igualdad”. En el pin 5 será “A>B” en el 5 abra “A=B” y en el 7 “A<B”. Estas salidas irán conectadas a 3 led los cuales nos indicaran cual de la 3 salidas se activó.
Posición de los switch
A=0001
B=0010
A<B Se enciende el tercer led




A=0010
B=0001
A>B Se enciende el primer led




A=0010
B=0010
A=B se enciende el led de en medio

Arduino
En arduino vamos a programar los pulsos binarios  que van salir para convertirlos en números binarios y compararlos y así decidir cuál es mayor según el circuito integrado y los led indicadores.
Las salidas 22, 24, 26, 28 irán conectadas al circuito integrado en los pines 15, 13, 12, 10
Las salidas 31, 33, 35, 37 irán conectadas al circuito integrado en los pines 1, 14, 11, 9

int a1=22;
int a2=24;
int a3=26;
int a4=28;
//Primer número que sería el numero A
int b1=31;
int b2=33;
int b3=35;
int b4=37;
//Segundo numero B
 void setup(){
   pinMode(a1, OUTPUT);
   pinMode(a2, OUTPUT);
   pinMode(a3, OUTPUT);
   pinMode(a4, OUTPUT);
   pinMode(b1, OUTPUT);
   pinMode(b2, OUTPUT);
   pinMode(b3, OUTPUT);
   pinMode(b4, OUTPUT);
 }
 void loop()
 {
   digitalWrite(a1,HIGH);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,HIGH);
   digitalWrite(b2,LOW);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0001    B=0001
   delay(100);
   digitalWrite(a1,HIGH);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,LOW);
   digitalWrite(b2,LOW);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0001   B=0000
   delay(100);
     
   digitalWrite(a1,LOW);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,HIGH);
   digitalWrite(b2,LOW);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0000    B=0001
   delay(100);
  
   digitalWrite(a1,LOW);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,LOW);
   digitalWrite(b2,HIGH);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0000   B=0010
   delay(100);
  
   digitalWrite(a1,HIGH);
   digitalWrite(a2,HIGH);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,LOW);
   digitalWrite(b2,LOW);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0011   B=0000
   delay(100);
  
   digitalWrite(a1,HIGH);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,HIGH);
   digitalWrite(b2,HIGH);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0001    B=0011
   delay(100);
  
   digitalWrite(a1,HIGH);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,HIGH);
   digitalWrite(b2,HIGH);
   digitalWrite(b3,HIGH);
   digitalWrite(b4,LOW);
   //A=0001   B=0111
   delay(100);
  
   digitalWrite(a1,LOW);
   digitalWrite(a2,LOW);
   digitalWrite(a3,LOW);
   digitalWrite(a4,LOW);
   digitalWrite(b1,LOW);
   digitalWrite(b2,LOW);
   digitalWrite(b3,LOW);
   digitalWrite(b4,LOW);
   //A=0000   B=0000
   delay(1000);
  
 }



Conclusión

Mi conclusión es que este circuito serviría mucho en varios casos al momento de armar una maquina en la industria ya que puede decidir cuál es mayor o menor y ayudaría a facilitar el trabajo, además te ayudaría a ahorrar componentes utilizando este circuito integrado.