Explorando as Saídas Analógicas - ESP32
- automatelabonline
- 1 de mar.
- 3 min de leitura
É muito comum encontrarmos em microcontroladores saídas PWM. Esse tipo de saída chaveia entre nível alto e baixo com uma frequência alta, de modo que o pino possa atuar como uma saída analógica em alguns casos, como LEDs por exemplo.
Porém, no ESP32, há a presença de dois pinos DAC (conversor digital para analógico). Esses pinos conseguem gerar saídas verdadeiramente analógicas. Esses pinos são as GPIO25 (DAC1) e GPIO26 (DAC2).

Os pinos analógicos do ESP32 apresentam 8 bits de resolução, ou seja, conseguem gerar 2⁸ = 256 tensões diferentes, compreendidas entre 0V e 3,3V. Isso significa que o microcontrolador consegue escrever tensões com um intervalo mínimo de:

Funções para as Saídas Analógicas do ESP32
A principal função para o uso das saídas analógicas é:
dacWrite(PINO, VALOR);
Onde PINO é a GPIO de escrita, podendo ser a 25 ou a 26, e VALOR um inteiro entre 0 e 255 que representa a tensão desejada para o pino. Dada essa tensão desejada (Vd ), o valor passado na função (vamos chamá-lo de D ) deve seguir a fórmula abaixo.

Por exemplo, caso a tensão desejada na GPIO25 seja 1V. Faz-se:

O resultado deve ser sempre arrendado para o inteiro mais próximo. Então, a função para aplicar 1V esse pino é:
dacWrite(25, 77);
Projeto - Controle do Brilho de um LED
Já vimos sobre o controle do brilho de um LED utilizando os pinos PWM. Porém com os pinos DAC, é possível fazer isso com um sinal verdadeiramente analógico. Para isso, vamos utilizar o circuito abaixo. Um potenciômetro é lido e controla o brilho do LED. O LED é conectado ao pino 25 e o potenciômetro ao pino 4.

O código para o projeto está abaixo.
#define PIN_LED 25 // define o pino do LED
#define PIN_POTENTIOMETER 4 // define o pino do potenciômetro
void setup() {
}
void loop() {
int ledIntensity = map(analogRead(PIN_POTENTIOMETER), 0, 4095, 0, 255);
dacWrite(PIN_LED, ledIntensity); // manda o sinal para o LED
delay(10);
}
Entendendo o Código
Primeiramente, os pinos de leitura do potenciômetro e escrita do LED são definidos.
#define PIN_LED 25 // define o pino do LED
#define PIN_POTENTIOMETER 4 // define o pino do potenciômetro
Na função loop(), o pino do potenciômetro é lido utilizando a função analogRead(). Essa leitura serve de entrada para uma outra função, map(). Essa função passa o valor de um range para outro. Nesse caso, a leitura do pino analógico é de 12 bits, então o valor retornado estará entre 0 e 4095. Porém, o valor da escrita da saída analógica é de apenas 8 bits, então vai entre 0 e 255.
A função map() ajusta o valor para esse novo range. Por exemplo, caso o valor lido tenha sido 2047 (metade entre 0 e 4095), a saída da função seria 127 (metade entre 0 e 255). A função map() segue o seguinte formato:
map(VALOR, IN_MIN, IN_MAX, OUT_MIN, OUT_MAX);
Onde VALOR representa a entrada que será transformada, IN_MIN e IN_MAX os intervalos da entrada e OUT_MIN e OUT_MAX os intervalos da saída. Portanto, para mapear entre a leitura do potenciômetro (IN) e a escrita da saída analógica (OUT), é utilizado:
int ledIntensity = map(analogRead(PIN_POTENTIOMETER), 0, 4095, 0, 255);
Essa valor é passado como parâmetro para a função dacWrite(), que envia o sinal ao LED.
dacWrite(PIN_LED, ledIntensity); // manda o sinal para o LED
Conclusões
Em conclusão, as saídas analógicas (DAC) do ESP32 oferecem uma excelente opção para a geração de sinais analógicos de forma precisa e eficiente, expandindo as possibilidades de aplicação do microcontrolador em projetos que exigem controle de sinais contínuos.
A capacidade do ESP32 de gerar sinais com alta resolução e a flexibilidade de seus pinos DAC tornam-no uma escolha atraente para sistemas que demandam áudio, controle de volume, modulação de sinais ou interfaces analógicas. Sua integração com outras funcionalidades avançadas, como Wi-Fi e Bluetooth, reforça o potencial do ESP32 em projetos de automação, áudio e Internet das Coisas (IoT). Ao compreender e utilizar as saídas DAC do ESP32, os desenvolvedores podem criar soluções inovadoras que combinam desempenho, eficiência e acessibilidade em diversas áreas da tecnologia.
Comments