jueves, 5 de septiembre de 2013

LABORATORIO NUMERO 9


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 del encapsulado a las entradas del display 7 segmentos el cual nos permitirá hacer un conteo desde el numero 0 al numero 9, el cambio de estos números se hará por medio de un potenciomentro que emitirá una señal entre 0 y 5 voltios, que serán enviados a los pines análogos del arduino para que este lo interprete y pueda hacer el cambio, el display utilizado consta de 8 diodos que se catalogan desde el A al G  y el diodo P es el diodo de punto, para cada diodo del display es necesario conectarlo a los pines de salida del encapsulado en un respectivo orden.
en las siguientes imágenes podremos ver las configuraciones internas y configuración de pines de los led 7 segmentos del tipo ánodo común y del tipo cátodo común

ESQUEMA

CONFIGURACIÓN DE PINES


MATERIALES
  1. 1 arduino mega adk
  2. 1 display 7 segmentos
  3. 1 potenciometro de 1k
  4. 1 computador
  5. cables
  6. integrado 74HC595
DIAGRAMAS

DIAGRAMA DE MONTAJE EN PROTOBOARD 

DIAGRAMA ESQUEMÁTICO



DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA


FOTOS DEL PROCESO DE MONTAJE

foto 1

foto 2

foto 3

 CÓDIGO ARDUINO

#define pot A0
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 44;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 46;
//Pin connected to Data in (DS) of 74HC595
const int dataPin = 48;

int display[10]={
  63,6,91,79,102,109,125,7,127,111};


void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode (pot, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600);
}

void loop(){  
  int valorpot = analogRead(pot);                          //lectura de la secuencia proveniente del pot
  int i =  map(valorpot, 0, 1023, 0, 10);                  //mapeo de los datos enviados por el pot de o a 9
  accionseq(0x00);                                                 //llamado de la funcion accionseq
  accionseq(display[i]);                                           //llamado de la funcion accionseq
  Serial.print(i);
  Serial.print(' ');

  Serial.println(display[i]);
}

// Uso de la orden interna shiftout función
void accionseq(int i)
{
  digitalWrite (latchPin, LOW); 
  shiftOut (dataPin, clockPin, MSBFIRST, i);  
  digitalWrite (latchPin, HIGH);   
  delay(50);
}





}
LABORATORIO NUMERO 7

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 procederemos a establecer la configuración de las secuencias que queremos realizar por medio de los diodos leds, el cambio de secuencias se lograra gracias a la trasmisión de una señal entre 0 y 5 voltios generada por un potenciometro conectado a un pin de entrada análoga

MATERIALES
  1. 1 arduino mega adk
  2. 8 diodos leds
  3. 1 potenciometro de 1k
  4. 1 computador
  5. cables
  6. integrado 74HC595
DIAGRAMAS

DIAGRAMA DE MONTAJE EN PROTOBOARD 
.

DIAGRAMA ESQUEMÁTICO



DIAGRAMA PARA MONTAJE EN TARJETA PERFORADA

FOTOS DEL PROCESO DE MONTAJE


foto 1


foto 2

foto 3


 foto 4

foto 5 

foto 6


CÓDIGO EN ARDUINO
#define pot A0
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 44;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 46;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 48;

const int MaxLED = 8;
int LED[MaxLED] = {
  2,3,4,5,6,7,8,9};

const int MaxSEQ = 32;
int seq0[MaxSEQ] = {1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1};
int seq1[MaxSEQ] = {1,2,4,8,4,32,64,128,1,2,4,8,16,32,64,128,1,2,4,8,32,64,128,8,16,128,32,16,1,68,2,16};
int seq2[MaxSEQ] = {1,8,128,2,16,64,4,128,8,1,64,4,32,2,4,1,8,128,2,16,64,4,128,8,1,64,4,32,2,4,128,1};
int seq3[MaxSEQ] = {1,128,2,64,4,32,8,16,16,32,16,64,8,128,2,1,1,128,2,64,4,32,8,32,16,32,16,64,8,128,2,1};
int seq4[MaxSEQ] = {128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,1,2,4,8,16,32,64,128};
int seq5[MaxSEQ] = {8,16,4,32,2,64,1,128,128,64,32,16,8,4,2,1,8,16,4,32,2,16,1,128,128,64,32,2,32,64,128,1};
int seq6[MaxSEQ] = {2,16,4,64,2,8,32,128,128,32,8,2,64,16,4,1,1,4,16,64,2,8,32,128,128,32,8,2,64,16,4,1};
int seq7[MaxSEQ] = {1,16,2,32,4,64,16,128,128,16,64,8,32,4,16,1,2,1,16,2,32,4,64,16,64,64,16,64,8,64,4,14};



void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode (pot, INPUT);
  for(int i=0;i<MaxLED;i++)
    pinMode(LED[i],OUTPUT); 
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  // Serial.begin(9600);
  // Serial.println("reset");
}

void loop() {


  int valorpot = analogRead(pot);             //lectura de la secuencia proveniente del pot
  int i =  map(valorpot, 0, 1023, 0, 7);       //mapeo de los datos enviados por el pot de o a 7
  cambioseq(i);
}

void cambioseq(int i)
{
  switch (i){                            // interruptor seleccionador de secuencia
  case 1:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq0[x]);
      delay(100);
    }
    break;
  case 2:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq1[x]);
      delay(100);
    }
    break;
  case 3:
    seq2;
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq2[x]);
      delay(100);
    }
    break;
  case 4:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq3[x]);
      delay(100);
    }
    break;
  case 5:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq5[x]);
      delay(100);
    }
    break;
  case 6:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq5[x]);
      delay(100);
    }
    break;
  case 7:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq6[x]);
      delay(100);
    }
    break;
  case 8:
    for(int x = 0; x < MaxLED; x++){ 
      accionseq(seq7[x]);
      delay(100);
    }
    break;
  }

}


// Uso de la orden interna shiftout función
void accionseq(int i)
{
  digitalWrite (latchPin, LOW); 
  shiftOut (dataPin, clockPin, MSBFIRST, i);  
  digitalWrite (latchPin, HIGH);   
  delay(50);  
}




miércoles, 4 de septiembre de 2013

LABORATORIO 10

En este laboratorio se desarrollara por medio del programa processing un interfaz textual la cual nos permitirá enviar mensajes desde el computador, hacia el sistema embebido arduino, este se encargara de procesar el mensaje para poder gratificarlo en una pantalla lcd, todo este proceso de comunicación se hará por medio de  una conexión serial entre el arduino y el computador. ademas se usara un potenciometro para controlar el contraste de la pantalla lcd y así manejar la visibilidad del mensaje.

MATERIALES

  1. 1 arduino mega
  2. 1 pantalla lcd
  3. 1 potenciometro de 1k
  4. 1 computador
  5. cables
DIAGRAMAS

DIAGRAMA DE MONTAJE EN PROTOBOARD 


DIAGRAMA ESQUEMÁTICO

DIAGRAMA PCB PARA MONTAJE EN TARJETA PERFORADA


FOTOS DEL PROCESO DE MONTAJE

foto 1

foto 2

foto 3



 foto 4


foto 5


foto 6

 CODIGO PROCESSING
// utilizar la libreria ControlP5

import controlP5.*;

import processing.serial.*;
// definir la variable cp5 del tipo ControlP5
ControlP5 cp5;
Serial serial; 
// el mensaje que deseamos mostrar en el LCD
String Msj = "";

// configuración inicial
void setup() {

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

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

  // crear un tipo de letra, y su tamaño
  PFont font = createFont("arial", 20);
  textFont(font);

  // crear un campo de texto para ingresar el mensaje
  cp5.addTextfield("Msj", 20,20, 400,40)
    .setFont(font)
    .setFocus(true)
    .setColor(color(255, 0, 0));

 String puerto = Serial.list()[0]; 
 serial = new Serial (this, puerto, 9600);
}

// dibujar cada frame
void draw()  
{
  background(0xFF444444);  // color gris del fondo
 text(Msj, 20, 100); // último mensaje "enviado"
}

// actuar cuando ocurra un evento con los Sliders
void controlEvent(ControlEvent theEvent) {
  // guardar el nombre y texto del evento
  String nombre = theEvent.getController().getName();
  String texto = theEvent.getController().getStringValue();
  // muestra en la consola los datos del evento
  println("evento: " + nombre + " / texto: "+texto);
  serial.write(nombre + "/" + texto);
}

CODIGO ARDUINO


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String texto=0;
int evento=0;

void setup() {
   Serial.begin(9600);
  lcd.begin(16, 2);

}

void loop() {
  if (Serial.available()>0)
  {delay(100);
  lcd.clear();
     texto = Serial.readString();
   
  lcd.setCursor(0, 0);
  lcd.print(texto );
  
  }
}







domingo, 1 de septiembre de 2013

LABORATORIO NUMERO 6

En este laboratorio se utilizara procesing para realizar un interfaz gráfica que controlo el cambio de intensidad lumínica en el led RGB, lo cual nos permitirá ampliar mucho mas la gama de colores y hacer un manejo mas exacto del color al cual queremos mostrar.
  1. 1 led RGB
  2. 1 resistencia de 220 omhns 
  3. 1 arduino mega
DIAGRAMAS

DIAGRAMA DE MONTAJE EN PROTOBOARD 


DIAGRAMA ESQUEMÁTICO


DIAGRAMA PCB PARA MONTAJE EN TARJETA PERFORADA



                                                          FOTOS DEL PROCESO DE MONTAJE

foto 1


|
CÓDIGO EN PROCESSING

import processing.serial.*;
import controlP5.*;
ControlP5 cp5;
Slider sldR, sldG, sldB;
Serial serial;

void setup() {
  size (600, 250);
  cp5 =new ControlP5(this);
  sldR = cp5.addSlider ("R", 0, 255, 128, 40, 40, 300, 40);
  sldG = cp5.addSlider ("G", 0, 255, 128, 40, 100, 300, 40);
  sldB = cp5.addSlider ("B", 0, 255, 128, 40, 160, 300, 40);
  

  String puerto = Serial.list()[0];
  serial = new Serial (this, puerto, 9600);
}

void draw()
{
  background(80, 80, 80);
}

void controlEvent(ControlEvent evento)
{
  String nombre = evento.getController().getName();
  int valor = int(evento.getController().getValue());
  println(nombre+":"+valor);
  serial.write(nombre+valor);

}


CÓDIGO EN ARDUINO 

#define MAXLED 3

int led[MAXLED] = {
  3,5,6};
int valor = 0;
int i = 0;

void setup()
{
  Serial.begin(9600);
  for(int i = 0; i < MAXLED ; i++)
  {
    pinMode(led[i], OUTPUT);
  }
}

void loop()
{
  if(Serial.available() > 0)
  {
    valor = Serial.read();
    if(valor == 'B')
      i = 0;
    if(valor == 'G')
      i = 1;
    if(valor == 'R')
      i = 2;
    valor = Serial.parseInt();
    analogWrite(led[i], valor);
  }

}