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 arduino mega adk
- 8 leds
- 1 computador
- cables
- integrado 74HC595
DIAGRAMAS
DIAGRAMA DE MONTAJE EN PROTOBOARD
DIAGRAMA ESQUEMÁTICO
DIAGRAMA ESQUEMÁTICO
DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA
FOTOS DEL PROCESO DE MONTAJE
CÓDIGO ARDUINO
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[] { 0, 0, 0, 0, 0, 0, 0, 0};
// configuración inicial
void setup(){
size(590, 180); // 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*70, 80, 30, 30);
// 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*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());
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