jueves, 3 de octubre de 2013

Laboratorio 7

Descripción

En este laboratorio controlamos 8 LEDs desde el arduino, a través de un IC 74HC595, definiendo mínimo 8 patrones de movimiento que son controlados desde un Potenciometro. 

Implemento


  • 1 arduino
  • 1 protoboard
  • 8 resistencias 
  • 8 LEDs
  • cable UTP 
  • 1 potenciometro
  • 1 IC 74HC595

  • Diagrama del montaje en la protoboard




    Diagrama esquemático del circuito 



    Fotos del montaje








    Vídeo del funcionamiento




    Código fuente en arduino

    #define PIN 3
    #define Pot A0


    const int Latch = 10;
    const int Clock = 11;
    const int Data = 9;

    int led[PIN] = {
      9,10,11};


    int Serie1[5]={66,36,24,24,36,};
    int Serie2[9]={0,128,192,224,240,248,252,254,255};
    int Serie3[12]={255,126,60,24,16,8,16,8,24,60,126,255};
    int Serie4[10]={240,15,8,3,2};
    int Serie5[14]={129,0,131,133,137,145,161,0,193,161,145,137,133,131};
    int Serie6[6]={195,60,44,22,11,6};
    int Serie7[11]={1,0,1,0,15,0,15,0,255,255,0};
    int Serie8[25]={1,2,4,8,16,32,64,128,64,32,16,8,4,2,1,2,4,8,16,32,64,128,192,160,0};


    void setup() {
      for (int i=0; i<PIN; i++){
        pinMode(led[i], OUTPUT);
      }
      pinMode(Pot, INPUT);
    }


    void loop()
    {
      int Pos = analogRead(Pot);
      Pos = map(Pos, 0, 1023, 0,7);
      Casos(Pos);
    }


    void Casos(int Valor)
    {
      switch(Valor)
      {
      case 0:
        for(int j=0;j<7;j++)
        {
          On(Serie1[j]);
        }
        break;
      case 1:
        for(int j=0;j<9;j++)
        {
          On(Serie2[j]);
        }
        break;
      case 2:
        for(int j=0;j<12;j++)
        {
          On(Serie3[j]);
        }
        break;
      case 3:
        for(int j=0;j<10;j++)
        {
          On(Serie4[j]);
        }
        break;
      case 4:
        for(int j=0;j<14;j++)
        {
          On(Serie5[j]);
        }
        break;
      case 5:
        for(int j=0;j<6;j++)
        {
          On(Serie6[j]);
        }
        break;
      case 6:
        for(int j=0;j<11;j++)
        {
          On(Serie7[j]);
        }
        break;
      case 7:
        for(int j=0;j<50;j++)
        {
          On(Serie8[j]);
        }
        break;
      }        
    }


    void On(int Valor)
    {
      digitalWrite(Latch, LOW);
      shiftOut(Data, Clock, MSBFIRST, Valor);
      digitalWrite(Latch, HIGH);
      delay(100);
    }




    jueves, 19 de septiembre de 2013

    Laboratorio 6

    Descripción

    En este laboratorio controlamos un LED RGB desde el arduino, vía un interfaz gráfico en processing/ControlP5 para controlar el valor de cada color.

    Implemento

    • 1 arduino
    • 1 protoboard
    • 3 resistencias 
    • 1 LED RGB
    • cable UTP

    Diagrama del montaje en la protoboard




    Diagrama esquemático del circuito





    Fotos del montaje





    Vídeo del funcionamiento 



    Código fuente en arduino 

    int ledR = 11;
    int ledG = 10;
    int ledB = 9;

    int valor;

    void setup() {                
      pinMode(ledR, OUTPUT);
      pinMode(ledG, OUTPUT);
      pinMode(ledB, OUTPUT);
      Serial.begin(9600);

    }
    // the loop routine runs over and over again forever:
    void loop() {


      //x = Serial.read();

      while (Serial.available() < 1);
      char letra = Serial.read();
      while (Serial.available() < 1);
      valor = 255-Serial.read();

      if (letra == 'r')
        analogWrite(ledR, valor);
      if (letra == 'g')
        analogWrite(ledG, valor);
      if (letra == 'b')
        analogWrite(ledB, valor);  


    }

    Código fuente en processing 

    // utilizar la libreria ControlP5
    import controlP5.*;
    import processing.serial.*;


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

    // como deseamos controlar los colores RGB
    // necesitamos 3 variables
    int valR = 128;  
    int valG = 128;  
    int valB = 128;  

    // configuración inicial
    void setup() {

      size(240, 500); // tamaño de la ventana
      noStroke();     // no dibujar el border del rectángulo

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

      // crear el Slider para el color Rojo
      Slider slideR =
        cp5.addSlider("R", 0, 255, 128, 15, 180, 50, 300);
      slideR.setColor( new CColor(
        0xFFAA0000, 0xFF550000, 0xFFFF0000,
        0xFFFFFFFF, 0xFFFFFFFF));
      // crear el Slider para el color Verde
      Slider slideG =
        cp5.addSlider("G", 0, 255, 128, 95, 180, 50, 300);
      slideG.setColor( new CColor(
        0xFF00AA00, 0xFF005500, 0xFF00FF00,
        0xFFFFFFFF, 0xFFFFFFFF));
      // crear el Slider para el color Azul
      Slider slideB =
        cp5.addSlider("B", 0, 255, 128, 175, 180, 50, 300);
      slideB.setColor( new CColor(
        0xFF0000AA, 0xFF000055, 0xFF0000FF,
        0xFFFFFFFF, 0xFFFFFFFF));
        
        String COM = Serial.list()[0];
        puerto = new Serial(this, COM, 9600);

    }

    // dibujar cada frame
    void draw()  
    {
      background(0xFF444444);  // color gris del fondo
      // definir el color de relleno combinando los valores
      // de los colores de los 3 Sliders
      fill(valR, valG, valB);  
      // dibujar el rectángulo con ese color
      rect(15, 15, 210, 150);
      
    }  

    // 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());

      // guardar el valor en la variable para cada color
      if (nombre == "R") {
         valR = valor;
          puerto.write('r');
          puerto.write(valR);      
      }
      if (nombre == "G") {
         valG = valor;
          puerto.write('g');
          puerto.write(valG);
      }
      if (nombre == "B") {
         valB = valor;
          puerto.write('b');
          puerto.write(valB);
      }
    }



    jueves, 12 de septiembre de 2013

    Laboratorio 5

    Descripción 

    En este laboratorio controlamos un LED RGB desde el Arduino, vía PWM con tres potenciometros, uno para cada color. 

    Implemento

    • 1 arduino
    • 1 protoboard
    • 3 resistencias 
    • 1 LED RGB
    • cable UTP
    • 3 potenciometros


    Diagrama del montaje en la protoboard



     

    Diagrama esquemático del circuito





    Fotos del montaje





    Vídeo del funcionamiento 



    Código fuente en arduino


    int x,y,z,pot1,pot2,pot3;

    void setup() {                
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(A5, INPUT);
      pinMode(A4, INPUT);
      pinMode(A0, INPUT);    


    }
    void loop() {

      pot1=analogRead(A5);
      x=map(pot1,0,1023,0,255);

      pot2=analogRead(A4);
      y=map(pot2,0,1023,0,255);

      pot3=analogRead(A0);
      z=map(pot3,0,1023,0,255);

      analogWrite(9, x);   
      analogWrite(10, y);  
      analogWrite(11, z);  
    }


    jueves, 5 de septiembre de 2013

    Laboratorio 4

    Descripción

    En este laboratorio controlamos 8 LEDs desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, vía una interfaz gráfica en Processing/ControlP5 para controlar el tiempo de encendido y el tiempo de apagado.

    Implemento

    • 1 arduino
    • 1 protoboard
    • 8 resistencias 
    • 8 LEDs
    • cable UTP

    Diagrama del montaje en la protoboard




    Diagrama esquemático del circuito




    Interfaz gráfica en Processing/ControlP5


    Fotos del montaje 






    Vídeo del funcionamiento.


    Código fuente en arduino.



    #define MAXLED 8

    int led [MAXLED]={2,3,4,5,6,7,8,9};
    int valor=0;
    int i=0; 
    int t_on=500;
    int t_off=100;
    int inc=1;

    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=='t')
          t_on=Serial.parseInt();
        
        if(valor=='q')
          t_off=Serial.parseInt();


      }
      on(led[i], t_on);
      off(led[i], t_off);
      i+=inc;
      if (i>MAXLED-1) inc=-1;
      if (i==0) inc=+1;

    }

    void on(int led, int ms) {
      digitalWrite(led, HIGH);
      delay(ms);
    }

    void off(int led, int ms) {
      digitalWrite(led, LOW);
      delay(ms); 

    }


    Código fuente en Processing.


    import processing.serial.*;
    import controlP5.*;
    ControlP5 cp5;
    Slider slider1;
    Button boton1;
    Knob   perilla1;
    Serial puerto;

    void setup(){
      size(600,400);
      puerto = new Serial(this, Serial.list()[0],9600);
      cp5 = new ControlP5(this);
      slider1 = cp5.addSlider("t",0,1000,200,40,40,300,40);
      slider1.setColor(new CColor (0x80008000,0xFF808080,0x80FF0000,0x80FF80FF,0xFF80FF00));
      boton1 = cp5.addButton("aceptar",50,40,100,80,40);
      boton1.setColor(new CColor (0x8000FF00,0xFF808000,0x80FF0000,0x00000000,0xFFFFFFFF));
      perilla1 = cp5.addKnob("q",0,500,150,400,40,100);
      perilla1.setColor(new CColor (0x8000FF00,0xFF808080,0xFFFF0000,0xFFFFFF00,0x00000000));
      }
     
      void draw()
        {
        background(0);
        }
       
        void controlEvent (ControlEvent  theEvent){
       
       String nombre=theEvent.getController().getName();
       int valor=int(theEvent.getController().getValue());
       println( nombre + ":" + valor);
       puerto.write(nombre+valor);
         }



    miércoles, 4 de septiembre de 2013

    Laboratorio 3

    Descripcion

    En este laboratorio se controlan 8 LEDs desde el arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, usando los valores de dos potenciometros para controlar los tiempos que el LED permanece encendido y apagado.

    Implemento


    • 1 arduino
    • 1 protoboard
    • 8 resistencias 
    • 8 LEDs
    • cable UTP 
    • 2 potenciometro

    Diagrama del montaje en la protoboard






    Diagrama esquemático del circuito





    Fotos del montaje.










    Vídeo del funcionamiento.






    Código fuente en arduino.


    const int MAXLED = 8;
    int led[MAXLED] = {2,3,4,5,6,7,8,9};
    int pot1 = A0;
    int pot2 = A1;

    void setup() {
      for (int i=0; i<MAXLED; i++)
        pinMode(led[i], OUTPUT);
        pinMode(pot1, INPUT);
        pinMode(pot2, INPUT);
    }


    void loop() {
      
       
      for (int i=0; i<MAXLED; i++) {
      int  valorpot1 = analogRead(pot1);
      int  valorpot2 = analogRead(pot2);
        prender(led[i], valorpot1);
        apagar(led[i], valorpot2);
      }
      
      for (int i=MAXLED-2; i>0; i--) {
      int  valorpot1 = analogRead(pot1);
      int  valorpot2 = analogRead(pot2);
        prender(led[i], valorpot1);
        apagar(led[i], valorpot2);
      }
      
      
    }


    void prender(int led, int ms) {
      digitalWrite(led, HIGH);
      delay(ms);
    }

    void apagar(int led, int ms) {
      digitalWrite(led, LOW);
      delay(ms); 

    }


    martes, 3 de septiembre de 2013

    Laboratorio 2

    Descripción

    En este laboratorio controlamos 8 LEDs desde el arduino, un LED encendido que se mueve de izquierda a derecha según la posición del potenciometro.


    Implemento

    • 1 arduino
    • 1 protoboard
    • 8 resistencias 
    • 8 LEDs
    • cable UTP 
    • 1 potenciometro

    Diagrama del montaje en la protoboard






    Diagrama esquemático del circuito





    Fotos del montaje.







    Vídeo del funcionamiento.




    Código fuente en arduino.


    #define MAXLED 8
    #define pot A0

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

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

    void loop()
    {
      int valor = analogRead(pot);
      int i = map(valor, 0, 1023, 0, 7);
      prender(led[i], 20);
      apagar(led[i], 5);
    }

    void prender(int l, int t){
      digitalWrite(l, HIGH);
      delay(t);
    }

    void apagar(int l, int t){
      digitalWrite(l, LOW);
      delay(t);

    }