Puede que nunca hayas utilizado un transistor MOSFET con Arduino o ESP8266. Y puede que no sepas ni para qué puede ser útil.
Este tutorial te demostrará lo útiles que son sobre todo en proyectos que requieren bajo consumo cuando se alimenta con baterías. Luego te sigo contando.
Ya vimos en un artículo anterior que los transistores BJT nos permiten hacer básicamente dos cosas:
- Amplificar
- Conmutar
Los transistores MOSFET no es que hayan reinventado la rueda, pero tienen ciertas ventajas sobre los transistores BJT que los hacen una muy buena alternativa. Ojo, también tienen desventajas.
En breve hablaré de todo esto.
Bien, entonces ¿dónde es útil un transistor MOSFET con Arduino y ESP8266?
Una de las aplicaciones más interesantes es que te permite controlar el encendido y apagado de componentes.
Imagínate una pantalla LCD que está todo el rato encendida. Durante todo ese tiempo no siempre se usa. Lo mismo solo necesita mostrar información cuando se pulsa una tecla por ejemplo.
Con un transistor MOSFET puedes controlar el encendido y apagado de la pantalla.
Lo mismo con sensores PIR, ultrasonidos o cualquier otro sensor o componente.
Con esto se consiguen dos cosas: que los componentes duren más y ahorrar energía.
Los componentes duran más porque están menos tiempo encendidos. En principio debería ser así aunque seguramente influyan más factores. Pero por el mero hecho de conectar un componente, estamos acortando su vida útil.
El ahorro de energía es sustancial porque puedes conseguir consumir 0 mAh o un valor realmente pequeño. Imagínate cuánto puedes hacer que dure la batería de tu proyecto. Meses e incluso años.
Precisamente, al final del tutorial verás un ejemplo de ahorro de energía extrema con un transistor MOSFET y un ESP8266.
Ponte cómodo que empezamos con el nuevo tutorial dedicado al transistor MOSFET con Arduino y ESP8266.
Indice de contenidos
- 1 ¿Qué es un transistor MOSFET?
- 2 Características de un MOSFET
- 3 Transistor MOSFET, modos de operación
- 4 Cómo conectar un transistor MOSFET con Arduino
- 5 ¿Dónde comprar un transistor MOSFET?
- 6 Ejemplos de uso de un transistor MOSFET con Arduino
- 7 Control alimentación proyecto con un transistor MOSFET y un ESP8266
- 8 Código MOSFET y ESP8266
- 9 Conclusiones
¿Qué es un transistor MOSFET?
El transistor de efecto de campo metal-óxido-semiconductor o MOSFET (en inglés metal-oxide-semiconductor field-effect transistor) es un transistor utilizado para amplificar o conmutar señales electrónicas. Esto significa que al igual que los BJT puede ser utilizado tanto como amplificador como de un interruptor controlado eléctricamente.
Este artículo se centra en hablar cuando se utiliza de interruptor y en concreto, cuando se utiliza el transistor MOSFET con Arduino.
El transistor MOSFET es el más empleado en la industria microelectrónica, ya sea en circuitos analógicos o digitales, superando al transistor bipolar o BJT. De hecho, prácticamente la totalidad de los microprocesadores comerciales actuales están basados en transistores MOSFET.
El transistor MOSFET es una subfamilia de los transistores de efecto campo o FET (del inglés field-effect transistor). Estos transistores usan el campo eléctrico para controlar la conductividad de un canal. Eso significa que utilizan una tensión como señal de entrada, a diferencia de los BJT que necesitan una señal de corriente.
Esto quiere decir que los transistores MOSFET son controlados por tensión (voltios) y los transistores bipolares o BJT son controlados por intensidad o corriente (amperios).
Un transistor MOSFET cuenta con 4 terminales:
- Gate (puerta): es la entrada para la señal de control. (Equivalente a la base en los BJT).
- Source (fuente): equivale al emisor del transistor bipolar.
- Drain (drenaje): equivalente al colector del transistor bipolar.
- Bulk (Sustrato): este terminal usualmente está conectado internamente al terminal de fuente (source). Es por esto que la mayoría de los MOSFET solo tienen tres terminales.
Tipos de transistores MOSFET
Existen, principalmente, dos tipos de transistores MOSFET, ambos basados en la estructura MOS (del inglés Metal-Oxide-Semiconductor).
Los primeros son los MOSFET de enriquecimiento (enhancement). Estos transistores se basan en el efecto que se produce al aplicar una tensión en la puerta (Gate) creando un canal entre el drenador y la fuente.
Lo que viene a decir es que para provocar un flujo de corriente entre drenador y fuente es necesario aplicar un voltaje suficientemente alto a la compuerta (es el equivalente a un interruptor de tipo normalmente-abierto).
[IMAGEN NORMALMENTE ABIERTO]
Por otra parte, están los MOSFET de empobrecimiento o deplexión. Estos se basan en efecto inverso, al aplicar una tensión en la puerta se cierra el canal entre el drenador y la fuente.
En el transistor de deplexión es necesario aplicar un voltaje a la compuerta para disminuir o impedir el flujo de corriente (es equivalente a un interruptor de tipo normalmente-cerrado).
[IMAGEN NORMALMENTE CERRADO]
Los transistores MOSFET también son clasificados de acuerdo al tipo de canal que presentan. De esta forma pueden ser de Canal-N o Canal-P. Aunque por lo general, para conmutación, son empleados los Canal-N. Más adelante veremos cómo utilizar ambos transistores MOSFET con Arduino.
Símbolos de transistores MOSFET
Existen distintos símbolos que se utilizan para representar un transistor MOSFET. El diseño básico consiste en una línea recta para dibujar el canal, con líneas que salen del canal en ángulo recto y luego hacia afuera del dibujo de forma paralela al canal. Estas líneas indican la fuente y el drenaje.
En algunos casos (como se muestra en la imagen), se utiliza una línea segmentada en tres partes para el canal del transistor MOSFET de enriquecimiento, y una línea sólida para el canal del MOSFET de empobrecimiento. Otra línea es dibujada en forma paralela al canal para destacar la puerta.
Si bien esto es lo normal, la verdad es que existen una gran variedad de software de diseño y simulación de circuitos y cada uno utiliza una simbología ligeramente diferente. Es por eso que te recomiendo siempre revisar la hoja de datos para saber exactamente de qué tipo MOSFET se trata.
Características de un MOSFET
Antes de comenzar a trabajar quiero que conozcas cuales son los principales parámetros que definen un transistor MOSFET.
Aviso importante, las hojas de características técnicas de los MOSFET de Canal-P suelen mostrar los valores máximos con números negativos. Lo digo más que nada para que no te explote la cabeza si lo ves así ;)
Corriente de drenador máxima de un transistor MOSFET
Es la máxima corriente drenador-fuente que es capaz de soportar el transistor de forma continua. En caso de que se aplique una corriente mayor este puede resultar dañado.
En las hojas de características técnicas este parámetro (al igual que otros que veremos a continuación) se encuentran ubicados en la tabla de Absolute Maximum Ratings, tal y como se muestra en la siguiente figura.
Viendo el transistor MOSFET como un interruptor, podemos decir que esta es la máxima corriente que puede circular por la carga que queremos controlar.
Aunque en este caso aparece como ID, en algunas hojas de datos es posible encontrar otras nomenclaturas como: IDS, IDS(MAX), ID(MAX), etc…
Voltajes Máximos de un transistor MOSFET
Otro de los parámetros fundamentales a la hora de seleccionar un transistor MOSFET es conocer cuáles son los voltajes máximos que soporta.
El primer voltaje a mirar siempre es el voltaje máximo entre drenador y fuente. Este voltaje determina cual es el máximo voltaje de la carga que el transistor va a encender/apagar.
Cuando hablo de carga me refiero al dispositivo que está conectado al drenador y es el que quieres controlar (encender y apagar). Este dispositivo tiene que funcionar con corriente continua. Puede ser un ventilador, un motor o una fuente de alimentación.
El voltaje máximo generalmente aparece en la tabla de Absolute Maximum Ratings aunque en algunas hojas de datos aparecen en su descripción inicial (lo puedes encontrar como VDSS).
El voltaje máximo entre la puerta y la fuente también debe ser verificado, aunque en la mayoría de los casos no es necesario utilizar voltajes de compuerta elevados.
Es el voltaje que controla el dispositivo que vas a controlar (encendido y apagado). En nuestro caso es donde conectaremos un pin digital de Arduino o ESP8266.
Este voltaje también aparece en las hojas de características técnicas en la tabla de Absolute Maximum Ratings como se muestra en la siguiente imagen (lo puedes encontrar como VGS).
Potencia máxima
Es la máxima potencia que el transistor es capaz de disipar y se mide en Vatios o Watts (W) y aparece usualmente en la tabla de Absolute Maximum Ratings (lo puedes encontrar como PD).
La potencia disipada en un transistor MOSFET es calculada según la siguiente expresión:
Para garantizar que nuestro dispositivo no se dañe es necesario garantizar que dicho producto nunca sea mayor al especificado en la hoja de características técnicas.
Voltaje umbral de compuerta (Threshold Voltage) de un transistor MOSFET
Este es el voltaje de compuerta mínimo que se necesita para lograr la conducción entre los terminales de drenador y fuente. Por debajo de ese voltaje el transistor se comportará como un circuito abierto o cerrado dependiendo del tipo.
Este es uno de los parámetros más importantes ya que determina los voltajes necesarios para encender y apagar el transistor MOSFET.
Este parámetro usualmente se encuentra en las hojas de características técnicas en la tabla Electrical Characteristics (lo puedes encontrar como VTH, VGS(TH) o VGS(TO)).
En algunas hojas de datos este parámetro es ofrecido mediante una gráfica donde se representa el voltaje umbral (VGS) frente a la corriente de drenador (ID).
En la hoja de características del BSP100 puedes ver de lo que hablo.
A partir de esta gráfica es posible determinar que el voltaje umbral es aproximadamente de 2.5 voltios. Esto lo convierte en una opcion ideal para utilizar tanto con Arduino como con un ESP8266.
Resistencia de encendido de un transistor MOSFET
La resistencia de encendido de un transistor es el valor de resistencia mínima entre los terminales drenador y fuente cuando el transistor se encuentra operando en zona lineal.
Esto lo veremos más adelante en los modos de operación. De momento solo te digo que representa la resistencia del interruptor cuando está encendido.
Por lo general, RDS(ON) se especifica en las hojas de características técnicas para un valor de VGS (puedes encontrarlo como RDS(ON) o RDS(ON))
De momento solo decir que su valor es muy pequeño, en el orden de los mili-ohmios. En las hojas de características técnicas se encuentra en la tabla de Electrical Characteristics o en el resumen inicial. En algunos casos incluso se ofrecen gráficas ya que este valor puede variar con otros parámetros como VGS e ID principalmente.
Transistor MOSFET, modos de operación
Al igual que los transistores bipolares, los MOSFET cuentan con tres zonas de operación:
- Óhmica (también llamada región lineal o triodo): en esta zona el transistor se comporta como una resistencia controlada por voltaje.
- Saturación: este es el modo empleado para la amplificación de señales ya que en este modo el MOSFET se comporta como una fuente de corriente controlada por voltaje.
- Corte: en este modo no fluye corriente de drenador a fuente. Se comporta como un circuito abierto.
El modo de saturación de los MOSFET NO ES equivalente al modo saturación de los BJT.
Como la idea es utilizar el transistor MOSFET como un interruptor solo veremos las zonas óhmicas y de corte ya que son las que nos permiten utilizarlo para tal fin.
Zona de corte de un MOSFET
En la zona de corte, el transistor MOSFET se comporta como un circuito abierto entre drenador y fuente. Por lo tanto, no circula ninguna corriente entre los terminales.
Para que el transistor opere en este modo es necesario que el voltaje compuerta-fuente (VGS) sea menor que el voltaje de umbral (VGS(TH)).
Matemáticamente podemos expresarlo mediante la siguiente expresión:
Mientras garanticemos que esta expresión se cumpla podemos asegurar que el transistor está en corte.
Recuerda que el valor VGS(TH) es propio de cada transistor y debe ser obtenido de su hoja de datos
Cuando el transistor opera en este modo la corriente de drenador es cero, por tanto:
Como puedes ver, en esta zona de operación el transistor no disipa potencia alguna. En principio no consume nada.
Zona Óhmica o lineal
Para que el transistor opere en zona lineal es necesario que se cumplan dos condiciones:
Y que
Cuando un MOSFET está polarizado en la región óhmica, el valor de RDS(ON) viene dado por la ley de Ohm:
En esta zona el transistor se comporta como una resistencia controlada por voltaje. Como ya te comente anteriormente en las hojas de datos se ofrecen gráficas y/o tablas con varios valores que permiten estimar el valor de RDS(ON).
Como el valor de RDS(ON) es muy pequeño la caída de tensión drenador-fuente es pequeña también. Es precisamente esta condición la que permite utilizar al MOSFET como un interruptor cerrado.
Cuando el transistor trabaja en este modo la potencia disipada es calculada mediante la siguiente expresión:
Es importante garantizar que este producto no supere el valor máximo especificado en la hoja de datos.
Bien, ahora que tenemos clara la teoría ¿qué tal si vemos como conectar un transistor MOSFET con Arduino?
Cómo conectar un transistor MOSFET con Arduino
Uno de los inconvenientes de los MOSFET es que por lo general requieren altos voltajes de compuerta para funcionar adecuadamente. Esto no significa que no se puedan emplear con Arduino o cualquier otro sistema digital, simplemente indica que no podremos aprovecharlos al máximo.
Por ejemplo, el IRF530 es capaz de manejar hasta 14 amperios (ID). Sin embargo al utilizarlo con una VGS tan baja como 5 voltios solo se obtienen corrientes de poco más de 1 amperio.
Por suerte para nosotros existen los Logic Level MOSFET (MOSFET de niveles lógicos). Estos fueron diseñados para suplir ese problema y son capaces de ofrecer una alta corriente con voltajes de compuerta tan pequeños como 5V o incluso 3V.
Un buen ejemplo de este tipo de MOSFET es el IRL40. En su hoja de datos podemos encontrar la siguiente gráfica que muestra la relación entre el ID y VGS.
Como puedes ver con 3 voltios es suficiente para encender el transistor. Seguro notaste por los valores de ID este es un transistor de gran potencia, quiza demasiada para nuestros proyectos :).
Un caso más común en el uso con Arduino es el IRL540. Este transistor es capaz de manejar una corriente de hasta 28 amperios con un voltage de compuerta de tan solo 5 voltios. Esto lo puedes comprobar en la siguiente figura tomada de su hoja de datos.
Existen infinidad de estos y todo depende de la aplicación que estés desarrollando.
Aquí tienes otros modelos que te pueden resultar factibles en muchos casos. Pero no olvides verificar sus hojas de datos para comprobar que en realidad se adaptan a los requerimientos de tu proyecto con Arduino o con ESP8266:
Eso sí, estas grandes ventajas tienen un inconveniente. Y es que como debes estar pensando son un poco más caros que los MOSFET tradicionales. Aunque tampoco es que cuesten una fortuna.
Dejemos ya la teoría y comencemos con algo. En la siguiente imagen te muestro el esquema de conexión para controlar un MOSFET de nivel lógico con Arduino.
[IMAGEN PONER NOMBRES A LOS TRANSISTORES CANAL-N Y CANAL-P]
Canal-N: para cerrar el interruptor es necesario poner un estado alto (5V o 3.3V) en la compuerta del transistor. En caso contrario es necesario poner el pin de salida en estado bajo (0V) haciendo que el transistor se comporte como un circuito abierto.
Canal-P: esta configuración es complementaria a la anterior. Por lo tanto poniendo un estado bajo se logra un voltaje de compuerta que hace que el transistor se comporte como un interruptor cerrado. Al contrario de lo que sucede con un estado alto donde se comporta como un interruptor abierto.
El resistor Rg es utilizado para ofrecer una protección adicional al Arduino. Ya que en caso de que el MOSFET se dañe, este resistor limita el consumo de corriente excesivo que se pueda generar.
El resistor R1 por su parte cumple función de resistencia de pull-down (o pull-up para el Canal-P). Su principal objetivo es evitar que el pin de compuerta quede flotante (totalmente desconectado), ya que esto puede provocar un funcionamiento errático en el transistor.
No es recomendable conectar la compuerta directamente a un pin digital del Arduino. Por lo general se debe utilizar una resistencia.
El caso más común es el de Canal-N ya que para controlar los de Canal-P es necesario poner un voltaje igual a VDD en el pin digital del Arduino.
Eso no es problema cuando la carga a controlar opera al mismo voltaje que el Arduino. Pero ¿qué pasa si queremos controlar una carga de 12 voltios?
La solución más simple es utilizar un MOSFET Canal-N. Sin embargo hay otras alternativas que te muestro más adelante.
En la siguiente figura te muestro el esquema en fritzing para controlar un motor de DC con un MOSFET Canal-N de nivel lógico.
En este caso el terminal de la derecha es la fuente, el del centro el drenador y por último, a la izquierda, la compuerta.
Se ha colocado un diodo en inversa paralelo al motor para proteger al MOSFET de los efectos inductivos.
Hasta aquí todo bien pero, ¿qué hacer si no tenemos un MOSFET de nivel lógico?
Pues ese es un caso muy común, ya sea por presupuesto o la razón que sea, es posible que no dispongamos de un transistor MOSFET de nivel lógico y lo que tengamos sea un MOSFET común y corriente.
Para poder utilizar este transistor con Arduino debes utilizar una de estas configuraciones.
[IMAGEN PONER NOMBRES A LOS GRUPOS DE TRANSISTORES CANAL-N Y CANAL-P]
El principal inconveniente de esta solución es que se necesita un transistor bipolar para activar al MOSFET. En estos casos podemos utilizar un transistor de baja potencia como el 2n2222 u otro similar.
Otro inconveniente viene dado por el consumo. La gran ventaja de los MOSFET es que no necesitan corriente para activarse, pero en este caso estamos colocando un BJT para excitarlo que sí que necesita.
Esto implica un consumo adicional y por lo tanto esta configuración no es la más adecuada para aplicaciones de bajo consumo.
Como ventaja, esta variante nos permite utilizar un MOSFET común y corriente tanto de Canal-N como de Canal-P como si fuera uno de nivel lógico.
¿Dónde comprar un transistor MOSFET?
Antes de poder utilizar un transistor MOSFET hay que comprarlo. Hay muchas opciones en Internet pero las más interesantes son las siguientes:
Antes de ver un ejemplo práctico déjame mostrarte donde puedes obtener un transistor MOSFET que se ajuste a tus necesidades.
Mouser
Mouser es un distribuidor de componentes electrónicos y semiconductores presente en casi todo el mundo. Si entras a su sitio encontrarás un amplio catálogo de todo tipo de componentes. Específicamente en el caso de los MOSFET te encontrarás con una página que te permite filtrar los MOSFET para facilitar tu búsqueda.
Con este distribuidor encuentras precios justos y productos de calidad.
Los MOSFET normales se encuentran, generalmente, a precios menores de 1 euro. Por supuesto siempre depende del transistor en sí.
Los MOSFET lógicos se encuentran con precios entre 1 y 3 euros. Es normal que sean más caros que los comunes, a fin de cuentas su proceso de desarrollo es más complejo y costoso.
Siempre ten en cuenta que obtendrás mejores precios si compras en cantidades grandes. Pero que no exageres, no vayas a comprar ahora 1000 transistores de un solo tipo.
Amazon
En Amazon también puedes encontrar buenos precios. En algunos casos incluso mejor que en Mouser. Sin embargo, si buscas un dispositivo en particular es posible que no lo encuentres.
Por otra parte en amazon puedes encontrar módulos MOSFET ya montados. Simplemente conectar a tu Arduino y listo.
[IMAGEN QUITAR LOS PRECIOS Y LAS DESCRIPCIONES]
La mayoría de estos módulos operan a 3.3 V y 5 V por lo cual son útiles para cualquier Arduino. Sin embargo, te recomiendo que revises la hoja de datos del transistor que se utilice en el módulo para evitar sorpresas inesperadas.
El gran inconveniente de estos módulos es su precio, muy superior a comprar el transistor solo. Si tu intención es hacer pruebas está bien pero para un proyecto final son totalmente desaconsejables.
SparkFun
SparkFun es conocida, entre otras cosas, por la cantidad de módulos y kits destinados o compatibles con Arduino. Y como era de esperar también disponen de kits MOSFET.
El más simple y económico es el SparkFun MOSFET Power Control Kit con solo cuatro componentes y un precio muy económico. Utiliza el RF30N06LE que es capaz de manejar cargas de hasta 60V y 30A.
Ahora, si necesitas controlar varias cargas quizá el SparkFun Power Driver Shield Kit sea tu mejor opción. Aunque es una opción más cara proporciona ciertas ventajas:
- En primer lugar presenta una arquitectura Shield (compatible con Arduino UNO, Arduino MEGA y placas compatibles).
- Permite controlar un total de 6 cargas (3 a 12 voltios y otras 3 a 5 voltios).
- Al igual que el anterior utiliza RF30N06LE, por lo tanto es capaz de manejar 30A por cada carga.
Ejemplos de uso de un transistor MOSFET con Arduino
Todo lo que hemos visto anteriormente no tiene mucho sentido si no lo pones en práctica. En las siguientes secciones te voy a mostrar cómo puedes utilizar un transistor MOSFET con Arduino de diferentes formas.
SparkFun Power Driver Shield Kit
Utilizar un Shield de Arduino es la forma más sencillo de iniciarse con ciertos componentes y un transistor MOSFET no iba a ser menos.
Eso sí, necesitas tener un Arduino UNO, Arduino MEGA o cualquier placa compatible. También necesitarás una fuente de alimentación ATX, de las de los ordenadores.
Y por supuesto, un Power Driver Shield Kit de Sparkfun.
Solo tienes que colocar el Shield de Arduino en la posición correcta sobre un Arduino y ya podrías controlar los MOSFET que tiene este Shield con los pines digitales 3, 5, 6, 9, 10 y 11.
Lo de la fuente ATX para alimentar el Shield es un gran inconveniente y quizás no sea la mejor opción pero para ciertos proyectos puede resultar interesante.
El circuito anterior muestra cómo controlar dos cargas: un motor de DC y un LED de potencia. El LED ha sido conectado a uno de los MOSFET de la sección de 5V, mientras tanto el motor se ha conectado a la de 12V.
En caso de que no dispongas de una fuente ATX y quieras utilizar el Shield de Arduino, a continuación te dejo la distribución de pines de este conector. Solo necesitas conectar los pines de tierra (GND), 5 y 12 voltios para que el shield funcione correctamente.
Puedes obtener los 5V de un cargador de móvil y los 12V de otro cargador que seguro que tienes por casa. Así evitas tener que utilizar una fuente ATX.
Para encender y apagar el LED y el motor solo es necesario configurar los pines correspondientes como salida (con la función pinMode) y modificar su estado (con la función digitalWrite).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#define MOTOR 3 #define LED 6 void setup(){ // configurar ambos pines como salida pinMode(MOTOR, OUTPUT); pinMode(LED, OUTPUT); // todo apagado digitalWrite(MOTOR, LOW); digitalWrite(LED, LOW); } void loop(){ digitalWrite(MOTOR, LOW); // apagar motor digitalWrite(LED, HIGH); // encender led delay(2000); // esperar 2 segundos digitalWrite(MOTOR, HIGH);// encender motor digitalWrite(LED, LOW); // apagar led delay(2000); // esperar 2 segundos } |
En el código se muestra como configurar los pines digitales para controlar los MOSFET. En este caso son activados mediante un estado alto (ya que son Canal-N) y apagados con un estado bajo.
En el siguiente código te muestro como puedes controlar ambos componentes, de forma independiente, desde el ordenador.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#define MOTOR 3 #define LED 6 void setup(){ // configurar ambos pines como salida pinMode(MOTOR, OUTPUT); pinMode(LED, OUTPUT); // todo apagado digitalWrite(MOTOR, LOW); digitalWrite(LED, LOW); Serial.begin(9600); // Esperar por puerto serie. while(!Serial); } void loop(){ if( Serial.available() ){ char x = Serial.read(); switch( x ){ case 'M': digitalWrite(MOTOR, HIGH); break; case 'm': digitalWrite(MOTOR, LOW); break; case 'L': digitalWrite(LED, HIGH); break; case 'l': digitalWrite(LED, LOW); break; default: break; } } } |
En este caso para encender el motor es necesario enviar el carácter ‘M’ y para apagarlo se utiliza el carácter ‘m’. De forma similar se emplea ‘L’ para encender el LED y ‘l’ para apagarlo.
En cada iteración del loop se comprueba la presencia de caracteres en el puerto serie. Si estos existen son leídos y se realiza la acción correspondiente. En caso de que se envíe un caracter no valido este es ignorado.
En el siguiente ejemplo te voy a mostrar cómo utilizar un transistor MOSFET de forma independiente, sin un Shield o sin un módulo.
Transistor MOSFET con Arduino
Si bien el Power Driver Shield de SparkFun es realmente versátil y nos facilita el trabajo hay ocasiones en las que no hace falta tanto. Veamos una aplicación donde esto ocurre.
Supón que deseas controlar el backlight (luz trasera) de un display LCD desde el Arduino. Es algo muy útil cuando no estás mostrando información relevante en la pantalla LCD y quieres ahorrar energía.
Estas pantallas utilizan un backlight que funciona a 5V (la gran mayoría). Y aunque los pines digitales de Arduino proporcionan los 5V, no se pueden conectar directamente a la alimentación de la pantalla LCD.
Esto es debido a que consumen una media de 100 mA o incluso más, y por los pines digitales de un Arduino tenemos la limitación de 40 mA.
La solución es utilizar un transistor para encender y apagar el backlight.
En la siguiente figura te muestro la solución a este problema utilizando un transistor MOSFET.
Como puedes ver, los pines de comunicación del LCD se conectan como siempre.
Los dos últimos pines del LCD corresponden al backlight (de derecha a izquierda, LED+ y LED-):
- El pin LED+ (terminal positivo del led) es conectado al pin de 5 voltios del Arduino.
- El pin LED- (terminal negativo del led) es conectado al pin drenador (drain) del MOSFET que actúa como interruptor.
El MOSFET empleado es un RFP12N10L. Si revisas su hoja de datos podrás notar que es un transistor de nivel lógico capaz de manejar una corriente de hasta 12 amperios (más que suficiente para un backlight de pantalla).
El pin de compuerta del transistor es conectado al pin 9 del arduino utilizando un resistor. El pin de drenador está conectado al terminal LED- de la pantalla. Por último el pin de fuente es conectado a tierra.
Con esta conexión al poner un estado alto en el pin 9 se cierra el interruptor (los pines drenador y fuente se cortocircuitan). De esta forma el terminal LED- queda conectado a tierra y el backlight enciende.
Si por el contrario se impone un estado bajo en el pin 9 el interruptor se mantendrá abierto (no circula corriente entre drenador y fuente). De esta forma el terminal LED- queda desconectado de tierra y el led permanece apagado.
Algunos backlight necesitan una resistencia entre el terminal positivo y los 5 voltios. Esto se debe a que algunas pantallas no traen una resistencia en serie con los leds del backklight que limiten su consumo.
Un valor de resistencia entre 100 y 500 ohmios suele ser suficiente. En caso de que la pantalla se caliente el valor debe ser incrementado a 1 o 2 kilo-ohmios.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <LiquidCrystal.h> #define BACKLIGHT 9 LiquidCrystal lcd(3, 4, 5, 6, 7, 8); void setup(){ // Configura el pin del backlight como salida pinMode(BACKLIGHT, OUTPUT); // Inicializar LCD lcd.begin(16,2); // Configura el puerto Serie a 9600 baudios Serial.begin(9600); while(!Serial); // Esperar por el puerto serie lcd.clear(); } String str; uint8_t cnt = 0; void loop(){ delay(600); lcd.home(); lcd.print( "cont: " ); lcd.print( cnt++ ); lcd.setCursor(0, 1); if( digitalRead(BACKLIGHT) ) lcd.print( "LIGHT ON" ); else lcd.print( "LIGHT OFF" ); if( Serial.available() ){ str = Serial.readString(); if( str == "ON" ){ digitalWrite( BACKLIGHT, HIGH ); } else if( str == "OFF" ){ digitalWrite( BACKLIGHT, LOW ); } } } |
En el código te muestro un ejemplo simple de control del backlight para el circuito anterior. La lógica del programa es verificar el puerto Serial y si recibe el mensaje “ON” enciende el backlight; en caso de recibir “OFF” lo apaga.
Control alimentación proyecto con un transistor MOSFET y un ESP8266
Esta idea llega de la mano de Andreas Spiess en el video donde nos muestra cómo realizar nuestro propio Amazon Dash Button totalmente DIY utilizando un ESP8266 y un MOSFET Canal-P de nivel lógico.
Por si no los conoces, los Amazon Dash Button son dispositivos pequeños capaces de realizar una compra específica en Amazon. Su éxito está en su sencilla interfaz, ya que posee un simple pulsador.
Con solo presionarlo ya tienes echo el pedido y en menos de 24 horas tendrás el producto en casa.
Pero bueno, volviendo a lo que nos interesa. En la siguiente figura puedes ver la arquitectura de un sistema de esta naturaleza.
En la imagen se puede ver que el sistema cuenta con cuatro componentes principales:
- Batería: Esta es utilizada como fuente de alimentación por el sistema
- Interruptor mecánico: Este es el interruptor que encenderá nuestro sistema. (este es el botón o el sensor mecánico que provocará que el ESP8266 se encienda)
- ESP8266: Es el sistema inteligente que realiza la acción necesaria (emitir una señal, guardar a qué hora ocurrió el evento o algo por el estilo). En este caso se utiliza un ESP8266, pero puede utilizarse cualquier placa Arduino que opere a 3.3 voltios y tienes conexión a una red WiFi.
- Interruptor controlable (transistor MOSFET): Este interruptor es el que permite al sistema mantenerse encendido aún cuando el interruptor mecánico no esté presionado.
Lo más interesante del proyecto es que gracias a este sistema, el proyecto es capaz de consumir 0 mAh o muy poco, depende de la configuración. Esto quiere decir que solo consume cuando está funcionando.
El modo deep sleep de ahorro de energía del ESP8266 permite ahorrar mucha batería pero este sistema todavía más.
Imagínate, si no accionamos el pulsador durante meses, la pila no consumirá y podrá durar años.
Vale, pero veamos cómo se consigue esto.
Principio de funcionamiento
Analicemos el sistema para cada uno de los posibles estados en que se puede encontrar.
En un primer momento asumimos que está en reposo, con los dos interruptores (el mecánico y el MOSFET) abiertos. Bajo estas circunstancias el circuito no consume corriente alguna, es como si los cables estuvieran cortados.
Cuando el interruptor mecánico se cierra (se presiona el pulsador o se activa el sensor) la corriente fluye a través de él. Esto permite que el sistema se alimente.
Es importante tener en cuenta que ese interruptor no está presionado mucho tiempo por lo tanto, es necesario activar el MOSFET mediante el software poniendo el pin correspondiente en estado bajo.
El pin de compuerta debe ser puesto en estado LOW lo antes posible. Debe ser lo primero que se haga en la función setup.
Una vez el MOSFET esté activo no importa si el interruptor mecánico es liberado ya que la corriente fluirá a través del MOSFET. Esto permite que el sistema se mantenga encendido hasta que complete su tarea.
Una vez completada la operación, el ESP8266 debe apagarse por completo. Esto se consigue poniendo el pin donde está conectado el MOSFET en estado HIGH.
Ahora que comprendes el funcionamiento del sistema se te ocurran un montón de ideas en las que lo puedes aplicar:
- Para que te envié un correo cuando alguien abra la puerta de tu casa o tu cuarto (en este caso el pulsador se sustituye por un interruptor magnético).
- Para controlar el llenado o vaciado de un tanque de agua (puedes utilizar un sensor de inclinación).
Estoy seguro que se te ocurren un montón de aplicaciones, puedes dejar tus ideas en los comentarios del artículo.
Circuito eléctrico con MOSFET y ESP8266
Basándome en los esquemas propuestos por Andreas Spiess decidí montar mi propio circuito con las misma funcionalidad.
Esto me llevó a tres variantes diferentes.
Bajo consumo MOSFET ESP8266 No. 1
Este caso es casi idéntico al propuesto en el video. Solamente he añadido algunos componentes.
El Diodo D1 cumple dos funciones, ambas de protección:
- Protege el sistema en caso de que, por error, la batería se coloque invertida.
- Permite utilizar baterías con un voltaje ligeramente superior al máximo permitido por la placa WeMos D1 mini (3.6 voltios).
Ese segundo punto es crucial si piensas utilizar una batería de más de 3.6 voltios.
Te recomiendo utilizar un diodo tipo Schottky que proporciona una caída de voltaje de 0.2 a 0.4 voltios. Eso te permitirá utilizar baterías de hasta 3.9 voltios más o menos.
Ojo que eso es pensando en la WeMos D1 mini que utiliza un ESP8266. Si planeas utilizar otra placa debes tener en cuenta cuál es el rango de voltajes de operación.
De cualquier forma, aquí te dejo una lista de posibles diodos que puedes utilizar:
Por otro lado hay que elegir el MOSFET. Debe tener un voltaje umbral (VTH) menor que el voltaje de la batería. Si no utilizas este tipo de MOSFET con el ESP8266, se verá afectada la eficiencia ya que existirán pérdidas de voltaje en el MOSFET.
Una posible lista de transistores MOSFET para utilizar con el ESP8266 es esta:
No olvides revisar sus hojas de datos para comprobar que cumplan con los requerimientos de tu proyecto.
La resistencia R1 es una resistencia pull-up. Su función es mantener el MOSFET apagado mientras el ESP8266 no está alimentado. Esta resistencia es crucial ya que, de no utilizarse, la compuerta del MOSFET quedaría flotante (sin un estado definido). Esto puede provocar un mal funcionamiento del circuito.
Los condensadores C1 y C2 se utilizan para estabilizar el voltaje. El condensador C2 debe ser un electrolítico que se encarga de evitar grandes variaciones de voltaje (con un valor entre los 47 y 100 uF suele ser suficiente).
El condensador C1 por su parte se utiliza para eliminar el ruido de radiofrecuencia y las variaciones de voltaje más pequeñas (debidas al efecto rebote del pulsador mecánico, por ejemplo). En este caso se puede utilizar uno pequeño, cercano a los 100 nF.
El pulsador tipo push lo puedes cambiar por cualquier sensor mecánico: un interruptor magnético (igual a los que hay en las puertas de algunos locales), un sensor de inclinación u otro que tengas. Lo ideal es que no requiera alimentación (recuerda que buscamos un consumo bajo).
Aquí te dejo una imagen de como quedaría el montaje final del circuito en una placa de prototipos.
Mucho ojo, las baterías LiPo de 3,7V suelen dar entorno a 4V cuando están completamente cargadas. Asegúrate de este valor antes de conectar el circuito y utiliza un diodo adecuado para tu proyecto.
Bajo consumo MOSFET ESP8266 No. 2
Un problema con la primera variante es que no se pueden utilizar baterías que tenga un voltaje de salida mayor de 4V que son la mayoría. Una solución a este problema es utilizar un regulador tal y como puedes ver en la siguiente figura.
En este caso he decidido utilizar un regulador de 3.3 voltios perteneciente a la familia MCP1700. Este regulador puede ofrecer hasta 250 mA con una gran estabilidad a su salida. Incluso con un voltaje de entrada próximo a los 3.3 voltios.
En la hoja de características técnicas puedes ver una descripción del MCP1700.
Un inconveniente con esta configuración es que el regulador se mantiene trabajando todo el tiempo. Por tanto, tendremos un pequeño consumo de corriente. Estamos hablando de entre 1.6 µA y 4 µA (tal y como puedes ver en la imagen anterior).
Este consumo es menor que el modo deep sleep del ESP8266. Aunque sea bastante poco, debes tener en cuenta que como mínimo 4 µA.
Ojo, lleva cuidado con la batería. Puede que se descargue más de la cuenta y eso puede resultar peligroso y dañar la propia batería. En caso de montar este circuito deberías controlar su voltaje.
Bajo consumo MOSFET ESP8266 No. 3
En este caso se logra apagar totalmente el circuito, a diferencia de la variante anterior donde el regulador se mantenía consumiendo corriente de la batería.
En esta alternativa en lugar de un MOSFET canal-P se utiliza uno canal-N. Esto se debe a que ahora se controla la conexión entre el circuito y el terminal negativo de la batería.
Otro cambio importante es que ahora la resistencia del MOSFET (R2) está conectado como pull-down para que el circuito se mantenga apagado en estado de reposo.
Los capacitores cumplen una funcion similar a los de la variante No 2. En este caso el capacitor de 47uF debe ser un capacitor polarizado (electrolítico o de tantalio, da igual) que evita grandes variaciones de voltaje. Su valor puede ser mayor sin ningún problema (Pero no exageres, con 100uF es más que suficiente).
Los dos más pequenos, de 100nF, pueden ser ceramicos o de cualquier otro tipo no polarizado. Estos se encargan de que el ruido electromagnético de otros aparatos no interfiera en el sistema.
Y una vez vista la configuración a nivel de hardware, vamos a pasar a ver el código.
Código MOSFET y ESP8266
Recordando el funcionamiento del circuito es importante tener en cuenta como debe quedar confeccionado el sketch de la aplicación.
En primer lugar es necesario que apenas se encienda el ESP8266, se active el MOSFET. Esto es para garantizar que el circuito no se apague. Para lograrlo es necesario configurar el pin 3 como salida en inmediatamente poner un estado LOW.
En caso de utilizar la tercera variante del circuito, con transistor MOSFET canal-N, es necesario ponerlo en estado alto (HIGH).
1 2 |
pinMode(3, OUTPUT); digitalWrite(3, LOW); |
Una vez el MOSFET ha sido activado es hora de que la placa cumpla con su cometido. Aquí es donde realiza la acción que deseamos. Puede conectarse a una red Wifi y enviarnos un correo, subir datos a un servidor, o lo que se te ocurra.
Incluso puede conectar con Node-RED.
En este caso solamente encenderá y apagará el LED de la placa.
1 2 3 4 5 |
pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); |
Finalmente es necesario apagar el MOSFET para que el sistema se apague totalmente
1 |
digitalWrite(3, HIGH); |
En caso de utilizar la tercera variante es necesario poner el pin de control del MOSFET en estado LOW para apagar el circuito.
Aquí tienes un ejemplo de código completo que puedes tomar como base para desarrollar tu propia aplicación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void setup() { pinMode(3, OUTPUT); // pin de control como salida digitalWrite(3, LOW); // encender MOSFET pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // encender led de la placa delay(1000); // esperar 1 segundo digitalWrite(LED_BUILTIN, LOW); // apagar led delay(1000); // esperar 1 segundo digitalWrite(3, HIGH); // apagar MOSFET } void loop() { } |
Ten en cuenta que todo el código se escribe en la función setup y que la función loop se queda vacía ya que nunca se ejecuta. Es algo parecido a lo que sucede cuando se utiliza el modo deep sleep del ESP8266.
Conclusiones
A lo largo de este tutorial has comprobado cómo un transistor MOSFET puede resultar muy útil en nuestros proyectos con Arduino y ESP8266.
Sin embargo, hay que dedicar un poco de tiempo a saber cómo funcionan y cómo utilizarlos.
Recuerda que es fundamental que mires las hojas de características técnicas de los transistores MOSFET.
Cualquier pregunta, opinión o proyectos, puedes dejar un comentario aquí abajo.