Arduino + Java: Variar los colores de un LED RGB con PWM

11
461

Hola a todos.

En esta ocasión les mostraré como variar los colores de un LED RGB utilizando modulación por ancho de pulsos (PWM).

Vamos a crear una interfaz en Java con Sliders que serán los que nos permitirán variar los colores del LED RGB.

Antes hemos trabajado con LEDs RGB, como en este post: Java + Arduino: Encendiendo un LED RGB desde un programa en nuestra PC.

En ese post creamos una interfaz con botones para obtener diferentes colores. Ahora lo que haremos es obtener diferentes tonalidades variando la intensidad de los colores con PWM.

Primero trabajaremos en la interfaz.

Creamos un proyecto en Java, insertamos un JFrame y colocamos los siguientes controles (para los principiantes consultar Cómo crear nuestro primer programa en Java con NetBeans):

Ahora vamos a lo que es la programación.

Primero importaremos las librerías RXTX y Arduino. Ambas librerías se encuentran disponibles en este blog: RXTX y Arduino. La librería Arduino la he creado yo y su principal función es facilitar la comunicación entre Arduino y Java.

He aquí la declaración de variables:

Aquí está como debe quedar:

Sin título

Ahora vamos a los métodos.

Haremos un método para el color de fondo del panel que colocamos en la interfaz. Dicho “cuadrito” mostrará el color que en teoría debería mostrar el LED.

El método es el siguiente:

Ahora crearemos un método para “setear” los datos que enviaremos a Arduino. Como los valores que mandaremos serán entre 0 y 255 lo que haremos será enviarlos cifra a cifra. Si vamos a mandar por ejemplo el 255, Arduino recibirá el 2, luego el 5 y luego el otro 5. Lo que haremos con Arduino será recibir las centenas, decenas y unidades. El 2 lo multiplicamos por 100, el 5 por 10 y el último 5 lo dejamos así. Luego los sumamos: 200+50+5=255. Sin embargo para que esto funcione primero hay que mandar las centenas, luego las decenas y por último las unidades. Si mandos un 1, Arduino lo multiplicará por 100 y entonces no obtendremos los resultados deseados. Lo que haremos para evitar que esto suceda es mandar “001”. Así que Arduino hará lo siguiente: (0)*100+(0)*10+1=1.

Lo mismo cuando son decenas. Si mandamos el 10, debemos hacerlo de la siguiente manera: “010”. Arduino lo interpretará de la siguiente forma: (0)*100+(1)*10+(0)*0=10.

El método que se encargará de esto será el siguiente:

Este método prepara las variables para mandárselas a Arduino.

En el método principal iniciamos la comunicaión con Arduino:

Aquí se muestra como debe quedar:

Sin título

Sin título

Sin título

Ahora veamos como haremos el envío de datos.

Buscaremos la propiedad StateChanged de los Slider.

Sin título

Aquí el código será el mismo para los tres colores, solo cambiando el nombre de la variable:

Solo cambiamos la R en el jSlider por la B y la G del azul y verde.

Así debe quedarnos el código:

Sin título

Con esto estamos listos con Java. Ahora pasamos a Arduino.

El código que vamos a usar es el siguiente:

Es un código bastante sencillo. Primero lee cual de los tres LEDs se le va a modificar la luminosidad. Luego lee las centenas, decenas y unidades que conforman el valor de la luminosidad. Por último hace la escritura PWM con analogWrite.

Los archivos de este proyecto se encuentran disponibles en el siguiente enlace:

http://docs.google.com/file/d/0B0hsUkhqWH97Y2hscXU0MEhiTzA/edit?usp=sharing

Acá está el esquema del circuito que usaremos:

Untitled Sketch_bb

Aquí les dejo un video donde se muestra el funcionamiento de este este código:

Espero que les guste.

Saludos.