Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Java ME 8 + Raspberry Pi + Sensors =IoT World (Part 1)

Apprenez à connecter des capteurs au Raspberry Pi et à les contrôler avec Java.

Publié en septembre 2014

La dernière version de Java ME 8 comprend une API puissante pour contrôler les appareils tels que les LED, les relais, les écrans LCD, les capteurs, les moteurs et les commutateurs.

Cet article est le premier d'une série en trois parties sur la façon de connecter des capteurs électroniques au Raspberry Pi modèle B à l'aide d'une entrée/sortie à usage général (GPIO), d'un bus de circuit inter-intégré (I2C), d'un bus d'interface périphérique série (SPI) , ou des interfaces de réception/émetteur asynchrones universelles (UART).

En utilisant Java ME 8 pour contrôler des appareils avec différents types d'interfaces et en connectant les appareils à un Raspberry Pi, nous pouvons créer un monde Internet des objets (IoT).

Cet article se concentre sur l'utilisation de GPIO et montre des exemples de développement de classes dans Java ME 8 qui peuvent

Remarque :L'exemple de code complet pour ce projet NetBeans IDE 8.0 peut être téléchargé ici.

API d'E/S de périphérique

La spécification de l'API d'E/S de périphérique définit une API d'E/S de périphérique générique pour les applications Java s'exécutant sur de petits périphériques embarqués. Il définit les API pour certains des périphériques les plus courants, notamment les suivants :

Circuits que nous allons créer

Un périphérique GPIO peut être utilisé comme entrée ou sortie numérique, il peut être désactivé ou activé et il peut être utilisé pour piloter des lignes « d'interruption ». Cependant, une considération très importante est que toutes les broches GPIO du Raspberry Pi fonctionnent à 3,3 V. Par conséquent, il est très important de vérifier les spécifications techniques des appareils que vous souhaitez connecter pour déterminer s'ils utilisent 3,3 V ou 5 V. Dans certains cas , vous devrez utiliser un convertisseur de niveau logique comme celui-ci.

Connexion du détecteur de flamme

Le capteur de flamme DFR0076 de DFRobot peut être utilisé pour détecter un incendie ou d'autres longueurs d'onde de lumière entre environ 760 nm et 1100 nm. Nous pouvons le connecter à 3,3 V ou 5 V, et la plage de détection est d'environ 20 cm (4,8 V) à 100 cm (1 V). Lorsqu'un incendie est détecté, il tire vers le haut la broche de signal.

Connectons le capteur de flamme aux broches 3,3 V, Gnd et GPIO 22 du Raspberry Pi, comme illustré à la figure 3, et créons une classe Java ME 8 pour le contrôle du capteur du détecteur de flamme.

Tout d'abord, créez une classe DFR0076Device qui utilise l'API Device Access, et définissez une variable pin qui prend en charge l'interface avec GPIO, comme indiqué dans la liste 1.

classe publique DFR0076Device { broche GPIOPin privée =null ; //Définir la broche pour le contrôle du capteur de flamme

Liste 1. Classe pour le contrôle du capteur du détecteur de flamme

Ensuite, créez un constructeur de classe qui initialise et active la broche GPIO 22 à l'aide du DeviceManager API et le GPIOPinConfig classe (voir Listing 2) pour établir les conditions suivantes :

public DFR0076Device(int pinGPIO) { ... pin =(GPIOPin) DeviceManager.open(new GPIOPinConfig( 0, pinGPIO,GPIOPinConfig.DIR_INPUT_ONLY,GPIOPinConfig.MODE_INPUT_PULL_UP, GPIOPinConfig.TRIGGER_RISING_...<}, false)); /pré> 

Liste 2. Établir les conditions initiales

Maintenant, créez une méthode qui reçoit une classe d'écouteur définie qui prend en charge les événements de détection de flamme, comme indiqué dans le listing 3.

public void setListener(PinListener flameListener) {... if (pin!=null) pin.setInputListener(flameListener);...}

Liste 3. Méthode qui prend en charge les événements de détection de flamme

Il est également important que vous fermiez l'épingle lorsque vous avez terminé, et assurez-vous également de libérer l'écouteur d'épingle, comme indiqué dans la liste 4.

public void close() {... if (pin!=null){ pin.setInputListener(null); pin.close(); }...}

Liste 4. Fermeture de l'épingle et libération de l'auditeur

Maintenant, créez un MIDlet principal qui appelle notre code et définit une classe d'écouteur pour le traitement des événements de détection de flamme, comme indiqué dans le Listing 5.

classe publique TestSensors étend le MIDlet { DFR0076Device flame; int final statique privé FLAME_DETECTOR_PIN =22 ; public void startApp() { //Initialize Flame Sensor flame =new DFR0076Device(FLAME_DETECTOR_PIN); flamme.setListener(nouveau FlameSensor()); } public void destroyApp(booléen inconditionnel) { flame.close(); } int statique privé waitnext =1 ; class FlameSensor implémente PinListener { public void valueChanged (événement PinEvent) { if (event.getValue() &&--waitnext ==0) { System.out.println("AVERTISSEMENT Flamme détectée!!!"); attendre suivant =10 ; } } }}

Liste 5. Création d'un MIDlet pour invoquer notre code

Connexion du détecteur de mouvement

Ajoutons maintenant la fonctionnalité de détecteur de mouvement à nos TestSensors MIDlet. Pour ce faire, nous avons besoin d'un capteur de mouvement tel que le HC-SR501 illustré à la figure 2.

Les capteurs PIR vous permettent de détecter le mouvement. Tout émet une petite quantité de rayonnement infrarouge, et plus quelque chose est chaud, plus il émet de rayonnement. Les capteurs PIR sont capables de détecter un changement dans les niveaux IR qui se produisent dans leur zone de détection (par exemple, lorsqu'un humain entre dans une pièce) et, par conséquent, de détecter un mouvement.

Le capteur PIR que nous utiliserons a trois broches :masse, sortie numérique et entrée 3-5 Vdc. Au ralenti, lorsqu'aucun mouvement n'a été détecté, le signal de sortie numérique restera faible. Cependant, lorsqu'un mouvement est détecté, le signal de sortie numérique émet une impulsion élevée (3,3 V). Vous pouvez connecter la broche de sortie numérique directement au Raspberry Pi.

Pour les tests, le capteur PIR a un cavalier (voir Figure 4).

  • Le réglage du cavalier sur la position « L » crée un déclencheur unique (non répétable). Lorsque le cavalier est dans cette position, la détection est activée après qu'un événement de détection se soit produit, ce qui permet une détection de mouvement continue. La sortie est toujours verrouillée au niveau bas pendant 3 secondes après que le mouvement n'est plus détecté.
  • Le réglage du cavalier sur la position « H » crée un déclencheur répétable. Lorsque le cavalier est réglé sur la position « H » (par défaut), la détection est désactivée après qu'un événement de détection se soit produit (c'est-à-dire une fois que la sortie est élevée).

Vous pouvez effectuer les ajustements suivants :

  • Le réglage du potentiomètre de sensibilité dans le sens des aiguilles d'une montre augmente la distance de détection à environ 7 mètres ; l'ajuster dans le sens inverse des aiguilles d'une montre diminue la distance de détection à environ 3 mètres.
  • Le réglage du potentiomètre de temporisation dans le sens des aiguilles d'une montre allonge le délai d'induction à 300 secondes ; l'ajuster dans le sens inverse des aiguilles d'une montre raccourcit le délai d'induction à 5 secondes.

Connectons le capteur PIR aux broches Raspberry Pi 5 V, Gnd et GPIO 24, comme illustré à la figure 3, et créons une classe Java ME 8HCSR501Device pour le contrôler à l'aide de l'API Device Access, comme indiqué dans la liste 6.

classe publique HCSR501Device { broche GPIOPin privée =null ;

Liste 6. HCSR501Device classe

Ensuite, créez un constructeur de classe qui initialise et active la broche GPIO 24 à l'aide du DeviceManager API et le GPIOPinConfig classe (voir Listing 7) pour établir les conditions suivantes :

  • Nom de l'appareil : 0
  • Numéro de broche :GPIO 24 (spécifié via pinGPIO )
  • Direction :saisie uniquement
  • Mode :déroulant
  • Déclencheur :front montant
  • Valeur initiale :false
  • Attendez trois secondes avant d'initialiser le PIR
public HCSR501Device(int pinGPIO) { ... pin =(GPIOPin) DeviceManager.open(new GPIOPinConfig( 0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN, GPIOPinConfig.TRIGGER_RISING)) ; false I2CUtils.I2Cdelay(3000); //attendre 3 secondes ...}

Liste 7. Établir les conditions initiales

Maintenant, créez une méthode qui reçoit une classe d'écouteur définie qui prend en charge les événements de détection de mouvement, comme indiqué dans le listing 8.

public void setListener(PinListener pirListener) {... if (pin!=null) pin.setInputListener(pirListener);...}

Liste 8. Méthode qui prend en charge les événements de détection de mouvement

Il est également important que vous fermiez l'épingle lorsque vous avez terminé, et assurez-vous également de libérer l'écouteur d'épingle comme indiqué dans la liste 9.

public void close() {... if (pin!=null){ pin.setInputListener(null); pin.close(); }...}

Liste 9. Fermeture de l'épingle et libération de l'auditeur

Étendons notre classe MIDlet pour prendre en charge le capteur PIR et son écouteur, comme indiqué dans le listing 10.

//Define HCSR501 Device objectHCSR501Device pir;private static final int MOTION_DETECTOR_PIN =24;@Overridepublic void startApp() {... //Initialize PIR sensor pir =new HCSR501Device(MOTION_DETECTOR_PIN); pir.setListener(new PirSensor());... }@Overridepublic void destroyApp(boolean unconditional) {... pir.close();...}//Vérifier le capteur PIR pour la classe de détection de mouvement PirSensor implémente PinListener { @Override public void valueChanged (événement PinEvent) { if (event.getValue()) { System.out.println ("AVERTISSEMENT Mouvement détecté !!!"); } }}

Liste 10. Extension de la classe MIDlet pour prendre en charge le capteur PIR et son écouteur

Pour plus de détails : Java ME 8 + Raspberry Pi + Sensors =IoT World (Partie 1)


Processus de fabrication

  1. Programme Java Hello World
  2. Enregistreur de données professionnel multicanal sur Raspberry Pi – Partie 1
  3. Projet IoT 101 :Diffuser la température de votre Raspberry Pi
  4. Lecture de capteurs analogiques avec une broche GPIO
  5. Capteurs analogiques sans entrées analogiques sur le Raspberry Pi
  6. Capteur de thermomètre numérique Raspberry Pi à 1 fil (DS18B20)
  7. Java ME 8 + Raspberry Pi + Sensors =IoT World (Part 1)
  8. Capteur Hall numérique Raspberry Pi en JAVA
  9. Capteurs Raspberry Pi