Различные серийные значения между Arduino Uno и TTGO ESP32 SX1276

Мне нужен аналог. Считайте значение с датчика газа MQ-135. Я устал от этого как с Arduino Uno, так и с TTGO ESP32 SX1276.

При считывании значения датчика с Uno я получаю значения, примерно равные 400, что и ожидалось, как показано в этом видео. . Делая то же самое с TTGO, я получаю значения, близкие к 2000. По какой-то причине этот человек получает аналогичный диапазон значений, как показано в этом видео.

Я не понимаю, чем отличаются эти значения, когда меняется только плата. Разные платы аналогово читают по-разному?

Более или менее, как мне заставить TTGO читать те же значения, что и Uno?

Ниже приведен мой код для обеих плат. Между досками ничего не меняется:

#define sensor 2 //контакт датчика

int gasLevel = 0; //int переменная для уровня газа

void setup() {
  Serial.begin(9600); //запускаем последовательную связь
  pinMode(sensor,INPUT); //устанавливаем датчик для ввода
}

void loop() {
  gasLevel = analogRead(sensor);
  Serial.println(gasLevel);
  delay(1000);
}

Следующие вещи, которые я проверил:

  • Несколько плат Arduino Uno и TTGO.
  • Различные контакты, как аналоговые, так и цифровые.

Я также подаю питание на датчик через контакт 3,3 В, поэтому напряжение, получаемое датчиком, не меняется.

, 👍1


1 ответ


Лучший ответ:

3

Различные платы аналогово читают по-разному?

Да.

Ваш типичный Arduino имеет 10-битный АЦП. Это может дать значения от 0 до 1023 (210-1), причем 400 — это чуть меньше половины пути.

ESP32 имеет 12-битный АЦП. Это дает значения от 0 до 4095 (212-1), что означает, что ваш 2000-й показатель падает, да, чуть меньше половины пути.

Важно не значение АЦП, а то, что представляет собой значение. Оно бессмысленно, пока вы не преобразуете его во что-то значимое, например в напряжение.

Как спросить: «Насколько он тяжелый?» -- «Это 23». Совершенно бессмысленно, пока вы не определите его единицами измерения, а единицы измерения разные из-за разного разрешения, поэтому вам нужно «конвертировать» его в единицы, имеющие смысл.

Обычно значение представляет собой долю напряжения питания (но не обязательно: на самом деле это часть опорного напряжения АЦП, которое часто совпадает с напряжением питания). На Arduino это значение составляет 1/1024 напряжения питания. На ESP32 это 1/4096.

,

Это имеет полный смысл. Спасибо за разъяснения., @Lachlan Etherton