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()
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
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
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?
/* 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
}
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
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