Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Java ME 8 + Raspberry Pi + Sensoren =IoT World (Teil 1)

Erfahren Sie, wie Sie Sensoren mit dem Raspberry Pi verbinden und mit Java steuern.

Veröffentlicht September 2014

Die neueste Version von Java ME 8 enthält eine leistungsstarke API zur Steuerung von Geräten wie LEDs, Relais, LCDs, Sensoren, Motoren und Schaltern.

Dieser Artikel ist der erste in einer dreiteiligen Serie über den Anschluss elektronischer Sensoren an den Raspberry Pi Model B mithilfe von Universal Input/Output (GPIO), Inter-Integrated Circuit Bus (I2C), Serial Peripheral Interface Bus (SPI). , oder universelle asynchrone Empfänger/Sender (UART)-Schnittstellen.

Indem wir Java ME 8 verwenden, um Geräte mit unterschiedlichen Schnittstellentypen zu steuern und die Geräte mit einem Raspberry Pi zu verbinden, können wir eine Welt des Internets der Dinge (IoT) schaffen.

Dieser Artikel konzentriert sich auf die Verwendung von GPIO und zeigt Beispiele für die Entwicklung von Klassen in Java ME 8, die

Hinweis :Der vollständige Beispielcode für dieses NetBeans IDE 8.0-Projekt kann hier heruntergeladen werden.

Geräte-E/A-API

Die Geräte-I/O-API-Spezifikation definiert eine generische Peripheriegeräte-I/O-API für Java-Anwendungen, die auf kleinen eingebetteten Geräten laufen. Es definiert APIs für einige der gängigsten Peripheriegeräte, einschließlich der folgenden:

Schaltungen, die wir erstellen werden

Ein GPIO-Gerät kann entweder als digitaler Eingang oder als digitaler Ausgang verwendet werden, es kann deaktiviert oder aktiviert werden und es kann verwendet werden, um „Interrupt“-Leitungen zu steuern. Eine sehr wichtige Überlegung ist jedoch, dass alle GPIO-Pins des Raspberry Pi mit 3,3 V arbeiten. Daher ist es sehr wichtig, die technischen Spezifikationen der Geräte zu überprüfen, die Sie anschließen möchten, um festzustellen, ob sie 3,3 V oder 5 V verwenden. In einigen Fällen , müssen Sie einen solchen Logikpegelwandler verwenden.

Anschließen des Flammenmelders

Der Flammensensor DFR0076 von DFRobot kann verwendet werden, um Feuer oder andere Lichtwellenlängen zwischen ca. 760 nm und 1100 nm zu erkennen. Wir können es an 3,3 V oder 5 V anschließen und die Reichweite beträgt ca. 20 cm (4,8 V) bis 100 cm (1 V). Wenn ein Feuer erkannt wird, wird der Signalstift hochgezogen.

Verbinden wir den Flammensensor mit den 3,3 V-, Gnd- und GPIO 22-Pins des Raspberry Pi, wie in Abbildung 3 gezeigt, und erstellen wir eine Java ME 8-Klasse für die Flammendetektor-Sensorsteuerung.

Erstellen Sie zuerst eine Klasse DFR0076Device die die Gerätezugriffs-API verwendet, und definieren einen variablen pin das die Schnittstelle zu GPIO unterstützt, wie in Listing 1 gezeigt.

öffentliche Klasse DFR0076Device { privater GPIOPin pin =null; // Definieren Sie den Pin für die Flammensensorsteuerung

Auflistung 1. Klasse für die Flammenmelder-Sensorsteuerung

Erstellen Sie als Nächstes einen Klassenkonstruktor, der den GPIO 22-Pin mit dem DeviceManager . initialisiert und aktiviert API und die GPIOPinConfig Klasse (siehe Listing 2), um die folgenden Bedingungen festzulegen:

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

Auflistung 2. Festlegung der Anfangsbedingungen

Erstellen Sie nun eine Methode, die eine definierte Listener-Klasse empfängt, die Flammenerkennungsereignisse unterstützt, wie in Listing 3 gezeigt.

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

Auflistung 3. Methode, die Flammenerkennungsereignisse unterstützt

Es ist auch wichtig, dass Sie den Pin schließen, wenn Sie fertig sind, und sicherstellen, dass Sie den Pin-Listener freigeben, wie in Listing 4 gezeigt.

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

Auflistung 4. Den Pin schließen und den Hörer befreien

Erstellen Sie nun ein Haupt-MIDlet, das unseren Code aufruft und eine Listener-Klasse für die Verarbeitung von Flammenerkennungsereignissen definiert, wie in Listing 5 gezeigt.

public class TestSensors erweitert MIDlet { DFR0076Device Flame; privates statisches finales int FLAME_DETECTOR_PIN =22; public void startApp () {// Flammensensor Flamme initialisieren =neues DFR0076Device (FLAME_DETECTOR_PIN); Flame.setListener (neuer FlameSensor ()); aufrechtzuerhalten. Public Void DestroyApp (boolescher unbedingter Wert) { Flame.close(); } privates statisches int waitnext =1; Klasse FlameSensor implementiert PinListener { public void valueChanged(PinEvent event) { if (event.getValue() &&--waitnext ==0) { System.out.println("WARNUNG Flamme erkannt!!!"); Weiter warten =10; } } }}

Auflistung 5. Erstellen eines MIDlets zum Aufrufen unseres Codes

Anschließen des Bewegungsmelders

Jetzt fügen wir unseren TestSensoren Bewegungsmelder-Funktionen hinzu MIDlet. Dazu benötigen wir einen Bewegungssensor wie den in Abbildung 2 gezeigten HC-SR501.

PIR-Sensoren ermöglichen Ihnen, Bewegungen zu erkennen. Alles emittiert eine kleine Menge Infrarotstrahlung, und je heißer etwas ist, desto mehr Strahlung gibt es ab. PIR-Sensoren sind in der Lage, eine Änderung der IR-Pegel innerhalb ihres Erfassungsbereichs zu erkennen (z. B. wenn ein Mensch einen Raum betritt) und somit Bewegungen wahrzunehmen.

Der von uns verwendete PIR-Sensor hat drei Pins:Masse, Digitalausgang und 3–5 Vdc In. Im Leerlauf, wenn keine Bewegung erkannt wurde, bleibt das Digitalausgangssignal niedrig. Wenn jedoch eine Bewegung erkannt wird, wird das Digitalausgangssignal hoch pulsieren (3,3 V). Es ist in Ordnung, den Digital-Out-Pin direkt mit dem Raspberry Pi zu verbinden.

Zum Testen hat der PIR-Sensor einen Jumper (siehe Abbildung 4).

  • Das Setzen des Jumpers auf die Position „L“ erzeugt einen einzelnen (nicht wiederholbaren) Trigger. Wenn sich der Jumper in dieser Position befindet, wird die Erkennung aktiviert, nachdem ein Erkennungsereignis auftritt, was eine kontinuierliche Bewegungserkennung ermöglicht. Der Ausgang wird noch 3 Sekunden lang auf Low gehalten, nachdem keine Bewegung mehr erkannt wird.
  • Das Setzen des Jumpers auf die Position „H“ erzeugt einen wiederholbaren Trigger. Wenn der Jumper auf die Position „H“ (Standard) gesetzt ist, wird die Erfassung deaktiviert, nachdem ein Erfassungsereignis auftritt (d. h. sobald der Ausgang hoch ist).

Sie können die folgenden Anpassungen vornehmen:

  • Ein Verstellen des Empfindlichkeitspotentiometers im Uhrzeigersinn erhöht den Erfassungsabstand auf etwa 7 Meter; durch Drehen gegen den Uhrzeigersinn verringert sich der Erfassungsabstand auf etwa 3 Meter.
  • Das Einstellen des Zeitverzögerungspotentiometers im Uhrzeigersinn verlängert die Induktionsverzögerung auf 300 Sekunden; durch Verstellen gegen den Uhrzeigersinn wird die Induktionsverzögerung auf 5 Sekunden verkürzt.

Verbinden wir den PIR-Sensor mit den Raspberry Pi 5 V-, Gnd- und GPIO 24-Pins, wie in Abbildung 3 gezeigt, und erstellen wir ein Java ME 8-KlasseHCSR501Device um es mit der Device Access API zu steuern, wie in Listing 6 gezeigt.

öffentliche Klasse HCSR501Device { privater GPIOPin-Pin =null;

Auflistung 6. HCSR501Gerät Klasse

Erstellen Sie dann einen Klassenkonstruktor, der den GPIO 24-Pin mit dem DeviceManager initialisiert und aktiviert API und die GPIOPinConfig Klasse (siehe Listing 7), um die folgenden Bedingungen festzulegen:

  • Gerätename:0
  • Pin-Nummer:GPIO 24 (angegeben durch pinGPIO )
  • Richtung:nur Eingabe
  • Modus:Pulldown
  • Trigger:steigende Flanke
  • Anfangswert:false
  • Warten Sie drei Sekunden, bevor Sie den PIR initialisieren
public HCSR501Device(int pinGPIO) { ... pin =(GPIOPin) DeviceManager.open(new GPIOPinConfig( 0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN, GPIOPinConfig.TRIGGER_RISING_EDGE, false)); I2CUtils.I2Cdelay(3000); // 3 Sekunden warten ...}

Auflistung 7. Festlegung der Anfangsbedingungen

Erstellen Sie nun eine Methode, die eine definierte Listener-Klasse empfängt, die Bewegungserkennungsereignisse unterstützt, wie in Listing 8 gezeigt.

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

Auflistung 8. Methode, die Bewegungserkennungsereignisse unterstützt

Es ist auch wichtig, dass Sie den Pin schließen, wenn Sie fertig sind, und sicherstellen, dass Sie den Pin-Listener freigeben, wie in Listing 9 gezeigt.

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

Auflistung 9. Den Pin schließen und den Hörer befreien

Lassen Sie uns unsere MIDlet-Klasse erweitern, um den PIR-Sensor und seinen Listener zu unterstützen, wie in Listing 10 gezeigt.

//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();...} // PIR Sensor auf Bewegungserkennungsklasse prüfen PirSensor implementiert PinListener { @Override public void valueChanged(PinEvent event) { if (event.getValue()) { System.out.println("WARNUNG Bewegung erkannt!!!"); } }}

Auflistung 10. Erweiterung der MIDlet-Klasse zur Unterstützung des PIR-Sensors und seines Listeners

Weitere Informationen: Java ME 8 + Raspberry Pi + Sensoren =IoT World (Teil 1)


Herstellungsprozess

  1. Java-Hello-World-Programm
  2. Professioneller Multichannel-Datenlogger auf Raspberry Pi – Teil 1
  3. IoT 101-Projekt:Stream-Temperatur von Ihrem Raspberry Pi
  4. Lesen analoger Sensoren mit einem GPIO-Pin
  5. Analoge Sensoren ohne analoge Eingänge auf dem Raspberry Pi
  6. Raspberry Pi 1-Draht digitaler Thermometersensor (DS18B20)
  7. Java ME 8 + Raspberry Pi + Sensoren =IoT World (Teil 1)
  8. Raspberry Pi digitaler Hall-Sensor in JAVA
  9. Raspberry Pi-Sensoren
  10. Überwachen Sie Ihre Haustemperatur mit Ihrem Raspberry Pi