Чтобы считать напряжение и преобразовать его к осязаемому цифровому значению используется аналого-цифровой преобразователь (AЦП). В мини-компьютерах Raspberry Pi, Banana Pi, Orange Pi, Nano Pi и др. отсутствуют встроенные АЦП, поэтому для чтения аналоговых сигналов потребуется внешний АЦП. Один из них — это Аналого-Цифровой Преобразователь/АЦП ADS1115.
ADS1115 — это 4-х канальный 16-битный аналого-цифровой преобразователь (АЦП). Преобразователь разработан для обеспечения точности, энергоэффективности, простоты в реализации, выполняет преобразование с программируемыми скоростями обработки данных. Встроенный усилитель с программируемым коэффициентом усиления (PGA), что позволяет проводить точные измерения больших и малых напряжений. ADS1115 имеет входной мультиплексор (MUX), который позволяет выполнять два дифференциальных или четыре несимметричных входных измерения.
В Pi4J есть библиотека для работы с АЦП ADS1115 по I2C/TWI из Java на Raspberry Pi, Banana Pi, Orange Pi, Nano Pi и Odroid. Все классы и интерфейсы находятся в пакете com.pi4j.gpio.extension.ads.*;
.
Пока не все возможности АЦП модулей ADS1x15 реализованы, например, нельзя дифференциально измерять напряжение между входами модуля, доступно только измерение относительно земли (GND). Также не реализована возможность использования пина ALERT/READY, используя GPIO для уведомления о событиях. Это было бы более эффективно, чем постоянный опрос доступности данных.
- 1 Класс ADS1x15GpioProvider
- 1.1 ADS1x15GpioProvider(int, int)
- 1.2 ADS1x15GpioProvider(I2CBus, int)
- 1.3 getProgrammableGainAmplifier(Pin)
- 1.4 setProgrammableGainAmplifier(ProgrammableGainAmplifierValue, Pin…)
- 1.5 getEventThreshold(Pin)
- 1.6 setEventThreshold(double, Pin…)
- 1.7 getMonitorInterval()
- 1.8 setMonitorInterval(int)
- 1.9 getImmediateValue(Pin)
- 1.10 ADCMonitor
- 2 Класс ADS1115GpioProvider
- 3 Класс ADS1115Pin
- 4 Подключение АЦП ADS1115 к Orange Pi PC
- 5 Материалы
- 6 Похожие записи
Класс ADS1x15GpioProvider
Это абстрактный класс, что реализует общие методы аналого-цифровых преобразователей серии ADS1x15, ADS1015 и ADS1113/ADS1114/ADS1115.
ADS1x15GpioProvider(int, int)
Конструктор класса.
public ADS1x15GpioProvider(int busNumber, int address) throws UnsupportedBusNumberException, IOException
Параметры
busNumber — номер шины.
address — I2C адрес устройства.
Возвращает
новый экземпляр ADS1x15GpioProvider
Бросает
UnsupportedBusNumberException — если данный номер шины не поддерживается базовой системой.
IOException — если сообщение с шиной I2C не работает.
ADS1x15GpioProvider(I2CBus, int)
Конструктор класса.
public ADS1x15GpioProvider(I2CBus bus, int address) throws IOException
Параметры
bus — I2C шина.
address — I2C адрес устройства.
Возвращает
новый экземпляр ADS1x15GpioProvider
Бросает
IOException — если сообщение с шиной I2C не работает.
getProgrammableGainAmplifier(Pin)
Возвращает коэффициент усиления внутреннего усилителя (PGA).
public ProgrammableGainAmplifierValue getProgrammableGainAmplifier(Pin pin)
Параметры
pin — номер пина АЦП.
Возвращает
экземпляр ProgrammableGainAmplifierValue — Коэффициент усиления внутреннего усилителя (PGA).
setProgrammableGainAmplifier(ProgrammableGainAmplifierValue, Pin…)
Настройка коэффициента усиления внутреннего усилителя (PGA).
public void setProgrammableGainAmplifier(ProgrammableGainAmplifierValue pga, Pin...pin)
Параметры
pga — коэффициент усиления внутреннего усилителя (PGA).
pin — номер пина/пинов АЦП.
getEventThreshold(Pin)
Возвращает заданный пину порог события.
public double getEventThreshold(Pin pin)
Параметры
pin — номер пина АЦП.
Возвращает
порог события
setEventThreshold(double, Pin…)
Задаёт минимальное значение порога срабатывания события/й. Другими словами, событие срабатывает, если разница между предыдущим и текущим измерением больше заданного значения.
public void setEventThreshold(double threshold, Pin...pin)
Параметры
threshold — минимальное значение порога срабатывания события/й.
pin — пин АЦП.
getMonitorInterval()
Метод возвращает интервал обновления потока мониторинга (в миллисекундах).
public int getMonitorInterval()
setMonitorInterval(int)
Метод задаёт интервал обновления потока мониторинга (в миллисекундах). Это определяет скорость, с которой контрольный поток будет считывать входные значения из чипа АЦП (значение менее 50 мс не разрешено, по умолчанию — 100 мс).
public void setMonitorInterval(int monitorInterval)
Параметры
monitorInterval — интервал обновления потока мониторинга (в миллисекундах).
getImmediateValue(Pin)
Метод используется «монитором» (ADCMonitor), чтобы получить текущее напряжение с указанного пина АЦП. Напряжение измеряется между одним из входов и общим проводом (GND), а дифференциальное измерение библиотека не поддерживает.
public double getImmediateValue(Pin pin) throws IOException
Параметры
pin — пин АЦП.
Возвращает
текущее значение от АЦП.
Бросает
IOException — если сообщение с шиной I2C не работает.
ADCMonitor
Этот класс/поток используется для активного мониторинга прерываний GPIO. Монитор запускается при создании экземпляра класса ADS1x15GpioProvider.
private class ADCMonitor extends Thread {}
Класс ADS1115GpioProvider
Этот GPIO провайдер расширяет абстрактный класс ADS1x15GpioProvider и реализует интерфейс GpioProvider, для работы с пинами АЦП ADS1115, как с родными пинами Pi4J.
ADS1115GpioProvider(int, int)
Конструктор класса.
public ADS1115GpioProvider(int busNumber, int address) throws UnsupportedBusNumberException, IOException
Параметры
busNumber — номер шины.
address — I2C адрес устройства.
Возвращает
новый экземпляр ADS1115GpioProvider
Бросает
UnsupportedBusNumberException — если данный номер шины не поддерживается базовой системой.
IOException — если сообщение с шиной I2C не работает.
ADS1115GpioProvider(I2CBus, int)
Конструктор класса.
public ADS1115GpioProvider(I2CBus bus, int address) throws IOException
Параметры
bus — I2C шина.
address — I2C адрес устройства.
Возвращает
новый экземпляр ADS1115GpioProvider
Бросает
IOException — если сообщение с шиной I2C не работает.
Класс ADS1115Pin
Класс ADS1115Pin содержит 4 экземпляра пинов АЦП ADS1115: INPUT_A0
, INPUT_A1
, INPUT_A2
и INPUT_A3
.
createAnalogInputPin(int, String)
С помощью этого метода можно создать собственный аналоговый пин. Различие между пином по умолчанию и собственным лишь в том, что второму можно задать имя.
private static Pin createAnalogInputPin(int address, String name)
Параметры
address — номер пина (0-3).
name — имя пина.
Возвращает
новый экземпляр Pin
Подключение АЦП ADS1115 к Orange Pi PC
Поскольку эта библиотека не поддерживает дифференциальное измерение, я привёл только один пример, напряжение измеряется между одним из входов и общим проводом (GND).
Схема подключения ADS1115 к Orange Pi
Можно подключить по одному переменному резистору на каждый вход датчика, если хотите проверить все входы. АЦП ADS1115 подключён к порту номер 1, так как адрес 0x48 на порту 0 резервирован. Но можно менять адрес АЦП с помощью пина ADDR и подключить устройство на порт 0.
Пример программы
Приведённая ниже программа считывает данные с датчика и выводит результаты в терминал. Обратите внимание на следующую строку:
gpioProvider.setEventThreshold(500, ADS1115Pin.ALL);
я установил порог в 500 (макс.: 32767). Если вам нужно, чтобы событие сработало при любом изменении значений с датчика, тогда установите 0 вместо 500:
gpioProvider.setEventThreshold(0, ADS1115Pin.ALL);
Пример кода:
import java.io.IOException; import java.text.DecimalFormat; import com.pi4j.gpio.extension.ads.ADS1115GpioProvider; import com.pi4j.gpio.extension.ads.ADS1115Pin; import com.pi4j.gpio.extension.ads.ADS1x15GpioProvider.ProgrammableGainAmplifierValue; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinAnalogInput; import com.pi4j.io.gpio.event.GpioPinAnalogValueChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerAnalog; import com.pi4j.io.i2c.I2CBus; import com.pi4j.io.i2c.I2CFactory.UnsupportedBusNumberException; public class ADS1115Example { /** * @param args */ public static void main(String[] args) { try { System.out.println("<--Pi4J--> ADS1115 GPIO Example ... started."); /* * формат чисел для вывода данных */ final DecimalFormat df = new DecimalFormat("#.##"); final DecimalFormat pdf = new DecimalFormat("###.#"); /* * создаем gpio контроллер */ GpioController gpio = GpioFactory.getInstance(); /* * создаем пользовательский provider GPIO ADS1115 */ final ADS1115GpioProvider gpioProvider = new ADS1115GpioProvider(I2CBus.BUS_1, ADS1115GpioProvider.ADS1115_ADDRESS_0x48); /* * создаём аналоговые входные пины от ADS1115 */ GpioPinAnalogInput analogInputPin0 = gpio.provisionAnalogInputPin(gpioProvider, ADS1115Pin.INPUT_A0, "MyAnalogInput-A0"); GpioPinAnalogInput analogInputPin1 = gpio.provisionAnalogInputPin(gpioProvider, ADS1115Pin.INPUT_A1, "MyAnalogInput-A1"); GpioPinAnalogInput analogInputPin2 = gpio.provisionAnalogInputPin(gpioProvider, ADS1115Pin.INPUT_A2, "MyAnalogInput-A2"); GpioPinAnalogInput analogInputPin3 = gpio.provisionAnalogInputPin(gpioProvider, ADS1115Pin.INPUT_A3, "MyAnalogInput-A3"); /* * ВНИМАНИЕ !! Для всех аналоговых входных контактов важно установить PGA * (программируемый коэффициент усиления внутреннего усилителя). (Вы * можете опционально установить каждый вход на другое значение). * Измеренное входное напряжение никогда не должно превышать это значение! */ gpioProvider.setProgrammableGainAmplifier(ProgrammableGainAmplifierValue.PGA_4_096V, ADS1115Pin.ALL); /* * Определяем пороговое значение для каждого вывода для событий изменения * аналогового значения. Важно установить этот порог достаточно высоким, * чтобы программа не захлебнулась событиями изменения для незначительных * изменений */ gpioProvider.setEventThreshold(500, ADS1115Pin.ALL); /* * Определите интервал обновления потока мониторинга (в миллисекундах). * Это определяет скорость, с которой контрольный поток будет считывать * входные значения из чипа АЦП (значение менее 50 мс не разрешено) */ gpioProvider.setMonitorInterval(300); /* * создаем слушатель изменения значения входного напряжения */ GpioPinListenerAnalog listener = new GpioPinListenerAnalog() { @Override public void handleGpioPinAnalogValueChangeEvent(GpioPinAnalogValueChangeEvent event) { /* необработанное значение */ double value = event.getValue(); /* в процентах */ double percent = ((value * 100) / ADS1115GpioProvider.ADS1115_RANGE_MAX_VALUE); /* * приблизительное напряжение (* масштабируется на основе настройки * PGA) */ double voltage = gpioProvider.getProgrammableGainAmplifier(event.getPin()).getVoltage() * (percent / 100); /* выводим данные */ System.out.println(" (" + event.getPin().getName() + ") : VOLTS=" + df.format(voltage) + " | PERCENT=" + pdf.format(percent) + "% | RAW=" + value + " "); } }; analogInputPin0.addListener(listener); analogInputPin1.addListener(listener); analogInputPin2.addListener(listener); analogInputPin3.addListener(listener); /* * Оставляем программу работать 5 минут */ Thread.sleep(5 * 60 * 1000); /* * останавливаем все действия / потоки GPIO, отключая контроллер GPIO * (этот метод принудительно завершает работу всех потоков мониторинга * GPIO и запланированных задач) */ gpio.shutdown(); System.out.println("Exiting ADS1115GpioExample"); } catch (UnsupportedBusNumberException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код:
nano ADS1115Example.java
- компилируем файл:
javac -classpath .:classes:/opt/pi4j/lib/'*' ADS1115Example.java
- запускаем программу:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ADS1115Example
Результат
Материалы
ADS1115 — 16-битный Аналого-Цифровой Преобразователь с I2C интерфейсом. Модуль RI038
Pi4J/pi4j · GitHub
Скачать документацию Datasheet ADS1115.pdf
Устали от непрерывных убираний? Доверьте заботы о гигиене профессионалам! Наша чистая компания предоставляет услуги уборки для жилых помещений и рабочих пространств: постоянная, основная, специальная и другие варианты! Мы используем только безопасные и эффективные моющие средства, а также новейшее оборудование. Поручите уборку и удовлетворяйте временем для себя! Познакомьтесь больше о наших услугах на сайте: https://ubork-kompan24.ru . Приятный порядок — залог здоровья!
Устали от непрерывной уборки в своем доме или офисе? Мы осознаем, как непросто найти время на поддержание абсолютной чистоты, особенно в круговороте повседневной жизни. Наша клининговая компания в Санкт-Петербурге предлагает услуги профессионального клининга, которые сделают ваше пространство совершенным. Мы гарантируем высокое качество работы, применяя только неагрессивные и эффективные средства. Выбирайте Уборка помещений и офисов Не дайте пыли и беспорядку отнимать у вас время. Доверьте уборку нашим опытным специалистам, и получайте удовольствие от уютом и чистотой в вашем доме или офисе. Мы готовы помочь вам в любое время, формируя атмосферу, в которой комфортно находиться.
безопасная сделка аккаунтов https://marketplace-akkauntov-top.ru/
купить аккаунт с прокачкой маркетплейс аккаунтов
Find Accounts for Sale Account Trading Platform
Account Selling Service Account Buying Platform
Account Trading Platform Account Selling Platform
Account Sale accountsmarketplacehub.com
Sell accounts Account Buying Platform
Account Catalog Accounts market
Secure Account Sales Purchase Ready-Made Accounts
database of accounts for sale accounts for sale
accounts marketplace account trading
guaranteed accounts https://buyaccountsdiscount.com
account exchange buy account
find accounts for sale profitable account sales
buy and sell accounts accounts for sale
accounts for sale profitable account sales
account trading account store
ready-made accounts for sale account exchange service
account trading service sell pre-made account
secure account sales account buying service
account sale account trading
buy account account catalog
online account store account selling platform
accounts marketplace account trading platform
account selling platform sell pre-made account
account selling service account purchase
https://pinupaz.top/# pin-up casino giris