산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Java ME 8 + Raspberry Pi + 센서 =IoT World(1부)

센서를 Raspberry Pi에 연결하고 Java로 제어하는 ​​방법을 알아보세요.

2014년 9월 발행

최신 Java ME 8 릴리스에는 LED, 릴레이, LCD, 센서, 모터 및 스위치와 같은 장치를 제어하기 위한 강력한 API가 포함되어 있습니다.

이 기사는 GPIO(범용 입/출력), I2C(통합 회로 버스), SPI(직렬 주변 장치 인터페이스 버스)를 사용하여 전자 센서를 Raspberry Pi 모델 B에 연결하는 방법에 대한 3부로 구성된 시리즈의 첫 번째 기사입니다. , 또는 UART(Universal Asynchronous Receiver/Transmitter) 인터페이스.

Java ME 8을 사용하여 다양한 유형의 인터페이스가 있는 장치를 제어하고 장치를 Raspberry Pi에 연결하면 사물 인터넷(IoT) 세상을 만들 수 있습니다.

이 기사는 GPIO 사용에 중점을 두고 다음을 수행할 수 있는 Java ME 8에서 클래스를 개발하는 방법의 예를 보여줍니다.

<울>
  • DFRobot 화염 센서를 사용하여 화염 감지(모델 DFR0076)
  • HC-SR501 수동 적외선(PIR) 동작 감지기를 사용하여 움직임 감지
  • HC-SR04 초음파 거리 측정 모듈을 사용하여 거리 측정
  • 참고 :이 NetBeans IDE 8.0 프로젝트의 전체 예제 코드는 여기에서 다운로드할 수 있습니다.

    기기 I/O API

    장치 I/O API 사양은 소형 임베디드 장치에서 실행되는 Java 애플리케이션을 위한 일반 주변 장치 I/O API를 정의합니다. 다음을 포함하여 가장 일반적인 주변 장치에 대한 API를 정의합니다.

    <울>
  • GPIO 기기
  • I2C 기기
  • SPI 기기
  • 아날로그-디지털 변환기(ADC)
  • 디지털-아날로그 변환기(DAC)
  • UART 기기
  • 메모리 매핑 I/O(MMIO) 장치
  • AT 명령 장치
  • 감시 타이머
  • 맥박 카운터
  • 펄스 폭 변조(PWM) 발생기
  • 일반 기기
  • 우리가 만들 회로

    GPIO 장치는 디지털 입력 또는 디지털 출력으로 사용할 수 있으며 비활성화 또는 활성화할 수 있으며 "인터럽트" 라인을 구동하는 데 사용할 수 있습니다. 그러나 매우 중요한 고려 사항은 모든 Raspberry Pi GPIO 핀이 3.3V에서 작동한다는 것입니다. 따라서 연결하려는 장치의 기술 사양을 확인하여 3.3V 또는 5V를 사용하는지 확인하는 것이 매우 중요합니다. 경우에 따라 , 이와 같은 로직 레벨 변환기를 사용해야 합니다.

    화염 감지기 연결

    DFRobot의 DFR0076 화염 센서는 화재 또는 약 760nm에서 1100nm 사이의 다른 파장의 빛을 감지하는 데 사용할 수 있습니다. 3.3V 또는 5V에 연결할 수 있으며 감지 범위는 약 20cm(4.8V) ~ 100cm(1V)입니다. 화재가 감지되면 신호 핀을 뽑습니다.

    그림 3과 같이 화염 센서를 Raspberry Pi의 3.3V, Gnd 및 GPIO 22 핀에 연결하고 화염 감지기 센서 제어를 위한 Java ME 8 클래스를 생성해 보겠습니다.

    먼저 DFR0076Device 클래스를 만듭니다. Device Access API를 사용하고 pin 변수를 정의합니다. 목록 1과 같이 GPIO에 대한 인터페이스를 지원합니다.

    공개 클래스 DFR0076Device { 비공개 GPIOPin 핀 =null; //화염 센서 제어용 핀 정의

    목록 1. 화염 감지기 센서 제어용 클래스

    다음으로 DeviceManager를 사용하여 GPIO 22 핀을 초기화하고 활성화하는 클래스 생성자를 만듭니다. API 및 GPIOPinConfig 클래스(목록 2 참조)를 사용하여 다음 조건을 설정합니다.

    <울>
  • 기기 이름:0
  • 핀 번호:GPIO 22(pinGPIO를 통해 지정됨) )
  • 방향:입력 전용
  • 모드:풀업
  • 트리거:상승 에지
  • 초기값:false
  • 공개 DFR0076Device(int pinGPIO) { ... 핀 =(GPIOPin) DeviceManager.open(new GPIOPinConfig(0, pinGPIO,GPIOPinConfig.DIR_INPUT_ONLY,GPIOPinConfig.MODE_INPUT_PULL_UP, GPIOPinConfig.TRIGGER_RISING));... /사전> 

    목록 2. 초기 조건 설정

    이제 Listing 3과 같이 화염 감지 이벤트를 지원하는 정의된 리스너 클래스를 수신하는 메소드를 작성하십시오.

    공개 무효 setListener(PinListener FlameListener) {... if (pin!=null) pin.setInputListener(flameListener);...}

    목록 3. 화염 감지 이벤트를 지원하는 방법

    Listing 4와 같이 작업이 끝나면 핀을 닫고 핀 리스너를 해제하는 것도 중요합니다.

    공개 무효 close() {... if (pin!=null){ pin.setInputListener(null); 핀.닫기(); }...}

    목록 4. 핀 닫기 및 리스너 해제

    이제 Listing 5와 같이 코드를 호출하고 화염 감지 이벤트를 처리하기 위한 리스너 클래스를 정의하는 기본 MIDlet을 생성합니다.

    공용 클래스 TestSensors는 MIDlet { DFR0076Device Flame을 확장합니다. 개인 정적 최종 int FLAME_DETECTOR_PIN =22; public void startApp() { //화염 센서 초기화 화염 =new DFR0076Device(FLAME_DETECTOR_PIN); Flame.setListener(새로운 FlameSensor()); } 공개 무효 destroyApp(부울 무조건) { Flame.close(); } 개인 정적 int waitnext =1; 클래스 FlameSensor는 PinListener를 구현합니다. { public void valueChanged(PinEvent event) { if (event.getValue() &&--waitnext ==0) { System.out.println("경고 불꽃이 감지되었습니다!!!"); 다음 대기 =10; } } }}

    목록 5. 코드를 호출하는 MIDlet 만들기

    동작 감지기 연결

    이제 TestSensors에 동작 감지기 기능을 추가해 보겠습니다. 미들렛. 그러려면 그림 2와 같은 HC-SR501과 같은 모션 센서가 필요합니다.

    PIR 센서를 사용하면 움직임을 감지할 수 있습니다. 모든 것은 소량의 적외선을 방출하며, 뜨거운 것이 많을수록 더 많은 복사를 방출합니다. PIR 센서는 감지 영역(예:사람이 방에 들어갈 때) 내에서 발생하는 IR 수준의 변화를 감지하여 움직임을 감지할 수 있습니다.

    우리가 사용할 PIR 센서에는 접지, 디지털 출력 및 3–5 Vdc 입력의 3가지 핀이 있습니다. 유휴 상태에서 움직임이 감지되지 않으면 디지털 출력 신호는 낮게 유지됩니다. 그러나 움직임이 감지되면 디지털 출력 신호가 하이(3.3V)로 펄스됩니다. 디지털 출력 핀을 라즈베리파이에 직접 연결해도 됩니다.

    테스트를 위해 PIR 센서에는 점퍼가 있습니다(그림 4 참조).

    <울>
  • 점퍼를 "L" 위치로 설정하면 단일(반복 불가) 트리거가 생성됩니다. 점퍼가 이 위치에 있으면 감지 이벤트가 발생한 후 감지가 활성화되어 지속적인 움직임 감지가 가능합니다. 움직임이 더 이상 감지되지 않으면 출력이 3초 동안 계속 낮게 유지됩니다.
  • 점퍼를 "H" 위치로 설정하면 반복 가능한 트리거가 생성됩니다. 점퍼가 "H"(기본값) 위치로 설정되면 감지 이벤트가 발생한 후(즉, 출력이 높을 때) 감지가 비활성화됩니다.
  • 다음과 같이 조정할 수 있습니다.

    <울>
  • 감도 전위차계를 시계 방향으로 조정하면 감지 거리가 약 7미터로 증가합니다. 시계 반대 방향으로 조정하면 감지 거리가 약 3미터로 줄어듭니다.
  • 시간 지연 전위차계를 시계 방향으로 조정하면 유도 지연이 300초로 늘어납니다. 시계 반대 방향으로 조정하면 유도 지연이 5초로 단축됩니다.
  • 그림 3과 같이 PIR 센서를 Raspberry Pi 5 V, Gnd 및 GPIO 24 핀에 연결하고 Java ME 8 classHCSR501Device를 생성해 보겠습니다. Listing 6과 같이 Device Access API를 사용하여 제어합니다.

    공개 클래스 HCSR501Device { 비공개 GPIOPin 핀 =null;

    목록 6. HCSR501Device 수업

    그런 다음 DeviceManager를 사용하여 GPIO 24 핀을 초기화하고 활성화하는 클래스 생성자를 만듭니다. API 및 GPIOPinConfig 클래스(목록 7 참조)를 사용하여 다음 조건을 설정합니다.

    <울>
  • 기기 이름:0
  • 핀 번호:GPIO 24(pinGPIO를 통해 지정됨) )
  • 방향:입력 전용
  • 모드:풀다운
  • 트리거:상승 에지
  • 초기값:false
  • PIR을 초기화하기 전에 3초 동안 기다립니다.
  • <사전>공개 HCSR501Device(int pinGPIO) { ... 핀 =(GPIOPin) DeviceManager.open(new GPIOPinConfig(0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN, GPIOPinConfig.TRIGGER_RISING)); I2CUtils.I2Cdelay(3000); //3초 대기 ...}

    목록 7. 초기 조건 설정

    이제 Listing 8과 같이 모션 감지 이벤트를 지원하는 정의된 리스너 클래스를 수신하는 메소드를 작성하십시오.

    공개 무효 setListener(PinListener pirListener) {... if (pin!=null) pin.setInputListener(pirListener);...}

    목록 8. 움직임 감지 이벤트를 지원하는 방법

    작업이 끝나면 핀을 닫고 Listing 9와 같이 핀 리스너를 해제하는 것도 중요합니다.

    공개 무효 close() {... if (pin!=null){ pin.setInputListener(null); 핀.닫기(); }...}

    목록 9. 핀을 닫고 리스너 해제

    Listing 10과 같이 MIDlet 클래스를 확장하여 PIR 센서와 해당 수신기를 지원해 보겠습니다.

    //HCSR501 장치 개체 정의HCSR501Device pir;private static final int MOTION_DETECTOR_PIN =24;@Overridepublic void startApp() {... //PIR 센서 초기화 pir =new HCSR501Device(MOTION_DETECTOR_PIN); pir.setListener(new PirSensor());... }@Overridepublic void destroyApp(boolean unconditional) {... pir.close();...}//동작 감지 클래스에 대한 PIR 센서 확인 PirSensor 구현 PinListener { @Override public void valueChanged(PinEvent 이벤트) { if (event.getValue()) { System.out.println("경고 모션 감지!!!"); } }}

    목록 10. PIR 센서 및 해당 수신기를 지원하도록 MIDlet 클래스 확장

    자세한 내용:Java ME 8 + Raspberry Pi + 센서 =IoT World(1부)


    제조공정

    1. 자바 Hello World 프로그램
    2. Raspberry Pi의 다중 채널 전문 데이터 로거 – 1부
    3. IoT 101 프로젝트:Raspberry Pi의 스트림 온도
    4. 하나의 GPIO 핀으로 아날로그 센서 읽기
    5. Raspberry Pi에서 아날로그 입력이 없는 아날로그 센서
    6. Raspberry Pi 1-와이어 디지털 온도계 센서(DS18B20)
    7. Java ME 8 + Raspberry Pi + 센서 =IoT World(1부)
    8. JAVA의 Raspberry Pi 디지털 홀 센서
    9. 라즈베리 파이 센서
    10. Raspberry Pi를 사용하여 집 온도 모니터링