Contenidos
- 1 La duda o consulta
- 2 Conclusiones provisionales
- 3 Alimentando los sensores de CO2 desde Vin
- 4 Placas NodeMCU con pin VU
- 5 Notas adicionales
- 6 ¿Y qué pasa con Arduino?
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 a través del NodeMCU?
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, ESP32 DevKit y otras similares.
En este artículo hablo sobre el ejemplo de la alimentación de un sensor de CO2 NDIR pero es igual de válido para cualquier otro tipo de sensor o actuador que quieras alimentar.
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, sobre todo si precisa una alimentación que esté muy cercana a los 5V exactos (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 los casos esto no nos va a afectar a la hora de conectar periféricos como sensores y displays.
Por suerte, el NodeMCU (y los Wemos D1 Mini, diferentes Arduinos y placas con ESP32) 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 suele 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.
¿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 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. Otros tipos de diodos tienen una caída de voltaje superior.
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, sin diodo. 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 resultar interesantes 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, a 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 que hayamos conectado).
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):
Modelo | Imagen | Datasheet | Voltage | Dato |
---|---|---|---|---|
LM35 | Hoja de datos | 2.7~5.5 V | ||
DS18B20 | Hoja de datos | 3.0~5.5 V | ||
DHT11 | Hoja de datos | 3.0~5.5 V | ||
TMP36 | Hoja de datos | 2.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:
Si2300 | Si2306 | Si2320 | |
---|---|---|---|
Vds | 20A | 30A | 20A |
Id | 3.6A | 2.8A @ Vgs = 4.5V | 2.4A @ Vgs = 2.5V |
VGS(th) | 1.5V | 1V | 0.65V |
Vgs máxima | ±12V | ±20V | ±8V |
Rds(on) | 0.085(Ω) at VGS = 2.5 V | 0.094(Ω) @ VGS = 4.5 V | 0.085(Ω) @ VGS = 2.5 V, ID = 3.1A |
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 de voltaje de funcionamiento 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 suele ser mayor, 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 porque tienen un rango de voltaje de funcionamiento mayor.
¿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, aproximadamente.
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 puerto 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, o menos, 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 bastante 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.
Fíjate que el estándar USB 2.0 exige, para evitar el tipo de problemas que te estoy contando, que los dispositivos funcionen hasta los 4.4V e incluso en el estándar USB 3.0 exigen que los dispositivos funcionen hasta los 4.0V.
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).
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 tres cosas:
- Buscar un alimentador que de un voltaje más alto.
- Puentear el diodo Schottky con un cablecillo (o retirándolo de la placa y haciendo un puente).
- Tomar la tensión VCC para el sensor justo antes del diodo como puedes ver en la siguiente fotografía (cable amarillo).
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 al 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 (y te lo recomiendo).
Ten en cuenta que el pin VU está pensado solo para sacar voltaje del puerto USB, no para alimentar la placa a través de él.
El pin VU está conectado directo al USB por lo que podrías freír lo que tengas conectado al USB (ordenador, cargador, etc) si aplicas tensión externa al pin VU.
En caso que resulte imprescindible alimentar el NodeMCU a través del pin VU, como poder, podrías, siempre y cuando te asegures de no conectar nada al USB (desoldando el conector USB, por ejemplo o cegándolo con pegamento).
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.
La buena noticia es que todo lo indicado antes es válido para Arduino y otras placas basadas en otros microcontroladores. Simplemente tendrás que pensar un poco para saber cómo tienes que aplicar lo que has aprendido en este post. La base ya la tienes.
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
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.
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
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.
Gracias, le echaré un vistazo y me haré con él. Saludos y como siempre rápido y eficiente. Saludos
Hola Mariete, muy buen artículo, como siempre. Ya me queda algo más claro qué debo mirar para detectar fallos en la alimentación, saludos.
Muchas gracias, Carlos.
Me alegro mucho de que te haya resultado útil.
Un saludo.
Buenas, primero gracias por el árticulo, muy detallado y de gran utilidad. Las dudas me surgen con el pin de 3.3v, entiendo que son para alimentar la placa (en mi caso una nodeMC).
Estoy con un proyecto que debe conectarse con batería, he pensado en un par de 18650 en paralelo que se cargarían con placa solar por mdio del típico TP y estaba pensando en usar un regulador en modo load sharing, y la salida de todo este tinglado meterlo en el pin de 3.3v del nodemcu.
La preguna es, como alimento los sensores que tengo (un dsq8b20)? Utilizo la misma salida que da el loadsharing? Lo alimento (el sensor) de algún pin del nodemcu?
Mil gracias
J.