domingo, 22 de mayo de 2016

Laboratorio 9

Laboratorio 9
Descripción del Laboratorio
El objetivo del siguiente laboratorio es el de Controlar desde una interfaz en Processing, los patrones de movimiento de los colores ( rojo, verde y azul)  de un módulo de 8 LEDs RGB controlados con el Arduino.
Lista de los Elementos utilizados
Computador con el IDE de Arduino y Processing 
Tarjeta Arduino
Cable USB; COM7
Protoboard
Cables macho-macho
 2 LEDS RGB
 6 LEDS ROJO
Diagrama del Montaje en la Protoboard



Diagrama Esquemático del Circuito

Diagrama PCB equivalente

Proceso del Montaje paso a paso (Fotos)


Código Fuente en Arduino (con comentarios)
//****** Proyecto *****//
// Universidad Santiago de Cali
// Angelica maria campo mancilla
// Laboratorio #9
// Descripcion: Manejo del modulo Led RGB( 2 leds rgb y 6 leds rojo) a través de una interfaz
// grafica en processing

/********** Variables **********/
// se nombran las variables y sus respectivos pines

#define TOTAL 8
#define MAX 8

//Declaracion de pines y de arreglos
// Conectamos el LED a los pines,9,10,11 que es PWM

// salida pwm  para el color rojo
int pin_r = 9;
// salida pwm  para el color verde
int pin_g = 10;
// salida pwm  para el color rojo
int pin_b = 11;

// Indica los pines en el que debe estar conectado el modulo

int led[TOTAL] = {2, 3, 4, 5, 6, 7, 8, 12};

// Se inicializan los datos de cada variable de color

int R[TOTAL]={0,0,0,0,0,0,0,0};
int G[TOTAL]={0,0,0,0,0,0,0,0};
int B[TOTAL]={0,0,0,0,0,0,0,0};

// Variables de cada componenten Inicializadas

int pos = 0;
int color = 0;
int estado = 0;
String str = "";

 /********** Configuracion **********/
void setup() {

 //comunicacion serial sera a 9600 baudios y pines inicializados con sus estados

  Serial.begin(9600);
  for (int i = 0; i < TOTAL; i++) {
  pinMode(led[i], OUTPUT);
  digitalWrite(led[i], HIGH);
  }

  // se configuran las salidas PWM usadas
    // pin de salida, color rojo

  pinMode(pin_r, OUTPUT);
  digitalWrite(pin_r, HIGH);

  // pin de salida, color verde
  pinMode(pin_g, OUTPUT);
  digitalWrite(pin_g, HIGH);

  // pin de salida, color azul
  pinMode(pin_b, OUTPUT);
  digitalWrite(pin_b, HIGH);
}
  /********** Ciclo Principal **********/
 // Solo se ejecuta una vez, al iniciar o resetear el Arduino
// Ciclo infinito de ejecucion

void loop() {
  leerSerial();
  for (int i=0; i<TOTAL; i++) {
    encender(led[i], R[i], G[i], B[i]);
  }
}
    // aqui se condiciona si el valor enviado  para
    // la intensidad del pin R, G o B del modulo
 
//metodo necesario para leer la informacion serial

void leerSerial() {
  if (Serial.available() > 0) {
    str = Serial.readString();
    pos = int(str[1] - '0');
    estado = int(str[2] - '0');
    switch (str[0]) {
      case 'r': R[pos] = estado; break;;
      case 'g': G[pos] = estado; break;;
      case 'b': B[pos] = estado; break;; }}}
   
//metodo para encender cada led deacuardo al pin usado
void encender (int pin_led, int r, int g, int b)
{
  digitalWrite(pin_led, LOW);
  digitalWrite(pin_r, r == 0 ? HIGH : LOW);
  digitalWrite(pin_g, g == 0 ? HIGH : LOW);
  digitalWrite(pin_b, b == 0 ? HIGH : LOW);

  delay(2);

  digitalWrite(pin_led, HIGH);
  digitalWrite(pin_r, HIGH);
  digitalWrite(pin_g, HIGH);
  digitalWrite(pin_b, HIGH);
}

/*********** Fin**************/
Código Fuente en Processing (con comentarios)
/********** Proyecto **********
 * Universidad santiago de cali
 * Angelica maria campo Mancilla.
 * Laboratorio 09: se controlan los patrones de movimiento de colores ( rojo, verde y azul)  de un
 * módulo de 8 LEDs RGB controlados desde una interfaz gráfica en Processing/ControlP5.*/

 // Importamos las librerías de ControlP5 y Serial
import controlP5.*;
import processing.serial.*;

// Se Definen las variables necesarias

ControlP5 cp5;
Serial serial;

// define las variables del texto, tipo Textlabel

Textlabel texto1, texto2;
Textlabel texto5, texto6;

//****** Objetos ********//

// Areglos para las variables de cada color: rojo, verde, azul.

int[] r = new int[] {0, 0, 0, 0, 0, 0, 0, 0};
int[] g= new int[] {0, 0, 0, 0, 0, 0, 0, 0};
int[] b= new int[] {0, 0, 0, 0, 0, 0, 0, 0};

//**** variables*****//

int colorDeFondo = color (200,100,100);

//***********configuracion*********************//

// Solo se ejecuta una vez, al iniciar el Sketch//

void setup() {

  size(600, 300); // tamaño de la ventana

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

  // crear un botón para encender/apagar cada LED
  // para el color rojo

  for (int i=0; i<r.length; i++)
    cp5.addToggle("r"+i, 35+i*70, 60, 50, 40);

  // para el color verde

  for (int j=0; j<g.length; j++)
    cp5.addToggle("g"+j, 35+j*70, 130, 50, 40);

   // para el color azul

  for (int k=0; k<b.length; k++)
    cp5.addToggle("b"+k, 35+k*70, 200, 50, 40);
 
  // Creamos el objeto del puerto Serial
   serial = new Serial(this, Serial.list()[0], 9600);
 
   // Se crea el texto principal
 
texto1 = cp5.addTextlabel("label")


                    .setText("CONTROLES DE ENCENDIDO Y APAGADO")
                    .setPosition(100,10)
                    .setColorValue(0xfffffFFF)
                    .setFont(createFont("Arial",20))
                    ;

// crea texto indicativo

texto2 = cp5.addTextlabel("label1")

                    .setText("COLOR ROJO VERDE Y AZUL")
                    .setPosition(180,30)
                    .setColorValue(0xffffffFF)
                    .setFont(createFont("Comic Sans MS",15))
                    ;            

}

// se dibujar cada frame y se asigna el color de fondo

void draw()
{
 {background(colorDeFondo);}
}

// actua cuando ocurra un evento con los botones

void controlEvent(ControlEvent theEvent)
{
  // guardar el nombre y valor del evento
  String nombre = theEvent.getController().getName();
  int valor = int(theEvent.getController().getValue());

  println("evento: " + nombre + " / valor: "+valor);
  //serial.write(nombre+valor);
  println(nombre+valor);
  serial.write(nombre+valor);


}


// ****** Fin ***** //
Video del Funcionamiento

No hay comentarios.:

Publicar un comentario