Ручка, положение которой контроллер читает числом. Внутри — делитель напряжения с подвижной средней точкой.
Как работает
Потенциометр — резистивная дорожка с ползунком. Крайние выводы подключают к питанию и земле, средний (SIG) — к аналоговому входу: он выдаёт напряжение от 0 до питания в зависимости от положения ручки.
analogRead() возвращает 0–4095 на ESP32 и 0–1023 на Arduino. Чтобы получить вольты — умножьте на опорное напряжение и разделите на максимум (не забудьте, что 5 / 1023 в целых числах — ноль: пишите 5.0).
// D34 — вход только на чтение, у него нет выходного драйвера.
// Для АЦП это скорее плюс: вывод нельзя случайно замкнуть выходом.
const int POT = 34;
void setup() {
Serial.begin(115200);
}
void loop() {
int raw = analogRead(POT); // 0…4095
float volts = raw * 3.3 / 4095.0;
Serial.printf("сырое %4d %.2f В\n", raw, volts);
delay(200);
}
// Напряжение с переменного резистора — в монитор порта.
//
// analogRead на Uno возвращает 0–1023: десять разрядов. На ESP32 их
// двенадцать и предел 4095 — код, перенесённый оттуда без правки,
// покажет вчетверо меньше и не пожалуется.
//
// Печать в формате «имя:число» подхватывает вкладка «График»: ряд
// строится сам, править ничего не надо.
const int POT = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int raw = analogRead(POT);
float volts = raw * 5.0 / 1023.0;
Serial.print("raw:");
Serial.print(raw);
Serial.print(" volts:");
Serial.println(volts, 2);
delay(100);
}
В железе
На ESP32 края потенциометра — на 3,3 В, не на 5 В: иначе на вход попадёт больше допустимого. АЦП ESP32 нелинеен у краёв: около 0–0,1 В и выше 3,1 В показания «залипают».
Частые ошибки
Крайний вывод на 5 В при ESP32 — на входе больше 3,3 В.
Средний вывод перепутан с крайним — показания меняются только на части хода или не меняются вовсе.
Числа «дрожат» на ±2–10 — это нормально для АЦП. Усредняйте несколько измерений.
На ESP32 с Wi-Fi — вход из группы АЦП2. Берите GPIO32–39.