Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Java ME 8 + Raspberry Pi + Sensors =IoT World (Часть 1)

Узнайте, как подключить датчики к Raspberry Pi и управлять ими с помощью Java.

Опубликовано в сентябре 2014 г.

Последний выпуск Java ME 8 включает мощный API-интерфейс для управления такими устройствами, как светодиоды, реле, ЖК-дисплеи, датчики, двигатели и переключатели.

Эта статья является первой из серии из трех частей о том, как подключить электронные датчики к Raspberry Pi Model B с помощью универсального ввода / вывода (GPIO), шины межинтегральной схемы (I2C), шины последовательного периферийного интерфейса (SPI). , или универсальный асинхронный интерфейс приемника / передатчика (UART).

Используя Java ME 8 для управления устройствами с различными типами интерфейсов и подключая устройства к Raspberry Pi, мы можем создать мир Интернета вещей (IoT).

В этой статье основное внимание уделяется использованию GPIO и показаны примеры разработки классов в Java ME 8, которые могут

Примечание :Полный пример кода для этого проекта IDE NetBeans 8.0 можно загрузить здесь.

API ввода-вывода устройств

Спецификация API ввода-вывода устройств определяет общий API ввода-вывода периферийных устройств для приложений Java, работающих на небольших встроенных устройствах. Он определяет API-интерфейсы для некоторых из наиболее распространенных периферийных устройств, включая следующие:

Схемы, которые мы создадим

Устройство GPIO может использоваться как цифровой вход или как цифровой выход, оно может быть отключено или включено, а также может использоваться для управления линиями «прерывания». Однако очень важно учитывать, что все контакты Raspberry Pi GPIO работают при напряжении 3,3 В. Поэтому очень важно проверить технические характеристики устройств, которые вы хотите подключить, чтобы определить, используют ли они 3,3 В или 5 В. В некоторых случаях , вам понадобится преобразователь логического уровня, такой как этот.

Подключение детектора пламени

Датчик пламени DFR0076 от DFRobot можно использовать для обнаружения огня или других длин волн света от 760 до 1100 нм. Мы можем подключить его к 3,3 В или 5 В, а диапазон обнаружения составляет примерно от 20 см (4,8 В) до 100 см (1 В). При обнаружении пожара он подтягивает сигнальный штифт.

Давайте подключим датчик пламени к контактам 3.3 В, Gnd и GPIO 22 Raspberry Pi, как показано на рисунке 3, и создадим класс Java ME 8 для управления датчиком пламени.

Сначала создайте класс DFR0076Device который использует API доступа к устройствам, и определяет переменную pin который поддерживает интерфейс к GPIO, как показано в листинге 1.

 открытый класс DFR0076Device {частный GPIOPin pin =null; // Определяем штифт для контроля датчика пламени 

Листинг 1. Класс для датчика контроля пламени

Затем создайте конструктор класса, который инициализирует и активирует вывод GPIO 22 с помощью DeviceManager API и GPIOPinConfig class (см. листинг 2), чтобы установить следующие условия:

 общедоступное устройство DFR0076Device (int pinGPIO) {... pin =(GPIOPin) DeviceManager.open (новый GPIOPinConfig (0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_UP, GPIOPinG_Config); / pre> 

Листинг 2. Установление начальных условий

Теперь создайте метод, который получает определенный класс слушателя, который поддерживает события обнаружения пламени, как показано в листинге 3.

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

Листинг 3. Метод, поддерживающий события обнаружения пламени

Также важно, чтобы вы закрыли пин, когда закончите, а также убедитесь, что вы освободили прослушиватель пина, как показано в листинге 4.

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

Листинг 4. Закрытие пина и освобождение слушателя

Теперь создайте основной мидлет, который вызывает наш код и определяет класс слушателя для обработки событий обнаружения пламени, как показано в листинге 5.

 открытый класс TestSensors расширяет MIDlet {DFR0076Device flame; частный статический final int FLAME_DETECTOR_PIN =22; public void startApp () {// Инициализировать датчик пламени flame =new DFR0076Device (FLAME_DETECTOR_PIN); flame.setListener (новый FlameSensor ()); } public void destroyApp (логическое безусловное) {flame.close (); } частный статический int waitnext =1; class FlameSensor реализует PinListener {public void valueChanged (событие PinEvent) {if (event.getValue () &&--waitnext ==0) {System.out.println ("ВНИМАНИЕ! Обнаружено пламя !!!"); waitnext =10; }}}} 

Листинг 5. Создание мидлета для вызова нашего кода

Подключение детектора движения

Теперь давайте добавим функцию детектора движения к нашим TestSensors . Мидлет. Для этого нам понадобится датчик движения, такой как HC-SR501, показанный на рисунке 2.

Датчики PIR позволяют ощущать движение. Все излучает небольшое количество инфракрасного излучения, и чем горячее что-то, тем больше излучения оно излучает. ИК-датчики способны обнаруживать изменение уровней ИК-излучения в пределах их зоны обнаружения (например, когда человек входит в комнату) и, следовательно, обнаруживать движение.

ПИК-датчик, который мы будем использовать, имеет три контакта:заземление, цифровой выход и вход 3-5 В постоянного тока. В режиме ожидания, когда движение не обнаружено, сигнал цифрового выхода будет оставаться низким. Однако при обнаружении движения сигнал цифрового выхода будет иметь высокий импульс (3,3 В). Можно подключить вывод цифрового выхода напрямую к Raspberry Pi.

Для тестирования на датчике PIR есть перемычка (см. Рисунок 4).

  • Установка перемычки в положение «L» создает одиночный (неповторяемый) триггер. Когда перемычка находится в этом положении, обнаружение активируется после возникновения события обнаружения, что обеспечивает непрерывное обнаружение движения. Выходной сигнал остается на низком уровне в течение 3 секунд после того, как движение больше не обнаруживается.
  • Установка перемычки в положение «H» создает повторяемый триггер. Когда перемычка установлена ​​в положение «H» (по умолчанию), обнаружение отключается после возникновения события обнаружения (то есть, когда выходной сигнал становится высоким).

Вы можете внести следующие изменения:

  • Регулировка потенциометра чувствительности по часовой стрелке увеличивает расстояние срабатывания примерно до 7 метров; при его регулировке против часовой стрелки расстояние срабатывания уменьшается примерно до 3 метров.
  • Регулировка потенциометра задержки времени по часовой стрелке увеличивает задержку индукции до 300 секунд; поворот против часовой стрелки сокращает задержку индукции до 5 секунд.

Давайте подключим датчик PIR к контактам Raspberry Pi 5 V, Gnd и GPIO 24, как показано на рисунке 3, и создадим класс Java ME 8 HCSR501Device . для управления им с помощью API доступа к устройствам, как показано в листинге 6.

 открытый класс HCSR501Device {private GPIOPin pin =null; 

Листинг 6. HCSR501Device класс

Затем создайте конструктор класса, который инициализирует и активирует контакт GPIO 24 с помощью DeviceManager API и GPIOPinConfig class (см. листинг 7), чтобы установить следующие условия:

  • Имя устройства:0
  • Номер пина:GPIO 24 (указывается через pinGPIO )
  • Направление:только ввод
  • Режим:раскрывающийся
  • Триггер:по нарастающему фронту
  • Начальное значение:false
  • Подождите три секунды перед инициализацией PIR.
 общедоступное устройство HCSR501Device (int pinGPIO) {... pin =(GPIOPin) DeviceManager.open (новый GPIOPinConfig (0, pinGPIO, GPIOPinConfig.DIR_INPUT_ONLY, GPIOPinConfig.MODE_INPUT_PULL_DOWN_DOWN, GPIOPinG); I2CUtils.I2Cdelay (3000); // ждем 3 секунды ...} 

Листинг 7. Установление начальных условий

Теперь создайте метод, который получает определенный класс слушателя, поддерживающий события обнаружения движения, как показано в листинге 8.

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

Листинг 8. Метод, поддерживающий события обнаружения движения

Также важно, чтобы вы закрыли пин, когда закончите, а также убедитесь, что вы освободили прослушиватель пина, как показано в листинге 9.

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

Листинг 9. Закрытие булавки и освобождение слушателя

Давайте расширим наш класс MIDlet для поддержки датчика PIR и его приемника, как показано в листинге 10.

 // Определить объект устройства HCSR501HCSR501Device 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 (логическое безусловное) {... pir.close (); ...} // Проверяем датчик PIR на предмет обнаружения движения. Класс PirSensor реализует PinListener {@Override public void valueChanged (событие PinEvent) {if (event.getValue ()) {System.out.println («ВНИМАНИЕ! Обнаружено движение !!!»); }}} 

Листинг 10. Расширение класса MIDlet для поддержки датчика PIR и его приемника

Подробнее:Java ME 8 + Raspberry Pi + Sensors =IoT World (Часть 1)


Производственный процесс

  1. Java-программа Hello World
  2. Многоканальный профессиональный регистратор данных на Raspberry Pi - Часть 1
  3. Проект IoT 101:потоковая температура с вашего Raspberry Pi
  4. Считывание аналоговых датчиков с одним контактом GPIO
  5. Аналоговые датчики без аналоговых входов на Raspberry Pi
  6. Цифровой датчик термометра Raspberry Pi 1-Wire (DS18B20)
  7. Java ME 8 + Raspberry Pi + Sensors =IoT World (Часть 1)
  8. Цифровой датчик Холла Raspberry Pi в JAVA
  9. Датчики Raspberry Pi
  10. Следите за температурой в доме с помощью Raspberry Pi