Alimentar desde NodeMCU, Wemos Mini D1 y Arduino

Última modificación el 26 enero, 2021

En muchas ocasiones, en nuestros proyectos, alimentamos nuestro microcontrolador mediante un cable USB conectado a un cargador de móvil u ordenador y necesitamos alimentar periféricos (sensores, pantallas, LEDs, etc. que funcionan a 5 voltios. ¿Podemos hacerlo sin problemas?

Recientemente, el usuario Jesús, hizo un comentario en el blog, concretamente en el artículo del Medidor de CO2 Casero con wifi, realmente interesante.

Empecé a contestar el comentario y según escribía, la respuesta se iba haciendo más y más larga y me daba cuenta de que necesitaba más recursos para responderla (imágenes, video, un formato más rico, etc). Decidí que era un tema muy interesante y que podía dar para mucho más, para poderlo abarcar mínimamente (cada vez que trataba de explicar un punto me daba cuenta de que tenía que explicar otros para que tuviera sentido) y de ahí surge el artículo que estás leyendo.

Básicamente, el tema era, si podemos utilizar la entrada de alimentación externa de un NodeMCU para alimentar periféricos que funcionan a 5 voltios.

Todo lo que explico en el artículo es válido también para Arduino pero con algunas salvedades que luego comentaré (debido a que no hay un solo Arduino, sino muchos, y hay que ver cada uno, porque son diferentes). También aplica a placas como la Wemos D1 Mini y otras similares.

La duda o consulta

Concretamente, el usuario decía lo siguiente en su comentario:

“Me he estado documentando y resulta que la ESP es incapaz de dar 5V. El Vin/GND está para alimentarla con tensión “sin regular” entre 5V y 12V. Pero no para sacar 5V de allí. De hecho, el que dé tensión al conectarla con micro USB es un subproducto, no una especificación. De hecho, en cualquier proyecto que necesite 5V (motores), necesitas un alimentador específico, no se puede tirar de Vin (por lo que he ido leyendo). Con el MH-Z19B hay suerte porque su rango de entrada es más amplio (aunque está tan cerca del límite que casi seguro que a alguno no le está valiendo y le salen valores saltarines), pero con la MH-Z19C no.”

Desde luego es una observación muy válida, y de gran utilidad si necesitamos alimentar determinados sensores o periféricos a 5 voltios (como es el caso del sensor de CO2 MH-Z19C que necesita para funcionar, según las especificaciones del fabricante, un voltaje de entre 4.9 y 5.1 voltios).

Mi más sincera enhorabuena a Jesús, porque ha dado con un punto importantísimo y, además, como él mismo indica, no tiene ni idea de electrónica (y, precisamente, a quién no tiene ni idea de electrónica está destinado este artículo; para ayudarles a salir de dudas o a encontrar algo de información fundada).

Como sabes, el problema con las afirmaciones que se leen por internet, es que, como con todo en la vida, hay afirmaciones de todos los tipos y colores y, muchas veces, están basadas solamente en cosas que pasan de boca en boca sin ninguna explicación técnica medianamente rigurosa. Además, la gente tiene tendencia a generalizar y donde una cosa es cierta, en un caso determinado, hay otro caso parecido en la que no lo es.

Buscando por internet he encontrado multitud de sitios en los que se dice que el NodeMCU es incapaz de proporcionar 5V, afirmando que el hecho de que el pin Vin dé tensión al conectar la placa mediante USB es un subproducto y no una especificación, y otras cosas parecidas.

Poco menos que algunos te avisan de peligro de muerte si conectas algo al pin Vin mientras alimentas el NodeMCU por USB.

La realidad es que, no siendo completamente falso que el NodeMCU es incapaz de dar 5V, en la mayoría de casos no nos va a afectar a la hora de conectar periféricos como sensores y displays.

Por suerte, el NodeMCU (y los diferentes Arduinos) y sus componentes están muy bien documentados, por lo que es fácil analizar cuál es la realidad y en qué casos esto es cierto y en qué casos no lo es.

El fondo de la cuestión

La pregunta que se plantea, al final, es sencilla.

El NodeMCU se puede alimentar de dos formas:

  • Mediante un puerto USB (como un cargador de móvil, un ordenador, o similar)
  • Mediante una tensión aplicada a sus pines Vin y GND

En la mayoría de las ocasiones alimentamos el NodeMCU o el Arduino con un alimentador/cargador USB de los que solemos utilizar para los teléfonos móviles.

A lo mejor también te interesa:  Utilizar un zumbador (buzzer) con ESPEasy

¿Podemos, en este caso, utilizar el pin que normalmente se utiliza para alimentar el NodeMCU, o el Arduino, para alimentar otros elementos que funcionan a 5 voltios sin necesidad de buscarnos una alimentación independiente?

La alimentación del NodeMCU V3

Para empezar a analizar la situación y si realmente hay un problema o no, vamos a ver cómo funciona la alimentación del NodeMCU.

Me voy a referir en esta explicación al NodeMCU V3, que es el más extendido hoy día, y más adelante me referiré a versiones más antiguas.

Este es un extracto del esquema del NodeMCU con la circuitería correspondiente a la alimentación:

La explicación de este esquema es muy sencilla, y yo creo que cualquier aficionado la puede entender si se explica con palabras llanas y coloquiales (aunque por el camino nos perdamos algún matiz):

  • El ESP8266, que es el microcontrolador que va montado en la placa NodeMCU, realmente se alimenta a 3.3 voltios.
  • El puerto USB se conecta a un regulador de tensión (en la práctica suele ser un AMS1117) que, independientemente del voltaje que le entre (dentro de los límites del regulador) sacará 3.3 voltios para alimentar el ESP8266.
  • Los pines Vin (positivo) y GND (negativo) también van conectados al mismo regulador de tensión, con la salvedad de que lo hacen con un diodo intercalado (que solo deja pasar la corriente en un sentido) para que, cuando metes el voltaje por los pines Vin y GND no salga por el USB hacia el cargador o el ordenador y lo estropee.

Lo explicado anteriormente tiene los siguientes efectos, peculiaridades o cosas a tener en cuenta:

  • El regulador siempre saca una tensión inferior a la que le entra. Dependiendo del regulador escogido (pueden ser muchos distintos en diferentes NodeMCU) esa reducción del voltaje, o caída de tensión, suele ser de aproximadamente 1.2 voltios. Vamos, que si al regulador de 3.3 voltios le metemos 4.2 voltios, el regulador podrá darnos como mucho 3.0 voltios (los 4.2 voltios de la entrada menos los 1.2 voltios de diferencia mínima entre entrada y salida).
  • El diodo también tiene una caída de voltaje. Dependiendo del tipo de diodo y de la corriente consumida, puede ser de, aproximadamente, entre 0.2 y más de 1 voltio. Esto quiere decir que si en el USB tenemos 5.0 voltios, en el pin Vin (la salida del diodo) tendremos entre 4.8 y 4.0 voltios.
  • El diodo normalmente es del tipo Schottky, con una caída de voltaje de unos 0.2 voltios.

Un caso especial: La alimentación del NodeMCU V0.9

Aunque el NodeMCU que encontramos más a menudo es el llamado V3 existen todavía a la venta (y algunos usuarios tendrán por los cajones y les convendrá saberlo) un NodeMCU versión 0.9.

La alimentación del NodeMCU versión 0.9 es casi igual que el NodeMCU V3 pero hay un detalle muy importante (para bien y para mal) y es que, en esta versión, los 5 voltios del USB y el pin Vin están unidos directamente. Lo que entra por el USB sale por Vin y lo que entra por Vin sale por el USB.

La parte buena es que no tenemos la caída de voltaje que provoca el diodo por lo que la tensión en el pin Vin será la misma que tenemos en el USB, sin caídas (normalmente 5 voltios).

La parte mala es que el puerto USB no está protegido. Eso quiere decir que si metemos 12 voltios en el pin Vin, el NodeMCU funcionará perfectamente, porque el regulador bajara los 12 voltios a los 3.3 voltios que el ESP8266 necesita para funcionar, pero, esos 12 voltios también saldrán por el puerto USB y si tenemos algo conectado a él (cargador, ordenador, etc) lo más probable es que se estropee.

Conclusiones provisionales

Con los datos que tenemos hasta ahora, podemos ya sacar algunas conclusiones útiles que nos pueden ser útiles y que luego iremos afinando.

Desde el punto de vista del NodeMCU y del puerto USB (ordenador/cargador):

SI podemos conectar elementos externos a los pines Vin y GND para alimentarlos sin ningún problema.

Ni el diodo sufrirá, ni el USB sufrirá, ni nadie saldrá herido.

Hay que tener en cuenta que la especificación USB 2.0 no garantiza más de 500 mA de corriente por lo que si el NodeMCU, más todo lo que haya conectado a Vin consumen más de 500 mA, podría no haber corriente suficiente para todo, dependerá del cargador/ordenador y de su capacidad para dar más de 500 mA.

En la especificación USB 3.0 la corriente garantizada sube hasta los 900 mA.

Con la especificación USB 3.1 con conectores Tipo-C reversibles la corriente garantizada sube hasta los 2 amperios.

En la actualidad, debido a los altos requisitos de carga de los móviles modernos, casi todos los cargadores, USB 2.0 y superiores, y puertos de ordenador, USB 2.0 y superiores, están preparados para suministrar al menos 1 amperio, y en muchos casos 2 amperios y más.

Desde el punto de vista de lo que conectemos a Vin (sensor, LEDs, zumbador, o lo que sea):

Aquí viene la clave del tema. Al NodeMCU no le importa lo más mínimo que le conectemos algo a su pin Vin pero ¿y a lo hemos conectado, por ejemplo, un sensor? ¿le importa estar conectado a ese pin?

Esto va a depender de los requisitos de voltaje que tenga ese sensor (o lo que sea).

A lo mejor también te interesa:  Medidor de CO₂ con batería (bien hecho)

Se supone que, si son de 5 voltios, son de 5 voltios, ¿no? pero, por muy de perogrullo que parezca esto no es así, debido a que los dispositivos no funcionan a una tensión exacta, sino en un margen de tensión de funcionamiento.

¿Se alimentan los dispositivos de 5 voltios a 5 voltios? (sic)

Cuando decimos que algo funciona a X voltios, realmente siempre nos referimos a que funciona en el entorno de X voltios, o alrededor de X voltios.

Cuando estamos diseñando, siempre tenemos que ir a la hoja de datos o características del fabricante y comprobar cuál es su margen de voltaje de funcionamiento. El fabricante siempre nos dirá, al menos, su voltaje de funcionamiento típico, máximo y mínimo y podremos movernos en ese rango.

Veamos algunos ejemplos con diferentes sensores de temperatura (por ceñirnos a algo como ejemplo):

ModeloImagenDatasheetVoltageDato
LM35Hoja de datos2.7~5.5 V
DS18B20Hoja de datos3.0~5.5 V
DHT11Hoja de datos3.0~5.5 V
TMP36Hoja de datos2.7~5.5 V

Como ves los fabricantes dan unos rangos de voltaje en los que el sensor puede funcionar.

En general los rangos de voltaje que hemos visto son bastante amplios, sin embargo, no todos los componentes tienen estos rangos tan funcionamiento tan grandes.

En el caso de los sensores de CO2 que usamos en nuestros medidores, los rangos son los siguientes:

ModeloImagenDatasheetVoltajeDato
MH-Z19Hoja de datos3.6~5.5 V
MH-Z19BHoja de datos4.5~5.5 V
MH-Z19CHoja de datos4.9~5.1 V
Senseair S8 LPHoja de datos4.5~5.25 V

Como ves los rangos de voltaje de funcionamiento son mucho más estrechos que con los sensores de temperatura, que habíamos visto antes como ejemplo.

En el caso del sensor MH-Z19C el rango de voltaje de funcionamiento es especialmente estrecho (de hecho, es generalmente extraño que un componente tenga este rango tan estrecho).

Este rango tan estrecho del sensor MH-Z19C nos plantea un problema, y es que la tolerancia con las que se diseñan las fuentes de alimentación suelen ser mayores, por lo que es fácil que nuestra fuente de los teóricos 5 voltios no proporcione un voltaje que esté entre 4.9 y 5.1 voltios, sino mayor o menor.

En los sensores MH-Z19B y Senseair S8 LP nos podría llegar a generar un problema, pero, como veremos, no es tan fácil que se nos presente.

¿Dan las fuentes de alimentación de 5 voltios 5 voltios? (sic)

Por supuesto que no.

Los “5 voltios” de los que hablamos siempre, son un estándar, “un nombre“, una forma de entendernos.

Realmente, como hemos visto antes, cuando hablamos de 5 voltios no nos referimos a un voltaje de exactamente 5.00 voltios, sino a un voltaje que está en el rango de los 5V.

En el contexto en el que estamos, que es el de la alimentación a través de cables que siguen los estándares USB, o especificaciones USB, como se les suele llamar, tenemos que fijarnos en esas especificaciones para saber cuál es ese rango del que estamos hablando.

Según la especificación técnica oficial para un puerto USB 2.0, el puerto debería dar 5 voltios con una variación admisible del 5%, esto es: el voltaje en el conector USB sería de un mínimo de 4,75 Voltios y un máximo de 5,25 Voltios.

Fíjate que digo “el voltaje en el puerto” y no “el voltaje en el conector“. Esto es porque el cable que solemos utilizar para conectar el puerto con el dispositivo también tiene una caída de tensión y no sería extraño que teniendo 5.00 voltios en el puerto, tuviéramos 4.85 voltios al final de un metro de cable conectado a ese puerto.

La caída de tensión en el cable es un dato importante, puede llegar a ser alta (Sobre todo en cables baratos que suelen tener un cobre muy fino e impuro), y los fabricantes lo saben. Por ese motivo, la inmensa mayoría de fabricantes de puertos USB (el chip que controla el puerto), cargadores USB, etc. suelen diseñar sus circuitos para que ese voltaje esté en la parte alta del rango.

Aquí ya nos apartamos del estándar, por practicidad, y hablamos de la vida real. De lo que normalmente encontramos.

Nadie nos garantiza esos resultados porque el estándar ofrece unos rangos mayores, pero en la inmensa mayoría de ocasiones es así.

Para comprobar si esto es así, realmente, he medido todos los alimentadores, cargadores, ordenadores de sobremesa, portátiles, SmartTVs, etc. de mi casa con un medidor de puertos USB de precisión, y estos son los resultados (no de todos, porque han sido muchos, pero todas han andado por aquí):

Como ves prácticamente todos los dispositivos tenían un voltaje de entre 5.10 y 5.25 voltios, excepto una SmartTV LG que sacaba 4.98 voltios.

¿Qué voltaje ofrece el pin Vin cuando se alimenta mediante USB?

La tensión que tengamos en Vin dependerá del voltaje del alimentador USB que usemos y de la caída del voltaje del diodo.

Esto quiere decir que podríamos no tener 5 voltios en el pin Vin, y tener algo menos.

En los NodeMCU 1.0 y 1.1 (que son los más habituales, vendidos como placas V3) los 5 voltios del USB y el pin Vin están unidos a través de un diodo Schottky (para evitar que si le entra voltaje por el pin Vin cuando está conectado al USB ese voltaje no le entre al ordenador, cargador o lo que sea; que podría cargárselo).

A lo mejor también te interesa:  ¿Qué tiene que ver el CO₂ con la Covid?

Ese diodo Schottky provoca una caída de tensión de aproximadamente 0.2 voltios, lo que significa que si en el USB hay 5 voltios en el pin Vin habrá unos 4.8 voltios.

Esto supone, si además tenemos en cuenta el 5% de variación en el USB que admite la especificación USB 2.0, sería un mínimo de 4,65 Voltios y un máximo de 5,05 Voltios, lo que está dentro de la especificación de los sensores MH-Z19, MH-Z19B y Senseair S8 LP.

Alimentando los sensores de CO2 desde Vin

Ya hemos visto que no hay problema por utilizar el pin Vin para alimentar sensores externos.

Ahora vamos a ver si estamos dentro de los rangos que determinan los fabricantes para utilizar cada uno de los sensores tomando la alimentación del pin Vin, sabiendo que este pin, en la práctica, nos debería dar una tensión de un mínimo de 4,65 Voltios y un máximo de 5,05 Voltios.

Alimentando el MH-Z19 mediante el pin Vin

Según el fabricante se puede alimentar con un voltaje de 3.6 a 5.5 voltios, por lo que podemos alimentarlo sin problemas mediante el pin Vin.

Alimentando el MH-Z19B mediante el pin Vin

Según el fabricante se puede alimentar con un voltaje de 4.5 a 5.5 voltios, por lo que podemos alimentarlo sin problemas mediante el pin Vin.

Alimentando el MH-Z19C mediante el pin Vin

Según el fabricante se puede alimentar con un voltaje de 4.9 a 5.1 voltios, por lo que podríamos tener problemas para alimentarlo mediante el pin Vin.

Luego veremos algunas ideas y consejos para solucionarlo.

Alimentando el Senseair S8 LP mediante el pin Vin

Según el fabricante se puede alimentar con un voltaje de 4.5 a 5.25 voltios, por lo que podemos alimentarlo sin problemas mediante el pin Vin.

¿Quiere esto decir que no podemos utilizar el MH-Z19C alimentándolo desde Vin?

No exactamente.

Parece que con el voltaje máximo andaríamos un poco justos porque si, por casualidad, se nos junta un alimentador USB que de un voltaje alto con un diodo Schottky con una caída de tensión muy baja (0.1 voltios) podríamos llegar a pasarnos (aunque no es muy probable).

El problema lo podemos tener con el voltaje mínimo, que es bastante posible que nos quedemos por debajo de los 4.9 voltios que necesita como mínimo para funcionar (aunque probablemente por muy poco).

Afortunadamente hay un par de cosas que podemos hacer, pero tendrás que tener un multímetro para comprobar las medidas (antes de conectar el MH-Z19C):

Si mides con el multímetro el pin Vin y ves que el voltaje es demasiado alto, simplemente busca otro alimentador que saque un voltaje más bajo (que seguro que tienes alguno viejo). Conéctalo, y mide de nuevo.

Si el voltaje es demasiado bajo, puedes hacer dos cosas:

  1. Buscar un alimentador que de un voltaje más alto.
  2. Puentear el diodo Schottky con un cablecillo (o retirándolo de la placa y haciendo un puente).

Nota: Comprueba si tu placa tiene un pin VU, como se indica en el punto siguiente.

Placas NodeMCU con pin VU

Existen muchas placas NodeMCU diferentes con ligeras variaciones entre ellas. Hay algunas placas NodeMCU que disponen de un pin marcado VU.

Este pin, VU, es una conexión directa positivo del USB. En la práctica, es como puentear el diodo.

Puedes aprovecharla para conectar el sensor a este pin si te viene bien.

Notas adicionales

Uno de los posibles problemas podría estar en que algunos NodeMCU (parece ser que pocos, afortunadamente) no llevan un diodo Schottky entre Vin y el puerto USB, sino un diodo normal de silicio. En este caso la caída de voltaje en el diodo puede ser de 0.6~0.8 Voltios (para intensidades inferiores a 500 mA, que es de lo que estamos hablando aquí, para intensidades mayores la caída de tensión puede ser más alta).

Por supuesto, lo más sencillo y recomendable sería medir la tensión en el pin Vin, pero aquí de lo que estamos hablando es de prever cual va a ser ese voltaje y si un diseño determinado va a funcionar, o no, en cualquier situación, lo monte quién lo monte, con suficientes garantías (al menos un índice de probabilidad aceptable).

Si no tienes un multímetro, y te llama la atención el cacharreo mínimamente, lo mejor es que te compres uno. No te digo que te gastes 100 euros, pero si gastas 20 o 30 euros en uno será una de las mejores inversiones que hagas.

¿Y qué pasa con Arduino?

La situación en Arduino es muy parecida, aunque más compleja debido a la enorme variedad de modelos (y variaciones de cada uno de los modelos) que existen.

Me voy a centrar en los modelos principales de Arduino construidos alrededor del microcontrolador ATmega328P.

Lo siento, esta parte está pendiente de escribir. Lo iré haciendo a media que tenga tiempo.

Arduino UNO

Arduino Pro

Arduino Nano

5 comentarios en «Alimentar desde NodeMCU, Wemos Mini D1 y Arduino»

  1. Gracias por mis 5 min de fama.

    La verdad que mi placa sacaba 4,57 por el vin y la alimentación adicional que tengo da 4,90 justos sin carga. O sea que voy justisimo.

    No me gusta nada el 19C. Me comprare un senseair bueno cuando acabe el primer proyecto

    Y gracias por todo el resto del artículo. Ha sido muy clarificador

    Responder
    • jajaja, de nada 😀

      Si, muy justo. Es una faena que esos sensores sean tan especialitos con la alimentación. La verdad es que, en este momento, el Senseair me parece la mejor opción en todos los sentidos.

      Me alegro de que te haya gustado el artículo. Quizá un poco técnico (me gusta hacer artículos más prácticos que la gente pueda seguir) pero seguro que hay a quién le viene bien la información. De todas formas, era algo que había que hacer y documentar.

      Responder
  2. Hola Marite, muy buen post, como siempre muy explicativo y claro. Quería preguntarte, ese medidor que has usado para USB, que también te da datos de amperaje y demás, cuál es en concreto? Podrías decirnos link de compra si lo tienes testado de calidad?. Yo compré un pero es muy malo…jejejeje gracias

    Responder
    • Hola Luis.

      El que yo compré y sale en las fotos es este: https://s.click.aliexpress.com/e/_9AVGqn

      En su momento hice mediciones y los resultados eran bastante precisos, aunque no recuerdo bien las cifras exactas. Además, tiene bluetooth para ver las medidas en el móvil o tablet y hacer gráficos y demás.

      Buen producto y muy buen precio. Completamente recomendable.

      Responder

Deja un comentario