Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

ESP32: Аналоговые входы

У платы ESP32 15 аналоговых входов с АЦП (12 бит): 2, 4, 12–15, 25–27, 32–36 и 39. Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит.

Для получения показаний достаточно вызвать функцию analogRead(GPIO), указав нужный пин.

При этом мы считываем уровень напряжения от 0В до 3.3В, которые распределяются от 0 до 4095.

Для примера подключим потенциометр к пину 34 и будем считывать показания через монитор порта.


// Соединим потенциометр к пину GPIO 34 (Analog ADC1_CH6)
const int potPin = 34;

// показания
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // считываем показания
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

Следует учитывать, что показания не являются строго линейными. Так напряжение от 3.2 до 3.3 всё равно будет выводить значение 4095, аналогично для напряжения от 0 до 0.1, которое будет равно 0.

При использовании WiFi для аналоговых входов используйте пины 32, 33, 34, 35, 36, 39. Остальные могут вызвать проблемы.

Другие функции

Существует свои нестандартные функции для работы с аналоговыми входами.

  • analogReadResolution(resolution) - устанавливает разрешение. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetWidth(width) - аналогичная функция. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetCycles(cycles) - set the number of cycles per sample. Default is 8. Range: 1 to 255
  • analogSetSamples(samples) - set the number of samples in the range. Default is 1 sample. It has an effect of increasing sensitivity
  • analogSetClockDiv(attenuation) - set the divider for the ADC clock. Default is 1. Range: 1 to 255
  • analogSetAttenuation(attenuation) - sets the input attenuation for all ADC pins. Default is ADC_11db. Accepted values:
    ADC_0db: sets no attenuation (1V input = ADC reading of 1088).
    ADC_2_5db: sets an attenuation of 1.34 (1V input = ADC reading of 2086).
    ADC_6db: sets an attenuation of 1.5 (1V input = ADC reading of 2975).
    ADC_11db: sets an attenuation of 3.6 (1V input = ADC reading of 3959).
  • analogSetPinAttenuation(pin, attenuation) - sets the input attenuation for the specified pin. The default is ADC_11db. Attenuation values are the same from previous function.
  • adcAttachPin(pin) - Attach a pin to ADC (also clears any other analog mode that could be on). Returns TRUE or FALSE result.
  • adcStart(pin), adcBusy(pin), resultadcEnd(pin) - starts an ADC convertion on attached pin’s bus. Check if conversion on the pin’s ADC bus is currently running (returns TRUE or FALSE). Get the result of the conversion: returns 16-bit integer.
Реклама