Introdução ao ESP32 ADC
A placa ESP32 possui dois ADCs de 12 bits integrados, também conhecidos como ADCs SAR (Successive Approximation Registers). Os ADCs da placa ESP32 suportam 18 canais de entrada analógica diferentes, o que significa que podemos conectar 18 sensores analógicos diferentes para receber entrada deles.
Mas este não é o caso aqui; esses canais analógicos são divididos em duas categorias canal 1 e canal 2, ambos esses canais possuem alguns pinos que nem sempre estão disponíveis para entrada ADC. Vamos ver o que são esses pinos ADC junto com outros.
Pinos ADC ESP32
Como mencionado anteriormente, a placa ESP32 possui 18 canais ADC. De 18, apenas 15 estão disponíveis na placa DEVKIT V1 DOIT, com um total de 30 GPIOs.
Olhe para sua placa e identifique os pinos do ADC conforme os destacamos na imagem abaixo:
Pinos ADC do Canal 1
A seguir está o mapeamento de pinos da placa ESP32 DEVKIT DOIT. O ADC1 no ESP32 possui 8 canais, porém a placa DOIT DEVKIT suporta apenas 6 canais. Mas garanto que ainda são mais do que suficientes.
ADC1 | PIN GPIO ESP32 |
---|---|
CH0 | 36 |
CH1 | NA na versão de 30 pinos ESP32 (Devkit DEv) |
CH2 | ESTE |
CH3 | 39 |
CH4 | 32 |
CH5 | 33 |
CH6 | 3. 4 |
CH7 | 35 |
A imagem a seguir mostra os canais ESP32 ADC1:
Pinos ADC do Canal 2
As placas DEVKIT DOIT possuem 10 canais analógicos em ADC2. Embora o ADC2 tenha 10 canais analógicos para ler dados analógicos, esses canais nem sempre estão disponíveis para uso. O ADC2 é compartilhado com drivers WiFi integrados, o que significa que no momento em que a placa estiver usando WIFI, esses ADC2 não estarão disponíveis. A solução para esse problema é usar o ADC2 somente quando o driver Wi-Fi estiver desligado.
A imagem abaixo mostra o mapeamento de pinos do canal ADC2.
Como usar o ESP32 ADC
O ESP32 ADC funciona de maneira semelhante ao Arduino, a única diferença aqui é que ele possui um ADC de 12 bits. Assim, a placa ESP32 mapeia os valores de tensão analógica variando de 0 a 4095 em valores digitais discretos.
- Se a tensão fornecida ao ESP32 ADC for zero um canal ADC o valor digital será zero.
- Se a tensão fornecida ao ADC for máxima significa 3,3V, o valor digital de saída será igual a 4095.
- Para medir uma tensão mais alta, podemos usar o método do divisor de tensão.
Observação: O ESP32 ADC é definido por padrão em 12 bits, mas é possível configurá-lo em 0 bits, 10 bits e 11 bits. O ADC padrão de 12 bits pode medir o valor 2^12=4096 e a tensão analógica varia de 0V a 3,3V.
Limitação ADC no ESP32
Aqui estão algumas limitações do ESP32 ADC:
- O ESP32 ADC não pode medir diretamente uma tensão superior a 3,3 V.
- Quando os drivers Wi-Fi estão ativados, o ADC2 não pode ser usado. Apenas 8 canais de ADC1 podem ser usados.
- O ESP32 ADC não é muito linear; isto mostra Não-linearidade comportamento e não pode distinguir entre 3,2 V e 3,3 V. No entanto, é possível calibrar o ESP32 ADC. Aqui é um artigo que o guiará para calibrar o comportamento de não linearidade do ESP32 ADC.
O comportamento de não linearidade do ESP32 pode ser visto no monitor serial do Arduino IDE.
Programa ESP32 ADC usando Arduino IDE
A melhor maneira de entender o funcionamento do ESP32 ADC é pegar um potenciômetro e ler os valores contra a resistência zero ao máximo. A seguir está a imagem do circuito do ESP32 com potenciômetro.
Conecte o pino do meio do potenciômetro com o pino digital 25 do ESP32 e 2 pinos terminais com pino 3.3V e GND respectivamente.
Hardware
A imagem a seguir exibe o hardware do ESP32 com potenciômetro. Segue a lista de componentes necessários:
- Placa ESP32 DEVKIT DOIT
- Potenciômetro
- Protoboard
- Fios de ligação
Código
Abra o Arduino IDE e faça o upload do código abaixo na placa ESP32. Para verificar como instalar e configurar o ESP32 com Arduino IDE clique aqui .
const int Pin_Potenciômetro = 25 ; /*Potenciômetro conectado no GPIO 25 (Analog ADC2_CH8)*/int Val_Potenciômetro = 0 ; /*O valor lido do potenciômetro será armazenado aqui*/
vazio configurar ( ) {
Serial. começar ( 115200 ) ; /*A comunicação serial começa*/
}
vazio ciclo ( ) {
Val_Potenciômetro = analogRead ( Pin_Potenciômetro ) ; /*Lendo o valor do potenciômetro*/
Serial. imprimir ( Val_Potenciômetro ) ; /* Imprime o valor do potenciômetro */
atraso ( 2000 ) ; /*atraso de 2 segundos*/
}
Aqui no código acima, inicializamos o pino digital 25 para potenciômetro na placa ESP32. Ao lado da entrada uma variável Val_Potentiometer é inicializada. A próxima comunicação serial é iniciada definindo a taxa de transmissão.
No ciclo parte do código usando a função analogRead() valores ADC serão lidos no pino 25 do ESP32. Em seguida, usando Serial.print() todos os valores são impressos no monitor serial.
Resultado
A saída exibe valores analógicos mapeados em relação a valores digitais discretos. Quando a tensão de leitura é máxima que é 3,3V a saída digital é igual a 4095 e quando a tensão de leitura é 0V a saída digital se torna 0.
Conclusão
Conversores analógicos para digitais são usados em todos os lugares, especialmente quando temos que fazer a interface de placas de microcontroladores com sensores analógicos e hardware. O ESP32 possui dois canais para ADC que são ADC1 e ADC2. Esses dois canais se combinam para fornecer 18 pinos para interface de sensores analógicos. No entanto, 3 deles não estão disponíveis na versão ESP32 de 30 pinos. Para saber mais sobre a leitura de valores analógicos, leia o artigo.