Программа листинга ADS1115, ZMPT101b и Arduino Uno для измерения переменного тока

У меня возникла проблема с моим результатом, когда мое чтение АЦП не может дать самое большое и самое низкое значение АЦП, если я использую ADS1115. между тем, когда я не использую ADS1115, я могу получить самое большое и самое низкое значение АЦП, используя программу листинга, которую я использовал раньше. Спасибо, нужна помощь.

Результат с рекламой

Результат без рекламы

Программа с ADS[![][3]] программа без рекламы

, 👍-1

Обсуждение

зачем ты выложил картинки кода? .... как вы ожидаете, что кто-нибудь запустит программу и протестирует ее?, @jsotola

как я могу вам помочь? ....вы не задали никаких вопросов., @jsotola

@jsotola нет, я публикую изображения кода, чтобы спросить, есть ли в моем коде что-то не так. Мой вопрос: почему я не могу получить наибольшее и наименьшее значение моего АЦП, если использую ADS1115? значение одинаково самое большое и самое низкое., @adi dharma

В этом SE принято публиковать код в виде текста (например, чтобы другие могли его скопировать/вставить и помочь вам, предоставив правильный код), а не в виде изображений., @MichaelT

достаточно ли быстр ADS1115 для измерения переменного тока? вы используете какой-то RC-фильтр и мост?, @dandavis


1 ответ


0

ZMPT101b — это трансформатор, преобразующий напряжение. Вы можете прочитать вывод с помощью аналогового вывода.

ADS1115 — это аналого-цифровой преобразователь. Он считывает аналоговое напряжение так же, как аналоговый вывод вашего Arduino. Затем результат может быть прочитан через I2C как значение регистра. Вы не можете прочитать его с помощью AnalogRead.

Таким образом, вы можете использовать ADS1115 для преобразования аналогового выхода ZMPT101b.

Чтобы считать цифровое значение с ADS1115 с помощью Arduino, используйте библиотеку Wire или найдите библиотеку для ADS1115. Например, вот этот.

Я использую ADC121 с библиотекой Wire. Я инициализирую его в setup()

  const byte REG_ADDR_RESULT = 0x00;
  const byte REG_ADDR_CONFIG = 0x02;

  // инициализируем библиотеку Wire
  Wire.begin();
  Wire.setClock(400000);

  // настроить АЦП
  Wire.beginTransmission(I2C_ADC121);
  Wire.write(REG_ADDR_CONFIG);
  Wire.write(REG_ADDR_RESULT);
  Wire.endTransmission();

  // устанавливаем регистр результата по умолчанию
  Wire.beginTransmission(I2C_ADC121);
  Wire.write(REG_ADDR_RESULT);
  Wire.endTransmission();

и затем в коде я читаю значение с помощью этой функции

unsigned short adcRead() {
  Wire.requestFrom(I2C_ADC121, 2); // запрашиваем 2 байта
  byte buff[2];
  Wire.readBytes(buff, 2); // прочитать 2 байта
  return (buff[0] << 8) | buff[1]; // получаем результат в виде 16-битного числа
}
,