ADC (Analog to Digital Converter)

Untitled

El rango de voltaje análogo en la ESP32 es de 0 - 3.3V. Existen 18 pines de ADC. Tiene una resolución de 12 bits de 0 - 4095 Se tiene el ADC1 y el ADC2

El ADC2 tiene restricciones a tener en cuenta

El ADC2 solo se puede utilizar cuando el controlador WiFi no se ha iniciado [PROBAR]

Untitled

Código de Ejemplo

//Código para la lectura de un portenciómetro en un ADC
#define pot 36 //ADC1 CHANEL 0
int valorpot = 0;

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

void loop() {
  valorpot = analogRead(pot); //Lectura del potenciómetro
  Serial.println(valorpot);   //Se muestran valores de 0 - 4095
  delay(500);
}

Código para mostrar el voltaje del ADC

#define pot 36 //ADC1 CHANEL 0
int valorpot = 0;
double voltaje = 0;
void setup() {
  Serial.begin(115200);
  delay(1000);
  
}

void loop() {
  valorpot = analogRead(pot);      //Lectura del potenciómetro
  voltaje = (valorpot * 3.3)/4095; //Convierte el valor del ADC en voltaje
  Serial.println(valorpot);        //Se muestran valores de 0 - 4095
  Serial.println(voltaje);         //Se muestran valores de 0 - 3.3V
  Serial.println(" ");
  delay(500);
}

Código Encender Led de usuario después de 1.5V

#define pot 36                      //ADC1 CHANEL 0
#define led_user 2                  //Led de usuario y pin 2

int valorpot = 0;
double voltaje = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
  pinMode(led_user,OUTPUT);         //Configurar el pin 2 como salida
  
}

void loop() {
  valorpot = analogRead(pot);       //Lectura del potenciómetro
  voltaje = (valorpot * 3.3)/4095;  //Convierte el valor del ADC en voltaje

  if(voltaje>=1.65){
    digitalWrite(led_user,HIGH);    //Se enciende el LED
  }else if(voltaje<1.65){
    digitalWrite(led_user,LOW);     //Se apaga el LED
  }

  Serial.println(valorpot);         //Se muestran valores de 0 - 4095
  Serial.println(voltaje);          //Se muestran valores de 0 - 3.3V
  Serial.println(" ");
  delay(500);
}

DAC (Digital to Analog Converter)

El DAC permite el control la intensidad luminosa, la velocidad de los motores o incluso reproducción de sonido, también puede ser un potenciómetro digital. La ESP32 cuenta con un DAC de dos canales diferentes ubicados en GPIO21 (Canal 1) y GPIO26 (Canal 2).

Tiene una resolución de 8 bits.

Untitled

Se usa la función dacWrite(canal_pin, voltaje) —> El voltaje será proporcional a los números de 0 a 255.

Se puede crear una señal sinusoidal usando los canales del DAC, con una función sine, con una librería de Arduino para ESP32 o con tabla de valores.

Código encender DAC canal 1 en un valor fijo

#include <Arduino.h>

#define DAC_CH1 25
#define DAC_CH2 26

double VoltajeDac = 0;

int valorcito = 69;
void setup() {
  Serial.begin(115200);
  
}

void loop() {
  dacWrite(DAC_CH1, valorcito);         // Se escribe el valor de 0 - 255
  Serial.println(valorcito);
  VoltajeDac = valorcito * 3.20 / 255;  //Se convierte ese valor en voltaje
  Serial.println(VoltajeDac);
  delay(3000);
}