Entradas digitales #
Las entradas digitales nos permiten distinguir entre dos estados, a los que nos referimos con diversos nombres:
- Activo – Inactivo o Encendido – Apagado (On – Off)
- Alto y Bajo (High – Low)
- 1 – 0
En productos comerciales, como PLCs (Autómatas programables) o dispositivos domóticos, si se recibe tensión en una entrada se considera que se está activando dicha entrada, y si no se recibe nada, que está inactiva. Esto se puede apreciar en las dos imágenes siguientes:
Es fundamental tener presente que, en electrónica digital, trabajando con entradas de alta impedancia, se necesita recibir constantemente una referencia de tensión, ya sea un estado alto o un 0V, pero siempre algo. Aquí, cabe destacar que no es lo mismo recibir 0V que no recibir nada.
Entradas Pull Down #
El esquema anterior no vale para activar con seguridad la entrada de un microcontrolador, ya que, cuando no está activo el pulsador, no tenemos una referencia de tensión a la entrada. Es por ello que debemos realizar el esquema de conexión típico que se muestra a continuación y con el que se eliminan los estados de indeterminación por ausencia de tensión:
Cuando trabajamos con microcontroladores, la tensión de funcionamiento suele ser 0V para indicar estado inactivo o Bajo (Low). Para el estado de activación o alto (High), trabajan generalmente con dos tensiones: 5V o 3,3V, dependiendo de la placa. Por motivos de eficiencia energética se está tendiendo a utilizar 3,3V cada vez más. En el ejemplo anterior se ha usado 3,3V porque es la tensión lógica de las placas de Espressif, tanto el Esp8266, como el Esp32, que es la tendencia que están siguiendo actualmente los fabricantes, pero aún hay muchos microcontroladores que trabajan a 5V.
La resistencia de 10 kOhm se coloca para evitar un cortocircuito cuando se activa el interruptor. Además, se elige un valor alto de resistencia para que el consumo al activar la entrada sea mínimo. Para realizar esta conexión en un NodeMCU, un posible esquema con un pulsador sería el siguiente:
El esquema anterior se aprovecha una fuente de alimentación de la propia placa para alimentar el pulsador que se conecta a la entrada digital 27. Este esquema se denomina conexión con pulsador Pull – Down, ya que introduce tensión distinta de 0V (estado alto) solo si se activa el interruptor.
Entradas Pull Up #
Existe también la conexión Pull – Up, que funciona justo al contrario, introduciendo un estado bajo solo si se activa el pulsador y alto con el pulsador en estado de reposo.
Entradas optoacopladas #
Con un dispositivo industrial o domótico comercial este esquema no es necesario realizar estos esquemas habitualmente, ya que la resistencia Pull – Down (junto con otros componentes), los lleva incluidos internamente y antes de esto, se instala un optoacoplador, que adapta la señal de entrada y aísla eléctricamente el circuito externo del interno. Estas medidas afectan en el precio del dispositivo, igual que en su facilidad de utilización inicial, robustez, etc., aunque en muchas ocasiones limita su versatilidad en gran medida.
Símil de funcionamiento interno de una entrada digital en un relé programable
Un Esp32 es un microcontrolador, no lleva entradas optoacopladas. La ventaja de estas entradas es que permiten trabajar con distintas tensiones de entrada y protegen y aíslan. Una desventaja de estas es que no permiten usar ese puerto como salida. Este es uno de los motivos por los que un PLC suele llevar ciertos pines configurados solo como entradas o solo como salidas. Optoacoplar un pin obliga a usarlo como entrada, de la misma forma que conectarle un relé, por ejemplo, obliga a usarlo como salida.
Soluciones comerciales con tres hilos #
Para agilizar y facilitar el cableado se venden módulos de interruptor o pulsador que ya incluyen todo lo necesario para que se detecte la señal correctamente. Llevan tres conectores, no dos, ya que hay que incluir 0V (GND) además de tensión y la salida de señal:
Conexión de un módulo de pulsador a NodeMCU
Pero cuidado porque el orden de conexión de los pines de estos módulos no está estandarizado, por tanto, puede variar en función del fabricante.
De igual forma, este es el motivo de que muchos sensores necesitan ser cableados con tres hilos (alimentación y señal), en lugar de hacerlo con dos.
Sensores de presencia y vibración
Activación de resistencias internas #
Algunos microcontroladores incluyen resistencias internas en su interior, de forma que por código podemos conectarlas o desconectarlas a cada puerto, obteniendo entradas con diferentes características, como las vistas anteriormente. A continuación se explica mediante esquemas, pero además, en este vídeo se explican eléctricamente las diferentes opciones.
Para microcontroladores configurados desde el IDE de Arduino, como el Esp32 o modelos propios de Arduino, si utilizamos el comando INPUT en la configuración por software, estamos indicando que vamos a colocar una resistencia externa, como se ha visto anteriormente, por tanto, no se activarán las resistencias internas. El comportamiento de la entrada dependerá de cómo coloquemos dichas resistencias.
Pull down:
Pull up:
Ahora lo que haremos será realizar los mismos dos circuitos anteriores pero activando resistencias internas del microcontrolador, lo que nos ahorra instalarlas externamente, simplificando el cableado.
Para comprender los siguientes esquemas, se ha de tener en cuenta que todo lo que está dentro del rectángulo naranja simboliza el interior del microcontrolador. Las resistencias de 45 kOhm y los “interruptores” que están en serie con ellas, se encuentran dentro del micro. La de 10 kOhm la conectamos fuera.
- Si usamos el comando INPUT_PULLDOWN estamos conectando con la entrada digital una resistencia interna de 45 kOhm que va a 0V. Esto hará que obtengamos estados altos cuando metamos señales externas de 3,3V y estados bajos cuando no metamos nada. Estamos activando por código un circuito interno que queda igual que el circuito
Vemos en la parte izquierda de la imagen anterior, que el interruptor lo conectamos a 3,3V (o 5V, dependiendo del micro), para que compare con 0V que se conectan a la resistencia interna.
- Si usamos el comando INPUT_PULLUP se está conectando con la entrada digital una resistencia interna con 3,3V, lo que provoca que se detecte un estado alto cuando no metamos nada al pin, y estado bajo cuando metamos 0V. No obtendremos ninguna lectura si metemos 3,3V desde fuera del pin. Queda el mismo circuito elaborado de forma externa en 1.2.
Ahora en la parte izquierda de la imagen anterior se puede ver que el interruptor lo conectamos a 0V, para que compare con la tensión en estado alto (3,3 ó 5V) que se conectan a la resistencia interna.
Hay multitud de microcontroladores que incorporan resistencias internas para realizar conexiones pull up, sin embargo, no tantos que incorporen resistencias para realizar conexiones pull down.
Salidas digitales #
Tienen también dos estados, activo e inactivo, igual que las entradas digitales. Suelen ser también de 5V ó 3,3V, aunque la tendencia es a 3,3V.
Además de la tensión de salida, ahora un parámetro fundamental es la intensidad que puede suministrar cada salida. Esta intensidad de la salida depende de la resistencia que alimente. Recordamos que la intensidad que circula por un circuito, a tensión constante, depende de la resistencia conectada. Es una aplicación direccta de la ley de Ohm: I = V/R.
Si conectamos una carga demasiado baja a una salida, esta carga va a demandar mucha intensidad, y esto puede llegar a quemar la salida si esta no tiene recursos para cortar o limitar la intensidad que saca. En general es una forma habitual de acortar la vida de un microcontrolador. En la siguiente tabla se muestra como ejemplo, los datos de tensión e intensidad de un pin configurado como salida de un Esp32:
Tensión de salida | 3,3 V |
Intensidad de funcionamiento recomendada de cada puerto | 25 mA |
Las salidas suministran una intensidad que solo puede alimentar receptores de muy baja potencia, pero que es suficiente para actuar como señal de activación de relés y multitud de actuadores compatibles. Son principalmente salidas con fin de mando y control o para alimentar receptores de muy bajo consumo, como pequeños leds de señalización.
Conexión de un led utilizando el pin 27 como salida digital:
Un led hay que colocarlo con una resistencia en serie que limite la intensidad que circula por el mismo, ya que, al tener una resistencia interna variable, es un parámetro crítico. Recuerda que la patilla corta se conecta al negativo y la larga, al positivo.
Entradas analógicas #
Una entrada analógica es aquella capaz de diferenciar entre múltiples valores. Nos permiten medir variaciones de temperatura, luminosidad, humedad, y muchas otras magnitudes físicas cuyo valor no es todo o nada.
El Esp32 dispone de dos ADC (conversores analógico-digitales), que se encargan de codificar en señales digitales, las señales analógicas que les llegan. Tiene 8 entradas analógicas asociadas al primer ADC (ADC1) y 10 al segundo ADC (ADC2). Sin embargo, hay que tener dos consideraciones importantes:
- Solo se puede utilizar el ADC1 si no se está usando el Wifi.
- De las 8 entradas del ADC1 solo suelen encontrarse disponibles 6.
El reparto de los GPIOs es el siguiente:
ADC1: GPIO32 – GPIO39 (GPIO37 y GPIO38 no suelen estar disponibles)
ADC2: GPIO0, GPIO2, GPIO4, GPIO12 – GPIO15, GOIO25 – GPIO27
El rango de funcionamiento está entre 0V y 3,3V. Este rango de medida de 3,3 voltios se traduce internamente en un intervalo numérico que va desde 0 a 4095, debido a que las entradas analógicas tienen una resolución máxima de 12 bit (212 = 4096). Por tanto, si recibimos 0V leeremos un 0 y si recibimos 3,3V se estaremos leyendo un 4095. Todo valor intermedio se verá reflejado de forma proporcional. Veremos que en realidad, estas entradas tienen ciertos problemas de precisión estas en los extremos de medida, por lo que el 4095 se suele recibir antes de los 3,3V, en torno a los 3,2V.
La resolución de estas entradas se puede bajar por software hasta los 9 bits (0 – 511). De igual forma, la frecuencia de muestreo también se puede modificar.
Además de muchas otras configuraciones más avanzadas, cabe destacar que se puede atenuar la señal de entrada, variando así el rango de tensiones que lee. El valor por defecto está en atenuación de 11db, que permite la lectura entre 0 y 3,2V (aproximadamente).
ADC_0db | 0 – 1V |
ADC_2_5db | 0 – 1.4V |
ADC_6db | 0 – 1.9V |
ADC_11db (por defecto) | 0 – 3.2V |
Cuidado porque configurar una atenuación y posteriormente conectar esa entrada a mayor tensión de la permitida, puede dañar la placa.
El principal problema en estas entradas es que no son del todo lineales, lo que no permite realizar ciertas medidas con precisión. Como se muestra en la siguiente gráfica, sobre todo en los extremos las mediciones no son válidas.
Como ejemplo destacado, se puede señalar que un sensor analógico de temperatura Lm35, que envía 10 mV por grado, comenzando en cero voltios, para una temperatura de 16 grados va a enviar a la entrada analógica 160 mV. Esta lectura no va a ser en absoluto leída con precisión por el Esp32, ya que cae en la zona inicial de la gráfica que no es lineal. Existen algunas soluciones por software para mejorar la precisión en este tipo de lecturas.
Salidas PWM #
Las siglas PWM significan Modulación por Ancho o de Pulso (pulse-width modulation) y es una forma de simular salidas analógicas mediante salidas digitales, pero cuidado, NO son salidas realmente analógicas. En lugar de variar la tensión de salida en múltiples valores, como ésta solo puede valer 0V ó 3,3V, lo que se hace es variar la duración de la señal de 3,3V y la de 0V en cada ciclo. El porcentaje de tiempo que tenemos activación en cada ciclo (3,3V), es interpretado por los microcontroladores y traducido proporcionalmente en un rango de valores. Este rango de valores está determinado por la resolución de las salidas PWM, que en el Esp32 se puede configurar desde 1 a 16 bits. Es decir, podemos tener una resolución máxima de 216 = 65.536 valores. Cabe destacar que esta función la tienen disponibles todos los pines del Esp32 que pueden actuar como salida digital.
Además de esto, la frecuencia de la señal, es decir, cuantos ciclos realiza por segundo (que no tiene nada que ver con la resolución anteriormente descrita), se puede configurar también en valores de 1 KHz, 5 KHz, 8 KHz, y 10 KHz. Como referencia, se puede señalar que la máxima frecuencia de una salida PWM de Arduino Uno es de casi 1kHz.
Cuanto mayor sea la frecuencia de la señal PWM, más parecido será en la práctica el resultado obtenido a una salida real analógica.
Salidas analógicas #
El Esp32 dispone de dos DAC (conversor digital – analógico) de 8 bits, que van de 0V a 3,3V. Su resolución es, por tanto, de 28 = 256.
Esta función nos permite sacar señales de tensión totalmente variables en ese rango de funcionamiento, y de esta forma, generar ondas senoidales, reproducir sonidos, o trabajar, por ejemplo, con dispositivos que no admiten PWM para su control analógico, como ocurre con muchos variadores de frecuencia.
Los DAC están disponibles en los GPIO25 y GPIO26.
Entradas táctiles capacitivas #
Para entender la idea general de un sensor táctil, hay que saber que la capacitancia se define como la capacidad de un componente para almacenar energía en forma de carga eléctrica. Su fórmula depende, entre otros factores, del área y de la distancia:
Se puede apreciar en la ecuación anterior que la capacitancia es directamente proporcional al área e inversamente proporcional a la distancia. De esta forma, un sensor táctil capacitivo funciona como un pulsador, pero en lugar de un movimiento mecánico, detecta la variación de la capacitancia en su entrada. Esta capacitancia varía porque modificamos con nuestra mano, que actúa como condensador, tanto la superficie como la distancia, lo que hace aumentar la carga. Esto implica que para activar una entrada táctil capacitiva tenemos que acercar materiales que sean conductores.
Fuente: https://www.fujitsu.com/downloads/MICRO/fme/articles/fujitsu-whitepaper-capacitive-touch-sensors.pdf
Esta tecnología es la base de muchas pantallas táctiles, así como infinidad de nuevas aplicaciones que pueden llegar a evitar el contacto físico directo (como cuando pegamos un cristal protector en la pantalla de un teléfono móvil y este sigue funcionando).
Fuente: https://www.theengineeringprojects.com/2021/12/esp32-capacitive-touch-sensor.html
Los GPIOs con esta función son: GPIO4, GPIO0, GPIO2, GPIO15, GPIO13, GPIO12, GPIO14, GPIO27, GPIO33, GPIO32.