jueves, 29 de septiembre de 2016

LABORATORIO #3

DESCRIPCIÓN

Se encenderán 8 LEDs desde el arduino, mover los leds encendido de izquierda a derecha. Para el laboratorio 3, es necesario hacer una interfaz gráfica con Processing y ControlP5, y que esta interfaz envíe datos señalando los tiempos de encendido y apagado por el puerto serial hacia el Arduino. 
A continuación pueden ver el código de ejemplo de la interfaz, y la comunicación serial para cambiar la intensidad de un LED vía PWM.



MATERIALES DEL LABORATORIO 


  1. Computador (con el IDE de Arduino, y el driver adecuado instalados)
  1. Tarjeta Arduino (cualquier modelo, debe corresponder al driver instalado)
  1. Cable USB (según el conector de la tarjeta Arduino)
  1. Protoboard
  1. 8 LEDs + Resistencias 220Ω
  1. Cables macho-macho

DIAGRAMAS

PROTOBOARD



FOTOS MATERIALES Y MONTAJE
















CÓDIGO
Arduino
DATA HOSTED WITH ♥ BY PASTEBIN.COM - DOWNLOAD RAW - SEE ORIGINAL
  1. /********** Constantes **********/
  2. #define POT1    A0
  3. #define POT2    A1
  4. #define TOTLED   8 // Total LEDs
  5. /********** Objetos **********/
  6. // ninguno
  7. /********** Variables **********/
  8. int led[TOTLED] = {
  9.   2, 3, 4, 5, 6, 7, 8, 9};
  10. /********** Configuracion **********/
  11. void setup() {
  12.   int pos=0;
  13.   while (pos < TOTLED){
  14.     pinMode(led[pos], OUTPUT);
  15.     pos=pos+1;
  16.   }
  17.   pinMode(POT1, INPUT);
  18.   pinMode(POT2, INPUT);
  19. } // end setup()
  20. /********** Ciclo Principal **********/
  21. void loop() {
  22.   // Sensores
  23.   int t_encendido = analogRead(POT1);
  24.   int t_apagado = analogRead(POT2);
  25.   // Acciones
  26.   for (int pos = 0; pos < TOTLED; pos++) {
  27.     int t_encendido = analogRead(POT1);
  28.   int t_apagado = analogRead(POT2);
  29.     on(led[pos], t_encendido);  
  30.     off(led[pos], t_apagado);  
  31.   }
  32.   for (int pos = TOTLED-2; pos > 0; pos--) {
  33.     int t_encendido = analogRead(POT1);
  34.   int t_apagado = analogRead(POT2);
  35.     on(led[pos], t_encendido);  
  36.     off(led[pos], t_apagado);  
  37.   }
  38. } // end loop()
  39. /********** Funciones **********/
  40. // Pone en +5V el pin indicado, durante tantos milisegundos
  41. void on(int pin, int ms){
  42.   digitalWrite(pin, HIGH);  
  43.   delay(ms);  
  44. } // end on()
  45. // Pone en GND el pin indicado, durante tantos milisegundos
  46. void off(int pin, int ms){
  47.   digitalWrite(pin, LOW);  
  48.   delay(ms);  
  49. } // end off()

Processing


  1. // Importamos las librerías de ControlP5 y Serial
  2. import controlP5.*;
  3. import processing.serial.*;
  4. // Creamos las variables para ControlP5, el Slider y el puerto Serial
  5. ControlP5 cp5;
  6. Slider slider1;
  7. Slider slider2;
  8. Serial serial;
  9. // Solo se ejecuta una vez, al iniciar el Sketch
  10. void setup() {
  11.   // Tamaño de la Ventana
  12.   size(600, 400);
  13.   // Creamos el objeto de ControlP5
  14.   cp5 = new ControlP5(this);
  15.   // Creamos el objeto Slider  
  16.   slider1 = cp5.addSlider("P", 0, 255, 128, 40, 40, 300, 40);
  17.   slider2 = cp5.addSlider("A", 0, 255, 128, 40, 90, 300, 40);
  18.   // Creamos el objeto del puerto Serial
  19.   serial = new Serial(this, Serial.list()[0], 9600);
  20. }
  21. // Se ejecuta N frames por segundo
  22. void draw() {
  23.   // En este caso no debe dibujar nada
  24. }
  25. // Cuando ocurra un evento, aquí lo procesamos
  26. void controlEvent(ControlEvent evento) {
  27.   // Obtenemos el nombre y el valor del evento
  28.   String nombre = evento.getController().getName();
  29.   int valor = int(evento.getController().getValue());
  30.   // Envíamos el valor al Arduino a través del Serial
  31.   serial.write(nombre + valor);
  32.   // Imprimimos en la consola, para ver que todo va Ok
  33.   println(nombre + valor);
  34. }