miércoles, 11 de noviembre de 2015

Laboratorio # 10

Descripción :

En este laboratorio el objetivo sera  controlar con el arduino una matiz LED 8x8 a través de un integrado IC MAX7219 , para mostrar un numero de 0 a 9, dependiendo de la posición del potenciometro.

Materiales:


  • Computador con el respectivo software de arduino 
  • Arduino con su respectivo cable USB
  • Matriz LEDs 8x8
  • Protoboard
  • Potenciometro 10k
  • Cables

Diagramas:

Montaje


Esquemático



PCB





Código



  1. // Laboratorio #10
  2. // Programa Arduino
  3. // Control de una matriz de LEDs 8x8 para mostrar un numero de 0 a 9
  4. // Johnson Camilo Barona Sanchez
  5. // Programacion de sistemas embebidos
  6. // Universidad Santiago de Cali
  7. // inicio de código
  8. #include "LedControl.h"
  9. #define Pot A0
  10. int DIN = 12;
  11. int CS =  10;
  12. int CLK = 11;
  13. byte cero[8]= {0x3C,0x7E,0x66,0x66,0x66,0x66,0x7E,0x3C,};
  14. byte numeros [10][8]= {{0x3C,0x7E,0x66,0x66,0x66,0x66,0x7E,0x3C,}, //0
  15.                       {0x38,0x38,0x18,0x18,0x18,0x18,0x3C,0x3C},  //1
  16.                       {0x1E,0x3F,0x77,0x66,0x0E,0x1C,0x3F,0x3F}, //2
  17.                       {0x7C,0x7C,0x0C,0x3C,0x3C,0x0C,0x7C,0x7C}, //3
  18.                       {0x1E,0x3E,0x76,0xE6,0xFF,0x7F,0x06,0x06},//4
  19.                       {0x3F,0x3F,0x30,0x3E,0x3F,0x03,0x3F,0x3E}, //5
  20.                       {0x3F,0x3F,0x30,0x3F,0x3F,0x33,0x3F,0x3F}, //6
  21.                       {0x3E,0x7E,0x66,0x06,0x06,0x06,0x06,0x06}, //7
  22.                       {0x3C,0x7E,0x66,0x66,0x7E,0x66,0x66,0x3C}, //8
  23.                       {0x3C,0x7E,0x66,0x66,0x7E,0x06,0x7E,0x3C}};//9
  24. int pinPot = A0;    // Entrada para el potenciómetro.
  25. int valorPot = 0;   // variable para el valor del sensor.
  26. int pos = map (valorPot, 0, 1023, 0, 10);
  27. #define NBR_MTX 2
  28. LedControl lc=LedControl(12,11,10, NBR_MTX);
  29. String digits= "1234567890";
  30. int digitCounter=0;
  31. void setup() {
  32.   /*
  33.    The MAX72XX is in power-saving mode on startup,
  34.    we have to do a wakeup call
  35.    */
  36.    pinMode(pinPot, INPUT);
  37.   Serial.begin (9600);
  38.   Serial.println("Setup");
  39.   digitCounter=0;
  40.   for (int i=0; i< NBR_MTX; i++){
  41.     lc.shutdown(i,false);
  42.   /* Set the brightness to a medium values */
  43.     lc.setIntensity(i,1);
  44.   /* and clear the display */
  45.     lc.clearDisplay(i);
  46.   }
  47. }
  48. void loop() {
  49.   // put your main code here, to run repeatedly:
  50. int Pos = analogRead(pinPot);
  51. Pos = map (Pos, 0, 1023, 0,10);
  52.   writeLetra(numeros[Pos]);
  53. Serial.println(pos);
  54. }
  55. void writeLetra (byte a[]){
  56.   for (int i = 0; i<8; i++){
  57.       lc.setRow(0,i,a[i]);
  58.   }
  59.   delay(200);
  60.   for (int i = 0; i<8; i++){
  61.       lc.setRow(0,i,0);
  62.   }
  63. }


Proceso de montaje





Vídeo 








lunes, 26 de octubre de 2015

Laboratorio #7

Descripción:

En este laboratorio se controlara un LED RGB por medio de una interfaz gráfica en processing implementando ControlIP5, las intensidades de los tres colores se modificaran a través de tres silders que envían un valor entre 0 y 255 via serial hasta el arduino , donde se toman los valores y se envía cada uno por modulo PWM a cada pin del LED.

Materiales:


  • Computador con el software de arduino y processing
  • Arduino con su respectivo cable USB
  • Diodo LED RGB
  • Resistencias 220ohm
  • Cables

Diagramas:

Montaje






Esquemático




PCB



Código


Arduino

  1. // Laboratorio #7
  2. // Programa Arduino
  3. // Manejo de Led RGB a través de una interfaz grafica en
  4. // processing usando tres sliders
  5. // Johnson Camilo Barona Sanchez
  6. // Programacion de sistemas embebidos
  7. // Universidad Santiago de Cali
  8.  
  9. // inicio de codigo
  10.  
  11. // se inicializan las variables y nombres de los pines
  12. int Led_R = 6;     // salida pwm  para el led R
  13. int Led_G = 3;     // salida pwm  para el led G
  14. int Led_B = 5;     // salida pwm  para el led B
  15.  
  16. int Valor_R = 0;   // valor leido del serial para el led R
  17. int Valor_G = 0;   // valor leido del serial para el led G
  18. int Valor_B = 0;   // valor leido del serial para el led B
  19.  
  20. char Letra;        // lectura del caractér recibido
  21.  
  22. void setup()
  23. {
  24.   // La comunicacion serial sera a 9600 baudios
  25.   Serial.begin(9600);
  26.   // se configuran las salidas PWM usadas
  27.   pinMode(Led_R, OUTPUT);
  28.   pinMode(Led_G, OUTPUT);
  29.   pinMode(Led_B, OUTPUT);
  30. }
  31.  
  32. // Ciclo infinito de ejecucion
  33. void loop()
  34. {  
  35.   // Si hay datos disponibles en el puerto serial
  36.   if (Serial.available() > 0)
  37.   {  
  38.     // Leer la primera letra en el buffer
  39.     Letra = Serial.read();
  40.    
  41.     // aqui se condiciona si el valor enviado es para
  42.     // la intensidad del pin R, G o B del Led y se guarda el
  43.     // numero enviado luego de la respectiva letra
  44.     if (Letra == 'R'){
  45.       Valor_R = Serial.parseInt();
  46.     }
  47.     if (Letra == 'G'){
  48.       Valor_G = Serial.parseInt();
  49.     }
  50.     if (Letra == 'B'){
  51.       Valor_B = Serial.parseInt();
  52.     // el bucle se ejecuta mientras hayan datos disponibles
  53.     // por leer en el buffer.
  54.     }
  55.   }
  56.  
  57.   analogWrite(Led_R, Valor_R);
  58.   analogWrite(Led_G, Valor_G);
  59.   analogWrite(Led_B, Valor_B);
  60.      
  61. }


Processing

  1. // Laboratorio #7
  2. // Prograama Processing
  3. // Manejo de Led RGB a través de una interfaz grafica en
  4. // processing usando tres sliders
  5. // Programacion de sistemas embebidos
  6. // Johnson Camilo Barona Sanchez
  7. // Universidad Santiago de Cali
  8.  
  9. // inicio de codigo
  10.  
  11. // utilizar la libreria ControlP5
  12. import controlP5.*;
  13. import processing.serial.*;
  14.  
  15. // definir la variable cp5 del tipo ControlP5
  16. ControlP5 cp5;
  17. Serial serial;
  18.  
  19. // como deseamos controlar los colores RGB
  20. // necesitamos 3 variables
  21. int val_R = 128;  
  22. int val_G = 128;  
  23. int val_B = 128;  
  24.  
  25. // Solo se ejecuta una vez, al iniciar el Sketch
  26. void setup() {
  27.  
  28.   size(500, 180); // tamaño de la ventana
  29.   noStroke();     // no dibujar el border de los rectángulos
  30.  
  31.   // crear el objeto ControlP5
  32.   cp5 = new ControlP5(this);
  33.  
  34.   // crear el Slider para el color Rojo
  35.   Slider slideR =
  36.     cp5.addSlider("R", 0, 255, 128, 180, 15, 300, 40);
  37.   slideR.setColor( new CColor(
  38.   0xFFAA0000, 0xFF550000, 0xFFFF0000,
  39.   0xFFFFFFFF, 0xFFFFFFFF));
  40.  
  41.   // crear el Slider para el color Verde
  42.   Slider slideG =
  43.     cp5.addSlider("G", 0, 255, 128, 180, 70, 300, 40);
  44.   slideG.setColor( new CColor(
  45.   0xFF00AA00, 0xFF005500, 0xFF00FF00,
  46.   0xFFFFFFFF, 0xFFFFFFFF));
  47.  
  48.   // crear el Slider para el color Azul
  49.   Slider slideB =
  50.     cp5.addSlider("B", 0, 255, 128, 180, 125, 300, 40);
  51.   slideB.setColor( new CColor(
  52.   0xFF0000AA, 0xFF000055, 0xFF0000FF,
  53.   0xFFFFFFFF, 0xFFFFFFFF));
  54.  
  55.   // Creamos el objeto del puerto Serial
  56.   serial = new Serial(this, Serial.list()[0], 9600);
  57. }
  58.  
  59. // dibujar cada frame
  60. void draw()  
  61. {
  62.   background(0xFF444444);  // color gris del fondo
  63.   // definir el color de relleno combinando los valores
  64.   // de los colores de los 3 Sliders
  65.   fill(val_R, val_G, val_B);  
  66.   // dibujar el rectángulo con ese color
  67.   rect(15, 15, 150, 150);
  68. }  
  69.  
  70. // actuar cuando ocurra un evento con los Sliders
  71. public void controlEvent(ControlEvent evento) {
  72.   // guardar el nombre y valor del evento
  73.   String nombre = evento.getController().getName();
  74.   int valor = int(evento.getController().getValue());
  75.  
  76.   // guardar el valor en la variable para cada color
  77.   if (nombre == "R") {
  78.     val_R = valor;
  79.   }
  80.   if (nombre == "G") {
  81.     val_G = valor;
  82.   }
  83.   if (nombre == "B") {
  84.     val_B = valor;
  85.   }
  86.  
  87.   //Envíamos el valor al Arduino a través del Serial
  88.   serial.write("R"+ val_R + "G" + val_G + "B" + val_B );
  89.   //Imprimimos en la consola, para ver que todo va Ok
  90. println("R"+ val_R + "G" + val_G + "B" + val_B );
  91. }


Proceso de Montaje


en una protoboard procedemos a ensamblar nuestros componentes , ubicamos primero nuestro diodo LED RGB con sus respectivas resistencias.





luego de haber montado los componentes procedemos a puentear a los pines según mostrado los diagramas anteriormente expuestos. 




ya teniendo todo conectado correctamente procedemos a contectar el arduino al computador , enviamos el codigo arduino y processing, de esta manera damos funcionamiento a nuestro LED RGB.





Vídeo