44 votos

¿Cómo puedo usar una entrada de 12 V en un pin Arduino digital?

Estoy creando un controlador para un sistema de 12 V usando un microcrontrolador Arduino Uno. Para las salidas estoy usando un escudo de relé para conmutar los componentes de 12 V. Tengo un interruptor de conmutación de 12 V que enciende algunos componentes de 12 V en el sistema y quiero usar una señal de disparo de este mismo interruptor para enviar a una entrada digital de Arduino. Sé que el Arduino sólo puede manejar un máximo de 5 V. ¿Cuál sería la mejor manera de bajar los 12 V que salen del interruptor a los 5 V para la entrada?

EDITORIAL: El sistema es para su uso en un coche. ¿Necesitaría el amperaje de la batería del coche ser bajado de alguna manera para no hacer explotar los componentes?

4 votos

el amperaje del coche es irrelevante: los componentes sólo utilizan la corriente que necesitan. La batería del coche es capaz de suministrar cientos de amperios, como los que necesita el motor de arranque. Esto no significa que siempre haya cientos de amperios fluyendo y que puedan dañar las cosas :)

51voto

lillq Puntos 4161

¡Buenas noticias! ¡Esto va a ser barato! :-)

Un simple divisor de resistencias bajará los 12 V a los 5 V que puede digerir un Arduino. La tensión de salida se puede calcular como

\$ V_{OUT} = \dfrac{R2}{R1+R2} V_{IN}\$

Los valores de las resistencias en el rango de 10 kΩ son una buena opción. Si tu R2 es de 10 kΩ entonces R1 debería ser de 14 kΩ. Ahora 14 kΩ no es un valor estándar, pero 15 kΩ sí lo es. Su voltaje de entrada será de 4,8 V en lugar de 5 V, pero el Arduino verá que todavía como un alto nivel. También tienes un poco de margen de maniobra en caso de que los 12 V sean demasiado altos. Incluso 18 kΩ todavía le dará un nivel suficientemente alto 4,3 V, pero entonces usted tiene que empezar a pensar en el 12 V un poco demasiado bajo. Se verá el voltaje todavía como alto? Yo me quedaría con los 15 kΩ.

editar
Mencionas un entorno automovilístico, y entonces sí necesitas algo de protección extra. Los 12 V del coche nunca son del todo 12 V, sino que la mayoría de las veces son más altos, con picos de varios voltios por encima de los 12 V nominales. (En realidad, los nominales son más bien 12,9 V, a 2,15 V por célula.) Puedes colocar un diodo zener de 5 V en paralelo con R2, y esto debería cortar cualquier tensión superior a los 5 V del zener. Una mejor solución sería tener un diodo Schottky entre la entrada del Arduino y la alimentación de 5 V. Entonces, cualquier tensión de entrada superior a unos 5,2 V hará que el diodo Schottky conduzca, y la tensión de entrada se limitará a los 5,2 V. Realmente necesitas un diodo Schottky para esto, un diodo P-N común tiene una caída de 0,7 V en lugar de los 0,2 V del Schottky, y entonces la tensión de entrada máxima de 5,7 V puede ser demasiado alta.

Mejor
El optoacoplador de Michael es una buena alternativa, aunque un poco más caro. A menudo se utiliza un optoacoplador para aislar la entrada de la salida, pero también se puede utilizar para proteger una entrada como se quiere aquí.

enter image description here

Cómo funciona: la corriente de entrada ilumina el LED infrarrojo interno, lo que provoca una corriente de salida a través del fototransistor. La relación entre la corriente de entrada y la de salida se denomina CTR para el Ratio de Transferencia Corriente. El CNY17 tiene un CTR mínimo del 40 %, lo que significa que necesita una entrada de 10 mA para una salida de 4 mA. Vamos a por la entrada de 10 mA. Entonces R1 debería ser (12 V - 1,5 V) / 10 mA = 1 kΩ. La resistencia de salida tendrá que causar una caída de 5 V a 4 mA, entonces debería ser 5 V / 4 mA = 1250 Ω. Es mejor tener un valor un poco más alto, el voltaje no caerá más de 5 V de todos modos. Un 4,7 kΩ limitará la corriente a aproximadamente 1 mA.

Vcc es la alimentación de 5 V del Arduino, Vout va a la entrada del Arduino. Ten en cuenta que la entrada será inversa: estará baja si los 12 V están presentes, y alta cuando no lo estén. Si no quieres eso, puedes intercambiar la posición de la salida del optoacoplador y la resistencia de pull-up.

editar 2
¿Cómo es que la solución del optoacoplador no resuelve el problema de la sobretensión? El divisor de resistencias es ratiométrico: la tensión de salida es una proporción fija de la entrada. Si has calculado para 5 V de salida a 12 V de entrada, entonces 24 V de entrada darán 10 V de salida. No está bien, de ahí el diodo de protección.

En el circuito del optoacoplador puedes ver que el lado derecho, que se conecta al pin de entrada del Arduino no tiene ningún voltaje superior a 5 V. Si el optoacoplador está encendido entonces el transistor consumirá corriente, he utilizado 4 mA en el ejemplo anterior. Un 1,2 kΩ provocará una caída de tensión de 4,8 V, debido a la Ley de Ohm (corriente por resistencia = tensión). Entonces la tensión de salida será de 5 V (Vcc) - 4,8 V a través de la resistencia = 0,2 V, eso es un nivel bajo. Si la corriente fuera menor, la caída de tensión también sería menor y la tensión de salida aumentaría. Una corriente de 1 mA, por ejemplo, provocará una caída de 1,2 V, y la salida será de 5 V - 1,2 V = 3,8 V. La corriente mínima es cero. Entonces no tienes un voltaje a través de la resistencia, y la salida será de 5 V. Ese es el máximo, no hay nada ahí que te dé un voltaje mayor.

¿Y si la tensión de entrada fuera demasiado alta? Accidentalmente conectas una batería de 24 V en lugar de 12 V. Entonces la corriente del LED se duplicará, de 10 mA a 20 mA. El CTR del 40 % provocará una corriente de salida de 8 mA en lugar de los 4 mA calculados. 8 mA a través de la resistencia de 1,2 kΩ sería una caída de 9,6 V. Pero desde una alimentación de 5 V eso sería negativo, y eso es imposible; aquí no se puede bajar de 0 V. Así que mientras el optoacoplador querría consumir 8 mA, la resistencia lo limitará. La máxima corriente a través de él es cuando los 5 V completos están a través de él. La salida será entonces realmente 0 V, y la corriente 5 V / 1,2 kΩ = 4,2 mA. Así que, sea cual sea la fuente de alimentación que conectes, la corriente de salida no subirá más que eso, y el voltaje se mantendrá entre 0 V y 5 V. No hace falta más protección.

Si esperas una sobretensión tendrás que comprobar si el LED del optoacoplador puede soportar el aumento de corriente, pero los 20 mA no serán un problema para la mayoría de los optoacopladores (suelen tener una capacidad máxima de 50 mA), y además, eso es para doble tensión de entrada, lo que probablemente no ocurrirá en la vida real.

0 votos

El sistema es para utilizarlo en un coche. ¿Habría que reducir de alguna manera el amperaje de la batería del coche para no reventar los componentes? Soy nuevo en esto. Gracias

0 votos

@D.W. ¡Uh-oh, coche! :-(. Voy a actualizar mi respuesta.

0 votos

@D.W. - No, la capacidad de la batería del coche no importa. La corriente estará determinada por la tensión (12 V) y la resistencia (25 kohm en total). Entonces, según Ley de Ohm la corriente será de 12 V / 25 kohm = 0,5 mA. No importa si la batería es del tipo 40 Ah o 400 Ah; las resistencias no permitirán más.

17voto

Bernd Puntos 61

Una buena manera de aislar la señal del interruptor de 12V sería pasarla a través de un optoacoplador. El circuito se configuraría de forma similar a la siguiente.

enter image description here

Vi en el diagrama representa los 12V en tu circuito que son conmutados por tu interruptor (S1). Selecciona R1 para limitar la corriente a través de la parte D1 del optoacoplador a un nivel que esté dentro de los valores nominales del componente que selecciones.

Los optoacopladores no son los componentes más rápidos del mundo, especialmente los más baratos, pero para el caso de una acción lenta como la de un interruptor controlado por el hombre, la velocidad del acoplador es poco preocupante.

16voto

Ryan J Puntos 136

Para la independencia de la tensión, utiliza una resistencia para regular la corriente y un Zener para regular la tensión, así:

schematic

simular este circuito - Esquema creado con CircuitLab

Con una resistencia de 30k, esto dará una salida de 4,99V y utilizará sólo unos 234uA @ 12Vin.
En este caso:
R1 consume 234uA x (12V - 4,99V) = 1,64mW
D1 consume 234uA x 4,99V = 1,17mW

Consumo total de energía: 2,81mW (cuando la entrada es alta)

0 votos

Para cualquier cosa visible yo usaría LED + divisor de resistencias en serie para dar una señal de 5V a 12V y poner el diodo zener en paralelo con la mitad inferior del divisor y el LED para proteger contra la sobretensión. De esta manera el LED se ilumina cuando tienes una señal de entrada y da una respuesta visual.

0 votos

@GoswinvonBrederlow ¿podrías dibujar el circuito led/diódo/resistencia?

0 votos

En el esquema anterior ajusta R1 a 770 Ohm y añade un 330Ohm y un LED rojo en paralelo al diodo Zener. Entonces a 12V de entrada ~9mA fluirán a través del LED y obtendrás una señal de salida de 5V. Si el voltaje de entrada sube, el diodo zener limitará la señal de salida a 5,1V y protegerá tanto al arduino como al LED.

15voto

También puedes utilizar un diodo y una resistencia, como se indica a continuación:

schematic

simular este circuito - Esquema creado con CircuitLab

Yo haría la resistencia algo bastante rígido, de lo contrario estarás hundiendo mucha potencia de este circuito. La belleza de este circuito (en comparación con el divisor de voltaje) es que no le importa si su voltaje original es de 12V, 14V, o 15V: será de 5V (en realidad 5,2-5,3V dependiendo del diodo) independientemente de la tensión de entrada.

0 votos

eso es muy inteligente, ¡1 por la independencia del voltaje!

6 votos

Cuidado con la sobretensión en la clavija de la clasificación máxima absoluta. Por ejemplo, hoja de datos de ATmega32u4: Tensión en cualquier pin con respecto a tierra(8): -0,5V a VCC+0,5V. Si se utiliza un diodo normal, el voltaje será mayor que VCC + 0,5V si se utiliza cualquier cosa menos de 170kOhm resistencia. Creo que los diodos Schottky son los más seguros para esto.

0 votos

Esto sólo debe hacerse con un diodo Schottky. De lo contrario, el diodo ESD del lado alto en el uC podría entrar en conducción antes que D1. No están pensados para un funcionamiento continuo.

5voto

ozmank Puntos 127

Puedes enviar una falsa petición ajax antes de añadir la capa al mapa. El navegador se encargará de la autenticación básica por ti:

// Assuming myLayer **WITHOUT** user:pass in the url
$.ajax({
    url: myLayer.url,
    data: myLayer.params,
    method: 'GET',
    error: function(jqXHR, textStatus, errorThrown){
        // Handle not authoruzed here
    },
    success: function(){
        // Yuppieeeeee!
        map.addLayer(myLayer);    // The browser wil set up the 
                                  // authentication in the request for you
    }

});

Esto sólo funcionará si el servidor devuelve una cabecera 401 - auth required (en geoserver hay que configurar la política de seguridad como challenge o mixed)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X