Resistencias en Arduino, ESP8266 y ESP32: Divisores de Tensión, LDR y Termistores

En este tutorial aprenderás cómo funcionan las fotorresistencias, los potenciómetros o los termistores, cómo conectarlos a diferentes microcontroladores y leer sus valores analógicos

En este artículo cubrimos diferentes tipos de resistencias como:

  • Fotoresistencias (miden la intensidad de la luz)
  • Potenciómetro (divisor de tensión)
  • Termistores (miden la temperatura)

También profundizaremos en la funcionalidad del divisor de tensión que nos da una comprensión básica de cómo funcionan estos diferentes tipos de resistencias.

¿Qué es un divisor de voltaje?

El propósito de un divisor de voltaje es cambiar el voltaje de salida con la combinación de 2 resistencias.

Un ejemplo del uso de un divisor de voltaje es un resistor dependiente de la luz, consulte el segundo capítulo de este artículo. Otro ejemplo es un potenciómetro para controlar la velocidad de un motor, por ejemplo. El siguiente ejemplo reduce el voltaje de entrada de 5 V a un voltaje de salida de 3.3 V y usa un divisor de voltaje para esta tarea.

Divisor de voltaje
Explicación del divisor de voltaje

La ecuación para calcular el voltaje de salida de un divisor de voltaje viene dada por: U2 = U * (R2 / (R1 + R2)). Si el objetivo es reducir el voltaje de U = 5V a U2 = 3.3V, son posibles varias soluciones:

  • R1 = 1kΩ y R2 = 2kΩ
  • R1 = 5kΩ y R2 = 10kΩ.

Entonces, ¿cómo eliges la combinación correcta? La solución es que la potencia para reducir el voltaje y por lo tanto el calor correspondiente no sea el mismo. La potencia se define como P = U ^ 2 / (R1 + R2). Por lo tanto, la combinación de resistencias de 5 kΩ y 10 kΩ produce menos calor y es la opción preferible.

Tenga en cuenta que no debe usar un divisor de voltaje para reducir el voltaje de suministro de un dispositivo o carga, ya que debe recordar que un dispositivo externo conducirá un circuito paralelo con R2. El siguiente ejemplo muestra las diferencias en la decisión de elegir resistencias para el divisor de voltaje.

Resistencia

Parámetro / Ecuación Divisor de Alta Resistencia Divisor de Baja Resistencia Carga Externa Conectada (RL = 66 Ω)
Resistencia Superior (R1) 5.000 Ω (5 kΩ) 50 Ω Limita la corriente total del divisor desde VCC
Resistencia Inferior (R2) 10.000 Ω (10 kΩ) 100 Ω Punto sobre el cual se toma la tensión analógica de salida
Tensión de Entrada (Vin) 5,00 V 5,00 V Alimentación lógica de referencia
Tensión de Salida en Vacío (Vout) 3,33 V 3,33 V Vout = Vin × [R2 / (R1 + R2)]
Resistencia Paralelo con Carga (R2 || RL) 65,57 Ω 39,76 Ω Colapso de resistencia por impedancia de entrada baja
Tensión con Carga (Vout, real) 0,07 V (caída del 98%) 2,22 V (caída del 33%) Sensibilidad crítica a la impedancia del sensor o instrumento
Potencia Total Disipada (P) 4,94 mW (frío) 278,5 mW (sobrecalentamiento > 1/4 W) Compromiso entre estabilidad de medida y consumo térmico

En el ejemplo, puede reducir el voltaje de 5V a 2.22V con la combinación de R1 = 50Ω y R2 = 100Ω, pero su potencia de salida con 278.52mW probablemente quemará las resistencias.

La siguiente tabla técnica resume los seis esquemas de conexionado de resistencias más habituales en proyectos con microcontroladores (Arduino Uno/Nano, ESP8266 y ESP32), indicando sus valores nominales estándar, tensiones y funciones de protección:

Configuración de Resistencia Valor Típico Recomendado Conexión en Arduino Uno/Nano (5V) Conexión en ESP8266 / ESP32 (3,3V) Función Eléctrica Principal
Pull-Up Externa para Pulsador 10 kΩ (1/4 W) Pin digital a 5 V Pin digital a 3,3 V (nunca 5 V) Fija estado lógico ALTO en reposo; evita entradas flotantes y ruido.
Pull-Down Externa para Pulsador 10 kΩ (1/4 W) Pin digital a GND Pin digital a GND Mantiene estado lógico BAJO en reposo; conmuta a ALTO al pulsar.
Limitadora de Corriente para LED 220 Ω a 330 Ω (5 V) / 150 Ω (3,3 V) En serie con ánodo del LED (D2-D13) En serie con ánodo del LED (GPIO) Limita la corriente a 10-15 mA; previene la destrucción del pin GPIO.
Divisor para Sensores (LDR / Termistor) 10 kΩ (divisor de tensión) En serie con LDR/NTC a pin A0 (0-5 V) En serie con sensor a pin ADC (0-3,3 V) Convierte la variación de resistencia en tensión lineal para el convertidor ADC.
Adaptador de Nivel Lógico (5V a 3,3V) R1 = 1 kΩ, R2 = 2 kΩ TX (5 V) conectado a R1 RX (3,3 V) conectado a unión central Atenúa de forma segura señales de 5 V para entradas no tolerantes de 3,3 V.
Pull-Up para Bus I2C (SDA / SCL) 4,7 kΩ (o 2,2 kΩ a 10 kΩ) Líneas A4/A5 a 5 V Líneas SDA/SCL a 3,3 V Asegura tiempos de subida rápidos en salidas open-drain del bus serie.
Precauciones Eléctricas: Sobrecarga en Pines GPIO, Disipación Térmica y Tensión Máxima en ADC
  • Límite de corriente continua por pin GPIO (20 mA máx.): El microcontrolador ATmega328P de Arduino Uno tolera un máximo recomendado de 20 mA continuos por pin (máximo absoluto 40 mA), mientras que el ESP32 y ESP8266 admiten solamente 12 mA. Conectar un LED directamente sin resistencia limitadora o utilizar valores inferiores a 100 Ω provocará sobrecorriente destructiva en el transistor de salida del GPIO.
  • Tensión máxima en entradas analógicas (ADC) de 3,3 V: Jamás conectes un divisor de tensión alimentado a 5 V directamente a los pines ADC de un ESP32 o ESP8266 sin atenuación previa. Los canales ADC del ESP32 solo admiten de 0 a 3,3 V, y en chips ESP8266 desnudos el límite del ADC interno es de tan solo 1,0 V. Superar este umbral perfora la unión de silicio del convertidor analógico-digital.
  • Potencia disipada en resistencias estándar (P = V2 / R): Las resistencias habituales de kit de protoboard son de 1/4 W (250 mW) o 1/8 W (125 mW). Si diseñas un divisor de tensión de baja impedancia (ej. 50 Ω en serie bajo 5 V), la potencia disipada superará los 278 mW, provocando calentamiento severo, variación térmica del valor resistivo y peligro de quemadura en la protoboard.

Cómo usar un fotoresistor con Arduino, ESP8266 y ESP32

El fotorresistor, a menudo denominado resistor dependiente de la luz (LDR) o sensor de luz, es un resistor que
cambia su resistencia en función de la luz incidente.

Explicación de fotorresistencia
Explicación de fotorresistencia

El fotorresistor contiene electrones que están unidos a átomos en la banda de valencia. Si la luz incide sobre el fotorresistor, los electrones en la banda de valencia, llamados electrones de valencia, absorben la energía de la luz y rompen el enlace con los electrones. Los electrones que rompen el enlace se denominan electrones libres y saltarán en la banda de conducción. En la banda de conducción, los electrones, que no están unidos a ningún átomo, pueden moverse libremente de un lugar a otro.
Por otro lado, los átomos que antes tenían más electrones ahora se llaman agujeros. Por lo tanto, los electrones libres y los huecos se crean en pares y transportan corriente eléctrica. Esta corriente eléctrica disminuye la resistencia del fotorresistor.
A medida que aumenta la energía de la luz, se crean más electrones libres y huecos y, como resultado, la resistencia disminuye aún más. En resumen: la resistencia LDR disminuye al aumentar la luz incidente.

Para medir la luz incidente se utiliza un divisor de voltaje con una resistencia de 4,7 kΩ.
Con el convertidor de analógico a digital (ADC), el Arduino convierte el voltaje de referencia del divisor de voltaje en un valor digital. En el siguiente ejemplo, queremos leer la luz incidente de un sensor de luz e imprimir los valores analógicos y digitales.

Cableado entre fotoresistor y microcontrolador

Las siguientes imágenes muestran el cableado entre la fotorresistencia, la resistencia y diferentes placas de microcontroladores Arduino, ESP8266 y ESP32.

Ves que el sensor de luz no es más que una resistencia. Por lo tanto, no tiene que preocuparse por los sitios de inicio de sesión. No existe una forma incorrecta de conectar el sensor de luz.

Arduino Nano

Cableado del fotorresistor Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Cableado del mini fotorresistor Arduino Pro

Arduino Uno

Cableado de la fotorresistencia Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Cableado Arduino Mega Fotorresistor

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Cableado del fotorresistor ESP32 NodeMCU

ESP8266 NodeMCU

Cableado del fotorresistor NodeMCU ESP8266

ESP8266 WeMos D1 Mini

Cableado del mini fotorresistor de ESP8266 WeMos D1

Código para leer la intensidad de la luz analógica

// Lectura de sensor fotorresistor (LDR) con divisor de tensión
#define PIN_LDR A0 // Pin analógico para Arduino Uno/Nano (en ESP32 usar ej. GPIO 34)

void setup() {
  Serial.begin(115200); // Velocidad en baudios estandarizada a 115200 bps
}

void loop() {
  // Lectura del valor bruto del convertidor analógico (0 - 1023 en ADC de 10 bits)
  int valorAnalogico = analogRead(PIN_LDR);
  
  // Conversión a tensión de salida en voltios (para VCC = 5,0 V)
  float tensionV = valorAnalogico * (5.0 / 1023.0);
  
  Serial.print("Valor ADC (0-1023): ");
  Serial.print(valorAnalogico);
  Serial.print(" | Tension: ");
  Serial.print(tensionV, 2);
  Serial.println(" V");
  
  delay(500); // Muestreo cada 500 ms
}

El script de Arduino para leer la intensidad de la luz analógica con una fotorresistencia comienza con la definición del pin analógico conectado. Dado que el script está escrito para microcontroladores Arduino, ESP8266 y ESP32, solo necesita una de las tres primeras líneas, dependiendo del microcontrolador que esté utilizando.

En la función de configuración, establecemos la velocidad en baudios en 9600, que debe coincidir con la velocidad en baudios del plotter en serie en el IDE de Arduino, donde queremos visualizar el valor analógico que representa la intensidad de la luz.

Las funciones de lazo comienzan leyendo el voltaje de la salida del divisor de voltaje con la función analogRead y guardan este valor en la variable analog_value. En el siguiente paso, mapeo el valor analógico que puede estar entre 0 y 1023 a un rango de valores entre 0 y 100. Estoy usando el rango de valor máximo como 1000 porque quiero que los valores analógicos superiores a 1000 mapeado a 100.

Después del mapeo de la entrada analógica, imprimimos el valor mapeado en el trazador en serie y después de un breve retraso de 10 ms, la función de bucle comienza de nuevo.

El siguiente video muestra cómo cambia el valor analógico en el trazador serial Arduino IDE, dependiendo de la intensidad de la luz simulada con una linterna.

Cómo usar un potenciómetro con Arduino, ESP8266 y ESP32

Un potenciómetro es un divisor de voltaje ajustable y por lo tanto tiene 3 pines de conexión. Un potenciómetro consta de un soporte eléctricamente no conductor al que se aplica un material de resistencia, dos terminales en el dos extremos del elemento resistivo y un contacto deslizante móvil (también llamado triturador), que puede dividir la resistencia total fija eléctricamente. mecánicamente en dos resistencias parciales correspondientes a esta resistencia total.

Potenciómetro

Cableado entre potenciómetro y microcontrolador

La siguiente imagen muestra el cableado entre el potenciómetro y varias placas de microcontroladores Arduino, ESP8266 o ESP32. La salida del divisor de voltaje está conectada a la salida analógica del microcontrolador.

Arduino Nano

Cableado del potenciómetro Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Mini potenciómetro de cableado Arduino Pro

Arduino Uno

Cableado del potenciómetro Arduino Uno

Para obtener más información sobre Arduino Uno, visite el Tutorial de Arduino Uno.

Arduino Mega

Cableado del megapotenciómetro Arduino

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Potenciómetro de cableado ESP32 ESP-WROOM-32

ESP8266 NodeMCU

Potenciómetro de cableado ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

Potenciómetro cableado ESP8266 WeMos D1 Mini

Ver el voltaje de salida del potenciómetro

La siguiente imagen muestra cómo se calcula el voltaje de salida del divisor de voltaje. Dependiendo de la posición del contacto deslizante, la tensión de salida U2 cambia. Medí el voltaje de salida en un ejemplo con mi osciloscopio usando R1 = 5kΩ y R2 = 10kΩ. La imagen del osciloscopio muestra claramente cómo cambié la posición del molinillo.

Osciloscopio potenciómetro

Dado que solo unos pocos lectores tendrán un osciloscopio, también puede usar el código de programa de la resistencia del potenciómetro para medir el voltaje de salida del potenciómetro y ver el voltaje en el trazador de serie Arduino IDE.

Mide la resistencia de un potenciómetro con un multímetro.

Si en lugar de tres pines, solo se utilizan dos pines, el potenciómetro actúa como una resistencia variable. En la siguiente imagen ves la conexión entre el potenciómetro y el multímetro. El siguiente video muestra las resistencias medidas por el multímetro en diferentes posiciones del contacto deslizante.

Montaje de potenciómetro y divisor de tensión en protoboard

Cómo usar un termistor con Arduino, ESP8266 y ESP32

Un termistor es una resistencia que cambia la resistencia con la temperatura. Los termistores se clasifican en dos grupos según el comportamiento debido a los cambios de temperatura:

  • Termistores de coeficiente de temperatura negativo (NTC): la resistencia disminuye al aumentar la temperatura.
  • Termistores de coeficiente de temperatura positivo (PTC): la resistencia aumenta con el aumento de temperatura.

Los termistores NTC son los más comunes y utilizados en este artículo.

Cableado entre el termistor NTC y el microcontrolador

La siguiente imagen muestra el cableado entre el termistor NTC y diferentes microcontroladores Arduino, ESP8266 y ESP32. El cableado de un termistor PTC sería el mismo.

Arduino Nano

Cableado del termistor Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Cableado del termistor Arduino Pro Mini

Arduino Uno

Cableado del termistor Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Cableado del mega termistor Arduino

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Cableado del termistor ESP32 ESP-WROOM-32

ESP8266 NodeMCU

Cableado del termistor NodeMCU ESP8266

ESP8266 WeMos D1 Mini

Cableado Termistor ESP8266 WeMos D1 Mini

El circuito es nuevamente un divisor de voltaje, lo que nos permite medir la caída de voltaje a través del termistor. Debido a que la resistencia está conectada directamente a tierra, tenemos una resistencia pull-up. Esto es importante para calcular la resistencia del termistor. Si no conoce la diferencia entre una resistencia pull-down y una pull-up, aquí encontrará un artículo que explica las diferencias en detalle.

Si no tiene un solo termistor sino un módulo de termistor, donde la resistencia está incorporada, necesita medir la resistencia de la resistencia con un multímetro, ya que necesitamos la resistencia para el cálculo de temperatura en el guión del programa. . En mi caso, el módulo de termistor tiene una integración de 10 kΩ.

Código para mostrar la temperatura con un termistor NTC

También es posible calcular la temperatura basándose en las medidas del divisor de voltaje del termistor. Para esto usamos el Ecuación de Steinhart. El siguiente esquema muestra cómo medir voltaje y temperatura con un termistor.

// Lectura de termistor NTC mediante ecuación de Steinhart-Hart
const int PIN_TERMISTOR = A0; // Pin analógico en Arduino Uno/Nano

// Resistencia fija conocida en el divisor de tensión (10 kΩ)
const float R_FIJA = 10000.0;

// Coeficientes empíricos Steinhart-Hart para termistor NTC de 10 kΩ
const float c1 = 1.009249522e-03;
const float c2 = 2.378405444e-04;
const float c3 = 2.019202697e-07;

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

void loop() {
  int lecturaADC = analogRead(PIN_TERMISTOR);
  
  // Cálculo de la resistencia instantánea del termistor R2
  float rTermistor = R_FIJA * (1023.0 / (float)lecturaADC - 1.0);
  float logR = log(rTermistor);
  
  // Temperatura en escala absoluta Kelvin
  float tempK = 1.0 / (c1 + c2 * logR + c3 * logR * logR * logR);
  
  // Conversión a grados Celsius
  float tempC = tempK - 273.15;
  
  Serial.print("Resistencia NTC: ");
  Serial.print(rTermistor, 1);
  Serial.print(" Ohm | Temperatura: ");
  Serial.print(tempC, 2);
  Serial.println(" °C");
  
  delay(1000);
}

Las primeras tres líneas del código del programa definen el pin analógico conectado que conecta el microcontrolador y el termistor. Dependiendo de su microcontrolador, usa una de las tres líneas y comenta las otras o las borra.

Después de definir el pin analógico, necesitamos definir varias variables para la ecuación de Steinhart. También definimos la resistencia, en mi caso 10kΩ. Los coeficientes de Steinhart se definen para cada termistor en la hoja de datos.

En la función de configuración, solo establecemos la velocidad en baudios de 9600 que debe coincidir con la velocidad en baudios del monitor en serie o trazador en serie del Arduino IDE.

La función de lazo comienza leyendo el valor analógico que es la salida del divisor de voltaje. Después de calcular la resistencia del termistor, obtenemos la temperatura en Kelvin con la ecuación de Steinhart.

Dependiendo de su preferencia, puede convertir la temperatura de Kelvin a Celsius o Fahrenheit e imprimir la temperatura en la salida en serie.

Conclusión

¿Tiene más preguntas sobre resistencias, divisor de voltaje, fotorresistores, codificador rotatorio o termistores? Utilice la sección de comentarios a continuación para hacer sus preguntas.

Comprobación de Divisores de Tensión y Sensores Resistivos con Osciloscopio

Aunque un divisor de tensión con resistencias estáticas parece un circuito de corriente continua elemental, en el banco de pruebas de electrónica intervienen factores dinámicos cruciales que solo pueden auditarse con un osciloscopio digital:

  • Efecto de Carga de la Sonda (Sonda 1X frente a Sonda 10X): Al medir un divisor de alta impedancia (por ejemplo, con dos resistencias de 100 kΩ o 1 MΩ), conectar una sonda en atenuación 1X (impedancia típica de entrada de 1 MΩ en paralelo con 100 pF de capacitancia parásita del cable) altera de forma radical el circuito. La sonda actúa como una resistencia en paralelo con la rama inferior, reduciendo el voltaje medido en más de un 30% y falseando la lectura del multímetro. Conmutar la sonda al modo 10X eleva la impedancia a 10 MΩ y disminuye la capacitancia parásita a tan solo 10-15 pF, reduciendo el error de carga a menos del 1%.
  • Tiempo de Respuesta y Retardo RC en Sensores LDR y Termistores: Los fotorresistores (LDR) no responden de forma instantánea a los cambios de luminosidad; exhiben una resistencia dinámica transitoria con tiempos de subida de 20 a 50 ms. En el osciloscopio puedes modular una fuente de luz (ej. un LED excitado por PWM) y medir directamente en pantalla el tiempo de respuesta temporal (flancos de subida y bajada) en la salida del divisor de tensión.
  • Filtrado de Rizado y Ruido de Conmutación en la Tensión de Referencia: Si la línea de alimentación de 5 V o 3,3 V proviene de un regulador conmutado (DC-DC buck) o del puerto USB del ordenador, las espigas de conmutación de alta frecuencia (100 kHz - 1 MHz) se trasladan directamente a través del divisor hacia la entrada analógica del microcontrolador, causando lecturas fluctuantes en el ADC. Ajustando el osciloscopio en acoplamiento AC con cursores de pico a pico (Vpp), es posible cuantificar el nivel de ruido y verificar la eficacia de un condensador de desacoplo cerámico de 100 nF colocado en paralelo con la entrada analógica.

En la siguiente tabla se comparan cuatro osciloscopios de laboratorio recomendados para la caracterización de sensores analógicos, análisis de impedancia y depuración de microcontroladores:

Modelo Ancho de Banda Canales Muestreo Memoria Idoneidad para Sensores y Divisores
Rigol DS1054Z 50 MHz (ampliable a 100 MHz) 4 analógicos 1 GSa/s 24 Mpts Excelente: 4 canales para monitorizar simultáneamente alimentación, referencia y salidas de múltiples sensores.
Siglent SDS1104X-E 100 MHz 4 analógicos 1 GSa/s 14 Mpts Muy alta: piso de ruido ultra bajo (SPO) que permite medir señales analógicas de baja amplitud sin distorsión.
Hantek DSO2D10 100 MHz 2 analógicos + Generador 1 GSa/s 8 Mpts Económico: incluye generador de funciones para inyectar señales de excitación senoidales y cuadradas.
FNIRSI 1014D 100 MHz (nominal) 2 analógicos 1 GSa/s 240 kpts Uso aficionado básico; resolución vertical estándar para comprobaciones rápidas de tensión continua.

Si deseas profundizar en la instrumentación de medida de circuitos bajo tensión, consulta nuestra guía sobre medición de voltaje, corriente y potencia con osciloscopio, explora los modelos recomendados para proyectos con Arduino y ESP32 o compara las prestaciones de los osciloscopios digitales de sobremesa.

Preguntas Frecuentes sobre Resistencias y Divisores de Tensión

¿Por qué la lectura de un divisor de tensión cambia al conectar la entrada analógica de Arduino o ESP32?

El convertidor analógico-digital (ADC) de microcontroladores como Arduino Uno o ESP32 cuenta con una red de muestreo interna compuesta por un condensador de retención (sample & hold, aprox. 14 pF) y una impedancia de entrada finita. Si la impedancia equivalente de Thevenin del divisor de tensión supera los 10 kΩ recomendados, el condensador interno del ADC no alcanza a cargarse completamente durante el breve tiempo de muestreo, provocando una caída aparente de tensión en la medición. Para solucionar este problema en divisores de alta resistencia, se coloca un condensador cerámico de 100 nF entre la entrada analógica y masa, o se utiliza un amplificador operacional en configuración seguidor de tensión (buffer de ganancia unitaria).

¿Cuál es la diferencia entre usar la ecuación de Steinhart-Hart y el parámetro Beta (β) en un termistor NTC?

La aproximación del factor Beta (β) es una simplificación matemática de primer orden que modela adecuadamente el comportamiento del termistor únicamente en un rango estrecho de temperatura (alrededor de 25 °C). En contraste, la ecuación de Steinhart-Hart es un polinomio de tercer orden basado en tres coeficientes empíricos específicos (c1, c2, c3) que proporciona una precisión de hasta ±0,01 °C en todo el rango operativo industrial de -40 °C a +125 °C.

¿Puedo utilizar un divisor de tensión resistivo para alimentar un sensor o servomotor?

No. Un divisor de tensión resistivo está diseñado exclusivamente para señales de referencia de tensión con corrientes prácticamente nulas (alta impedancia). Si conectas una carga de potencia (como un motor, relé o módulo Wi-Fi) en paralelo con R2, la resistencia equivalente de la rama inferior se desplomará, haciendo que la tensión de salida caiga casi a cero y provocando que las resistencias disipen calor excesivo. Para regular alimentación de potencia deben emplearse reguladores lineales (LDO) o convertidores conmutados DC-DC buck.

Deja un comentario