Подключение ADS1115 к Arduino
Датчик достаточно функционален, потому способен помочь в расширении опциональности микроконтроллера либо возможностей миникомпьютера в сфере работы с аналоговыми сигналами. Кроме того, он несомненно пригодится радиолюбителям, которые нуждаются в измерении напряжения (на конкретных участках цепи) и последующем анализе полученной информации (наконец, ее оцифровке).
Обратимся к техническим характеристикам:
- напряжение питания: от 2В до 5В;
- потребляемый ток в непрерывном режиме: 150 мкА;
- тактовый генератор: интегрирован;
- разрешение: 16 бит;
- совместимость с I2C шиной;
- скорость передачи данных от 8 до 860 выборок в секунду;
- диапазоны входных сигналов от ± 256 мВ до ± 6.144 В;
- рабочие температуры: от -40 до +125;
- габариты платы: 25,5 х 9 мм.
Подключение ADS1115 к Ардуино
Электрическая схема датчика показана ниже:А вот принципиальная схема подключения имеет несколько вариаций – в зависимости от выбора из 4-х возможных адресов подключения ADDR:
Как видим из упомянутого выше скриншота, в одном интерфейсе I2C могут присутствовать сразу четыре датчика ADS1115.
АЦП может функционировать в 2-х режимах: несимметричном и дифференциальном, поэтому схемы измерительной цепи будут также отличаться. Рассмотрим коротко оба варианта. Начнем с первого. Несимметричный режим измерения схематически выглядит следующим образом (на примере платы Arduino Nano):
Заливаем скетч для проверки:
1. #include <Wire.h> // Библиотека для работы с шиной I2C
2. #include <Adafruit_ADS1015.h> // Библиотека для работы с модулями ADS1115 и ADS1015
3. Adafruit_ADS1115 ads; // Создание объекта ads для общения через него с модулем
4.
5. void setup() {
6. Serial.begin(9600); // Инициализация серийного порта
7.
8. // Установка коэффициента усиления 2/3
9. ads.setGain(GAIN_TWOTHIRDS);
10.
11. // ВОЗМОЖНЫЕ ВАРИАНТЫ УСТАНОВКИ КУ:
12. // ads.setGain(GAIN_TWOTHIRDS); | 2/3х | +/-6.144V | 1bit = 0.1875mV |
13. // ads.setGain(GAIN_ONE); | 1х | +/-4.096V | 1bit = 0.125mV |
14. // ads.setGain(GAIN_TWO); | 2х | +/-2.048V | 1bit = 0.0625mV |
15. // ads.setGain(GAIN_FOUR); | 4х | +/-1.024V | 1bit = 0.03125mV |
16. // ads.setGain(GAIN_EIGHT); | 8х | +/-0.512V | 1bit = 0.015625mV |
17. // ads.setGain(GAIN_SIXTEEN); | 16х | +/-0.256V | 1bit = 0.0078125mV |
18.
19. ads.begin(); // Инициализация модуля ADS1115
20. }
21.
22. void loop() {
23. // Переменные для хранения значений АЦП каждого канала
24. int16_t adc0, adc1, adc2, adc3;
25.
26. adc0 = ads.readADC_SingleEnded(0); // Чтение АЦП нулевого канала
27. adc1 = ads.readADC_SingleEnded(1); // Чтение АЦП первого канала
28. adc2 = ads.readADC_SingleEnded(2); // Чтение АЦП второго канала
29. adc3 = ads.readADC_SingleEnded(3); // Чтение АЦП третьего канала
30.
31. // Расчёт фактических напряжений на каждом канале
32. float u0 = float(adc0) * 0.1875 / 1000.0;
33. float u1 = float(adc1) * 0.1875 / 1000.0;
34. float u2 = float(adc2) * 0.1875 / 1000.0;
35. float u3 = float(adc3) * 0.1875 / 1000.0;
36.
37.
38. // Вывод значения АЦП и фактичесгого напряжения на каналах 0-3
39. Serial.print("ADC_AIN0="); Serial.print(adc0);
40. Serial.print(" VOLTAGE_AIN0="); Serial.print(u0); Serial.println("V");
41. Serial.print("ADC_AIN1="); Serial.print(adc0);
42. Serial.print(" VOLTAGE_AIN1="); Serial.print(u1); Serial.println("V");
43. Serial.print("ADC_AIN2="); Serial.print(adc0);
44. Serial.print(" VOLTAGE_AIN2="); Serial.print(u2); Serial.println("V");
45. Serial.print("ADC_AIN3="); Serial.print(adc0);
46. Serial.print(" VOLTAGE_AIN3="); Serial.print(u3); Serial.println("V");
47. Serial.println(" ");
48.
49. delay(1000);
50. }
Обратите внимание – для этой прошивки понадобятся 2 библиотеки (найти можно в Интернете). Не забудьте добавить их в среду разработки Arduino IDE, папка C:\Program Files (x86)\Arduino\libraries\Дифференциальный способ измерения показан на следующей схеме сборки:
Прописываем коды:
1. #include <Wire.h> // Библиотека для работы с шиной I2C
2. #include <Adafruit_ADS1015.h> // Библиотека для работы с модулями ADS1115 и ADS1015
3. Adafruit_ADS1115 ads; // Создание объекта ads для общения через него с модулем
4.
5. void setup() {
6. Serial.begin(9600); // Инициализация серийного порта
7.
8. // Установка коэффициента усиления 2/3
9. ads.setGain(GAIN_TWOTHIRDS);
10.
11. // ВОЗМОЖНЫЕ ВАРИАНТЫ УСТАНОВКИ КУ:
12. // ads.setGain(GAIN_TWOTHIRDS); | 2/3х | +/-6.144V | 1bit = 0.1875mV |
13. // ads.setGain(GAIN_ONE); | 1х | +/-4.096V | 1bit = 0.125mV |
14. // ads.setGain(GAIN_TWO); | 2х | +/-2.048V | 1bit = 0.0625mV |
15. // ads.setGain(GAIN_FOUR); | 4х | +/-1.024V | 1bit = 0.03125mV |
16. // ads.setGain(GAIN_EIGHT); | 8х | +/-0.512V | 1bit = 0.015625mV |
17. // ads.setGain(GAIN_SIXTEEN); | 16х | +/-0.256V | 1bit = 0.0078125mV |
18.
19. ads.begin(); // Инициализация модуля ADS1115
20. }
21.
22. void loop() {
23. int16_t adc_01_voltage; // Переменная для хранения значения АЦП вольтметра (канал 0-1)
24. int16_t adc_23_current; // Переменная для хранения значения АЦП амперметра (канал 2-3)
25.
26. adc_01_voltage = ads.readADC_Differential_0_1(); // Измеряем значение АЦП на канало 0-1
27. adc_23_current = ads.readADC_Differential_2_3(); // Измеряем значение АЦП на канало 2-3
28.
29. // Расчёт напряжения
30. float u = float(adc_01_voltage) * 0.1875 / 1000.0;
31.
32. // Расчёт падения напряжения на токоизмерительном резисторе 1 Ом
33. float ur = float(adc_23_current) * 0.1875 / 1000.0;
34. // Расчёт силы тока
35. float i = ur / 1.0; // Сопротивление резистора 1 Ом.
36.
37. // Вывод полученных значений в монитор серийного порта
38. Serial.print("VOLTAGE="); Serial.print(u); Serial.println("V");
39. Serial.print("CURRENT="); Serial.print(i); Serial.println("A");
40.
41. delay(1000);
42. }
На этом прощаемся! Удачных вам проектов!Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...
Наш новый информационный обзор посвящен подключению AD9833 к Ардуино. Мы постараемся рассмотреть базовые особенности устройства, его преимущества и схему...
FM радио модуль стерео RDA5807M для Ардуино - отличное решение для создателей интересных проектов, в которых понадобится FM-радиоприемник. Модуль имеет ряд...
На повестке дня - подключение AM2320 к Ардуино. Тема очень занятная по той простой причине, что подобные датчики являются просто «мастхевом» для современных...
В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...