Luces navideñas con la Raspberry Pi y Java

Escrito por el .
gnu-linux java planeta-codigo programacion
Enlace permanente Comentarios

Con diferentes sensores y dispositivos de salida de electrónica se pueden realizar proyectos muy interesantes. En el siguiente usaré múltiples diodos LED que se encenderán y apagarán de forma aleatoria cada cierto tiempo. El resultado será muy vistoso y lo utilizaré cuando lleguen las fechas como luces navideñas.

Raspberry Pi

Java

Como muestra de lo que se puede hacer con la Raspberry Pi usando los pines GPIO haré un ejemplo que consistirá en múltiples diodos LED de diferentes colores enciendan y apaguen simulando una especie de luces navideñas. Como yo tengo la Raspbperry Pi 1 B con 26 pines de los cuales solo 17 son GPIO podré usar hasta 17 diodos LED, aunque solo usaré 15. En el kit de iniciación a la electrónica para la Raspberry Pi viene incluidos 24 diodos LED de diferentes colores 6 blancos, 6 rojos, 6 amarillos y 6 verdes, también es necesario una resistencia por cada diodo de unos 200 ohmios de los cuales en el kit se incluyen 20 de este valor.

Aunque con muchos más LED el ejemplo no es más complicado que el ejemplo que ya mostré de encender y apagar un diodo LED. Usaré diodos de diferentes colores y dispuestos de forma aleatoria para darle un aspecto desordenado, para darle un aspecto más caótico los LEDs se encenderán y apagarán de forma aleatoria. Usaré el lenguaje de programación Java y la librería de alto nivel diozero para controlar el encendido y apagado de los diodos.

Esta es la foto del cableado usando múltiples cables macho-macho para conectar los pines con el polo positivo de los diodos pasando por la resistencia y también múltiples cables para conectar el polo negativo del diodo con tierra. Usando una placa breadboard para realizar las conexiones sin soldadura y una placa de extensión wiringPi para conectar la Raspberry Pi con la placa breadboard con un cable de 26 pines en mi caso por el modelo que tengo de RPi este es el aspecto de cableado.

Cableado de las luces LED del árbol de navidad Cableado de las luces LED del árbol de navidad

Cableado de las luces LED del árbol de navidad Cableado de las luces LED del árbol de navidad

Cableado de las luces LED del árbol de navidad

Cableado de las luces LED del árbol de navidad

Cada cierto tiempo los diodos cambian de estado, algunos se encenderán, otros se apagarán y otros seguirán en el estado que estaban. Para ello generaré un booleano aleatorio para cada uno de los diodos que determinará si debe estar encendido o apagado. Este es el programa Java junto con la parte relevante del archivo Gradle para compilar y construir el ejemplo y el comando que uso para ejecutarlo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package io.github.picodotdev.blogbitix.javaraspberrypi;

import com.diozero.LED;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.LongStream;

public class ChristmasTree {

    public static void main(String[] args) throws Exception {
        int[] pins = new int[] { 17, 18, 21, 22, 23, 24, 25, 4, 7, 8, 11, 9, 10, 15, 14 };
        List<LED> leds = new ArrayList<>(pins.length);

        try {
            for (int pin : pins) {
                leds.add(new LED(pin));
            }
            for (LED led : leds) {
                led.setOn(true);
            }
            Thread.sleep(5000);

            long[] times = new Random().longs(30, 1500, 2501).toArray();
            Random status = new Random();
            for (long time : times) {
                for (LED led : leds) {
                    led.setOn(status.nextBoolean());
                }
                Thread.sleep(time);
            };
        } finally {
            for (LED led : leds) {
                led.close();
            }
        }
    }
}
ChristmasTree.java
1
2
3
4
5
6
7
8
...

task executeChristmasTree(type: Exec, dependsOn: 'upload') {
    commandLine 'ansible', '-i', 'hosts', 'raspberrypi', '--sudo', '--ask-sudo-pass', '-m', 'command', '-a', 'chdir=/home/raspberrypi/scripts/javaraspberrypi java -classpath "*" io.github.picodotdev.blogbitix.javaraspberrypi.ChristmasTree'
    standardInput System.in
}

...
build.gradle
1
2
$ ssh -t 192.168.1.101 'cd /home/raspberrypi/scripts/javaraspberrypi && java -classpath "*" io.github.picodotdev.blogbitix.javaraspberrypi.ChristmasTree'

execute.sh

Esta aplicación para la Raspberry Pi queda bastante vistosa y no es muy complicado de realizar a pesar del del lío de cables que resulta. Este es un vídeo de su funcionamiento.

Terminal

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando siguiente comando:
./gradlew executeChristmasTree


Comparte el artículo: