Termómetro con Arduino y diodo 1N4007 como sensor

Una de las características que tienen los diodos, es que su umbral de voltaje de polarización directa cambia de acuerdo con la corriente que lo atraviesa y con la temperatura de su unión (p-n). Aprovechando esta característica, es posible hacer uso de un diodo para implementar un sensor de temperatura muy sencillo y económico.

El proyecto aquí descrito, consiste en un termómetro basado en el diodo de silicio 1N4007, utilizado como sensor de temperatura, y una placa Arduino (Nano) para realizar los cálculos y mediciones. El circuito transductor, encargado de detectar la temperatura, está basado en el "Sensor de temperatura con un diodo" de Instructables, mientras que el programa que realiza las mediciones, se ha modificado para adaptarlo al proyecto de esta publicación.

Lista de componentes

Para ensamblar el circuito publicado en este artículo, es necesario contar con los siguientes materiales y recursos:

  • Un diodo 1N4007
  • Un resistor de 1KΩ
  • Una placa Arduino
  • Una pantalla OLED SSD1306
  • Una protoboard (si utiliza Arduino NANO)
  • Varios cables de conexión
  • Y el código del programa para Arduino

Teoría de funcionamiento

Prácticamente cualquier diodo se puede utilizar como transductor de medición de temperatura, pues el umbral de voltaje directo (Vf) del diodo disminuye a medida que aumenta la temperatura (observe la figura 1). Para los diodos de silicio, el coeficiente de temperatura lineal es aproximadamente de –2 mV/°C; esto significa que por cada 1°C que aumente la temperatura, la caída de voltaje directo en el diodo se reduciría en 2mV.

Curva característica del diodo 1N400x
Figura 1. Curvas características de un diodo, en polarización directa, a dos temperaturas diferentes.

A una temperatura de unión (Tj) de 25 °C, con una corriente de prueba constante, los diodos de silicio mantienen una tensión de polarización directa de 700mV, aproximadamente. Bajo estas condiciones, su tensión de polarización solo debería variar según la temperatura circundante en el diodo. Aplicando las ecuaciones adecuadas, las variaciones de tensión podrán usarse para calcular la temperatura percibida por el diodo

Con una corriente Id constante, el voltaje de polarización de un diodo varía con la temperatura de acuerdo a las siguientes expresiones:

ΔVf = (T1 – T0)*K
ΔVf = Vf1 – Vf0

Donde:

ΔVf representa la variación de tensión directa del diodo,
T0 es la temperatura ambiente a 25 °C,
Vf0 es la tensión de 700mV a la temperatura ambiente T0,
K es el coeficiente de temperatura de -2mV/°C.
Mientras que, Vf1 es la tensión directa del diodo a una temperatura desconocida T1.

Igualando los términos derechos de las expresiones, y despejando las temperaturas, obtendremos la siguiente ecuación:

T1 – T0 = (Vf1 – Vf0) / K

Ahora bien, si una temperatura Tc, circundante en el diodo, hace que la temperatura de éste cambie de T0 a T1; entonces, podríamos hallar un voltaje de referencia para Vf0 a 0°C, para calibrar el sensor, y así deducimos que Tc = T1 – 0°C. Para el diodo 1N4007, un voltaje de referencia estimado podría ser 683mV; por lo tanto,

Tc = (Vf1 – 683mV) / K

Para implementar un sistema sencillo de medición de temperatura con un diodo sensor, bastara medir el voltaje en los terminales del diodo. Aplicando el voltaje de dichos terminales a la entrada de un convertidor A/D, de un módulo microprocesador como Arduino, y aplicando la ecuación anterior, se puede calcular la temperatura detectada por el diodo.

Diagrama de conexiones

Diagrama de conexiones del termómetro.
Figura 2. Diagrama de conexiones del termómetro con Arduino y Diodo 1N4007 (click en imagen para ampliar).

El termómetro a implementar es muy simple; en la figura 2, se muestra su diagrama de conexiones. El transductor de medición de temperatura está compuesto por el diodo D1 y el resistor R1 (conectados en serie); siendo el diodo, el componente que detecta la temperatura, y el resistor, el que limita la corriente en el diodo.

Id = Vcc / (R1 + Rd)

El transductor se alimenta con el mismo voltaje del Arduino, a través del pin +5V. Puesto que este voltaje es estable, podemos obtener una fuente de corriente casi constante, por lo que el voltaje medido en el diodo solo variará por efectos de la temperatura.

La salida del transductor se toma desde el terminal de ánodo del diodo; a su vez, dicho terminal se conecta al Arduino mediante el pin de entrada análoga A0. Este pin corresponde a uno de los canales de entradas del convertidor A/D de 10 bits.

El arduino se encargará de medir la tensión del sensor, aplicada a su pin A0, y calculará la temperatura mediante las ecuaciones presentadas en el apartado anterior; y luego, enviará los resultados hacia la pantalla LCD1 (Módulo Display OLED SSD1306). Para detalles de conexiones entre esta pantalla y Arduino, observe el diagrama de la Figura 2.

Código del programa

Para que la aplicación de termómetro funcione, cargue el código a continuación en una placa Arduino, y podrá ver en pantalla la temperatura detectada por el diodo.

Arduino
/*
THERMOMETER USING A 1N4007 DIODE LIKE A TEMPERATURE SENSOR
By Favio Lucas from blogtronika.blogspot.com

The thermometer is based on the diode characteristic that the increase of the temperature
its forward voltage (Vf) is lowered by -2mV/°C. Since the forward diode voltage varies 
with temperature according the expression: 

ΔVf = Vf1 – Vf0 = (T1 – T0)*K

Then, the ΔT value is calculated with the following equation:

ΔT = T1 – T0 = (Vf1 – Vf0)/K

where,

K = -2 °C/mV. 
A very stable Vf is obtained by averaging as many samples.
*/

// Directives
// OLED I2C dispaly libraries and definitions:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <gfxfont.h>
#include <Wire.h>

#define OLED_RESET 4
#define OLED_ADDR 0x3C

Adafruit_SSD1306 oled (128, 64, &Wire, OLED_RESET);

// Constant values:
const float Vf0 = 683; // Forward voltage at 0 °C with a 4 mA test current
const float K = -2; // Temperature coefficient (-2 mV/°C for Si diodes)

const int PSensor = A0; // Used to the sensor diode input (PA0 for STM32F103C8 Board)
const float adcSample = 5020; // Voltage for AD Converter (Vcc * 1000)
const float error = 13;

const float weight = 0.1;  // Smoothing factor, in range [0,1]
  // Higher the value, less smoothing and higher the latest reading impact

// Variable values:
double Tx; // Room temperature calculated 
double Vf; // Forward voltage measured at room temperature with a test current at 4mA

float smoothValue;
float prevSmoothValue;
int lightValue;

void setup() {
  
  // OLED I2C display setup:
  Wire.begin();
  oled.begin (SSD1306_SWITCHCAPVCC, OLED_ADDR);
  oled.clearDisplay();
  oled.setTextColor(WHITE);
  oled.setCursor(31, 13);
  oled.setTextSize(1);
  oled.print ("BLOGTRONIKA");
  oled.setCursor(22, 28);
  oled.setTextSize(1);
  oled.print ("By Favio Lucas");
  oled.display();

  // Measurements and other initial settings:
  prevSmoothValue = analogRead(PSensor) * (adcSample/1023) + error; // divide by 4095 if case of a 12-bit ADC
  delay (2000);

}

void loop() {

  // Measurement and filtering:
  lightValue = analogRead(PSensor) * (adcSample/1023) + error; // divide by 4095 if case of a 12-bit ADC
  smoothValue = filter(lightValue, weight, prevSmoothValue);
  prevSmoothValue = smoothValue;

  // Temperature calculations:
  Vf = smoothValue; 
  Tx = (Vf - Vf0)/K;

  // Data display outputs:
  oled.clearDisplay();
  oled.setCursor (0,0);
  oled.setTextSize (1);
  oled.print ("TEMPERATURA:");
  oled.setTextSize (2);
  oled.setCursor (0,16);
  oled.print (Tx); oled.print (" C");
  oled.setTextSize (1);
  oled.setCursor (0,37);
  oled.print ("Vf: "); oled.print (Vf); oled.print (" mV");
  oled.display ();
  
  delay (1000);

}

// Exponential moving average filter:
float filter (float sensorValue, float w, float prevValue) {

  float result = w * sensorValue + (1.0 - w) * prevValue;
  return result;

}

Observaciones finales

Aunque un termómetro basado en un diodo sensor no es muy preciso, resulta ser una buena alternativa en aplicaciones donde solo se requiera una medida aproximada de la temperatura. No obstante, si se quiere obtener mejores resultados en las mediciones, se deben realizar algunos ajustes, y tener en cuenta ciertos detalles de diseño.

Para lograr mediciones más aproximadas, se debe tener en cuenta que los diodos no son perfectamente idénticos; siempre difieren unos de otros, aunque sean iguales en apariencia. Por tal motivo, se deben modificar las siguientes constantes del código Arduino:

  1. adcSample: es el voltaje máximo de muestreo de Conversión A/D. Para hallar un valor exacto, mida con un multímetro la tensión de alimentación (Vcc) de su placa Arduino. Luego, multiplique el valor de la medición por 1000, para expresarlo en miliamperios.
  2. Vf0: es el voltaje directo del diodo usado como referencia para la temperatura de 0°C, y se utiliza para calibrar el termómetro

Para poner a prueba nuestro termómetro, también es necesario tener un termómetro confiable adicional para comparar resultados. Si observa errores notables en las mediciones, proceda a los pasos siguientes:

  1. Es posible que el voltaje real del diodo sensor, no coincida con el voltaje medido por Arduino. Con un multímetro, y con el Arduino en funcionamiento, mida el voltaje entre las terminales del diodo sensor. Compárelo con el voltaje Vf (mostrado en la pantalla OLED) y calcule la diferencia.
  2. En el código del programa, localice la constante error y asígnele la diferencia de voltajes obtenida en el paso anterior.

La resolución de conversión análogo/digital de Arduino (aprox. 4,88mV/lectura) no es suficiente para detectar con precisión las pequeñas variaciones de voltaje en un diodo normal. Implementar un termómetro más preciso requerirá de etapas previas de compensación, amplificación y filtrado de señal. Si desea más detalles sobre circuitos de detección y medición de temperatura, consulte el informe de aplicación de TI en este link.

Ecualizador monofónico de 3 tonos

Un ecualizador (o control de tonos) permite ajustar la respuesta de frecuencia de un sistema de audio para compensar la respuesta de los altavoces en la sala o auditorio donde se escuchen, o simplemente para personalizar el sonido según las preferencias del oyente.

El ecualizador descrito en este artículo, consiste en un circuito controlador de tonos monofónico de alta fidelidad que ofrece las características de atenuación, plana, y de refuerzo del nivel de respuesta para las tres bandas típicas de audiofrecuencia (tonos graves, medios y agudos).

Descripción del circuito

Básicamente, los circuitos de un ecualizador están formados por una red de filtros para distintas bandas de audiofrecuencia. Estos filtros pueden ser de tipo pasivo, que sólo emplean bobinas, capacitores, y resistores; o pueden ser de tipo activo, que además de los componentes mencionados, emplean transistores y circuitos integrados que añaden funciones de amplificación.

En la construcción de ecualizadores, se suele elegir un diseño de filtro activo en lugar de un diseño de filtro pasivo, puesto que los circuitos de filtros activos tienen los componentes de ajuste de frecuencia ligados al lazo de realimentación de los amplificadores del filtro; obteniendo con ello un THD mucho más bajo, y una respuesta de frecuencia simétrica entre los niveles de atenuación y refuerzo, en comparación con la mayoría de diseños pasivos.

Diagrama de bloques de un ecualizador
Figura 1. Diagrama de bloques de un ecualizador

El circuito del ecualizador, aquí descrito, consiste en un filtro activo construido en torno a un amplificador operacional. Este circuito también incluye un buffer amplificador de entrada (sección indicada como U1A) para proporcionar una pequeña ganancia y aislamiento a las variaciones de impedancia de la fuente. En la figura 1, se muestra un diagrama de bloques simplificado del circuito.

En la figura 2 se muestra el diagrama esquemático del circuito ecualizador. Las dos etapas internas de un amplificador operacional LM358N, indicadas en el circuito como U1A y U1B, son las encargadas de la amplificación y filtrando de la señal de audiofrecuencia.

Esquemático del circuito ecualizador de 3 tonos
Figura 2. Diagrama esquemático del circuito (click para ampliar)

El buffer amplificador de entrada, U1A, ofrece una ganancia de aproximadamente 2 (RF/RIN) con los valores de resistencia específicos. El condensador de entrada C1 (con el valor de 100nF) bloquea la tensión DC de entrada. La acción de ajuste de tonos del circuito es proporcionada por el amplificador ecualizado (o filtro activo). Este filtro es implementado mediante una red de realimentación negativa dependiente en frecuencia vinculada a la etapa U1B del amplificador operacional.

Los tres potenciómetros giratorios P1, P2, y P3, permiten ajustar la respuesta en frecuencia de los graves, medios, y agudos en aproximadamente -20 dB de atenuación, respuesta plana, y +20 dB de refuerzo. Una respuesta plana (sin atenuación ni refuerzo) de frecuencia se obtiene en conjunto cuando todos los controles de tonos están en su posición central. El nivel de salida puede ajustarse mediante potenciómetro de volumen P4.

Respuesta en frecuencia

Casi toda la característica en conjunto de ganancia-vs-frecuencia puede ser definida mediante el diseño la red de realimentación. La composición de curvas de respuesta de frecuencia, mostrada en la figura 3, es proporcionada por los valores de componentes indicados en el diagrama de circuito esquemático (figura 2).

Respuesta de frecuencia del ecualizador
Figura 3. Respuesta de frecuencia del ecualizador

Lista de materiales

Ref.CantidadDescripción/ValorNotas
R8, R72Resistor 3.9K, 1/4 w
R21Resistor 150K, 1/4 w
R10, R92Resistor 2,2K, 1/4 w
R41Resistor 20K, 1/4 w
R6, R5, R113Resistor 12K, 1/4 w
R11Resistor 100K, 1/4 w
R31Resistor 680, 1/4 w
P1, P2, P3, P44Potenciómetro 100K, Log.Tipo B
U11Circuito integrado LM358N
C4, C92Capacitor 1uF / 63v, electrolítico
C51Capacitor 33nF / 100v, poliésterCódigo 2A333J
C71Capacitor 22nF / 100v, poliésterCódigo 2A223J
C6, C82Capacitor 4,7nF, disco cerámicoCódigo 472
C31Capacitor 47pF, disco cerámicoCódigo 47
C1, C2, C10, C112Capacitor 100nF, disco cerámicoCódigo 104
CNN1, CNN21Conector 1x02 terminales, P2.54mmTipo molex o compatible
CNN31Conector 1x02 terminales, P2.54mmTipo molex o compatible

Fabricación del circuito impreso

Tarjeta de circuito impreso (PCB) del ecualizador
Figura 4. Dimensiones y detalles del circuito impreso

Para fabricar la tarjeta de circuito impreso mediante el método de papel transfer utilice las plantillas de diseño, las cuales puede obtener descargando el archivo-zip. Si desea fabricar varias unidades de este proyecto, con un acabado profesional, puede solicitar el servicio de fabricación de las tarjetas de circuito impreso (PCB) en PCBWay. Para solicitar una cotización del servicio en línea solicítela aquí.

Amplificador de audio con circuito integrado KA2206

Algunos estudiantes y profesionales de la ciencia electrónica tienen gran afición por los amplificadores de audio, ya que resultan ser circuitos muy divertidos. Es por eso que, pensando en ellos, proponemos este proyecto; en el cual presentamos un pequeño amplificador de audio estereofónico, capaz de reforzar una débil señal de audio y entregarla con una mayor potencia a dos pequeños altavoces.

Aspecto físico del amplificador con KA2206B
Figura 1. Aspecto físico del amplificador.

El amplificador que aquí presentamos ofrece una calidad de sonido muy buena; es ideal para amplificar la señal proveniente, ya sea, de un reproductor MP3, una radio, una tablet, o de cualquier aparato de audio cuyo nivel de señal de salida sea de muy baja potencia.