Sensores Java ME 8 + Raspberry Pi + =Mundo IoT (Parte 1)
Aprenda a conectar sensores a la Raspberry Pi y controlarlos con Java.
Publicado en septiembre de 2014
La última versión de Java ME 8 incluye una potente API para controlar dispositivos como LED, relés, LCD, sensores, motores e interruptores.
Este artículo es el primero de una serie de tres partes sobre cómo conectar sensores electrónicos a la Raspberry Pi Modelo B utilizando entrada / salida de propósito general (GPIO), bus de circuito integrado (I2C), bus de interfaz periférica en serie (SPI) o interfaces de receptor / transmisor asincrónico universal (UART).
Al usar Java ME 8 para controlar dispositivos con diferentes tipos de interfaces y conectar los dispositivos a una Raspberry Pi, podemos crear un mundo de Internet de las cosas (IoT).
Este artículo se centra en el uso de GPIO y muestra ejemplos de cómo desarrollar clases en Java ME 8 que pueden
- Detecte una llama con un sensor de llama DFRobot (modelo DFR0076)
- Detecte movimiento con un detector de movimiento de infrarrojos pasivos (PIR) HC-SR501
- Mida la distancia utilizando un módulo de rango ultrasónico HC-SR04
Nota :El código de ejemplo completo para este proyecto NetBeans IDE 8.0 se puede descargar aquí.
API de E / S del dispositivo
La especificación de API de E / S de dispositivo define una API de E / S de dispositivo periférico genérico para aplicaciones Java que se ejecutan en pequeños dispositivos integrados. Define API para algunos de los dispositivos periféricos más comunes, incluidos los siguientes:
- dispositivos GPIO
- dispositivos I2C
- dispositivos SPI
- Convertidores de analógico a digital (ADC)
- Convertidores de digital a analógico (DAC)
- dispositivos UART
- Dispositivos de E / S con asignación de memoria (MMIO)
- AT dispositivos de comando
- Temporizadores de vigilancia
- Contadores de pulsos
- Generadores de modulación de ancho de pulso (PWM)
- Dispositivos genéricos
Circuitos que crearemos
Un dispositivo GPIO se puede utilizar como entrada digital o salida digital, se puede desactivar o activar, y se puede utilizar para controlar líneas de "interrupción". Sin embargo, una consideración muy importante es que todos los pines GPIO de Raspberry Pi operan a 3.3 V. Por lo tanto, es muy importante verificar las especificaciones técnicas de los dispositivos que desea conectar para determinar si están usando 3.3 V o 5 V. En algunos casos , necesitará utilizar un convertidor de nivel lógico como este.
Conexión del detector de llamas
El sensor de llama DFR0076 de DFRobot se puede utilizar para detectar fuego u otras longitudes de onda de luz entre aproximadamente 760 nm y 1100 nm. Podemos conectarlo a 3,3 V o 5 V, y el rango de detección es de aproximadamente 20 cm (4,8 V) a 100 cm (1 V). Cuando se detecta fuego, levanta el pin de señal.
Conectemos el sensor de llama a los pines 3.3 V, Gnd y GPIO 22 de la Raspberry Pi, como se muestra en la Figura 3, y creemos una clase Java ME 8 para el control del sensor del detector de llama.
Primero, cree una clase DFR0076Device
que usa la API de acceso al dispositivo y define una variable pin
que admite la interfaz de GPIO, como se muestra en el Listado 1.
public class DFR0076Device {private GPIOPin pin =null; // Defina el pin para el control del sensor de llama
Listado 1. Clase para el control del sensor del detector de llama
A continuación, cree un constructor de clase que inicialice y active el pin GPIO 22 usando el DeviceManager
API y GPIOPinConfig
class (ver Listado 2) para establecer las siguientes condiciones:
- Nombre del dispositivo:0
- Número de pin:GPIO 22 (especificado a través de
pinGPIO
) - Dirección:solo entrada
- Modo:pull-up
- Activador:borde ascendente
- Valor inicial:falso
public DFR0076Device (int pinGPIO) {... pin =(GPIOPin) DeviceManager.open (new GPIOPinConfig (0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_UP, GPIING_GEDER_GED.TRIS)Listado 2. Estableciendo las condiciones iniciales
Ahora, cree un método que reciba una clase de escucha definida que admita eventos de detección de llamas, como se muestra en el Listado 3.
public void setListener (PinListener flameListener) {... if (pin! =null) pin.setInputListener (flameListener); ...}Listado 3. Método que admite eventos de detección de llamas
También es importante que cierre el pin cuando haya terminado, y también asegúrese de liberar el detector de pin, como se muestra en el Listado 4.
public void close () {... if (pin! =null) {pin.setInputListener (null); pin.close (); } ...}Listado 4. Cerrar el pin y liberar al oyente
Ahora, cree un MIDlet principal que invoque nuestro código y defina una clase de escucha para procesar eventos de detección de llamas, como se muestra en el Listado 5.
clase pública TestSensors extiende MIDlet {DFR0076Device flame; privado estático final int FLAME_DETECTOR_PIN =22; public void startApp () {// Inicializar el sensor de llama flame =new DFR0076Device (FLAME_DETECTOR_PIN); flame.setListener (nuevo FlameSensor ()); } public void destroyApp (booleano incondicional) {flame.close (); } private static int waitnext =1; class FlameSensor implementa PinListener {public void valueChanged (evento PinEvent) {if (event.getValue () &&--waitnext ==0) {System.out.println ("ADVERTENCIA Llama detectada !!!"); esperar siguiente =10; }}}}Listado 5. Creación de un MIDlet para invocar nuestro código
Conexión del detector de movimiento
Ahora agreguemos la funcionalidad de detector de movimiento a nuestros
TestSensors
MIDlet. Para hacer eso, necesitamos un sensor de movimiento como el HC-SR501 que se muestra en la Figura 2.Los sensores PIR le permiten detectar el movimiento. Todo emite una pequeña cantidad de radiación infrarroja, y cuanto más caliente está algo, más radiación emite. Los sensores PIR pueden detectar un cambio en los niveles de IR que se produce dentro de su zona de detección (por ejemplo, cuando un humano entra en una habitación) y, por lo tanto, detectan el movimiento.
El sensor PIR que usaremos tiene tres pines:tierra, salida digital y entrada de 3 a 5 V CC. En reposo, cuando no se detecta movimiento, la señal de salida digital permanecerá baja. Sin embargo, cuando se detecta movimiento, la señal de salida digital emitirá un pulso alto (3,3 V). Está bien conectar el pin de salida digital directamente a la Raspberry Pi.
Para realizar pruebas, el sensor PIR tiene un puente (consulte la Figura 4).
- Al colocar el puente en la posición "L" se crea un disparador único (no repetible). Cuando el puente está en esta posición, la detección se habilita después de que ocurre un evento de detección, lo que permite la detección de movimiento continuo. La salida aún se mantiene baja durante 3 segundos después de que ya no se detecta movimiento.
- Al colocar el puente en la posición "H" se crea un disparador repetible. Cuando el puente se establece en la posición "H" (predeterminada), la detección se desactiva después de que ocurre un evento de detección (es decir, una vez que la salida es alta).
Puede realizar los siguientes ajustes:
- Ajustar el potenciómetro de sensibilidad en el sentido de las agujas del reloj aumenta la distancia de detección a unos 7 metros; ajustarlo en sentido antihorario disminuye la distancia de detección a unos 3 metros.
- Ajustar el potenciómetro de retardo de tiempo en el sentido de las agujas del reloj alarga el retardo de inducción a 300 segundos; ajustarlo en sentido antihorario acorta el retardo de inducción a 5 segundos.
Conectemos el sensor PIR a los pines Raspberry Pi 5 V, Gnd y GPIO de 24, como se muestra en la Figura 3, y creemos un
HCSR501Device
de clase Java ME 8 para controlarlo usando la API de acceso al dispositivo, como se muestra en el Listado 6.public class HCSR501Device {private GPIOPin pin =null;Listado 6.
HCSR501Device
claseLuego, cree un constructor de clase que inicialice y active el pin GPIO 24 usando el
DeviceManager
API yGPIOPinConfig
class (ver Listado 7) para establecer las siguientes condiciones:
- Nombre del dispositivo:0
- Número de pin:GPIO 24 (especificado a través de
pinGPIO
)- Dirección:solo entrada
- Modo:desplegable
- Activador:borde ascendente
- Valor inicial:falso
- Espere tres segundos antes de inicializar el PIR
public HCSR501Device (int pinGPIO) {... pin =(GPIOPin) DeviceManager.open (new GPIOPinConfig (0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN, GPIING_GERGE_Config); I2CUtils.I2Cdelay (3000); // espera 3 segundos ...}Listado 7. Estableciendo las condiciones iniciales
Ahora, cree un método que reciba una clase de escucha definida que admita eventos de detección de movimiento, como se muestra en el Listado 8.
public void setListener (PinListener pirListener) {... if (pin! =null) pin.setInputListener (pirListener); ...}Listado 8. Método que admite eventos de detección de movimiento
También es importante que cierre el pin cuando haya terminado, y también asegúrese de liberar el detector de pin como se muestra en el Listado 9.
public void close () {... if (pin! =null) {pin.setInputListener (null); pin.close (); } ...}Listado 9. Cerrar el pin y liberar al oyente
Extendamos nuestra clase MIDlet para admitir el sensor PIR y su oyente, como se muestra en el Listado 10.
// Definir el objeto del dispositivo HCSR501 HCSR501Device pir; private static final int MOTION_DETECTOR_PIN =24; @Overridepublic void startApp () {... // Inicializar el sensor PIR pir =new HCSR501Device (MOTION_DETECTOR_PIN); pir.setListener (new PirSensor ()); ...} @Overridepublic void destroyApp (boolean incondicional) {... pir.close (); ...} // Verifique el sensor PIR para detección de movimiento clase PirSensor implementa PinListener {@Override public void valueChanged (evento PinEvent) {if (event.getValue ()) {System.out.println ("ADVERTENCIA ¡Movimiento detectado!"); }}}Listado 10. Ampliación de la clase MIDlet para admitir el sensor PIR y su oyente
Para obtener más detalles:Java ME 8 + Raspberry Pi + Sensors =IoT World (Parte 1)
Sensor de termómetro digital de 1 cable Raspberry Pi (DS18B20) Alarma de agua frambuesa pi 2 con t cobbler plus
Proceso de manufactura
- Programa Java Hola Mundo
- Registrador de datos profesional multicanal en Raspberry Pi - Parte 1
- Proyecto IoT 101:Temperatura de transmisión desde su Raspberry Pi
- Lectura de sensores analógicos con un pin GPIO
- Sensores analógicos sin entradas analógicas en la Raspberry Pi
- Sensor de termómetro digital de 1 cable Raspberry Pi (DS18B20)
- Sensores Java ME 8 + Raspberry Pi + =Mundo IoT (Parte 1)
- Sensor de pasillo digital Raspberry Pi en JAVA
- Sensores Raspberry Pi
- Controle la temperatura de su hogar usando su Raspberry Pi
- Sensores analógicos en Raspberry Pi con un MCP3008