Аналоговые сигналы и АЦП
Мир аналоговый: свет, температура, влажность меняются плавно. Чтобы микроконтроллер их понял, нужен АЦП.
АЦП превращает непрерывное напряжение в число. Без него ESP32 видел бы только «включено/выключено», а не «насколько ярко» или «насколько тепло».
Цифровой вывод знает лишь два состояния. Но датчик света, температуры или влажности выдаёт аналоговый сигнал — напряжение, плавно меняющееся в диапазоне. Чтобы программа могла с ним работать, его нужно превратить в число. Этим занимается АЦП — аналого-цифровой преобразователь (по-английски ADC). Он измеряет входное напряжение и выдаёт целое значение.
Ключевой параметр — разрядность. У ESP32 АЦП обычно 12-битный: он делит весь диапазон напряжения на 2 в степени 12 = 4096 ступенек, от 0 до 4095. Значение 0 соответствует 0 В, 4095 — опорному напряжению (около 3,3 В). Зная это, мы переводим «сырое» число обратно в напряжение, а потом — в физическую величину.
Как это работает под капотом
датчик (0..3.3 В) ---> [ АЦП 12 бит ] ---> число 0..4095
|
напряжение = код / 4095 * 3.3
Типичный аналоговый датчик света — фоторезистор в делителе напряжения. Чем ярче свет, тем меньше его сопротивление и тем другое напряжение приходит на вход АЦП. Программа читает код, переводит его в напряжение и принимает решение — например, включить лампу в темноте. Посчитаем это преобразование.
# Преобразование показаний АЦП ESP32 в напряжение и яркость
V_REF = 3.3 # опорное напряжение, В
MAX_CODE = 4095 # 12-битный АЦП: 0..4095
def adc_to_voltage(code):
return code / MAX_CODE * V_REF
# Несколько показаний с датчика света
for raw in [0, 1024, 2048, 3072, 4095]:
v = adc_to_voltage(raw)
# грубо переведём напряжение в условную яркость 0..100%
brightness = v / V_REF * 100
print(f"код {raw:>4} -> {v:.2f} В -> яркость {brightness:.0f}%")
# Правило: включаем лампу, если темно (напряжение ниже порога)
THRESHOLD_V = 1.0
test_code = 800
v = adc_to_voltage(test_code)
print(f"\nПри коде {test_code}: {v:.2f} В")
print("Лампа: ВКЛ" if v < THRESHOLD_V else "Лампа: ВЫКЛ")
Запусти «Посчитай сам ▶». Ты видишь, как сырой код 0–4095 превращается в напряжение, а затем в осмысленное решение. Это сердце любого датчика в IoT.
Важно помнить про калибровку и нелинейность: АЦП ESP32 не идеально точен, особенно у краёв диапазона. Для серьёзных измерений показания усредняют по нескольким выборкам и при необходимости калибруют по эталону.
Частые ошибки
- Подавать на АЦП больше опорного напряжения. Свыше ~3,3 В вход «упирается» в 4095 и можно повредить вход.
- Доверять одному измерению. Шум искажает результат; усредняй несколько выборок.
- Забыть про нелинейность. У краёв диапазона АЦП ESP32 врёт сильнее.
Best practices
- Усредняй 8–16 выборок для стабильного значения.
- Держи сигнал в комфортной середине диапазона, используя делитель.
- Калибруй датчик по известной точке (например, известная освещённость или температура).
Где это встречается
АЦП — это орган чувств любого умного устройства. Микрофон, датчик газа, измеритель влажности почвы, фоторезистор, аналоговый джойстик — все они выдают напряжение, которое читает АЦП. Без него микроконтроллер был бы глух и слеп к плавным величинам окружающего мира и понимал бы только грубые «да/нет».
Обратная задача — превратить число в напряжение — решает ЦАП (цифро-аналоговый преобразователь). Он есть не у всех контроллеров, но у ESP32 присутствует и позволяет, например, синтезировать звук или плавно управлять аналоговыми устройствами. Вместе АЦП и ЦАП образуют мост между цифровым миром программ и аналоговым миром физики. И качество этого моста — разрядность, точность, скорость — напрямую определяет, насколько «честно» устройство воспринимает реальность.
Запомни главное
- АЦП превращает аналоговое напряжение в число (0–4095 у 12-битного ESP32).
- Код переводят в напряжение, а затем в физическую величину.
- Усредняй несколько выборок и держи сигнал в середине диапазона.
- Калибруй датчик по известной точке для точных измерений.
Итог: АЦП превращает аналоговое напряжение в число (0–4095 у 12-битного ESP32), которое мы переводим в напряжение и физическую величину. Это позволяет читать свет, тепло и влажность. Теперь у устройства есть мозг и органы чувств — пора дать ему голос: подключим его к сети.