lunes, 21 de octubre de 2013

LABORATORIO NUMERO 8


En este laboratorio se usara el integrado 74HC595 el cual es un encapsulado de registro de desplazamiento, por lo tanto este integrado nos permitirá reducir la cantidad de pines utilizados en el arduino, y así poder aumentar la cantidad de salidas controladas por este.
El 74HC595 un registro de desplazamiento de 8 bits con entrada serie, salida serie o paralelo con latch (bloqueo); 3 estados.". En otras palabras, puedes usarlo para controlar 8 salidas simultaneas usando unos pocos pines del micro controlador  Incluso se pueden enlazar varios integrados de manera que ampliamos el numero de salidas mucho mas.
este integrado se sincroniza por medio del pinClock asignado en el arduino el cual permitirá efectuar su trabajo de una manera adecuada.
 Este modo de comunicación difiere con la "comunicación serie asíncrona  de la función Serial.begin() en la que emisor y receptor fijan de forma independiente una velocidad de transferencia. 
A Continuación se podra observar un esquema del encapsulado con toda la configuración de sus pines de entrada y salida.
después de haber configurado el encapsulado procederemos a la programación de la comunicación entre este y el sistema arduino el cual se basa en un comando de transmisión de datos llamado shiftout, después de esto procedemos a conectar cada salida a los leds para poder controlar el encendido de cada led por medio de un interfaz de control grafico desarrollado en processing.

MATERIALES
  1. 1 arduino mega adk
  2. 8 leds
  3. 1 computador
  4. cables
  5. integrado 74HC595
DIAGRAMAS

DIAGRAMA DE MONTAJE EN PROTOBOARD


DIAGRAMA ESQUEMÁTICO
DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA

FOTOS DEL PROCESO DE MONTAJE







CÓDIGO ARDUINO

// utilizar la libreria ControlP5
import controlP5.*;

// definir la variable cp5 del tipo ControlP5
ControlP5 cp5;

// como deseamos controlar 8 LEDs, usamos un arreglo
int[] led = new int[] { 0, 0, 0, 0, 0, 0, 0, 0};  

// configuración inicial
void setup() {

  size(590, 140); // tamaño de la ventana
  noStroke();     // no dibujar el border de los circulos

  // crear el objeto ControlP5
  cp5 = new ControlP5(this);

  // crear un botón para encender/apagar cada LED
  for (int i=0; i<led.length; i++)
    cp5.addToggle("led"+i, 35+i*70, 80, 30, 30);
}

// dibujar cada frame
void draw()  
{
  background(0xFF444444);  // color gris del fondo
  // un circulo para representar cada LED
  for (int i=0; i<led.length; i++) {
    // definir el color de relleno, 0=apagado, 1=encendido
    fill(led[i] == 0 ? 0xFF222222 : 0xFFFFFFFF);
    // dibujar un circulo con ese color
    ellipse(50+i*70, 40, 50, 50);
  }
}  

// actuar cuando ocurra un evento con los Sliders
public void controlEvent(ControlEvent theEvent) {
  // guardar el nombre y valor del evento
  String nombre = theEvent.getController().getName();
  int valor = int(theEvent.getController().getValue());

  for (int i=0; i<led.length; i++) {
    if (nombre.equals("led"+i)) {
      led[i] = valor;
    }
    println("evento: " + nombre + " / valor: "+valor);
  }
}

CODIGO PROCESING

import controlP5.*; // importamos la libreria 
ControlP5import processing.serial.*;   
 // importamos para  utilizar la liberia processing.serialSerial serial; 
// Se define la variable serial del tipo Serial
ControlP5 cp5; // definimos que la variable cp5 del tipo 
ControlP5 Textlabel texto1; 
// se define que la variable texto1 sera de tipo textlabel
// como deseamos controlar 8 LEDs, usamos un arreglo
int[] led = new int[] { 00000000};  
// configuración inicial
void setup(){
  size(590180); // tamaño de la ventana
  noStroke();     // no dibujar el border de los circulos
  cp5 = new ControlP5(this); // crear el objeto ControlP5
  serial = new Serial(this, Serial.list()[0],9600);
 // instruccion para inicializar el puerto serial a 9600 baudios
  // crear un botón para encender/apagar cada LED
  for (int i=0; i<led.length; i++)
 cp5.addToggle("led"+i, 35+i*70803030);
 // Titulo de la ventana
 texto1 = cp5.addTextlabel("label")
                    .setText("LABORATORIO #08") //Definimos lo que tendra el texto agregado
                    .setPosition(175,130) //Definimos la pocision en la que se pondra el
letrero
                    .setColorValue(0xff090808) //Definimos el color de la ventana
                    .setFont(createFont("Arial BLack",22)); //Definimos tipo de letra para la interfaz
}

// dibujar cada frame
void draw()  
{
  background(0x721515);  // color del fondo
  // un circulo para representar cada LED
  for (int i=0; i<led.length; i++) {
    // definir el color de relleno, 0=apagado, 1=encendido
    fill(led[i] == 0 ? color(255,255,255) :color(0,255,0));
    // dibujar un circulo con ese color
    ellipse(50+i*70405050);
  }
}  

// actuar cuando ocurra un evento con los Sliders
public void controlEvent(ControlEvent theEvent) {
  // guardar el nombre y valor del evento
  String nombre = theEvent.getController().getName();
  int valor = int(theEvent.getController().getValue());
  int resultado=0; // creamos una variable para guardar la posicion del led encendido

  for (int i=0; i<led.length; i++)
  {
    if (nombre.equals("led"+i))
    {
      led[i] = valor;
    }
     resultado += (led[i] << i); 
// Instrucción para hacer un desplazamiento de la posicion
del arreglo y manda el valor
  }

    serial.write (resultado);
 // instrucción para enviar por el puerto serial el nombre y el
valor
  
}

No hay comentarios:

Publicar un comentario