Различные серийные значения между 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 ответ
Лучший ответ:
Различные платы аналогово читают по-разному?
Да.
Ваш типичный Arduino имеет 10-битный АЦП. Это может дать значения от 0 до 1023 (210-1), причем 400 — это чуть меньше половины пути.
ESP32 имеет 12-битный АЦП. Это дает значения от 0 до 4095 (212-1), что означает, что ваш 2000-й показатель падает, да, чуть меньше половины пути.
Важно не значение АЦП, а то, что представляет собой значение. Оно бессмысленно, пока вы не преобразуете его во что-то значимое, например в напряжение.
Как спросить: «Насколько он тяжелый?» -- «Это 23». Совершенно бессмысленно, пока вы не определите его единицами измерения, а единицы измерения разные из-за разного разрешения, поэтому вам нужно «конвертировать» его в единицы, имеющие смысл.
Обычно значение представляет собой долю напряжения питания (но не обязательно: на самом деле это часть опорного напряжения АЦП, которое часто совпадает с напряжением питания). На Arduino это значение составляет 1/1024 напряжения питания. На ESP32 это 1/4096.
- Почему чтение на ESP32 читает max, когда чтение на UNO читается точно?
- Скопируйте конфигурацию аналогового входа Uno в ESP32
- Отправка значения с одного Arduino на другой
- Arduino непрерывно считывает значение АЦП с помощью прерывания
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Аналоговое чтение не работает при использовании WiFi
- Чтение данных из Google Таблиц с помощью Nodemcu
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
Это имеет полный смысл. Спасибо за разъяснения., @Lachlan Etherton