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
- // Laboratorio #7
- // Programa Arduino
- // Manejo de Led RGB a través de una interfaz grafica en
- // processing usando tres sliders
- // Johnson Camilo Barona Sanchez
- // Programacion de sistemas embebidos
- // Universidad Santiago de Cali
- // inicio de codigo
- // se inicializan las variables y nombres de los pines
- int Led_R = 6; // salida pwm para el led R
- int Led_G = 3; // salida pwm para el led G
- int Led_B = 5; // salida pwm para el led B
- int Valor_R = 0; // valor leido del serial para el led R
- int Valor_G = 0; // valor leido del serial para el led G
- int Valor_B = 0; // valor leido del serial para el led B
- char Letra; // lectura del caractér recibido
- void setup()
- {
- // La comunicacion serial sera a 9600 baudios
- Serial.begin(9600);
- // se configuran las salidas PWM usadas
- pinMode(Led_R, OUTPUT);
- pinMode(Led_G, OUTPUT);
- pinMode(Led_B, OUTPUT);
- }
- // Ciclo infinito de ejecucion
- void loop()
- {
- // Si hay datos disponibles en el puerto serial
- if (Serial.available() > 0)
- {
- // Leer la primera letra en el buffer
- Letra = Serial.read();
- // aqui se condiciona si el valor enviado es para
- // la intensidad del pin R, G o B del Led y se guarda el
- // numero enviado luego de la respectiva letra
- if (Letra == 'R'){
- Valor_R = Serial.parseInt();
- }
- if (Letra == 'G'){
- Valor_G = Serial.parseInt();
- }
- if (Letra == 'B'){
- Valor_B = Serial.parseInt();
- // el bucle se ejecuta mientras hayan datos disponibles
- // por leer en el buffer.
- }
- }
- analogWrite(Led_R, Valor_R);
- analogWrite(Led_G, Valor_G);
- analogWrite(Led_B, Valor_B);
- }
Processing
- // Laboratorio #7
- // Prograama Processing
- // Manejo de Led RGB a través de una interfaz grafica en
- // processing usando tres sliders
- // Programacion de sistemas embebidos
- // Johnson Camilo Barona Sanchez
- // Universidad Santiago de Cali
- // inicio de codigo
- // utilizar la libreria ControlP5
- import controlP5.*;
- import processing.serial.*;
- // definir la variable cp5 del tipo ControlP5
- ControlP5 cp5;
- Serial serial;
- // como deseamos controlar los colores RGB
- // necesitamos 3 variables
- int val_R = 128;
- int val_G = 128;
- int val_B = 128;
- // Solo se ejecuta una vez, al iniciar el Sketch
- void setup() {
- size(500, 180); // tamaño de la ventana
- noStroke(); // no dibujar el border de los rectángulos
- // crear el objeto ControlP5
- cp5 = new ControlP5(this);
- // crear el Slider para el color Rojo
- Slider slideR =
- cp5.addSlider("R", 0, 255, 128, 180, 15, 300, 40);
- slideR.setColor( new CColor(
- 0xFFAA0000, 0xFF550000, 0xFFFF0000,
- 0xFFFFFFFF, 0xFFFFFFFF));
- // crear el Slider para el color Verde
- Slider slideG =
- cp5.addSlider("G", 0, 255, 128, 180, 70, 300, 40);
- slideG.setColor( new CColor(
- 0xFF00AA00, 0xFF005500, 0xFF00FF00,
- 0xFFFFFFFF, 0xFFFFFFFF));
- // crear el Slider para el color Azul
- Slider slideB =
- cp5.addSlider("B", 0, 255, 128, 180, 125, 300, 40);
- slideB.setColor( new CColor(
- 0xFF0000AA, 0xFF000055, 0xFF0000FF,
- 0xFFFFFFFF, 0xFFFFFFFF));
- // Creamos el objeto del puerto Serial
- serial = new Serial(this, Serial.list()[0], 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(val_R, val_G, val_B);
- // dibujar el rectángulo con ese color
- rect(15, 15, 150, 150);
- }
- // actuar cuando ocurra un evento con los Sliders
- public void controlEvent(ControlEvent evento) {
- // guardar el nombre y valor del evento
- String nombre = evento.getController().getName();
- int valor = int(evento.getController().getValue());
- // guardar el valor en la variable para cada color
- if (nombre == "R") {
- val_R = valor;
- }
- if (nombre == "G") {
- val_G = valor;
- }
- if (nombre == "B") {
- val_B = valor;
- }
- //Envíamos el valor al Arduino a través del Serial
- serial.write("R"+ val_R + "G" + val_G + "B" + val_B );
- //Imprimimos en la consola, para ver que todo va Ok
- println("R"+ val_R + "G" + val_G + "B" + val_B );
- }
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