Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

Leer hoe je sensoren aansluit op de Raspberry Pi en ze bestuurt met Java.

Gepubliceerd september 2014

De nieuwste release van Java ME 8 bevat een krachtige API voor het besturen van apparaten zoals LED's, relais, LCD's, sensoren, motoren en schakelaars.

Dit artikel is het eerste in een driedelige serie over het aansluiten van elektronische sensoren op de Raspberry Pi Model B met behulp van algemene invoer/uitvoer (GPIO), inter-geïntegreerde circuitbus (I2C), seriële perifere interfacebus (SPI) , of universele asynchrone ontvanger/zender (UART) interfaces.

Door Java ME 8 te gebruiken om apparaten met verschillende soorten interfaces te besturen en de apparaten aan te sluiten op een Raspberry Pi, kunnen we een Internet of Things (IoT)-wereld creëren.

Dit artikel richt zich op het gebruik van GPIO en toont voorbeelden van het ontwikkelen van klassen in Java ME 8 die

  • Detecteer een vlam met een DFRobot-vlamsensor (model DFR0076)
  • Beweging detecteren met een HC-SR501 passieve infrarood (PIR) bewegingsdetector
  • Meet afstand met behulp van een HC-SR04 ultrasone meetmodule

Opmerking :De volledige voorbeeldcode voor dit NetBeans IDE 8.0-project kan hier worden gedownload.

Apparaat I/O API

De Device I/O API-specificatie definieert een generieke I/O-API voor randapparatuur voor Java-toepassingen die draaien op kleine embedded apparaten. Het definieert API's voor enkele van de meest voorkomende randapparatuur, waaronder de volgende:

  • GPIO-apparaten
  • I2C-apparaten
  • SPI-apparaten
  • Analoog-naar-digitaal converters (ADC's)
  • Digitaal-naar-analoog converters (DAC's)
  • UART-apparaten
  • Memory-mapped I/O (MMIO)-apparaten
  • AT-commandoapparaten
  • Watchdog-timers
  • Pulstellers
  • Pulsbreedtemodulatie (PWM) generatoren
  • Algemene apparaten

Circuits die we zullen maken

Een GPIO-apparaat kan worden gebruikt als een digitale ingang of een digitale uitgang, het kan worden uitgeschakeld of ingeschakeld en het kan worden gebruikt om "onderbrekingslijnen" aan te sturen. Een zeer belangrijke overweging is echter dat alle Raspberry Pi GPIO-pinnen op 3,3 V werken. Daarom is het erg belangrijk om de technische specificaties van de apparaten die u wilt aansluiten te controleren om te bepalen of ze 3,3 V of 5 V gebruiken. In sommige gevallen , moet u een logische niveau-omzetter zoals deze gebruiken.

De vlamdetector aansluiten

De DFR0076 vlamsensor van DFRobot kan worden gebruikt om vuur of andere golflengten van licht tussen ongeveer 760 nm en 1100 nm te detecteren. We kunnen hem aansluiten op 3,3 V of 5 V en het detectiebereik is ongeveer 20 cm (4,8 V) tot 100 cm (1 V). Wanneer er brand wordt gedetecteerd, trekt het de signaalpin omhoog.

Laten we de vlamsensor aansluiten op de 3.3 V-, Gnd- en GPIO 22-pinnen van de Raspberry Pi, zoals weergegeven in afbeelding 3, en een Java ME 8-klasse maken voor de besturing van de vlamdetectorsensor.

Maak eerst een klasse DFR0076Device die de Device Access API gebruikt, en definieer een variabele pin die de interface naar GPIO ondersteunt, zoals weergegeven in Listing 1.

public class DFR0076Device { private GPIOPin pin =null; // Definieer de pin voor vlamsensorregeling

Lijst 1. Klasse voor de vlamdetectorsensorbesturing

Maak vervolgens een klassenconstructor die de GPIO 22-pin initialiseert en activeert met behulp van de DeviceManager API en de GPIOPinConfig klasse (zie Lijst 2) om de volgende voorwaarden vast te stellen:

  • Apparaatnaam:0
  • Pinnummer:GPIO 22 (gespecificeerd via pinGPIO )
  • Richting:alleen invoer
  • Modus:optrekken
  • Trigger:stijgende rand
  • Initiële waarde:false
public DFR0076Device(int pinGPIO) { ... pin =(GPIOPin) DeviceManager.open(new GPIOPinConfig( 0, pinGPIO,GPIOPinConfig.DIR_INPUT_ONLY,GPIOPinConfig.MODE_INPUT_PULL_UP, GPIOPinConfig.TRIG}false  

Lijst 2. De beginvoorwaarden vaststellen

Maak nu een methode die een gedefinieerde luisteraarklasse ontvangt die vlamdetectiegebeurtenissen ondersteunt, zoals weergegeven in lijst 3.

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

Lijst 3. Methode die vlamdetectiegebeurtenissen ondersteunt

Het is ook belangrijk dat je de pin sluit wanneer je klaar bent, en zorg er ook voor dat je de pin-listener vrijmaakt, zoals weergegeven in Listing 4.

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

Vermelding 4. De pin sluiten en de luisteraar bevrijden

Maak nu een hoofd-MIDlet die onze code aanroept en een luisteraarklasse definieert voor het verwerken van vlamdetectiegebeurtenissen, zoals weergegeven in Listing 5.

public class TestSensors breidt MIDlet { DFR0076Device flame; privé statisch definitief int FLAME_DETECTOR_PIN =22; public void startApp () {// Initialiseer vlamsensor vlam =nieuw DFR0076Device (FLAME_DETECTOR_PIN); flame.setListener(nieuwe FlameSensor()); } public void destroyApp (boolean onvoorwaardelijk) { flame.close(); } privé statisch int waitnext =1; class FlameSensor implementeert PinListener { public void valueChanged (PinEvent event) { if (event.getValue() &&--waitnext ==0) { System.out.println ("WAARSCHUWING Vlam gedetecteerd!!!"); wachtvolgende =10; } } }}

Vermelding 5. Een MIDlet maken om onze code op te roepen

De bewegingsdetector aansluiten

Laten we nu bewegingsdetectorfunctionaliteit toevoegen aan onze TestSensors MIDlet. Om dat te doen, hebben we een bewegingssensor nodig, zoals de HC-SR501 die wordt getoond in figuur 2.

Met PIR-sensoren kunt u beweging waarnemen. Alles zendt een kleine hoeveelheid infraroodstraling uit, en hoe heter iets is, hoe meer straling het afgeeft. PIR-sensoren kunnen een verandering in IR-niveaus detecteren die zich voordoen binnen hun detectiezone (bijvoorbeeld wanneer een mens een kamer binnenkomt) en dus beweging detecteren.

De PIR-sensor die we gaan gebruiken heeft drie pinnen:aarde, digitaal uit en 3-5 Vdc in. In rust, als er geen beweging is gedetecteerd, blijft het digitale uit-signaal laag. Wanneer er echter beweging wordt gedetecteerd, zal het digitale uit-signaal hoog pulseren (3,3 V). Het is OK om de digitale uit-pin rechtstreeks op de Raspberry Pi aan te sluiten.

Voor het testen heeft de PIR-sensor een jumper (zie afbeelding 4).

  • Als je de jumper in de "L"-positie zet, wordt een enkele (niet-herhaalbare) trigger gecreëerd. Wanneer de jumper zich in deze positie bevindt, wordt detectie ingeschakeld nadat een detectiegebeurtenis heeft plaatsgevonden, wat continue bewegingsdetectie mogelijk maakt. De uitgang is nog steeds laag vergrendeld gedurende 3 seconden nadat er geen beweging meer is gedetecteerd.
  • Als je de jumper in de "H"-positie zet, wordt een herhaalbare trigger gecreëerd. Wanneer de jumper is ingesteld op de "H" (standaard) positie, wordt detectie uitgeschakeld nadat een detectiegebeurtenis heeft plaatsgevonden (dat wil zeggen, zodra de output hoog is).

U kunt de volgende aanpassingen maken:

  • Door de gevoeligheidspotentiometer rechtsom aan te passen, wordt de detectieafstand vergroot tot ongeveer 7 meter; door het tegen de klok in af te stellen, wordt de detectieafstand verkleind tot ongeveer 3 meter.
  • Door de tijdvertragingspotentiometer rechtsom aan te passen, wordt de inductievertraging verlengd tot 300 seconden; door het tegen de klok in te draaien, wordt de inductievertraging verkort tot 5 seconden.

Laten we de PIR-sensor aansluiten op de Raspberry Pi 5 V, Gnd en GPIO 24-pins, zoals weergegeven in afbeelding 3, en een Java ME 8 classHCSR501Device maken om het te besturen met behulp van de Device Access API, zoals weergegeven in Listing 6.

public class HCSR501Device { private GPIOPin pin =null;

Vermelding 6. HCSR501Device klas

Maak vervolgens een klassenconstructor die de GPIO 24-pin initialiseert en activeert met behulp van de DeviceManager API en de GPIOPinConfig klasse (zie Lijst 7) ​​om de volgende voorwaarden vast te stellen:

  • Apparaatnaam:0
  • Pinnummer:GPIO 24 (gespecificeerd via pinGPIO )
  • Richting:alleen invoer
  • Modus:vervolgkeuzelijst
  • Trigger:stijgende rand
  • Initiële waarde:false
  • Wacht drie seconden voordat u de PIR initialiseert
public HCSR501Device(int pinGPIO) { ... pin =(GPIOPin) DeviceManager.open(new GPIOPinConfig( 0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN, GPIOPinConfig_EDGE, false)); I2CUtils.I2Cdelay(3000); // wacht 3 seconden ...}

Lijst 7. De beginvoorwaarden vaststellen

Maak nu een methode die een gedefinieerde listenerklasse ontvangt die bewegingsdetectiegebeurtenissen ondersteunt, zoals weergegeven in Listing 8.

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

Lijst 8. Methode die bewegingsdetectie-gebeurtenissen ondersteunt

Het is ook belangrijk dat je de pin sluit wanneer je klaar bent, en zorg er ook voor dat je de pin-listener vrijmaakt zoals weergegeven in Listing 9.

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

Vermelding 9. De pin sluiten en de luisteraar bevrijden

Laten we onze MIDlet-klasse uitbreiden om de PIR-sensor en zijn luisteraar te ondersteunen, zoals weergegeven in Listing 10.

//Define HCSR501 Device objectHCSR501Device pir;private static final int MOTION_DETECTOR_PIN =24;@Overridepublic void startApp() {... //Initialiseer PIR-sensor pir =new HCSR501Device(MOTION_DETECTOR_PIN); pir.setListener(new PirSensor());... }@Overridepublic void destroyApp(boolean unconditional) {... pir.close();...}//Controleer PIR Sensor voor bewegingsdetectieklasse PirSensor implementeert PinListener { @Override public void valueChanged(PinEvent event) { if (event.getValue()) { System.out.println("WAARSCHUWING Beweging gedetecteerd!!!"); } }}

Lijst 10. Uitbreiding van de MIDlet-klasse om de PIR-sensor en zijn luisteraar te ondersteunen

Voor meer details:Java ME 8 + Raspberry Pi + Sensors =IoT World (deel 1)


Productieproces

  1. Java Hallo Wereld-programma
  2. Multichannel professionele datalogger op Raspberry Pi – deel 1
  3. IoT 101-project:stream de temperatuur van je Raspberry Pi
  4. Analoge sensoren uitlezen met één GPIO-pin
  5. Analoge sensoren zonder analoge ingangen op de Raspberry Pi
  6. Raspberry Pi 1-draads digitale thermometersensor (DS18B20)
  7. Java ME 8 + Raspberry Pi + Sensors =IoT World (deel 1)
  8. Raspberry Pi digitale Hall-sensor in JAVA
  9. Raspberry Pi-sensoren
  10. Bewaak je huistemperatuur met je Raspberry Pi
  11. Analoge sensoren op de Raspberry Pi met een MCP3008