¿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 microcontrolador Arduino Uno. Para las salidas, estoy usando un escudo de relé para cambiar los componentes de 12 V. Tengo un interruptor de palanca de 12 V que enciende algunos componentes de 12 V en el sistema y quiero usar una señal de activación de este mismo interruptor para enviar a una entrada digital Arduino. Sé que el Arduino solo puede manejar 5 V máx. ¿Cuál sería la mejor manera de reducir los 12 V que salen del interruptor a los 5 V de la entrada?

EDITAR: El sistema es para usar en un automóvil. ¿Debería reducirse el amperaje de la batería del automóvil de alguna manera para no explotar los componentes?

el amperaje del automóvil es irrelevante: los componentes solo usan 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 podría dañar las cosas. :)

Respuestas (5)

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

Un divisor de resistencia simple reducirá los 12 V a los 5 V que un Arduino puede digerir. El voltaje de salida se puede calcular como

V O tu T = R 2 R 1 + R 2 V yo norte

Los valores de resistencia en el rango de 10 kΩ son una buena opción. Si su 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 lo verá como un nivel alto. También tiene un poco de margen en caso de que los 12 V sean demasiado altos. Incluso 18 kΩ aún le darán 4,3 V lo suficientemente altos, pero luego debe comenzar a pensar en los 12 V un poco demasiado bajos. ¿Se seguirá viendo el voltaje tan alto? Yo me quedaría con los 15 kΩ.

editar
Menciona un entorno automotriz, y luego necesita protección adicional. Los 12 V del automóvil nunca son exactamente 12 V, pero la mayoría de las veces son más altos, con picos varios voltios por encima de los 12 V nominales. (En realidad, el nominal es más como 12,9 V, a 2,15 V por celda). Puede colocar un zener de 5 V diodo en paralelo con R2, y esto debería cortar cualquier voltaje superior a los 5 V del zener. Pero un voltaje zener varía con la corriente, y con la corriente de entrada baja que le dan las resistencias, se cortará con voltajes más bajos. Una mejor solución sería tener un diodo Schottky entre la entrada de Arduino y el suministro de 5 V. Luego, cualquier voltaje de entrada superior a aproximadamente 5,2 V hará que el diodo Schottky conduzca, y el voltaje de entrada se limitará a 5,2 V. Realmente necesita un diodo Schottky para esto, un diodo PN común tiene un 0.

El optoacoplador de Better
Michael es una buena alternativa, aunque un poco más caro. A menudo usará un optoacoplador para aislar la entrada de la salida, pero también puede usarlo para proteger una entrada como lo desea aquí.

ingrese la descripción de la imagen aquí

Cómo funciona: la corriente de entrada enciende 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 , por Current Transfer Ratio. 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 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 eso 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 el suministro de 5 V de Arduino, Vout va a la entrada de Arduino. Tenga en cuenta que la entrada se invertirá: será baja si hay 12 V, alta cuando no lo esté. Si no quiere eso, puede cambiar la posición de la salida del optoacoplador y la resistencia pull-up.

edit 2
¿Cómo la solución del optoacoplador no resuelve el problema de la sobretensión? El divisor de resistencia es radiométrico: el voltaje de salida es una proporción fija de la entrada. Si ha calculado 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, puede ver que el lado derecho, que se conecta al pin de entrada de Arduino, no tiene ningún voltaje superior a 5 V. Si el optoacoplador está encendido, el transistor consumirá corriente, usé 4 mA en el ejemplo anterior. Una tensión de 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 el voltaje de salida será de 5 V (Vcc) - 4,8 V a través de la resistencia = 0,2 V, ese es un nivel bajo. Si la corriente fuera menor, la caída de voltaje también sería menor y el voltaje 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, hay

¿Qué pasa si el voltaje de entrada llega a ser demasiado alto? Accidentalmente conecta una batería de 24 V en lugar de 12 V. Luego, la corriente del LED se duplicará, de 10 mA a 20 mA. El CTR del 40 % generará 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 con un suministro de 5 V eso sería negativo, y eso es imposible; aquí no puedes ir por debajo de 0 V. Entonces, aunque al optoacoplador le gustaría consumir 8 mA, la resistencia lo limitará. La corriente máxima a través de él es cuando los 5 V completos están a través de él. La salida será realmente 0 V y la corriente 5 V / 1,2 kΩ = 4,2 mA. Entonces, sea cual sea la fuente de alimentación que conecte, la corriente de salida no aumentará más que eso, y el voltaje se mantendrá entre 0 V y 5 V. No se necesita más protección.

Si espera sobrevoltaje, deberá verificar si el LED del optoacoplador puede manejar el aumento de corriente, pero los 20 mA no serán un problema para la mayoría de los optoacopladores (a menudo tienen una clasificación de 50 mA como máximo), y además, eso es para doble voltaje de entrada, lo que probablemente no sucederá IRL.

El sistema es para usar en un automóvil. ¿Debería reducirse el amperaje de la batería del automóvil de alguna manera para no explotar los componentes? Soy nuevo en esto. Gracias
@DW ¡Oh, oh, coche! :-(. Actualizaré mi respuesta.
@DW: no, la capacidad de la batería del automóvil no importa. La corriente vendrá determinada por el voltaje (12 V) y la resistencia (25 kohm en total). Entonces, de acuerdo con la Ley de Ohm, la corriente será de 12 V / 25 kohm = 0,5 mA. No importa si la batería es del tipo de 40 Ah o del tipo de 400 Ah; las resistencias no permitirán más.
Eso es genial. Gracias por tu ayuda. Solo curiosidad, pero ¿funcionaría algo como esto? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
@DW: con el optoacoplador puede mantener la batería separada del Arduino, pero si se alimenta desde la batería, ambos terrenos estarán conectados.
@DW - Sí, parece estar bien. El mismo producto se puede encontrar en el sitio de Sparkfun , donde hay más información, como un enlace a la hoja de datos del optoacoplador. Obtiene 2 canales, puede usar el otro para detectar otro voltaje conmutado si es necesario.
@DW - De nada. Solo estaba pensando: ¿debo agregar a mi respuesta por qué el optoacoplador está bien con un voltaje más alto, donde el divisor necesitaba protección adicional, o está claro? Simplemente pregunte si necesita información adicional. (Simplemente no pidas dinero ;-))
@stevenvh Tal vez si no te importa, soy completamente nuevo en este increíble mundo de la electrónica. Soy un tecnólogo mecánico y casi no tocamos nada con la electricidad en la universidad y mucho menos la electrónica. Gracias
@stevenvh También solo una pregunta rápida: el manual de Arduino Uno dice que el voltaje de entrada recomendado es de 7-12 V y los límites son de 6-20 V. ¿Eso significa que puedo ejecutarlo directamente desde la batería del automóvil? Gracias
@DW: los 12 V de un automóvil pueden ser extremadamente ruidosos y pueden tener picos altos. Para proteger el regulador de voltaje de Arduino contra estos, puede colocar un TVS (diodo supresor de voltaje transitorio) a través de la entrada de energía de Arduino.
@stevenvh Gracias Steve. Espero volver a favorecer a alguien que es nuevo en electrónica una vez que esté seguro de ello. Gracias
Otra nota: el valor de entrada ALTO lógico de muchos dispositivos de 5V es algo mucho más bajo que 5V; el PIC que estoy usando requiere solo 2V para leer un 1 lógico. Entonces, usando un divisor de voltaje simple con, digamos, resistencias de 4.7K y 1.8K caerá de 12V a 3.3V. Si por casualidad obtiene voltajes de hasta 18V, la entrada a su pin seguirá estando justo por debajo de 5V.
@stevenvh gracias por esa extensa respuesta. Me preguntaba si podría ir con un circuito siguiente si quiero una salida ALTA para entrada ALTA (12V también aquí pero no un automóvil :)) El X1 se conecta a GND cuando se presiona el botón, Y1 es al pin Arduino.
Jajaja, la electrónica... ¡hace que la programación parezca muy fácil!
Dado que ha redondeado todas las opciones aquí, existe la opinión de que podría limitar la corriente y dejar que el diodo de protección de sujeción de AVR mantenga el voltaje a raya. Se sugiere que una resistencia simple de 47k - 100k en serie debería hacer eso. Parece su opción schottky, pero sin el schottky externo. ¿O no? ¿Considerarías que esta es una opción válida?
también su propia publicación aquí :) electronics.stackexchange.com/a/35817/180863 , así que supongo que eso responde la pregunta.

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

ingrese la descripción de la imagen aquí

Vi en el diagrama representa los 12V en su circuito que es conmutado por su interruptor (S1). Seleccione 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 seleccione.

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

Para la independencia del voltaje, use una resistencia para regular la corriente y un Zener para regular el voltaje, así:

esquemático

simular este circuito : esquema creado con CircuitLab

Con una resistencia de 30k, generará 4.99V y usará solo alrededor de 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,81 mW (cuando la entrada es alta)

Para cualquier cosa visible, usaría LED + divisor de resistencia en serie para dar una señal de 5V a 12V y pondría el diodo zener en paralelo con la mitad inferior del divisor y el LED para proteger contra la sobretensión. De esa manera, el LED se ilumina cuando tiene una señal de entrada y proporciona información visual.
@GoswinvonBrederlow, ¿puede sacar el circuito LED/diodo/resistencia?
En el esquema anterior, establezca R1 en 770 ohmios y agregue 330 ohmios y un LED rojo en paralelo al diodo Zener. Luego, a la entrada de 12 V, ~ 9 mA fluirán a través del LED y obtendrá una señal de salida de 5 V. Si el voltaje de entrada aumenta, el diodo zener limitará la señal de salida a 5,1 V y protegerá tanto al arduino como al LED.

También puede usar un diodo y una resistencia, de la siguiente manera:

esquemático

simular este circuito : esquema creado con CircuitLab

Haría que la resistencia fuera algo bastante rígida, de lo contrario, consumirá mucha energía 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 12 V, 14 V o 15 V: será de 5 V (en realidad 5.2-5.3 V dependiendo del diodo) independientemente de el voltaje de entrada

eso es bastante inteligente, ¡+1 para la independencia de voltaje!
Tenga cuidado con la sobretensión en la clasificación máxima absoluta del pin. Por ejemplo, hoja de datos ATmega32u4: Voltaje en cualquier pin con respecto a tierra (8): -0.5V a VCC+0.5V. Si usa un diodo regular, el voltaje será mayor que VCC + 0.5V si usa una resistencia de menos de 170kOhm. Creo que los diodos Schottky son los más seguros para esto.
Solo debes hacer esto con un diodo Schottky. De lo contrario, el diodo ESD del lado alto en el uC entrará potencialmente en conducción antes que D1. No están diseñados para un funcionamiento continuo.

Un poco tarde pero en mi carro uso el LM7805. Funciona muy bien y es barato.

No es tan barato como 2 resistencias o una resistencia y un diodo.
@TonNies Tienes la pregunta equivocada. OP no está buscando un voltaje de suministro para su controlador. Se trata más de acondicionamiento de señales.
No hay nada de malo en usar LM7805 para señales de cambio de nivel de 12v.
@chugadie: Pero un enfoque exagerado muy poco común y relativamente "caro" si todo lo que quiere es reducir 12V para un pin IO.