Урок 4 Начинающий 35 минут

Аналоговые входы и потенциометры

Научитесь считывать аналоговые сигналы с потенциометра и управлять параметрами в реальном времени.

1

Подготовка оборудования

Компоненты для урока

ESP32 DevKit

Любая версия (30/38 пинов)

🎛️

Потенциометр

10 кОм KY-016 (модуль)

💡

Светодиод

5мм Красный/Зелёный

⚙️

Резистор

220 Ом (защита LED)

2

Как работает потенциометр

Устройство потенциометра

Строение потенциометра

Потенциометр — это переменный резистор с тремя выводами. При вращении ручки подвижный контакт (wiper) перемещается по резистивной дорожке, изменяя сопротивление.

Pin 1

3.3V (VCC)

Pin 2

Сигнал (OUT)

Pin 3

GND

Аналого-цифровой преобразователь

📊

ESP32 ADC

ESP32 имеет 12-битный ADC, который преобразует аналоговое напряжение (0-3.3В) в цифровое значение от 0 до 4095.

Формула преобразования:

// Напряжение из ADC:
Voltage = (ADC_value / 4095) × 3.3

// Пример: ADC = 2048
Voltage = (2048 / 4095) × 3.3 ≈ 1.65В

! Важные нюансы ESP32

Пиные ADC1 (рекомендуются)

GPIO 34, 35, 36, 39 — только INPUT
GPIO 32, 33 — INPUT/OUTPUT

Эти пины не конфликтуют с WiFi

⚠️ Пиные ADC2 (избегать)

GPIO 0, 2, 4, 12, 13, 14, 15
Конфликт с WiFi/Bluetooth

Не работают при включенном WiFi

3

Схема подключения

Схема подключения потенциометра к ESP32 Альтернативная схема подключения
1

VCC Подключите 3.3V к левому пину потенциометра

2

GND Подключите GND к правому пину потенциометра

3

OUT Средний пин к GPIO 34 (ADC1_CH6)

4

LED GPIO 33 → резистор 220Ω → анод светодиода

3.1

Принцип работы ADC

Принцип работы аналого-цифрового преобразователя
📈

Аналоговый сигнал

Непрерывное напряжение от 0В до 3.3В в зависимости от положения ручки.

🔢

12-битное значение

ESP32 преобразует напряжение в число от 0 до 4095 (2^12 = 4096 уровней).

📊

Линейная зависимость

Прямая пропорциональность: половина напряжения = половина значения ADC.

Напряжение ADC Значение Проценты PWM (0-255)
0.0В 0 0% 0
0.825В 1024 25% 64
1.65В 2048 50% 128
2.475В 3072 75% 192
3.3В 4095 100% 255
4

Программирование

Настройка Arduino IDE

⚙️

Откройте Файл → Настройки

🔗

Добавьте ссылку на пакет в поле Additional Boards Manager URLs

📦

Установите esp32 через Менеджер плат

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Potentiometer_Simple.ino
01
02
03
04
05
06
07
08
09
10
11
12
const int potPin = 34; // Пин потенциометра
void setup() {
  Serial.begin(115200); // Монитор порта
  pinMode(potPin, INPUT); // Режим входа
}
void loop() {
  int potValue = analogRead(potPin); // Чтение ADC
  Serial.println(potValue); // Вывод значения
  delay(100); // Пауза 100мс
}

Монитор порта

Значения ADC в мониторе порта

График зависимости

График зависимости напряжения от значения ADC

Код в Arduino IDE

Код программы в Arduino IDE
4.1

Визуализация работы

🎛️

Положение ручки

Поворот на 50% = среднее положение потенциометра.

📊

Значение ADC

ESP32 считывает значение 2048 (половина от 4095).

💡

Яркость LED

PWM значение 128 = 50% яркость светодиода.

Интерактивный симулятор потенциометра

Поэкспериментируйте с виртуальным потенциометром: вращайте ручку и наблюдайте, как меняются напряжение и сопротивление в реальном времени.

5

Возможные проблемы

Значения ADC не меняются при вращении

Проверьте подключение: VCC к 3.3V, GND к земле, OUT к GPIO 34. Убедитесь, что провода надёжно вставлены в макетную плату.

Значения сильно скачут (шум)

Это нормальное явление для ADC. Добавьте усреднение: считайте 10 значений и вычисляйте среднее. Или увеличьте задержку между чтениями.

GPIO 34 не работает как OUTPUT

Пиные 34-39 поддерживают только режим INPUT. Это аппаратное ограничение ESP32. Используйте GPIO 32 или 33 для OUTPUT.

ADC не работает при включенном WiFi

Вы используете пины ADC2 (0, 2, 4, 12-15). Переподключитесь к пинам ADC1: 32, 33, 34, 35, 36, 37, 38, 39.

Значения на краях диапазона нелинейны

Это характеристика ESP32 ADC. На краях (0-100 и 3995-4095) возможна нелинейность. Для точных измерений используйте внешнюю микросхему ADC.

6

Цех Испытаний

Отточите мастерство работы с аналоговыми сигналами. Каждая задача — шаг к созданию интерактивных устройств.

Время прохождения
~100 минут суммарно
📊
Уровень: Start 10m

Вольтметр

Преобразование ADC в напряжение с точностью до сотых

Миссия

Считывайте значение потенциометра с GPIO 34 каждые 300мс и вычисляйте напряжение по формуле: voltage = (ADC / 4095.0) × 3.3. Выводите в монитор порта строго в формате 'Voltage: 1.65V' (2 знака). Проверка: в крайнем левом положении ручки — ~0.00V, в крайнем правом — ~3.30V.

01
🌟
Уровень: Easy 15m

Диммер для LED

Плавная регулировка яркости через PWM

Миссия

Потенциометр регулирует яркость светодиода от 0% до 100%. Используйте функцию map() для преобразования диапазона.

02
Уровень: Normal 20m

Пороговое значение

Реагирование на превышение порога

Миссия

LED загорается только когда потенциометр выше 50% (значение ADC > 2048). Выводите сообщение о превышении.

03
🌅
Уровень: Hard 25m

Плавное включение

Анимация плавного набора яркости

Миссия

Если потенциометр поднялся выше 50% (ADC > 2048) — светодиод плавно нарастает от 0 до 255 за ~2.5 секунды (255 шагов по 10мс). Если потенциометр опустился ниже 50% — светодиод плавно гаснет от 255 до 0 за ~2.5 секунды. Результат: никаких скачков яркости — только плавное изменение в обе стороны.

04
🚨
Уровень: Expert 30m

Сигнализация

Комплексная система с кнопкой и сиреной

Миссия

Подключите кнопку к GPIO 15. Если потенциометр > 80% (ADC > 3276) И кнопка нажата одновременно — LED воспроизводит SOS: 3 коротких вспышки по 200мс (пауза 200мс между ними), затем пауза 400мс, 3 длинных по 600мс, пауза 400мс, 3 коротких по 200мс, пауза 1200мс — и повтор. Если условие не выполнено — LED выключен.

05
🚀

Свой Проект

Создайте уникальное устройство с потенциометром в онлайн-симуляторе. Регулируйте громкость, яркость, скорость...

Открыть Симулятор →

Поздравляем! 🎉

Вы освоили работу с аналоговыми сигналами и потенциометрами! Теперь вы можете создавать устройства с плавной регулировкой параметров.