segunda-feira, 1 de julho de 2019

ESP32 - Entradas Analógicas



A leitura e conversão de sinais analógicos é semelhante a arquitetura Arduino.

A base é a função analogRead() - Arduino.cc - analogRead()

Resolução - Arduino.cc - analogReadResolution()


Tutoriais para leitura de sinais analógicos


Random Nerd Tutorials - ESP32 ADC – Read Analog Values with Arduino IDE

Espressif - Analog to Digital Converter

GitHub- ESP32-ADC-Accuracy-Improvement-function/ESP32_Read_Voltage_Simple.ino

Embarcados - ESP32 – Analisando e corrigindo o ADC interno

Fernando K - Você não sabia? Ajuste de ADC do ESP32

Portal Vida de Silicio - LENDO SENSORES ANALÓGICOS EM DEEP SLEEP COM ULP - ESP32

YouTube - Crescer Indústria de Automação - Entrada Analógica do ESP32 |Como filtrar e linearizar

Fóruns com informações sobre erros em leituras analógicas


GitHub - espressif / arduino-esp32 - Inconsistent values when using "analogRead()" #92

GitHub - espressif / arduino-esp32 - the analogRead seems doesn't work #683

Expressif - ESP32 ADC Non-linear Issues - How do I fix / change Attenuation or width?



Exemplo com LM35 

  









/* arquivo: esp32AnalogReadLm35
   Plataforma: ESP 32
   Leitura de entradas analógicas

   GPIO 34 (Analog ADC1_CH6)

   LM35DZ - 10mV/ºC

   Média com leituras

   Luiz Oscar Ruschel Pilger - Atualição: 25/06/2020
*/
// Constantes
const int sensorPino = 34;
const int leituras = 50;
// Variáveis
long sensorValor;
float temperatura;

void setup() {
  Serial.begin(115200);
  // configurações do A/D
  analogReadResolution ( 12 ); // resolução de 12 bits
  //analogSetAttenuation (ADC_0db);  // Para todos os pinos
  // Atenuação: ADC_0db, ADC_2_5db, ADC_6db, ADC_11db
  // 0dB: 100 - 950mV # 2.5dB: 100 - 1250mV # 6dB: 150 - 1750mV # 11dB: 150 - 2450mV
  analogSetPinAttenuation (sensorPino, ADC_6db); // Atenuação de 6db no pino sensorPino
  //analogSetCycles(16); // define o número de ciclos por amostra. O padrão é 8. Intervalo: 1 a 255.
  //analogSetSamples(1); // define o número de amostras no intervalo. O padrão é 1 amostra. Tem um efeito de aumentar a sensibilidade
}

void loop() {
  // Leitura do sensor
  sensorValor = 0;  // zera as leituras
  for (int i = 0; i < leituras; i++) {
    sensorValor = sensorValor + analogRead(sensorPino); // acumula as leituras
    delay(1); // tempo para o conversor
  }
  sensorValor = sensorValor / leituras; // calcula a média
  Serial.print(sensorValor);  // imprime a media da conversão
  float millivolts = ((float)sensorValor / 4095) * 3300; // Calcula o valor obtido do conversor para mV
  Serial.print(" -> ");
  Serial.print(millivolts); // imprime o valor em mV
  float temperatura = millivolts / 10;  // calucla a temperatura
  Serial.print("mV -> Temperatura = ");
  Serial.print(temperatura);  // imprime a temperatura
  Serial.println("ºC");
  delay(1000);  // tempo entre cada medida
}





Nenhum comentário:

Postar um comentário